The HappyCoders Manifesto:
A Happy Coder follows his passion, is interested in others' needs, and is a lifelong learner.
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:
Do what you enjoy
Follow your passion!
A career as a programmer does not necessarily have to lead to management.
what people need
Always look beyond what people say they want. Find out what they need and deliver it to them in top quality!
Invest in your skills
Study all your life.
Know your programming language,
your IDE, tools and frameworks,
algorithms and data structures,
patterns and principles.
These three principles underlie everything I do and every decision I have to make, both professionally and privately.
Follow Your Passion!
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.
We Love Programming and Complex Problem Solving
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.
Career Does Not Have to Mean Management
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.
Career Opportunities Outside Company Structures
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".
Find Out What People Need
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!
Find Out What Your Employer Needs
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.
Deliver on Your Promises, and Deliver High Quality
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:
- Performance of code regions that are rarely executed
- Code that the HotSpot compiler can optimize better
- Use of the Strategy Pattern when there is only one strategy
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.
Communicate With Everyone at Eye Level
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 the topics of 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!
Invest in Your Skills
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.
Be a Livelong Learner
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.
Know the Basics of Your Craft, Specialize in a Few Key Areas
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:
- Algorithms and data structures
- Relational database systems (keyword: ACID)
- Version control management
- Design Patterns
- Development methodologies (e.g., Scrum)
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:
- A concrete NoSQL system
- A specific Java enterprise framework, such as Spring or Jakarta EE
- Advanced Java topics, such as Concurrency, Garbage Collection, Memory Management, Reflection
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 Your Education
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!
(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:
- Follow your passion, many programmers have a successful career outside of management.
- Meet all people at eye level. Listen beyond what they say and always be interested in what they really need. Deliver it to them in excellent quality.
- Invest in your future: Learn all your life. Know your craft and its fundamentals in its entirety, and specialize in a few advanced topics.
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.