Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Here's my version of his opinions, probably even more controversial :P.

CS should be offered as a major by itself. All the most interesting stuff is CS-specific with indirect applications. Working on something like automatic programming is far more exciting than working on biology or art or what have you. (I can't think of anything more awesome or more CS-only than automatic programming.)

It is a mistake to introduce programmers to OOP.

A complex compiler is awesome. A sufficiently smart compiler may be a myth, but it is a utopian myth; we should strive for it. However, I would take it even further: program synthesis is better still. I'm in the business of telling the computer what to do, not how to do it, so there should be no obvious but unnecessary correspondence between what I write and what the computer executes--they just have to have the same semantics.

You shouldn't be allowed to write a library unless you have a thorough understanding of programming languages and some relevant math. There is always relevant math. Your functions should be accompanied by useful and verifiable laws others can depend on. Or maybe everyone should be encouraged to write libraries regardless of skill level and then the libraries could be ranked a posteriori. Any other guidelines make less sense.

Pretty code is readable and readable code is pretty. If you can render your code as a nice pdf and distribute it as a paper, it's about as readable as it will ever be. Even if you can't, remember that aesthetics aren't random--there is a reason why pretty code is pretty.

Purely functional programming is a straw man. Even Haskell lets you write code that at least acts impure. Haskell is a local maximum. On the other hand: a purely functional spec that the computer uses to generate a potentially impure program should work. But I've already talked about that :P.

I don't know what a "software engineering mindeset" is. It sounds like something a manager would say. Don't do stuff a manager would say. This is unfair to good managers but still a useful guideline. Have as much fun as you can unless people's lives are on the line.

I should note that I don't even think all these opinions are true. But a belief does not have to be true to be useful. If I could boil it down to a single sentence, it would probably be: math and CS theory aren't scary and you should reject conventional "wisdom". But that would be somewhat cheap--two independent and rather unrelated clauses joined with "and" may as well be two sentences :P.

Also, there's something very appealing about throwing out intentionally extreme opinions. I can certainly see why this guy keeps on writing his blog.



Pretty code is readable and readable code is pretty. If you can render your code as a nice pdf and distribute it as a paper, it's about as readable as it will ever be. Even if you can't, remember that aesthetics aren't random--there is a reason why pretty code is pretty.

I'll restate this: "Every programmer should know more than a little bit about typography". I was amazed at how much learning design fundamentals improved me as a programmer. I've learned to communicate through code much more effectively than I ever had before. Thinking about grouping, spacing, and the like leads not only to more readable ("pretty") code but usually more efficient code as well.


Can you suggest any books?


I recommend "The Elements of Typographic Style" by Robert Bringhurst.


I wouldn't be so quick to throw away the "software engineering mindset" quite so quickly. Part of an engineering mindset is roughly "I am prepared to stand up in court and defend all the choices I made designing this product to a jury of my peers". If we can get to that point, where there is a set of guidelines so clear, and so universally accepted, that you could get 12 arbitrary software developers to uniformly agree that the designer chose well in following them, and we could actually use them to do useful design work, that would be such a huge step forward that the profession would change unrecognisably.

We're not there yet.


Not sure how you can love automatic programming but dismiss biology. Humans are an operating system that is not only time dependent, but spatial and gradient dependent self mutating automatic programming with asynchronous message passing that is also time/spatial/gradient dependent.

Oh yea, and inserting breakpoints and print statements not only take months, but also change your code in a case-by-case fashion.

It's like reverse engineering for masochists.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: