Deep C - <AUTHOR> http://www.slideshare.net/olvemaudal/deep-c <comment><USER4> While knowing the standards makes you a better programmer, it's still bad programming practice to write non-excplicit, cryptic code.

I think the boy's initial "I would never write code like this" response is spot on. I also agree with the boy's implied annoyance and "who cares what this badly written program actually does" stance.

These are fairly terrible interview questions. They test knowledge of standards and various obscure behaviour, but it's far more important what kind of code (readable, explicit, maintainable, simple, architected, commented, performant, bug-free, etc.) the person writes. In real life, the boy may actually be a better programmer than the girl. It's just not a good, comprehensive test.

Nevertheless the examples are fun, but I would never ask them in an interview. Interview time is precious and not to be wasted on stuff like this, unless you're interviewing for a compiler job...

EDIT: Most of the above applies to the first, C part of the interview. In the second, C++ part, the stuff the girl says is mostly basic knowledge that is useful on a daily basis.

<comment><USER5> I agree on the "I would never write code like this" point. I have never read the C standard and don't know off the top of my head what happens when you fail to initialise a static vs auto variable, but I don't really care because I would never write code which relies on whatever the implicit behaviour is. If I found code which did that on a project I'm involved with, I'd search for what is supposed to happen and then fix the code to make it explicit.

If I was interviewing, I'd much rather hire someone who said "I'd never write code like that" to someone who reels off what might happen in every possible scenario, unless I was hiring for a compiler writer.

<comment><USER6> I disagree. I feel that knowing what might happen demonstrates that the individual has considered the design of C carefully and taken the time to find out how it is, and why it is the way it is. I think that sort of knowledge always leads to better code in the language.

The man in the example might know to "never write code like" a variable incrementing and assigning to itself again, but there might be other, more subtle pitfalls in design and implementation that he succumbs to because he hasn't given much thought to all the different ways that the rules of the language can interact.

<comment><USER7> I agree - the girl's knowledge might be a net win, provided she doesn't go out of her way to use it.

Note that it's not all stuff that you can just look up: although you _can_ look it up, it might not be obvious that it needs to be looked up. I had no idea there was a difference between `int f()` and `int f (void)`, and if that ever caused problems for me I doubt I would have been able to track it down easily.

"A gentleman is someone who knows how to play the bagpipes, and doesn't."

<comment><USER8> Sure, but would you really care whether someone knew off the top of their head that %zu is the escape sequence for size_t? Some of the stuff she shows off is pretty arcane, though pieces of it are actually useful.

Understanding the memory model and execution model is a big plus, because it lets you write correct and efficient code (and if you are using C you care about correctness and efficiency). Recalling arcana about the C99 standard is just overkill and asking someone to pull stuff like that out of a hat in an interview is asking too much IMO.

<comment><USER9> I have to work with folks who confuse size_t with int, and as a result they have overflow bugs depending on whether O_LARGEFILE is in use. So yes, I care. Not because printf format strings are terribly important, but because understanding and adhering to the type system is essential to write bug-free software.

<comment><USER10> If they get overflow errors then your build process does not have the right warnings enabled/logged.

Suggestion: enable -Wall and treat warnings as errors.

<comment><USER9> Of course. You and I know they're doing it wrong, however sirclueless suggested above that type correctness is "arcane" and asks if "we would really care" when it comes to type issues in printf format strings.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> While it's tremendously fun to go through and learn, I question whether she would be a better programmer.

For the first half, the boy is making all the right decisions. He's not taking changes and using little compiler tricks to do things. He's not being clever. (For the second half, they appear to deliberately make him stupid. I'm not sure why.)

She, on the other hand, has a lot more tools in her toolbox. At the very least, she'll be tempted to use them. And if anyone else is working on the code, they'd better know those tools as well as she does. That's a dangerous situation.

Of course, it depends on what they're working on. If they're working with Carmack on his new 3D engine, she's the obvious choice. He would never keep up to Carmack.

<comment><USER12> Meta comment: it's funny that a pink haired girl in ponytails is correcting a boy on hardcore C details. Sure, a few of these women exist in real life. But we really need to resist these Orwellian psyops as the depiction is not really reflective of reality.

tl;dr: Nerdy guys don't have much in life. Let them have C.

<comment><USER11> Oh, I'm sure it was done on purpose. There's no legit reason it can't be a girl, but all too often it's a guy. And if they'd put the girl in the 'dumb' position, the PC people would have jumped up and down on it for furthering a stereotype.

So I don't mind a bit that they chose the roles as they did.

<comment><USER13> To put it more charitably, having a girl as the smart one will do more to encourage both the typical guy and girl to work hard than the reverse.

</comment></comment></comment></comment><comment><USER14> This seems like a false dichotomy to me. The "shallow" character seems completely uninformed about the basics of computer science, maybe having worked through a C tutorial or two, while the "deep" character seems to have an encyclopedic knowledge of every C spec and compiler implementation that's ever been written. How many interview candidates really fall into one of those camps?

I don't really know C that well -- certainly nothing spec- or compiler- specific -- but I got "deep" answers for most of the questions just because I know that generally C compiles straight to machine instructions, and I know how computers work. (I got 5/5 on the little quiz, and the tutorial on sequence points was completely new to me.)

C isn't hard. Thinking like a computer, in any language, is hard. The ability to predict what code will do, while important, is less crucial than the ability to figure out what's really going on when you get one wrong. I feel like calling that ability "deep knowledge" is putting the cart before the horse.

To put it another way, "I don't know the answer to that question, but here's a guess" and "I know the answer to that question, here it is" are both less impressive answers than "I don't know the answer, but give me a second and I'll figure it out for you."

Or maybe I'm missing the point.

</comment><comment><USER15> And here's a link to the PDF: <http://www.pvv.org/~oma/DeepC_slides_oct2011.pdf>

I hate slideshare requiring registration or facebook login before it allows me to download it in some decent format.

<comment><USER16> Thanks, the slideshare was starting to go really slow once I hit slide 300.

<comment><USER17> I noticed that too, i'm glad you mentioned it. Q6600 running Chrome 15, everything was perfectly snappy until somewhere around then.

Maybe slideshare has some sort of architectural problem? Is it seeking through the slides linearly for every request? Maybe slides after a certain point get read from disk in multiple segments? Maybe at that exact point in time, the load on the server increased?

Who knows :(

<comment><USER18> It's speedy again after reloading the page and typing the slide number to continue with into the slide number box--at least for a little while.

</comment></comment></comment></comment><comment><USER19> I think this slideshow would be better titled 'Standards Compliant C'.

At least for the first printf example, I would employ the boy rather than the girl. The boy gave a correct answer - what was missing, what would happen. The girl spouted a bunch of standards that added no value (with the exception of the 'return 3' which does indeed demonstrate deep knowledge).

In particular, the 'you should add a blank line at the end of your code' comment would immediately make me suspect her to be a finicky letter-of-the- law PITA who would be a nightmare to work with.

Standards are all well and good, but if your code compiles with no warnings and runs without errors according to the spec you were given, nobody of any consequence is going to give a damn.

<comment><USER16> _"Standards are all well and good, but if your code compiles with no warnings and runs without errors according to the spec you were given, nobody of any consequence is going to give a damn."_

Wait, what?! The whole point of this slideshow is that without a deeper understanding of your language you can end up with errors that you don't anticipate or understand.

Your code compiles and runs today. But then you rebuild on a different machine, or with different compiler optimization level, add a seemingly innocuous piece of code here or there and then it starts acting differently.

Or you deploy it to your customer and they start seeing intermittent problems with it because you failed to understand when to initialize auto variables.

You can never have too much knowledge about the language (and tools) that you are using to build your code. I would even go further and say the same thing about the hardware you or your users are running your code on.

<comment><USER20> While I do agree that you can never have too much knowledge, there is a huge dropoff in value.

 _Your code compiles and runs today. But then you rebuild on a different machine, or with different compiler optimization level, add a seemingly innocuous piece of code here or there and then it starts acting differently._

IMO this is the problem with the deck. The "problematic" code is code that ppl who don't know the corners of C/C++ aren't likely to write. If you're tempting sequence points in your code, you're asking for trouble, even if you know the standard well because now you're tempting fate you don't make a mistake and you're assuming every compiler implements the standard perfectly (and we all know this isn't the case).

And the smart girl makes at least one potential error. She says that, "You said that your runtime is 64bit so that means your pointers are probably 8 bytes".

First he never says the runtime is 64bit. He says its a 64bit system running in 32bit compatibility mode. What does 32bit compatibility mode mean? Potentially a lot of things. For example, on Windows it means you have 4 byte pointers. Rather than conjecturing -- this is something she could have just said, "How long are your pointers?" But her character was one that had to have an answer -- even if it meant making a potentially wrong assumption.

</comment></comment></comment><comment><USER21> It's not a commentary on interview questions. It's a tutorial on C language rules, with a silly little story to make it more interesting.

What _everyone_ is missing is how interesting the tutorial is, despite it being about a really dreary topic. I'm reading a book called "Why Don't Students Like School", which goes into some detail about this kind of thing. It's quite good (and really should be, given that it's about how to make education interesting).

<comment><USER22> Here, have an upvote. So many people in this thread are missing the forest for the trees here and turning this slide deck into a referendum on interview styles, programming personas, and style. I guess it certainly makes for a nice bike shed, but the point of this is to help you appreciate some of the finer details of writing good C code. I like it.

<comment><USER21> That's one of the dangers of "attention grabbers".

"What you learn today Johnny?"

"Pure sodium goes BOOOM!"

"Why's that?"

"Um, the teacher said something about chemistry, but we were all just watching the fireworks."

</comment></comment></comment><comment><USER23> Not sure why there are so many negative comments, the exact detail of the questions and answers aren't as important as the overall message and the guy and girl are archetypes.

We're interviewing some candidates for embedded C programming right now and these are the types of questions (although generally easier) I ask to find out the level of C expertise. For embedded systems with a focus on stability I want candidates who have a very good grasp of the fundamentals like the difference between normal globals, statics, volatile, etc. Also I'd like people who understand enough about the linker to know about data segments, zero init and stuff like that. For embedded you generally have to be able to implement interrupt handlers so the exact translation of a line of C code to assembly is important, as is knowing what's atomic and what isn't.

I'm continually surprised how many programmers have worked on embedded systems in C without being able to answer almost any of my questions. Many seem exactly like the guy in the examples, none like the girl.

<comment><USER24> you're not interviewing C programmers, you're interviewing assembly programmers that use C as a frontend ;)

<comment><USER23> Yeah, you're probably right, good point.

</comment></comment></comment><comment><USER25> Unless I asked for more information I would have been turned off by the girl because she was pedantic. The last thing a team needs is someone who gives a never ending answer to a simple question. If I prodded for more and she delivered it and the guy didn't then she wins hands down. Otherwise I want a simple answer to a simple question and move on to the next thing.

Edit: I only went through the first twenty or so slides. After disagreeing with the initial premise I didn't think the author earned any more of my time.

</comment><comment><USER26> This is important for two reasons:

The first is to remedy the misconception that "C is a really simple language". It's not.

The second is because while you'll never write any code like this, you'll probably have to debug code written by someone who did. That means that in order to use your time efficiently, you need to know what matters and what doesn't. Writing a regex to replace all "static int foo" with "static int foo = 0" is going to waste your time and not expose the cause of the bug. If you didn't know that, your time would be wasted.

<comment><USER27> Totally.

I much prefer C over C++ because, at least in comparison, C is a much simpler language.

However, the motivation for Google's Go is suddenly much clearer...

</comment></comment><comment><USER28> The title reminded me of _Expert C Programming: Deep C Secrets_ bu Peter van der Linden. If you don't have this book buy it today. It's one of the best C books I've read and AFAIK the only book that combines C and humor! His description of how to make Oobleck is alone worth the price (for those who are curious, it's a non-Newtonian fluid, <http://en.wikipedia.org/wiki/Non- newtonian_fluid#Oobleck>, and also a Dr. Seuss character).

(OK, if you don't want to buy the book, here are the directions: [http://books.google.com/books?id=4vm2xK3yn34C&pg=PA347&#...</a>)

<comment><USER29> this book is recommended on one of the last slides (although i don't remember it talking about sequence points, or i forgot, since that was one of the things i just learnt...; i think they may only have been named in the iso standard which was probably after that book was published)

and i just found this - <http://publications.gbdirect.co.uk/c_book/> \- which looks like a good basic intro.

</comment></comment><comment><USER30> _Would it be useful if most of your colleagues have a deep understanding of the programming language they are using?_

Not if by "deep understanding" he means "knowing trivia about underspecified corners of the language that have nothing to do with getting the job done".

<comment><USER31> No, by "deep understanding," he means "knowing how your code will run on a given system," which can have a lot to do with "getting the job done," especially if your code must be fast and stable.

</comment></comment><comment><USER32>
        static int a;
        ++a;

I don't care what the standards say, please just type the initialization value you need. It's inconsistent to pick a special case, 0, out of 4,294,967,296 possible values, and type something different in the special case.

<comment><USER33> Initialization of static data is more problematic than you think; it's particularly susceptible to races.

On the other hand, there are very important pragmatic reasons for using 0 to initialize data; the OS loader can give you zero pages (corresponding to bss segment or equivalent) for "free"; free to the point that they don't need to be stored in the image, and allocated lazily as needed.

<comment><USER34> > Initialization of static data is more problematic than you think; it's > particularly susceptible to races.

Safe initialization of statics is both possible and fast, thanks to an algorithm by Mike Burrows:

[http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2008/n266...](http://www.open- std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm)

It is also guaranteed in C++11. GCC has been implementing thread-safe initialization since version 4, I believe, but I'm not sure whether they use this algorithm.

<comment><USER33> That doesn't solve anything relevant; I quote, "the initialization of an object is indeterminately sequenced with respect to the initialization of an object defined in a different translation unit"; if you have two pieces of initialization code in different translation units, each referring to the other's data-to-be-initialized, you have a race; one is going to get initialized first (whether the order is determined by the standard, by the link order, by the arbitration of dragons, it doesn't matter) and the other is going to be uninitialized when accessed.

I _personally_ think it's better, where possible, to define the relevant types such that a zeroed structure as a valid state, or else use trivial initialization (where "trivial" might be defined as literals or constant expressions). Where this is not possible, explicit initialization (e.g. called directly or indirectly from main()) ought to be used.

<comment><USER34> Wait, I think we are talking about two different things: the spec I pointed to refers to static _local_ variables, and solves pretty much all the cases I can think of. (Initialization is delayed until first function call).

You are talking about _global_ static variables, and yes, that's a tricky matter.

<comment><USER33> Well, being local doesn't protect you from indirect access; it's the lifetime that makes statics troublesome, not the scope. The function wrapping the local may be called by the initialization.

</comment></comment></comment></comment></comment></comment><comment><USER35> I don't think it's super-important to know eg. what value an uninitialized static variable will have. If you use it, you should initialize it explicitly, end of story. If you write code that counts on such detailed minutiae of the standard, you make your code harder to read for no good reason.

<comment><USER36> I really hate this attitude. Static variable initialization is _not_ "detailed minutiae of the standard" (nor is operator precedence--I know you didn't mention that but others in the discussion have). If you don't know those then _you don't know C_! It doesn't make your code harder to read if you understand the language. And if you don't understand the language, then _why, oh why_ are you trying to read or write it?

It's like encouraging people to speak in baby talk because the people listening shouldn't have to understand all the detailed minutiae of the English language.

<comment><USER37> Not many people can have an almost complete and thorough understanding on how each compiler/linker/platform will behave on the various C standards, to suggest such a thing is silly and to enforce it is borderline insanity.

      And if you don't understand the language, then why, oh why are you trying to read or write it?

a) To get things done.

b) To attempt to understand the language.

Not everyone can learn the complete work of C standards and quirks just by reading, some need to read and write it.

</comment></comment></comment><comment><USER5> I'm a bit surprised by the suggestion that optimisation somehow makes the compiler work harder (e.g. catching uninitialised variables), isn't that what -W flags are for? I'm not sure that optimiser flags will catch anything with gcc that -Wall and -Wextra would miss.

<comment><USER38> There are warning flags that aren't even usable unless you're compiling with optimization on, such as -Wuninitialized.

As the gcc man page says, "These warnings are possible only in optimizing compilation, because they require data flow information that is _computed only when optimizing_." (emphasis mine)

<comment><USER5> That only applies to warnings in conjunction with optimisations though, just turning optimisations on (as shown in the example slide) won't necessarily pick up uninitialised variables. For example, if I compile the example given in the slides with -O, -O1, -O2 or -O3 with gcc, I don't get an error/warning, but I do if I use -Wall.

Also, you can use -Wuninitialized without optimisations and it picks up the problem, at least in my version of gcc (4.5.2).

<comment><USER38> Indeed, you need the warning _and_ the optimization to make it work.

That note came from the man page for i686-apple-darwin11-llvm-gcc-4.2, FWIW.

<comment><USER5> Ah, I'm using a newer version of gcc, which seems to catch the warning regardless of the optimisation level (including none at all). The text of the man page also seems to be different.

</comment></comment></comment></comment></comment><comment><USER39> It's articles such as this that scare developers away from C. You honestly do not have to mind meld with the C compiler to be a safe and productive C developer. If you're not sure what's going to happen if you don't initialize a variable then that's OK, because most developers realize that being explicit is better than allowing the implicit case to occur in every language.

<comment><USER40> Sure, but I don't think this slideshow was targeted towards the developer who does not already know C. Instead, it seems to be targeted towards the semi- experienced C developer who lacks a deep understanding of the standard. Whether or not that kind of understanding is necessary for everyday coding is a different topic altogether, but the main point of the article is sound: take every opportunity to learn.

</comment></comment><comment><USER41> Didn't get very deep into this slide deck, but I did notice that both of those candidates neglected to complain about using smart-quotes in source code. Sloppy, wouldn't hire either.

<comment><USER22> I didn't think it was possible but I think you've out-girled the girl in that slide deck.

</comment></comment><comment><USER42> Some of the stuff /she/ talks about seem to be "how a badly written program might behave." This is utterly uninteresting.

Q: "What does this buggy program print."

A: (hits first person with a stick)

"Right!"

<comment><USER43> Most code is buggy. Usually its author isn't nearby, and even if they are, hitting them rarely helps. Knowing the symptoms of buggy code, however, will help you debug it.

</comment></comment><comment><USER44> I took something different to many of the comments here. I found the most important takeaway was hidden in the later part of the slideshow, and referred to the difference in the attitudes and approaches to learning for two. Clearly the girl understood that in coding, there's usually a correct way to do things, and was always in search of that answer.

That correctness has varying levels of importance depending on the industry/application, but for a sufficiently large and complex project, the benefits to writing correct code is extremely valuable.

For instance, if it were a team environment and I had to write some functionality using the code supplied by the girl, I could simply assume standard conventions and immediately attempt to use her classes in my code. If written correctly, that code might work without further effort my on end.

If the code were supplied by the guy, I would likely have to go in to the implementation and ensure that the behavior conformed my expectations. And having to go through and read the code could require a significant time investment.

And of course, reading code often takes significantly (10x++) more time than writing it, so minimizing the necessity for it is essential in maximizing productivity. I would suspect that in most programming teams that reading other people's code is what eats up the most time, yet this time can be significantly reduced by following such a standard.

When the slideshow begins to refer to C++ conventions and the "rule of three," the guy shows that he doesn't take into account that others may need to work with his code. This can be dangerous as this single new team member can actually cause the total productivity of the team to _decrease_.

While this guy is just a made-up character, I wouldn't be surprised if most programmers think/act like him. At the very least, the majority of the ones that I've worked with, do.

On another note, the minutia details of C do come up if you work with and read enough source code. Being able to understand it is the more important issue at hand. Also, in response to many comments stating that writing code that works based on such minutia is poor practice, I think the girl would likely agree.

</comment><comment><USER45> I really appreciated the slides, and they have a direct impact on my current C++ side project. I breezed through the bits that were not about C or C++, but here's what I took away:

1) Add "-Wall -Wextra -Weffc++" and fix the problems found 2) Have some insights into the various C/C99/C++ language contracts, including what sequence points are, how data is packed, and how expressions are evaluated. 3) Learn when to use delete or delete[], when to declare a destructor virtual.

If anything in this summary piques your interest, you may want to check out the full presentation.

</comment><comment><USER29> this is great, but also embarrassing. not only am i a worse c programmer than i thought (i thought i was pretty good), but i burnt lunch because i forgot what was on the stove while reading it :o)

</comment><comment><USER46> C is an incredibly sharp industrial-strength tool. There is absolutely nothing about C that can't trip you up and break your program if you don't know it by heart. But if you _do_ know it by heart, forwards and backwards, it has no equal.

Or, if you prefer: It is a crazy girlfriend: serving your whim one second, burning your clothes the next. Pay it close attention or be ready to buy a new wardrobe regularly.

<comment><USER46> And as for coddling people who can't be bothered to know the language: Fark 'em. Use the whole language; that's what it's there for.

</comment></comment><comment><USER47> This is brilliant. It contains simple and direct explanations of C's (and C-based languages) rough edges that many programmers encountered or been bitten by but few have taken the time and effort understand.

I appreciate the presentation style too. The characters clearly represent the difference between deep understanding and casual knowledge of the subject. Good stuff.

</comment><comment><USER48> These slides makes it look like you have to be one type or the other. I'd suggest that the boy is an excellent candidate for the job and that you could help provide him the lower level understanding that you would like your programmers to have.

The key to me is how the candidates gain the understanding of whatever languages they use. Meaning, is programming something that they really enjoy and are learning on their own time and solving some of their own problems. Or, are they simply picking up programming to try to get a better paying career (aka the types of people that are often drawn to those 6 week learn to program type of schools). Therefore, for me and the interviews I have done in the past asking candidates about books they've read or programs they've worked on (for themselves or others outside of their employment) are often times much more enlightening.

</comment><comment><USER49> Ironically, the examples provided for illustrating your 'deep C' knowledge, are in fact superficial.

I don't really care if <stdio.h> has a printf definition, or whether C99 behaves differently. You might care more if you are an app programmer.

What I care about is the universal properties of the language that applies everywhere. Also that's where the strength of C comes out. For example, what is a function? What does it compile into? Why are there arguments, return values? How do they get represented? These are far more important questions than how C99 dictates entering the program from int main(). That's least of my worries. Programs I write usually enter a C program from _start

</comment><comment><USER50> I really enjoy this presentation. If you want to learn C programming from scratch I also recommend to study Zed's book "Learn C the hard way".

<http://c.learncodethehardway.org/book/>

</comment><comment><USER51> Someone mentioned Expert C Programming: Deep C Secrets as a good book to learn the C standards. Are there any other books that or resources one would recommend to learn this sort of material?

<comment><USER29> no, it's not a good book to learn the standards! :o) for that you are better with harbison & steele or similar (although that's more a reference - <USER2> this <http://publications.gbdirect.co.uk/c_book/> which i just found?). deeper c is more like a collection of essays that explore interesting corners - <USER3> doesn't attempt to cover everything (i enjoyed it, i'm just saying it's not what you described...)

ps you say standards (plural) - all the above is c only.

<comment><USER52> Though C99 and C89 could be described as different revisions of the same standard, they could also be thought of as separate standards too.

</comment></comment></comment><comment><USER53> Thanks! I needed a reminder why I hate C so much.

You must be a language lawyer in order to do anything moderately complex and then be met with "the standard doesn't say anything about that!" when you realized the standard library doesn't include the most basic of things (yeah comp.lang.c, I'm looking at you...).

Yeah, I know. C++0x will be the grand unifying standard to rule them all...sure.

</comment><comment><USER54> Is this articles note about needing to place a newline at the end of a standards compliant C program actually accurate?

When I write out a file containing "aaaaa" with nano (to avoid any unusual tricks vim might use), and then hexdump it, I get "6161 6161 0a61". In other words, nano slapped on an ending newline when I saved. It is my impression that everything does this.

<comment><USER8> It has long been unix convention that every line of text is followed by a terminating character. It used to be that many command-line tools relied on this, I suspect most tools are more forgiving nowadays. Nearly all linux/unix text editors perform little normalizations to be as compatible as possible. I bet if you opened a file in vim's binary editing mode (vim -b) you could write it without the final line ending (does nano also have a binary mode? might be worth trying).

Edit: Apparently nano has a -L option that skips the last-line normalization.

<comment><USER31> If you open it in Emacs, by default (at least it did when I toyed with 21) it leaves the trailing newline off.

</comment></comment></comment><comment><USER55> "Well, whatever. Lousy compilers." I feel ya bro.

</comment><comment><USER56> I recommend students to take OS development course at university. Many concepts of C are discussed and viewed in practice in this class: the relation of the static storage class in C and the .bss section of the object/executable file, the stack and calling conventions of different processor architectures, and so on.

</comment><comment><USER57> Let me brag first: I could be that girl in the interview. Yay me. But am I the only one to think these are obsolete skills? Isn't there more to software than knowing C++ at this level? Would I want to spend 10 years on learning it as well as I know it now, today in 2011?

<comment><USER58> Don't be so sure. I'm currently writing C code that has run on Linux (Intel, both 32 and 64 bit systems), Solaris (Intel 64 bit, 32 adn 64 bit SPARC) and Mac OS-x (not sure, since we don't actually deply on Macs, but we have several developers that use them), and most of this code deals with binary files and some custom network protocols, so alignment issues are important.

It was also neat to see my code run flawlessly under Valgrind (we were attempting to debug an issue with the 32 bit Intel Solaris build---it may be a compiler issue since that's the only platform (out of the ones listed above) the code broke on, but I haven't investigated the issue enough to say for sure).

</comment></comment><comment><USER59> This is the most mind-tickling thing I have seen/read/watched in a long while! I am going through all the slides and now I know how to interview other coders. Thanks for sharing this!

</comment><comment><USER60> Slide 231:

Q: _So why doesn't the compiler reorder the members in the structure to optimize memory usage, and execution speed?_

A: _Some languages actually do that, but C and C++ don't._

And that's because...?

<comment><USER61> In C, at least, it helps to think of regions of memory independently of any meaning overlaid on top. For instance, there is plenty of code that depends on behavior like this:

        struct list_node {
            struct list_node * next;
            struct list_node * prev;
        }

        struct useful {
            /* This struct should be part of a list, so include the list header first */
            struct list_node;

            /* That data that this struct is storing follows */
            in_addr_t sip;
            in_port_t sport;
            in_addr_t dip;
            in_addr_t dport;

        }

Then, you can write a generic list walker by casting the a "struct useful * " to a "struct list_node * " since the first fields will match up.

This is just one example, another would be parsing and unwrapping ip headers and data sections. As I'm sure you've noticed, C prefers explicit to implicit, and this applies to the layout of memory as well.

 _edit:_ example: [http://stackoverflow.com/questions/3766229/casting-one- struc...](http://stackoverflow.com/questions/3766229/casting-one-struct- pointer-to-other-c)

<comment><USER62> The first named element of a structure is required to be located at the same address as the structure, yes; but I'm not aware of any requirement beyond that.

Can you point me at the relevant paragraph?

<comment><USER63> Elements are required to be "sequentially allocated":

This is from the draft N1256 document as I don't have access to the official standard. From 6.2.5 - Types:

"A structure type describes a sequentially allocated nonempty set of member objects (and, in certain circumstances, an incomplete array), each of which has an optionally specified name and possibly distinct type"

I can say that a lot of device drivers in the Linux kernel depend on this ...

<comment><USER62> Hmm, I understood "sequentially allocated" to mean "this structure gets a block of memory and no other variables will be allocated space within that block". Your interpretation would make sense, though.

As for Linux device drivers... it wouldn't be the first time that the Linux kernel (and especially device drivers) assumed a certain compiler behaviour which wasn't guaranteed, with hilarious results on later compilers.

</comment></comment></comment></comment></comment><comment><USER64> I love how a simple slideshow made out of cartoon characters got me knowing about the C and C++ standards more than a written reference ever did.

</comment><comment><USER10> Long time C coder here. Knowing this stuff just shows you've had more interaction with your C compiler(s) than with humans, which is fine (I knew quite a few of the details except for some of the C++ differences because, well, I code C, not C++).

That said, _relying_ on obscure stuff is where the problem lies. Long time C hackers almost always agree on one thing (if maintainable code is their goal and they're not engaging in some silly contest on how to squeeze a certain program into a ridiculous number of bytes or on how to write a program that you can't understand on purpuse): If you want your code to be maintainable in the long run try to be as transparent as possible about what the code does, don't rely on obscure or implementation dependent features.

So the 'girl' probably has huge experience, but the 'boy's answer is equally valid from a novice's point of view, because it (probably) gets the job done with a minimum of fuss (at least wrt to the initial set of questions). At some point he'll have to expand his knowledge.

If you had to sit through an exposition like that for every silly simple question the days wouldn't be long enough to get any work done. Literal answers like the girl gives are rarely productive, but it is good to have the knowledge that allows you to give those answers. It isn't a must for every position though, and even 'lesser' programmers have to learn somewhere (but when you're hiring you want to hire the best you can at the right price).

Oh, and please, do initialize your local variables before first use ;) Even if you are compiling with the debug options on, not initializing your locals before first use is a really bad idea, no matter how much you know about your compiler.

Later on in the series the differences get more interesting, keep clicking :)

What is probably frightening off many people from C is that there is a lot of arcane knowledge that the 'girl' is exposing that can actually be helpful during the debugging stage of writing a program, and that there isn't really a manual that you can read that will tell you all that stuff.

The only way that I know to come by it is to write code for many years and to run into those issues. I've had a couple of all-night debugging sessions that are still pretty vivid after many years and it is interesting that those bugs taught me lots about how compilers optimize, possibly more than I learned from reading books on the subject.

C bugs can be pretty subtle. The 'girls' knowledge can be helpful while doing hardcore stuff.

Given the choice between the two candidates I'd probably pick the girl (assuming she wants the same salary, which is very unlikely) and put a daily time limit on exposition ;), the 'boy' simply doesn't have that much experience yet.

Oh, and you can declare your 'main' fuction to be int main(void) all you want, argc and argv and envp will still be passed to it.

Keeping your globals 'static' in the file they are declared in (instead of (gasp!) having a bunch of globals that are declared 'extern', try to avoid that if you can) is good practice.

And so on. In short, there is a lot to know about any programming language, you can use questions like these to gage experience levels, don't rely on obscure stuff, explicit is better than implicit, don't expose more than you have to and so on.

</comment><comment><USER65> Why does C allow so much bullshit to work?

<comment><USER66> It doesn't matter, because in the professional world people don't use tricks in their code; rather, they keep it simple and understandable for the next person to come along. For example where I work it's common in code reviews to see comments like "that's confusing, put more parenthesis there", etc.

</comment></comment><comment><USER67> Slides don't work in Opera web browser after 54 page. In Chrome they work.

<comment><USER68> Worked fine for me in Opera under Windows XP, although I got bored with the presentation by the time I got into the 120's pages and quit.

</comment></comment><comment><USER69> That was a brilliant read, thanks.

where can I find more discussions like that?

</comment><comment> loup-vaillant 1) The girl sounds so much like Hermione that I don't want to be her.

2) I hate C++.

3) Oh, crap, I already knew 98,5% of all this (thanks to the C++ FQA in part, but still). I guess I'm a language lawyer now…

<comment><USER70> Found myself thoroughly annoyed by the style of the girl answers too.

Making the reader feel dumb makes for a terrible presentation choice.

</comment></comment><comment><USER71> Takes me back to my days reading comp.lang.c.</comment>


ShowHN: very easy to install social network for your own host - <AUTHOR> https://github.com/Databay/ownUnity

<comment><USER2> Saying something is "just two files!" which are concatenated, un-tabbed compilations of many other files, does not count.

The code is unreadable. I do not trust it enough to run it.

<comment><AUTHOR> ok, that's a point... I will put the original files also into the git-repo so everyone can see what's happening.</comment></comment>


A better way of describing bug severity to users - <AUTHOR> http://pqxx.org/development/libpqxx/wiki/AllSoftwareIsBroken

<comment><AUTHOR> Although it's clearly based on the traditional critical/severe/major/minor/enhancement list, this one is a lot more accessible to people who haven't been trained in bug-tracking and issue- management. It's a lot more objective, too!</comment>


The Realtime Ping Server (FeedBurner is completely broken) - <AUTHOR> http://www.techcrunchit.com/2009/01/03/the-realtime-ping-server/

<comment><USER2> They're already dealing with the majority of your traffic for _free_ , whats wrong with a few hours between refreshes? Theres a quick fix if you want it instant — host your own feeds!

</comment><comment><USER3> Honestly, Google really bungled-up the acquisition :(

Nick was a great guy and FB was awesome, it's a damn shame Google did it the way they did (I "lost" 200k subscribers overnight for one month until they got their MyBrand going again, they dropped half their services, logins to their site didn't work for over 2 weeks off and on.......)

</comment><comment><USER4> I've tried, but I just can't take Steve Gilmore seriously. Anytime he writes or speaks, he just inflates his arguments with air. He usually has some good core ideas, but he always smothers them with excess exposition. Unfortunately it just makes it difficult to finish his articles much less get any usable info from them.

</comment><comment><USER5> This is the reason I'm buying the less possible games from Steam, because I know Valve could be bought buy Google or EA some day, and you have no control over it . You have absolutely no guarantee that the service you are using will be the same tommorow, and I definitly don't want all my eggs in the same basket. Same goes for a lot of online services.</comment>


Deterministic Disappointment in C++ - <AUTHOR> https://www.youtube.com/watch?v=cbUTAoHy6Ls <comment><AUTHOR> Slides: [https://docs.google.com/presentation/d/1fSkpD51FKmy8VEO9P86j...](https://docs.google.com/presentation/d/1fSkpD51FKmy8VEO9P86jWN6tOEaBmzHOXo14zLRkFKE/edit#slide=id.p)

For some background about this talk, please check out Niall's paper entitled "P1095R0/N2289: Zero overhead deterministic failure - A unified mechanism for C and C++" here: [http://www.open- std.org/jtc1/sc22/wg14/www/docs/n2289.pdf](http://www.open- std.org/jtc1/sc22/wg14/www/docs/n2289.pdf)</comment>


Ask HN: Where can I find high-end stock images for a website? - <AUTHOR> <comment><USER2> [http://pixabay.com/](http://pixabay.com/)

[https://stocksnap.io/](https://stocksnap.io/)

[http://www.free-images.cc/](http://www.free-images.cc/)

[https://unsplash.com/](https://unsplash.com/)

[https://www.pexels.com/](https://www.pexels.com/)

[http://librestock.com/](http://librestock.com/)

[http://skuawk.com/](http://skuawk.com/)

[http://www.sitebuilderreport.com/stock- up](http://www.sitebuilderreport.com/stock-up)

[http://finda.photo/](http://finda.photo/)

[http://foodshot.co/](http://foodshot.co/)

[http://growthtext.com/free-stock-photos/](http://growthtext.com/free-stock- photos/)

[https://www.stockified.com/](https://www.stockified.com/)

[https://www.negativespace.co/](https://www.negativespace.co/)

[https://everypixel.com/](https://everypixel.com/)

[http://startupstockphotos.com/](http://startupstockphotos.com/)

[https://foodiesfeed.com/](https://foodiesfeed.com/)

[https://picjumbo.com/](https://picjumbo.com/)

[https://www.stockio.com/](https://www.stockio.com/)

hope this helps ツ

<comment><USER3> Great list! Now I'm looking for a similar list for icons. And fonts.

<comment><USER4> Google Fonts

<comment><USER5> This is probably off topic and will irritate designers around the world. But personally I disable all custom fonts. I have two. Helvatica equivalent and a monospace. Sizing is limited to 8-14 depending on screen resolution

<comment><USER6> Another reason to block Google Fonts is that it's (yet another) source of tracking data for them, not sure if you can self-host those though. Personally from the sites I've looked at with and without Google Fonts, it's not much of a loss.

<comment><USER7> I agree why give google everything? You could try [http://brick.im/fonts/](http://brick.im/fonts/) brick fonts is at least a choice.. I have used it and it seems fine..I have yet to expand use of brick fonts but on some sites I see no issues.. nice choice of fonts as well

</comment></comment></comment></comment></comment></comment><comment><USER8> [https://unsplash.com/](https://unsplash.com/)

<comment> King-Aaron Since it's sharp rise in popularity around ~12 months ago, it seems like every new website on the internet is using unsplash imagery

</comment></comment><comment><USER9> Believe it or not, I've found a decent amount of high quality photos to use on flickr's creative commons search:

[https://www.flickr.com/creativecommons/](https://www.flickr.com/creativecommons/)

<comment><USER10> Be careful if the photo includes a person's face prominently. If it does, the person in the photo has likeness rights in the photo[0] which the photographer cannot assign to you without a signed model release form from the subject of the photo. Most Flickr photographers are amateurs who don't have model release forms for their photos.

Plenty of lawsuits have occurred around the use of Flickr photos without model release forms (there is also a major sub-plot in the Kevin Smith movie "Jay and Silent Bob Strike Back" that revolves around likeness rights).

Creative Commons is not enough when there are prominent faces in the photo.

[0][https://en.wikipedia.org/wiki/Personality_rights](https://en.wikipedia.org/wiki/Personality_rights)

<comment><USER11> That's why it's better to just pay the premium and use getty or another paid stock image site.

</comment></comment></comment><comment><USER12> Unsplash [http://unsplash.com/](http://unsplash.com/)

Burst [https://burst.shopify.com/](https://burst.shopify.com/)

Death to the Stock Photo [http://join.deathtothestockphoto.com/](http://join.deathtothestockphoto.com/)

New Old Stock [http://nos.twnsnd.co/](http://nos.twnsnd.co/)

Superfamous (requires attribution) [http://superfamous.com/](http://superfamous.com/)

Picjumbo [http://picjumbo.com/](http://picjumbo.com/)

The Pattern Library [http://thepatternlibrary.com/](http://thepatternlibrary.com/)

Gratisography [http://www.gratisography.com/](http://www.gratisography.com/)

Getrefe [http://getrefe.tumblr.com/](http://getrefe.tumblr.com/)

IM Free (requires attribution) [http://imcreator.com/free](http://imcreator.com/free)

Jay Mantri [http://jaymantri.com/](http://jaymantri.com/)

Women of color in tech [https://www.flickr.com/photos/wocintechchat/](https://www.flickr.com/photos/wocintechchat/)

Public Domain Archive [http://publicdomainarchive.com/](http://publicdomainarchive.com/)

Magdeleine [http://magdeleine.co/](http://magdeleine.co/)

Foodiesfeed [http://foodiesfeed.com](http://foodiesfeed.com)

Picography [http://picography.co/](http://picography.co/)

Raumrot [http://www.raumrot.com/10/](http://www.raumrot.com/10/)

ISO Republic [http://isorepublic.com/](http://isorepublic.com/)

Source: [https://medium.com/@dustin/stock-photos-that-dont- suck-62ae4...](https://medium.com/@dustin/stock-photos-that-dont- suck-62ae4bcbe01b)

<comment><USER13> Awesome list! I've been a death to stock photo subscriber for a while and love their work!

</comment></comment><comment><USER14> These guys are using deep learning/convolutional neural networks to train their models to detect beautiful/thoughtful photographic images.

[https://www.eyeem.com/](https://www.eyeem.com/)

They talk about their curation algorithms here:

[https://devblogs.nvidia.com/parallelforall/understanding- aes...](https://devblogs.nvidia.com/parallelforall/understanding-aesthetics- deep-learning/)

</comment><comment><USER15> [https://www.shutterstock.com](https://www.shutterstock.com)

</comment><comment><USER16> Note that depending how you find an image, the price may be wildly different. I searched on iStock and found an image for 30 bucks. Then when I later went to purchase it, my google search led me to a page where it was listed for $400. I was eventually able to find it on the $30 page again.

For what it's worth, I did most of my searching in incognito windows to try to avoid this type of problem. It sure didn't work this time!

</comment><comment><USER17> What do you mean by "high end"? [http://www.gettyimages.com/prestige](http://www.gettyimages.com/prestige) is about as high-end as it gets in stock photography, but you'll also be paying handsomely for it.

</comment><comment><USER18> Train yourself a GAN and parameterise/create whatever stock image you want!

</comment><comment><USER19> For the occasional quick & dirty search, Google images could work. You can filter for usage rights.

Example screenshot... [https://imgur.com/a/dZ3VH](https://imgur.com/a/dZ3VH)

I didn't see the usage rights filter on the mobile site, but it showed up when I flipped to the desktop version.

</comment><comment><USER20> [https://www.stocksy.com/](https://www.stocksy.com/)

</comment><comment><USER21> [http://stock.adobe.com/](http://stock.adobe.com/)

</comment><comment><USER22> [https://www.pexels.com/](https://www.pexels.com/)

</comment><comment><USER23> I have same question but for not processed images. You can find high quality but highly shopped images on sites like unsplash or low quality not processed images on flickr creative commons search.

But it's very hard to find hight quality images without film effects or other filters.

</comment><comment><USER24> I have a bookmark folder for these: [https://bookmarkos.com/f/PZ_8FUO6Sqw](https://bookmarkos.com/f/PZ_8FUO6Sqw) My favorites are Unsplash and Pexels

</comment><comment><USER25> If you want your stock photos to look authentic and high quality check out [https://www.twenty20.com/](https://www.twenty20.com/)

</comment><comment><USER26> Hey @tixocloud, check out [https://www.haystack.im](https://www.haystack.im) Let me know what you think, I am one of the founders.

<comment><AUTHOR> Thanks. Will check it out.

</comment></comment><comment><USER27> Can I plug my own little site :- [https://www.inspiredpics.co.uk](https://www.inspiredpics.co.uk) All free for commercial use

</comment><comment><USER28> I like [https://pond5.com](https://pond5.com), also great for sound effects, music, video footage, illustrations.

</comment><comment><USER29> [https://www.haystack.im/](https://www.haystack.im/) is a really great aggregator and search tool.

</comment><comment><USER30> For African related photos [https://africanstockphoto.com](https://africanstockphoto.com)

</comment><comment><USER31> [https://marketplace.500px.com](https://marketplace.500px.com) but it isn't free

</comment><comment><USER32> [https://pxhere.com](https://pxhere.com)

Lots of 16+ MP CC0-licensed works and good filtering options.

</comment><comment><USER33> As a few other folks have pointed out it really depends on what you mean by 'high-end'. The stock photo world is divided in a few different segments: free, microstock, midstock, and premium (as well as commerical and editorial).

Starting at the cheaper/low end you have 'free' imagery (some flavor of Creative Commons Zero [cc0] license) that lots of sites listed here offer. The one caution with free (as I think someone else mentioned below) is that the licenses aren't always clear (what you can and can't use it for) and in some cases the attribution / provenance of the image is wrong / unclear. Meaning that what you think you are ok to use, may have actually been appropriated from someone else; and you are potentially infringing on copyright. I haven't spent enough time on the different free sites to see what their policies are regarding provenance, so your mileage may vary.

Then you have the microstock stock imagery - images that are in the $1-$5/range. Companies in that realm include folks like Shutterstock, 123RF, Dreamstime, and a slew of others. Shutterstock's public filings says that their per image license is something like $2.25 (or it was when I looked maybe a year or two ago). These images are often the ones that people refer to as 'stock' in that they _look_ like stock. Not all of course, but I am sure you know what I am talking about.

Then you have the realm of 'midstock', which is somewhere between (you guessed it) the low end and the highend. There are a lot of players in here, but iStock (from Getty) is probably one of the biggest ones; as well as Adobe's offering (from when they bought a library called Fotolia). This area of the industry is increasingly being carved out as prices either go down down down, or the more unique and premium imagery hold their own.

At the high end of the stock world you have what is called the 'premium' stock photography folks - this includes Offset (from Shutterstock), Getty Images, and the new Premium offering from Adobe. Those are the three big players at the top end of the spectrum, and then you have a lot of smaller studios that sell directly to end consumers and also place their imagery with the big three. So in some cases you can find the same imagery across a lot of different providers.

My background is a photographer and I have images with a bunch of these more premium folks and looking at my royalty statements the average sale is more in the $110 range/image. Or ~50x the low-end of the market. So it really depends on how much $$ you are looking to spend and whether the quality of the image (beauty in the eye of the beholder and all that) is important to you.

The other site (full disclosure, I am one of the founders) to check out is [https://haystack.im](https://haystack.im) that aggregates from a couple dozen different stock agencies all in one place (including several listed here like Stocksy, EyeEm, 500px, Cavan, Maskot, ImageSource, and a science-focused site called SciencePhotoLibrary). You can pick one/several agencies to search at any given time and then we boot you off to them for the final license. So we are more like a premium stock photo search engine than a distributor of the stock itself. Think Kayak not Delta.

Hopefully that makes sense. Hit me if you have any stock industry/photography questions. I am at: email@example.com

<comment><AUTHOR> Thanks very much for the clarification, Andrew. I'll check your site out, bookmark it and be sure to share with my friends.

</comment></comment><comment><USER34> [https://deathtothestockphoto.com/](https://deathtothestockphoto.com/)

</comment><comment><USER35> [https://deathtothestockphoto.com/](https://deathtothestockphoto.com/)

<comment><USER36> Monthly subscription required - my least favourite model.

</comment></comment><comment><USER37> More to this awesome list. [https://swagpix.com](https://swagpix.com)

</comment><comment><USER38> Shameless plug: [http://aiphotosearch.com](http://aiphotosearch.com)

</comment><comment><USER39> [https://burst.shopify.com/](https://burst.shopify.com/)

</comment><comment><USER40> [https://burst.shopify.com/](https://burst.shopify.com/)

</comment><comment><USER41> Unsplash is the best in my opinion.

www.unsplash.com

</comment><comment><USER42> [https://pexels.com](https://pexels.com)

</comment><comment><USER43> [http://pixabay.com](http://pixabay.com)

</comment><comment><USER44> istockphoto.com

I always start with the free sites, but usually end up using a paid option especially for images that include people. High quality free landscape type photos seem more common.

</comment><comment><USER45> SabreCMS comes with 1.8 million OOB

</comment><comment><USER46> SabreCMS comes with 1.8 million OOB

</comment><comment><USER47> Unsplash. Just use Unsplash. :D

</comment><comment><USER48> I always liked LibreStock.com

</comment><comment><USER49> Will keep this in mind

</comment><comment><USER50> I use fotosearch.com

</comment><comment><USER51> sxc.hu has a pretty good free section

</comment><comment><USER52> I've used the following 2.

1) FREE under Creative Commons CC0 - [https://pixabay.com/](https://pixabay.com/)

2) Mix of FREE & Sponsored / Paid - [https://unsplash.com/](https://unsplash.com/)

<comment><USER53> All photos on Unsplash are free.</comment></comment>


The Life of a PHP Developer - <AUTHOR> http://jonkuperman.com/life-of-a-php-developer/ <comment><USER2> this article didn't even address by far the biggest issue with PHP: there is a massive and divided community that is split between real professionals (the guys who build Facebook, for example) and total amateurs who don't know what they're doing.

critiques centered on the weaknesses of the language itself are missing the most important problem with PHP as a technology ecosystem. the technically rigorous, experienced, professional part of the PHP ecosystem is a minority and the signal:noise ratio is horrifically bad.

Do you know what happens if you put up an ad on a job board looking for PHP developers? You get flooded with hundreds of amateurs or lackluster freelancers (many of whom have no idea how far away from "good" they are) and a very small amount of responses from good developers.

Do you know what happens if you google search technical questions about how to do stuff in PHP? Flooded with blogposts and forum threads filled with actively harmful information instructing you on the wrong way to do things, without having any idea about why its wrong.

Other languages don't suffer from these problems to nearly the same degree. There are issues in the Python, Ruby, Javascript, Perl, Java, C#, etc. communities as well. Those problems are not nearly as intractable and damaging though. The communities of other languages have better signal:noise ratios and its really evident as soon as you try to do any hiring. It makes a difference.

<comment><USER3> The signal:noise ratio is better in Javascript, Perl, and Java? I can't possibly agree with you there. There's a lot of bad PHP out there. But that's also because there's a lot of PHP out there. I wouldn't say the ratio is any worse. Any respectable PHP developer nowadays uses a decent framework, and there are many. It's pretty easy to discern who's legit and who's not by whether or not they use/understand these frameworks.

 _edit_ Why the downvotes? Am I not contributing? Or is this just typical irrational PHP hate? I'm not apologizing for it, I'm just talking from experience here.

<comment> V-2 But there's a culture thing, too.

In case of many programming languages, there's certain culture built around them - with its own hierarchy of values, its own idiosyncrasies, approach and so on.

Like the tendency of overengineering and devotion to design patterns in Java world.

Now, the idea behind PHP is to "just get it working".

This philosophy is perfectly summed up by PHP's inventor, Lerdorf:

"I'm not a real programmer. I throw together things until it works then I move on. The real programmers will say 'Yeah it works but you're leaking memory everywhere. Perhaps we should fix that.' I'll just restart Apache every 10 requests. "

Of course the qoute may be tongue-in-cheek, but I'd say the mindset is real.

(I've written software in C#, Java and PHP)

<comment><USER4> It's just your idea, it's not "idea behind PHP". Almost all of my PHP code is covered by tests, for example - it's far from "just works".

And PHP is very far from ugly initial creature of Lerdorf.

<comment> V-2 Answering in the same spirit: it's just your code... :)

</comment></comment></comment></comment></comment><comment><USER5> Perhaps you would not have these problems if you accepted web development as a blue-collar trade that it is.

When you treat learning some tech stack as a pinnacle of intellectual achievement, your sense of identity becomes involved and you get this kind of nonsense.

<comment><USER6> How do you figure that web development is blue-collar work? Even for hyperbole, this is quite a stretch. Whatever your intent was, it just comes off as elitist.

<comment><USER7> There is a lot of development that I think can be categorized this way. Someone learned a skill 5 or 10 or even 15 years ago, and goes to work everyday and essentially punches a clock. Having done ColdFusion for a large part of my career, I see this pattern in that community.

<comment><USER8> as opposed to the average GP (familiy doctor) or lawyer :-)

</comment></comment></comment></comment><comment><USER9>
      It's not 2004 anymore

His argument is that PHP is better now that is not 2004, but also, you could say the same about PHP usage on big popular sites.

I'm tired of the argument of "every big site is written on php" cause it's not 2004 anymore and if those sites were to start today they'd probably be written on other languages.

He fails to mention that there is actually a fairly big amount of people that are horrible programmers and use, love, and preach PHP, they're not using Symfony, or reading Hacker News, or writing tests, still they're professional programmers.

</comment><comment><USER10> I did PHP for many years before moving to Ruby and Rails and never looked back ... doing Ruby made me a much much better software Engineer and gave me a better understanding of Computer Science as a whole. Its not impossible to get this with PHP, but the fact is that the low barrier to entry actually works against it. There are way more amateurs screwing around and writing really bad code with PHP than you'd find doing Ruby, Python and (more recently) Javascript (wasn't always the case though)

PHP just has bad PR. It unfortunate, but its just the reality of the PHP ecosystem, and if you choose to program mainly in it, then its something that you have to accept and work hard to overcome.

Weirdly enough, I find quite a few startups/tech companies that I wouldn't expect to use PHP actually do. Pocket. Slack. for example then the usual suspects like Facebook and Automattic (wordpress guys). From my experience following Ruby on Rails from the beginning till now ... I think the these using PHP are doing the ecosystem a massive disservice by not blogging more extensively about the awesome things they're doing with it and getting more word out about the right way to do things. Thats the only way I see the perception of PHP changing.

</comment><comment><USER11> Hey all, author here. You all are amazing and took down my website! If it's not loading for you, I put the post in a gist which can be found here: [https://gist.github.com/jkup/dcaa56f1d066409d17f5](https://gist.github.com/jkup/dcaa56f1d066409d17f5)

<comment><USER12> Maybe you need to restart apache every 10 requests?

(good article though ... I try to prefix my PHP rage stories these days with 'argh, argh, PHP3' so people realise I'm complaining about the past rather than the present)

</comment></comment><comment><USER13> What I hate the most about all these arguments is people always say that php people don't know shit about computer science. C.S. is important, but it's not what makes you a good programmer. Ultimately all systems have theory behind the underpinning technologies, but what makes a system powerful is how it's engineered at scale, and how code is maintained at scale. A house is about making sure all materials to build it are strong enough via scientific measurements & standards. You don't need to be a rocket scientist to know that if you don't use proper materials, everything falls apart. That is why if you write in langauges like php, they improve the C.S. part from the community, but also build frameworks which are the Software Engineering Technics encoded in documentation.

Ultimately, what makes people hate a language is how it engineers structures at scale, and ones which don't force the hand, people hate. PHP has recently frowned apon writing massive codebases without frameworks, and when it is a framework, they expect people to take the time to document their frameworks to a point where the community can take over and improve that product. Writing lots of non-domain specific code is a sure-fire way to find haters all day long.

Almost all modern php now is very heavily leveraged in package management & commonly used frameworks & best practice software engineering principles in the underpinning glue to the code.

</comment><comment><USER14> Hmm, OK, I'm guilty of having the biases and preconceptions that he's describing. However, even after reading through his post and some of the articles he linked to, I didn't see anything that really changed my mind.

Even knowing that there are smart people at Facebook and Twitter using PHP, I just can't shake the connotations that those 3 letters have in my mind. I'll try to keep an open mind, but lord it ain't easy.

<comment><USER10> I don't think people at Twitter use PHP ... might be wrong on that though. From what I remember they started with Ruby/Rails and are now doing a lot of JVM stuff (Scala)

</comment></comment><comment><USER15> On Twitter, I'm repeatedly ridiculed for writing PHP.

[https://twitter.com/voodooKobra/status/494466665883910144](https://twitter.com/voodooKobra/status/494466665883910144)

This is a fairly typical response (usually from C enthusiasts):

        Me: "Hey, I'm working on some project. Anyone see any vulns?"
        Person: "Yeah, I see a vuln: You're using PHP."

I don't like language arguments. While there's always value in contrasting language features and keeping your horizons ever-expanding, nothing productive comes from them. All it does is foster an environment that promotes Impostor Syndrome and insecurity. As others have said, they believe the people who engage in these "my language/framework is better than your language" diatribes are acting on their own insecurity. If they are correct, it's a vicious cycle that accomplishes nothing.

Better idea: Accept that no language is perfect, and if there isn't a way to solve a specific problem (or the existing solution sucks), research and write a (better) solution. Even if it means sending patches to the PHP core (and having to deal with the toxic jerks on the mailing list). This is far more beneficial than arguing with people who don't want to listen.

As PHP accelerates towards its version 7 release and cleans up a lot of the cruft from the 4.x and early 5.x days, a lot of the criticisms of PHP will cease to be applicable.

"Those who can, do. Those who can't, complain."

EDIT: If you're going to downvote me, please at least tell me WHY you are.

<comment><USER16> "I don't like language arguments."

Well, if you like PHP, how could you like language arguments? After all, they always end up destroying your beliefs.

<comment><USER15> "After all, they always end up destroying your beliefs."

You don't even know what my beliefs are.

</comment></comment></comment><comment><USER17> If you base your identity on the language of the day, you are going to have a bad time when things change.

I am a developer. I develop in multiple languages, using multiple frameworks, with different technologies, to fill different needs.

Why would I care which language I am using for a project? The syntax is different and so are the built-in tools, but in the end, you are doing the same things.

<comment> V-2 Well, "base your identity" that's an exaggeration of course, but I think it's a mark of an insightful professional to have _opinions_ about various tools of his trade, and some sort of taste. Rather than being the "just punch your card and go home" guy.

I don't like, say, C++ (let's [http://cdn.meme.am/instances/500x/57005651.jpg](http://cdn.meme.am/instances/500x/57005651.jpg) for a sec...), so I'll stay away from it. This is one of the perks of being a software dev that the job market allows you to pick technologies that appeal to you, the ones you enjoy learning and using.

</comment></comment><comment><USER18> "There are only two kinds of languages: the ones people complain about and the ones nobody uses" \-- Bjarne Stroustrup

</comment><comment><USER19> PHP had many positives: (1) killer apps like Wordpress and PHPmyadmin, (2) PHP apps are easy to install and run on most stock *nix system, and (3) bare-bone PHP runs fast, compared to Rails or other framework (which is not a fair comparison, though)

Unfortunately, PHP has failed in: (1) lack of leadership and the vision -- they need someone like DHH or Linus Torvalds or the support of a major corporation such as Google (HHVM from Facebook not withstanding) (2) PHP still suffers from the lack of respect from software engineers and developers, and faced the same fate of VB6 (which I've had fond memories of doing "casual programming"), (3) future of PHP looks grim, despite the upcoming release of PHP 7, with the exception of Hack and HHVM, but Hack is not PHP.

<comment><USER13> I think you are wrong in stating php future looks grim, I think it all depends on what corner of the internet you are reading from. From where I am, I read reddit.com all the time, it's talked about extensively all day long. A language which gains no new features is one which is dead. I think python more than anything else is sort of dying.

</comment></comment><comment><USER7> If validation is the problem, then remember that most developers aren't on HN, and they aren't building startup apps. Also, I can't imagine a developer only knowing the one languages. Leverage other "cool" projects if you feel you really need some geek cred (Javascript MVC, CSS pre-processor like SASS or LESS, automate your builds using Chef, optimize developer experience using Vagrant, implement search using ElasticSearch, etc)

If all you've ever used was PHP and you haven't grown into using the other amazing tools that are available in 2015 (remember, "this isn't 2004"...) that's the bigger issue.

</comment><comment><USER20> We use mostly PHP at work but lately I have been using my free time to learning Ruby because most good job offers around here ask for Rails knowledge.

I'm not saying there are no PHP job offers, there are, but they are mostly for maintaining old codebases that have none of the good features that modern PHP has. Or they are for web agency jobs that consist of mass producing cookie cutter web sites.

I think Laravel 5 looks very interesting but I feel I can't afford to explore it because I need to learn Ruby if I want a better job.

</comment><comment><USER21> He's right though - most of the arguments about what PHP is lacking are outdated and obsolete by the massive community undertaking.

Most of the modern day arguments are just bikeshedding arguments. (Function names are inconsistent, etc.) which is, yes, stupid that we've managed to maintain mistakes for decades - in the end it doesn't matter.

What matters is being able to get things done, and that's something PHP developers are fantastic at - even if some of them output the worst code imaginable.

<comment><USER22> > What matters is being able to get things done, and that's something PHP > developers are fantastic at - even if some of them output the worst code > imaginable.

I had a car, once, where the driver's side seatbelt would pop out if I put on the brake, or leaned forward.

But hey, what mattered was that the car got me from point A to point B, therefore it was a perfectly great car!

<comment><USER18> Perhaps apply for a job as a PHP developer. Pay is good, and so you probably will be able to get a new car :)

<comment><USER22> You joke, but I was working as a PHP developer at the time. :)

<comment><USER18> That's something that's not talked about often enough. Good developers working at bad companies :) In the sense that those companies don't appreciate their developers in the same ways good tech companies do.

</comment></comment></comment></comment></comment><comment><USER23> I think associating yourself to a technology to the point of "end[ing] up in insular micro-communities" is the wrong approach. People shouldn't define themselves as developers based solely on one language (e.g. "I'm a php [only] developer"). I enjoy working with both low level and high level languages, with some more than with others, but they're merely tools. And no tool is the best tool for every problem.

</comment><comment><USER24> We know why we chose a PHP for a project, how "bad" PHP is and can weight that against advantages it brings. We already know all the jokes and just do our jobs.

Also, I suspect some people do not get it when we say "it is not 2004 anymore". It REALLY isn't. We see and write this kind of code on daily basis:

[https://github.com/symfony/FrameworkBundle/blob/master/Comma...](https://github.com/symfony/FrameworkBundle/blob/master/Command/ServerStatusCommand.php)

We do not deal with nightmare cases like this anymore: [https://github.com/2b3ez/FileManager4TinyMCE/blob/master/tin...](https://github.com/2b3ez/FileManager4TinyMCE/blob/master/tinymce/plugins/filemanager/dialog.php)

So, please do not pity us. We know what we use and why.

</comment><comment><USER25> Sometimes I really wonder, why everyone hates PHP? Sure, it's not the best language around to do complex calculations but it's very easy to write code there.

<comment><USER26> It's not a particularly elegant language.

Even with the RFC process, php-internals still resists adding language features useful only to advanced developers.

The standard library is full of warts, including odd spelling, inconsistent argument order, etc.

The killer though, as mentioned in the article, it has a low barrier to entry, so lots of neophytes write lots of bad code in it. There's also a tremendous amount of horrid, obsolete code out there, written by people that didn't know any better at the time, and kept up because the internet never forgets.

PHP is far less of a joke than it used to be, but people will continue to hate on it and look down on people that make a living writing it.

<comment><USER27> The thing that gets me is that JavaScript has all these same problems yet, because everyone is forced to use it, it doesn't get as much hate.

<comment><USER26> Another major difference is that Javascript has trendy things with hype machines.

PHP is not trendy, and there's pretty much no hype around any PHP project.

<comment><USER28> It's not the hype, for me I use JavaScript because I have no choice. I dislike many things about it, but I have no choice, I need my code to run in the web browser, no plug in, no Flash or Silverlight etc.

For my start up, I can't see a single reason why we'd use PHP, try to not think of it as me saying PHP is bad, it's just other languages and frameworks offer us more value.

<comment><USER27> JavaScript is creeping into more places too; I'm going to be starting a project in JS soon because it needs to run the JavaScript sandbox provided by mobile OS's. And that is specifically to get around platform restrictions involving downloaded code and to make it easily cross-platform. If I had the choice, I'd use something else.

So this also leads to using node.js (for early development and testing).

</comment></comment></comment></comment></comment></comment><comment><USER29> I cry. Sad guys are sad.

</comment><comment><USER30> Hating PHP is like hating Taylor Swift: You can't argue with numbers, and sometimes, despite resisting, you end up singing along.

<comment><USER30> I guess I should have known defending PHP and mentioning Taylor Swift would get downvoted. I still stand by the comparison.</comment></comment>


A Cultural Thing: Why More Minority Women Aren't In Tech - <AUTHOR> http://www.cristinajcordova.com/2011/04/a-cultural-thing-why-more-minority-women-aren%E2%80%99t-in-tech/ <comment><USER2> I think the first two reasons affect everyone pretty equally, but the 3rd rings pretty true in a couple ways.

I was lucky enough to attend several city schools with serious technology programs/curricula. This included C++ for all 4 years of HS provided you were on the advanced track.

That said, I still had troubles fitting into the tech world and even left it for a time. There's a variety of reasons for this, but one of them was that I never really felt any sense of camaraderie with the other people who were into this stuff. Outside of computers, I often had very little in common with my white, male peers.

They liked metal and rock, I mostly liked JPOP and Electronic music at the time. They were worried about getting girls to like them and annoyed at the athletes who seemed to get all of them. I was usually dating those same athletes. Even my gaming interests seemed to diverge from theirs. I'm a console gamer, but the guys were busy playing Counterstrike.

This meant there were FAR fewer opportunities to collaborate and learn from a group of similarly-interested people. Thankfully, people are a LOT more open to differences now that I'm older, but it still leaves me pretty far behind.

Note: I'm an Afro-Latina woman.

<comment><USER3> > This meant there were FAR fewer opportunities to collaborate and learn from > a group of similarly-interested people.

I'm going to tread carefully here. =)

Similarly-interested in a small segment of likes. I think it's fair to say that in most careers, their exists a culture, and if you aren't apart of that culture, you miss out. I see this in all sorts of industries, and the type of people involved generally follow a well established stereotype. Their are exceptions, and stereotyping is bad, but I think it's safe to say we all see this and know it exists. It's not on purpose. Us white male programmers just happen to have a lot of similar interests.

> but it still leaves me pretty far behind?

Do you find this a fault with the industry? With those white guys? With you? Or no ones fault and it is what it is?

My own experience is that people who have the same dedicated drive for programming but aren't interested in the same extra-curricular activities as most programmers usually have a lot to offer. Have you found that to be the case personally? Do you feel other people see that in you?

<comment><USER4> _I think it's fair to say that in most careers, their exists a culture, and if you aren't apart of that culture, you miss out._

This happens to white people too. I work in the financial industry.

Typical weekend activity: [http://www.youtube.com/watch?v=t1CKesTyTpI&feature=relat...](http://www.youtube.com/watch?v=t1CKesTyTpI&feature=related)

My weekend activity: [http://www.youtube.com/watch?v=L7CtBWhrVAE&feature=relat...](http://www.youtube.com/watch?v=L7CtBWhrVAE&feature=related)

Sucks for me, but I can't find fault with other people for doing what they like. It's not the job of the rest of the world to change to make it convenient for me to network.

<comment><USER5> Holy shit that was intense

</comment></comment></comment></comment><comment><USER6> I'm a biracial Software Engineer that grew up 'poor'. I think the single biggest reason I went into technology is because my parents, through some sort of time bending super sight, saw fit to save scrape, and scrimp so that I could have a computer at a very young age (9 years old started with Apple IIe in 92ish, it was already outdated and we quickly bought a nicer computer).

This happened right before my fifth grade teacher sat me in the back of the class and let me play with the 1 classroom computer with the BASIC manual because I was 'gifted' and always finished my work early. These two events provided tools and a framework for learning that many minority students probably didn't have.

<comment><USER7> I wonder... as more and more kids of all economic groups have smartphones, or even if they can't afford a service plan, an iPod Touch or similar.... it seems inevitable that in the next decade or so almost all kids will have access to some form of "personal" computer from childhood. I can't help but think that would change the representation in the software industry.

Makes me think that getting really good programming games and dev environments on SmartPhones is a great idea.

<comment><USER6> Maybe but a lot of these new devices every kid has can't be 'programmed' the way my Apple IIe could be. The early computers were devices that could write software for themselves and the current 'post-pc' (I hate this term but it's all I had) devices don't really enable you to write code using them for themselves.

<comment><USER8> I would argue that the inclusion of Applesoft BASIC in the Apple ][ line was the most beneficial thing to happen to the tech field in the 80s. Perhaps at the time it was simply a way to get traction from homebrew hobbyists. But the impact was immense. Spending nights on end in front of green text to type in "Home Computing" programs was the first steps taken by the many of the greatest programmers I've ever worked with.

Newer tech products are designed to be consumable only. They are media devices, ends to themselves and no longer tools of exploration. They do a great job at making peoples lives more enjoyable, but its with regret I see kids unable to begin unlocking how they work simply by typing in 10 PRINT "HELLO"; 20 GOTO 10.

</comment></comment></comment></comment><comment><USER9> From experience, Asians (East & South) are far overrepresented in tech, relative to all women.

<comment><USER10> I think that most of it is due to the fact tech is mostly a meritocracy (at its best). You're either good or you're not. You aren't judged on how well you can socialize with your superiors, co-workers, clients nor does playing politics wildly affect your performance/compensation. It does but I would say less than other fields.

Also eastern culture places more of an emphasis on introspection paired with their particular upbring which typically revolves around a lot of studying, a solitary activity, I think its natural for that segment of the population to find tech to be a desirable career.

Personally if I were a woman, I'd jump into tech. I'm sure being competent and of a different gender would yield significant advantages albeit maybe soft advantages.

</comment></comment><comment><USER11> There factor of risk aversion exists, but I'd argue not any more so for women than for men of the same racial groups. This is because the risk really isn't financial - these days everyone knows that there's tons of money to be made in tech. The risk is in prestige - doctors often become known figures in their communities in a way that engineers rarely do. Believe me, this can be a _huge_ factor for people who grew up noticing that they were treated "differently" - minorities, immigrants, women, etc. If you are doing something awesome with your life, you want people to know about it; it can often mean the difference between being shown respect and not.

In response to Shamiq, this could be why most of the "underrepresented minorities" you see in tech are actually women; arguably, they have less to prove.

</comment><comment><USER12> Funny, most of the few women I see in Tech ARE minority women...

<comment><USER4> "Minority" is a code word for "Black/Hispanic". Asians don't count.

<comment><USER13> Minority should not be absolute. "Underrepresented minority" only makes sense in context.

<comment><USER4> The term "underrepresented minority" is misleading.

In any state where nonhispanic whites are a minority (e.g., CA), they are typically an underrepresented minority (only Asians tend to be truly overrepresented). I've never heard whites described as "minority" as a result of this.

<comment><USER14> Non-hispanic Whites are not a minority in California [1]. And even if they were, I'd be very interested in seeing any statistics that show them as underrepresented in any context of significance (i.e. not prison).

[1] [http://en.wikipedia.org/wiki/Demographics_of_California#Raci...](http://en.wikipedia.org/wiki/Demographics_of_California#Racial_and_ancestral_makeup)

<comment><USER4> Nonhispanic whites are 44% of CA. That's a minority.

<http://en.wikipedia.org/wiki/Minority-majority_state>

Nonhispanic whites make up only 32% of UC Berkeley. That's underrepresented.

[http://www.huffingtonpost.com/2010/03/04/racial-breakdown- of...](http://www.huffingtonpost.com/2010/03/04/racial-breakdown-of-the- l_n_485577.html#s72048&title=University_of_CaliforniaBerkeley)

<comment><USER14> OK, you are correct.

Though I still think the statement, "any state where nonhispanic whites are a minority (e.g., CA), they are typically an underrepresented minority" is very much hyperbole, which was the point I was trying to make.

</comment></comment></comment></comment></comment></comment></comment><comment> wh-uws This generalizes to minority men as well.

Even if its not that risk taking is discouraged, risk averse or more conservative routes are certainly encouraged more.

There is also the pressure of not having multi generational wealth to fall back on.

Not having previously successful family to lean on in times of need or if things don't go right is a strong precursor to risk aversion

</comment><comment><USER15> I hope sometimes we take a minute to just understand that technology (the building of it, that is) just does not interest everyone. As a matter of fact I think it only interests a minority of people so it is really difficult for this small group to include a large subgroup of every ethnicity.

There are some things in life for which certain minorities just do not necessarily enjoy. It is not just about women or technology.

Example: I do not enjoy going camping in the wild, and apparently 99% of black people (whether they are African, African Americans, European do not really enjoy this).

<comment><USER16> I've also noticed that there are almost no black people (in the US) on ski slopes, camping or at the beach. And I've never assumed that it's because they're being oppressed or that it's the result of some cultural bogeyman. Rather that, for whatever reasons, they are just not as into it as white people are. Also, based on my experience, I've seen almost no Asian folks doing those activities either. Some Hispanics/Mexicans, certainly, but my offhand sense is that they are underrepresented relative to their total share of population as well. But it's not as extreme of a difference as it is for blacks and Asians.

And you know what? I just don't see this as a problem. I don't think there's any one right/perfect/proper percentage for any given human activity. Or at least, I don't see how we can objectively conclude what those percentages are.

<comment><USER17> I go to Heavenly and Kirkwood basically every weekend in ski season -- at least until I broke my ankle mid March -- and I'd say the demographics at Heavenly match sf pretty well. Kirkwood less so, but I'd guess that's the difficulty getting there / drawing more people from SLT and Nevada.

</comment></comment></comment><comment><USER18> There are tons of Minority women in Tech! I'd argue that there are more minority women by percentage of total women in tech than minority men. I've seen entire development shops with dozens of developers, 30-40% were women and of those >90% were minority women.

The better question is the age old, why aren't there more women in tech?

<comment><USER19> I should have mentioned that I was mostly referring to historically underrepresented minority women (blacks and Hispanics). This may affect what you have observed. Asians, in particular, are overrepresented in education and technology when compared to the general population statistics in the US.

<comment><USER18> I do have to agree partially with you. Asians (East and Indian) women are _fairly_ well represented as a percentage of women in total. I've seen very few Hispanic women in computing (and sadly, very few Hispanics in general). However, I've met more black women in computing than black men. This is all anecdotal of course, but there's some kind of deeper sociological pattern there I'm sure.

</comment></comment></comment><comment><USER20> I think it's an access thing. Not access just to tools, but access to people who are doing something different. But it extends beyond tech.

</comment><comment><USER16> I think we should be gender and race blind, and therefore also neutral, when it comes to thinking about whether any given permutation "should" be in tech, or should be in it in greater or lesser numbers than currently. I think a serious intellectual mistake is made whenever someone sees a situation where say < 50% of the folks in a given field are female, and therefore concluding that's a "problem" or the result of some oppression, or that any given field should be comprised of X% race A, Y% race B, X% race C, and so forth. Because we just cannot know for sure what the "proper" or natural percentage is supposed to be in these cases, as the baseline to compare against an allegedly unfair percentage. Instead, let's work to make both the tech and the field equally (and by that I mean neutrally) available, and friendly, and useful, for everybody, period, and then let the chips fall where they may.</comment>


Ask HN: Is there any interest in a blog that discusses futuristic products? - <AUTHOR>

I am thinking about starting up a blog to exercise my writing ability as well as learn some marketing hands on. I was searching for a topic and realized that as a longtime sci-fi nerd I have always been fascinated by new and interesting products/services  that do awesome things. Would anybody be interested in reading this?
Examples of topics that would be discussed are:

  -Companies creating new and interesting services (with a focus more on those like dropbox or skype as opposed to a metrics recorder or photo sharing app)

  -New research that pushes the bounds of human knowledge and provides information that is understandable and practical

  -Products that alter the way we interact with the world

 [EDIT: Added examples] <comment><USER2> I'm always interested in futuristic products, especially in the context of reality.</comment>


"We'll take them all": Demand for ventilators spikes as coronavirus looms - <AUTHOR> https://abcnews.go.com/Health/demand-ventilators-spikes-coronavirus-looms/story?id=69597233 <comment><AUTHOR> In other HN threads, we're discussing how to hack up ventilators to meet the anticipated crushing demand. Another option to be pursued in parallel is for existing ventilator manufacturers to ramp up production.

Are there some models which allow for quicker production because they have simpler designs, everything is sourced locally, production lines do not require exotic high-precision tools?

If so, are there ways to get the companies which manufacture such models the capital and anything else they need ASAP?

<comment><USER2> [https://en.wikipedia.org/wiki/Medical_ventilator](https://en.wikipedia.org/wiki/Medical_ventilator)

[https://en.wikipedia.org/wiki/Forrest_Bird](https://en.wikipedia.org/wiki/Forrest_Bird)

we really are talking about two things here, one being the equipment used, the other being the therapeutic specialist that has to attend the ventilator, and tune it to chase after a multivariate dynamic.

ventilation can cause lung injuries and facilitate lung pathology this is part of a trade off for overall wellbeing.

a ventilator has to be able to manipulate pressures with near instant response and very high precision.

during natural ventilation there is sensory feedback allowing nearly point for point modulation of flow and cycle. ventilators dont have this. Coronavirus aside It would be good to find some way of getting around the risk of lung injury</comment></comment>


Uber CEO calls for investigation of sexual harassment claims - <AUTHOR> http://www.usatoday.com/story/tech/2017/02/19/uber-ceo-investigation-sexual-harassment/98142146/ <comment><USER2> Wow, surprising news! A company has decided to investigate something that became a well publicized PR problem? Wow</comment>