Advice for a Junior Software Developer

You just started as a professional programmer and you want some guidance? Here is mine based on a Hacker News thread.

First, don't follow your passion. Passion will come if your work is meaningful, you are competent and you get respected for it. Or as Daniel Pink described it: Autonomy, mastery, and purpose combines to intrinsic motivation. So work on your competency and never stop learning. If the environment will never respect you no matter how competent you are, then seriously consider to leave.

How do you improve your competency? Do not just fix symptoms but fix the root problem. At least try to because inevitably there will be deadlines. A certain stubborness is a great trait for programmers. All software problems can be solved if you work on it long enough. Do not give up just because StackOverflow does not have the answer. Read the error messages. Read the documentation. Read the source code.


Sit together with experienced developers. Watch how they use their tools. This is the quickest way to learn the little tricks, shortcuts, and hacks which are relevant for your particular job. For example, if you would sit next to me, you would see me use all kinds of git aliases.

Participate in discussions instead of just listening. If you say something wrong, then you learned something at least. It is fine to be an introvert but it is negligent to not learn some extrovert skills.

Once your competency increases, you start to see errors being made everywhere. Never assume anybody is stupid. Instead, figure out how these intelligent, well-intentioned and experienced people have come to a decision which is stupid now. On the other hand, everybody is fallible and sometimes makes a stupid error. That especially includes "you three months ago". Asking for more discipline is mostly useless, instead we develop systems (type system, code review, continuous integration) to find errors as soon as possible.

Often stupid technical decisions are made because of business factors. Learn about the business side of your company. It helps tremendously if you understand how management/sales/marketing think. Eventually everything you do as a professional has to deliver value to some stakeholder. If you understand the relation of specific tasks to the ultimate business goals, it enables you to confidently say "no". Urgency and importance are two different things. Know the difference.

Another things which you should be able to say is "I don't know". Software development usually happens at the edge of complexity humans can handle and nobody understands the whole system anyways. So probably nobody expects you to know everything. Ok, sometimes you should know something but you don't and they just found out. In this case the professional way to handle it is: "but I will find out until X and come back to you".

A really good question to ask for a task is "How do you know you are done?" It might prompt you to clarify requirements. It might prompt you to make things more measurable or testable. It makes you think about implicit things like following code guidelines. It makes you better at estimating time. It makes you write better feature requests.

To finish this, ponder what software engineering actually means.

Photo by Mimi Thian on Unsplash.

Random wise words like "Never assume anybody is stupid".