Hacker News new | comments | ask | show | jobs | submit login

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?

Applications are open for YC Summer 2019

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