Williams: Master of the "Come From"
github.com
github.com
But under moderate questioning, most interviewees don't hold up well.
"Daniel Kahneman: How cognitive illusions blind us to reason" http://www.guardian.co.uk/science/2011/oct/30/daniel-kahnema...
"Because our impressions of how well each soldier had performed were generally coherent and clear, our formal predictions were just as definite. We rarely experienced doubts or formed conflicting impressions. We were quite willing to declare: "This one will never make it," "That fellow is mediocre, but he should do OK," or "He will be a star." We felt no need to question our forecasts, moderate them, or equivocate. If challenged, however, we were prepared to admit: "But of course anything could happen."
We were willing to make that admission because, despite our definite impressions about individual candidates, we knew with certainty that our forecasts were largely useless. The evidence was overwhelming. Every few months we had a feedback session in which we learned how the cadets were doing at the officer training school and could compare our assessments against the opinions of commanders who had been monitoring them for some time. The story was always the same: our ability to predict performance at the school was negligible. Our forecasts were not much better than blind guesses."
Another recent article was about the author was discussed here:
"The King of Human Error" http://www.vanityfair.com/business/features/2011/12/michael-...
For example, I once had school project where we where supposed to implement some fairly simple math function in x86 assembler. My first question in class was what instruction set could we use? (x86 Pentium I) So we can use the floating point unit? (Yep) So while everyone else was implementing floating point functions by hand I simply used the built in floating point unit. I still remember handing in 4 pages of clean code and asked why this was a major project until people started asking for more time to fix their buggy 40+ page programs even though I had told several people what I thought was an easier solution. I even told people that I finished the thing in a few hours while watching TV but they forged ahead I guess thought the sunk cost fallacy or something. I mean sure the way you do arbitrary exponentiation is a little funky, but that's better than doing it by hand.
Oven and over I see the same things. Last week someone was demoing his custom cashing solution created by hand and I was like A this does not fit our architecture and B why did you spend the time on this? Sure it's 'fun' but why bother?
At the same time in interviews I have been asked minutia about the java object system etc, and all I can think of is if this matters your doing something horribly wrong.
I understand that the interviewer probably works with them every day and has them memorized, but really that's something I could have looked up in 10 seconds. I don't think people should be penalized for following Einstein's "never memorize what you can easily look up in a book" philosophy.
422 Unprocessable Entity - The request was well-formed but was unable to be followed due to semantic errors.
Interviews are a very flawed system for identifying skill.
I always thought a great interview would be something like "Here's a dev machine, make me an app that does this. I'll be back in an hour." (coding test), followed by a code review and "Let's go to happy hour." (personality test).
I would never want to hire or work with someone who read docs only once a day.
This is still nuts. There is literally no amount of documentation checking that is too much, as long as the guy produces results.
I'm fairly introverted and a competent developer; I've only done two interviews in my 13-year-so-far professional career writing code.
The first was for my first job after college. I only called one company in the city where I planned to move; they seemed good, so I got a job there.
The only reason for the second interview -- last year -- was because I moved to Europe, and decided after 4 years that working on the projects & jobs I could get from my contacts in the US wasn't great, so I'd have to (ugh) meet some new people.
I suspect there are plenty of competent developers who have experiences like mine. We'd rather go work with people we already know, the folks on the hiring side would rather grab someone proven, vs. (on both sides) interviewing with strangers and hoping for the best.
I don't know if it's common, but I tend to judge competence by the bottom line: does it work? is it supportable? what was the cost of getting there?
If it doesn't work, or does work but cannot be supported/modified, and cost a lot, it is a product of incompetence. Possibly the manager's, and not the tech guys.
I've never heard anyone refer to djb as incompetent. Some people dislike his coding style, but I haven't heard any criticism about it that is not about style. And yet, he's working with different constraints and experiences than everyone else. And things are often not immediately apparent.
I guess the longer I've worked with other developers, I prefer readability first, test-ability second.
What would be ideal is a system that allowed you to define advice by monkey-patching but indicated what advice was applied to a method at the site of it's definition. As mentioned in this comment http://news.ycombinator.com/item?id=3246215, I think we are bumping into a limitation of what can be easily managed in "unstructured" (I would say "dead") text files.
Yes, I think so too. There are many kinds of relations between entities that we cannot specify just because "dead" text files make them hard to express. Also, it makes that language "wars" focus on shallow concerns such as syntax, instead of semantics.
It would be great to be able to put constraints and relations at the abstract syntax tree level, or abstract semantic graph level (cross references and such that are automatically updated if entities are moved/renamed).
IDEs sort-of work around this by parsing the code and trying to bolt on features, by handing the "dead" text files intelligently. But all this work is lost as soon as you close the editor, so it does not allow the programmer to retain changes at this level.
But I'd love to work on a project that examines different, new ways to represent source code. Which could aid static/dynamic code validation, documentation, code comprehension, refactoring, cross-cutting concerns, and would allow for rendering the source code in any style and syntax that the developer wants.
Of course, this also would present challenges in the area of scm systems, because those are really focused on 'dead' text files. One idea I've had is to represent code as a graph, for example, in a graph database.
You mean like in LISP?
Alternately, you can do the the reverse - someone writes the change in the more traditional manner, but you can view - and edit - the change-set as if it were a module of monkey-patches isolating the relevant concerns. Or any particular view of the program someone can think of that's useful.
I'd like to program like that.
ETA - Sorry for the accidental downvote; found a couple of your other comments to upvote.
On the other hand I don't want to go completely bananas with the 'structureless' LISP. In my opinion at least it would aid comprehension to be mirror modern high-level languages. But you'll be able to choose Ruby or Python syntax-mode at will (or maybe even LISP-mode :-).
One common followup argument is that functional programming is great for this, because pure functions can be treated as black boxes. Sorry, but the problem is on the algorithmic/business logic level, which cannot be solved by the choice of programming language/paradigm.
Example: Remove data from one database and put it into another one, transactionally. At any point in time any other process must see the data in exactly one of the two databases. You can not merge the databases into one.
For stuff like this the absolute worst case is you update one or more legacy systems. But, that's just part of the cost / benefit / risk analysis.
I joke of course. But wouldn't you find it weird if two hundred years from now we were still writing and reading code like we are today? If that were the case, I'd say we had done a shit job of developing development.
I think that's pretty obviously a good thing since it reduces the cyclomatic complexity, coupling, amount of code, and increases reuse, although you can obviously take it a little far when you are actually using a mostly imperative paradigm.
I think this is one of the types of things that is going to (eventually someday) finally wake people up to the limitations of unstructured (although colorful) ASCII source editing.
This.
An awesome article. Inspirational in the same way as Steve Yegge's Wizard School bit (http://steve-yegge.blogspot.com/2006/07/wizard-school.html).
Not that the rest of it wasn't great. I think I like this Williams guy. If I could convince him to be a bit less dogmatic I reckon we'd get on.