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

The title made me think about what my answer would be. If there's one thing a programmer should know, what is it? What is the most important thing I didn't understand about programming when I started doing it?

My answer would be: that code should be seen not as a static thing, like the answer to a math problem, but as an evolving effort to figure out the right question to be the answer to; and that it should thus be written to be easy to change.



Coming up with "The" one thing a programmer should know seems too narrow a question. Kind of like "What is your favorite song?" instead of "What are some of your favorite songs?" A more interesting question might be "What things would you emphasize to someone learning to program?" Flexibility? Precision? My answer:

Every programmer should

1. Learn C / Assembly - Understand how code interacts with hardware.

2. Learn Lisp - Understand how ideas interact with code (and vice versa).

3. Learn "O" notation - Understand algorithm complexity.

4. Be clean and flexible.


5. Write unit tests.

6. Refactor mercilessly.


7. sleep

8. goto 1


code should be [...] an evolving effort to figure out the right question to be the answer to

Interesting change of perspective. Could you expound - do you mean this in terms of product design?


No, not just product design. Practically all programs are best seen as explorations.


In an industrial design class I took this sort of methodology was heavily stressed using words like "divergent thinking" and "no-worry prototypes".

Generally, I believe that the super-specializing niche engineering that's popular today is best served by broadening your base rather than sharpening your technical skills to stand out in a field of pins.

I.e. marketing, ID design attitudes, learning to paint.


Your answer is a better one for software engineers, Atwood's is the better one for software entrepreneurs.


Isn't looking for the one thing an instance of the same problem?




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

Search: