The HappyCoders Manifesto:
How did I manage to go from being the weird nerd with almost no friends ... from the last one picked on the team in gym class ... from the kid who preferred to play with Rubik's Cube instead with others on the street, to a successful and well-booked programmer and to a happy husband and father of three children?
After eleven years as a hobby programmer, five years as a computer science student and 21 years as a full-time programmer and entrepreneur, I believe that the following three principles make up the most successful of our profession:
Principle 1
If you are a programmer with heart and soul, then follow your passion. A career as a programmer does not necessarily mean a promotion to management. There are many career opportunities outside of corporate structures.
Programming is not just a job, it is our calling, our passion.
Do the things you're talented for and love. Stay true to your path. If not already done, turn your hobby into your profession.
Success will prove you right. And success will strengthen your self-confidence.
If you do not like what you do, do something else. If you don't like your job, find another one. We programmers have the rare luck to be able to choose the job we want.
Do what you enjoy! If your passion is programming, don't get made a project owner, scrum master, or team leader (unless you want to).
Don't let yourself be convinced that a career as a programmer must necessarily lead to management. You can also make a career, become successful, and earn a six-figure income as a programmer.
Companies pay daily rates of several thousand euros for experts who cover a specific field in its entire depth. For example, who understand why an application still works for thousands of users, but no longer works for a million (keyword: concurrency).
Or who can find out from a Java Garbage Collector log why the application slows down over time or even stops responding, and can solve problems in a few days for which in-house teams need weeks or months.
You can also grow outside of corporate structures: Become a speaker at conferences, become a committer or maintainer of an open-source project, or develop and market your own product.
Don't be afraid – you can always start small.
You can hold talks in your team or your local JUG. Or on YouTube, where you can record every scene until you're satisfied.
Think about this: Would you be nervous if you had to explain to someone how a loop works? Or what exactly the code you just wrote does? Probably not too much, because you would know precisely what you are talking about. If you want to give a presentation, talk about a topic that you know very well. This not only makes it easier for you, but it also makes you more authentic!
Check out the TED talk "How Great Leaders Inspire Action" by Simon Sinek. Inspiring, isn't it? Then try to find your own "Why". For example, using the book "Find Your Why: A Practical Guide for Discovering Purpose for You and Your Team".
Principle 2
Try to understand the people around you – clients, employers, supervisors, colleagues, people you lead. Try to find out what they need. It's not always what they want. And then deliver it to them in top quality!
Clients (both internal and external) often are not from the IT world, and they do not speak our language. As they do not know what is technically possible and how complex various solutions are, they find it difficult to express their needs.
What they need – what creates value for them – is not always what they say they want.
That is why we have to help them find out what they need.
Learn their language, and don't try to impress them with technical lingo. Try to understand the business view and the background behind their requirements. Often, we developers come up with solutions that the client doesn't think of.
Don't try to impose your own agenda. You won't create any value for your client or employer if you use the hippest frontend framework, the latest NoSQL technology that only you know about – if WordPress and MySQL would have done the job, too.
Impress your employers and clients with real achievements.
Provide them with excellent quality products, i.e., stable, high-performing, scalable, secure, readable, and maintainable software. This also applies to MVPs, by the way.
But always find a balance to the effort – do not optimize too early, neither the performance nor the architecture. Premature optimization often optimizes the wrong things:
Be thorough and analyze problems as deeply as necessary to solve them.
Pay attention to the details, and always think of the edge cases.
Test your code! Don't see it as someone else's job to find your bugs. And don't think that you don't make mistakes. We all make mistakes.
What applies to your clients also applies to colleagues, friends, and family. Talk to everyone at eye level. Don't annoy them with technical language.
Even your programmer colleagues probably don't know exactly the same technologies as you. Not everyone needs to know the details of the blockchain, be an expert in the frontend framework of the year, or know what a Jupyter notebook is.
Don't use new technologies just because they are hip. Be a team player, decide together which tools, frameworks, and libraries you use. Respect the decisions of your team.
Do not shoot at sparrows with cannons. Do not jump on every hype. Not every problem has to be solved with blockchain, reactive programming, or artificial intelligence.
Stay yourself, and stay humble. Unless you are in the demoscene ;-)
Have a look at my book recommendations on personal development and entrepreneurship. For example, "How to Win Friends and Influence People", "The Lean Startup" and "Nail It Then Scale It". Even if you do not (yet) want to become an entrepreneur yourself. It helps a lot to start thinking like one!
Principle 3
Nothing in our knowledge society is as essential as education. Invest in training all your life. Your education is the capital that nobody can ever take away from you.
Always stay curious and open to new things.
As in hardly any other profession, we have to learn all our life.
Learn proactively! Set aside a daily block of time to learn something: at least half an hour, better an hour or more. Read professional journals, books, blogs, take courses.
Don't just read passively, but apply actively what you learn. If you read articles about new features in your programming language, type in the listings instead of downloading them from GitHub. Come up with your own examples. Or present what you've learned in a brown bag meeting to your team. It's the only way to really, deeply understand what you've read.
Learning can be combined well with physical activities. I listen to audiobooks while jogging and in the gym (you can find suitable audiobooks in my book recommendations), and I read technical journals and blogs on the tram on my way to work.
Many believe that programming is an art. I agree with that. But even artists need to know their craft. That's why nothing beats a solid computer science education, in which a broad basic knowledge is taught.
Every programmer should know at least one programming language and the ecosystem around it very well and at least the following fundamentals:
You should also be very proficient with at least one IDE and the tools you use every day, such as Git, Maven, and static code analysis tools such as Checkstyle.
Study principles like Clean Code and Test-Driven Development.
You don't have to be an expert on everything. As your career progresses, specialize in those areas that you enjoy most. Here are a few examples:
And do not lose sight of the bigger picture! Always keep an overview of what is happening around your specialties. Also, know other NoSQL systems and their differences to your favorite. If you are a Spring expert, keep up to date with Jakarta EE development (and vice versa).
Invest in yourself, your education, your future – not only time but also money.
Consider offers with costs, e.g., participate in courses. I can recommend both online and classroom courses.
The advantage of online courses is that you can choose your own speed and that they are often more affordable than classroom courses.
Classroom courses have the advantage that you can get out of your daily programming routine and focus on learning for up to several days.
You have the responsibility for your future. Don't put it off on your employer. If they provide you with training courses, that is very good. If not, then do them anyway – even at your own expense!
Since I don't have any courses of my own to offer, I recommend the advanced Java courses by Heinz Kabutz, author of the famous JavaSpecialists newsletter.
(I do not get any commission for this recommendation. I recommend the courses because I have worked through all of them intensively myself, and I have learned very, very much).
Here is a summary of the three principles:
I have let myself be guided by these principles over the last decades. I am convinced that I owe my success to these principles and that they can also help you to succeed. I wish you to be a happy coder, too.