Architect, engineer and such titles are borrowed from other disciplines where they require half a dozen years of certified training. This does not apply to software development. Developers rarely know the full picture when starting as tools, techniques and requirements change rapidly. A developer is more akin to a city planner, "x goes around here", "y goes somewhere in the future".
Every measure of a good developer is qualitative. That makes them all subjective. But there are four basic traits that most promising programmers have in common.
- Wants to know about the development process as a whole.
- Wants to know what makes projects fail or succeed.
- Wants to understand the business problem you are working on.
- Experiments with new techniques and unfamiliar languages.
- Is not negative about unknown approaches.
- Incurious people learn less new things and fall behind more easily.
2. Likes Challenges:
- Understands that programming is fundamentally problem solving.
- Automates everything that cannot be seen as challenging.
- Identifies and removes too strict assumptions, opening new paths for the product.
- When programmer avoids challenges, he will develop more slowly and will not come up with anything unique.
3. Critical Thinker:
- Admits his mistakes.
- Can analyze and plan ahead. What is the goal and how to get to it.
- Is honest and does not just tell what management wants to hear. Programmers are not there for emotional support or excuses, you should be providing solutions.
- When programmer does not think critically, he is not living up to his full potential.
4. Team Player:
- Can communicate development concepts to other programmers.
- Can make decisions without first checking everything from the higher ups.
- Does not shut down when co-worker says hello.
- Does not get offended when co-worker does not want to small talk.
- When programmer cannot work in a team, he can only achieve greatness alone which greatly limits what he can accomplish.
Developers should not rely only on their work for personal growth. Your daily job will stop giving you new insights to programming except basic problem domain and environment specific experience.
For self-improvement, a programmer should:
- Read at least two programming related books each year.
- Read programming related news and blogs at least twice a week.
- Learn at least one new programming language or framework each year.
- Build at least one side project each year.
- Visit a few conferences or meetups each year.
- Change team every two years, possibly inside the same company.
- Read and understand a lot of code to learn new ways to do things.
There is no need to start happiness after 20 years. You should be happy right now.
Avoid setting specific career goals. Just do your job as well as you can and you will succeed. If you still keep losing motivation, change your role or the whole company. Never stay in a company which denies your happiness.
Salary is mainly based on supply and demand. But there are multiple additional factors that affect our salary that have nothing to do with programming skill:
- Public image e.g. book author, blog writer, public speaker. Being featured in famous blogs, publishing e-books and getting involved in online communities are good ways to start
- Negotiation skills e.g. courage to ask for more, if you cannot get more money, demand more vacations.
- Market knowledge, you should know average programmer salary in your region.
- Self-promotion, you can prove that you know your stuff. You can try to call yourself something more specific than just 'programmer'.
- Consulting differential, consultants can ask for more because e.g. the company they work with does not add any value to develop the consultant and do not have to pay for consultants insurance.
- Business model type, companies that use software to generate money pay more, companies that use software to reduce costs pay less.
- Rare skill may give a bigger salary in the right company. You should decide what parts of your knowledge you promote, you cannot emphasis everything.
- Long commitment, longer you stay in a company, more money you will be paid. I personally think this is not good but it is generally in use.
Some developers settle for less money because of the personal value they get:
- Equality in the company
- Experience to work in a particular company
- Amount of paid time-off
In addition to general work motivation, developers can be seen having three major sources of motivation.
- Business Motivation: Wants to get the product done and generate value for the customer. They get the solution done.
- Technology Motivation: Wants to learn and use all the new technologies that are released. They know the most optimal way to implement the solution.
- Problem Motivation: Wants to come up with an elegant or clever solutions. They solve the hardest problems.
When developers are not motivated because of any of the previous three, they are usually crappy developers.
Your best bet is to have at least three developers per team; one business motivated, one technology motivated and one problem motivated.