The Passionate Programmer I: Act On It

2014/01

Based on the highly acclaimed book The Passionate Programmer by Chad Fowler, I decided to compile a list of actions which might help others to find the passion in software engineering and ultimately might strengthen their career. This list is loosely based on the "Act On It!" paragraphs at the end of each chapter in the book and I strongly recommend reading it. After each point, you should of course reflect your current career path and how you could improve it, to bring more enjoyment in your life.

Table Of Content

Part I: Choosing Your Market

Part II: Investing In Your Product

Part III: Executing

Part IV: Marketing Not Just For Suits

Part V: Maintaining Your Edge

Choosing Your Market

Lead Or Bleed?

Map - from left to right - emerging, standard and dying technologies on a sheet of paper. Mark the technologies you are strong with, the ones you have basic knowledge of and finally the ones you have a special interest in, each in a different color.

Do your skills and interests cluster?

Supply And Demand

Search for job advertisements in your particular field of expertise and note down the most common requirements they share. I tend to do this every three months regardless of my employment status since it will help to see where you stand on the demand and supply ladder. Afterwards, rate your knowledge in these fields from 1 to 10.

Do you need to freshen up your skillset?

Coding Don't Cut It Anymore

While it would be quality time to spend lunch with a business person, most of us will not have this chance. Therefore, I suggest finding a magazine or website that covers your trade. Reading it on a daily basis, will help you a lot to understand the needs and even the emerging issues in your industry and ultimately in your company. I subscribe to iX, read Java Aktuell, Java Spektrum and Heise for example.

Be The Worst

Start working on a project where you are not the go-to person but can actually learn from others. Open source projects not only provide a safe environment to be overwhelmed but also allow you to gain experience for your future by failing. You can find interesting projects just by searching for one in your field of expertise with a search engine or use GitHub, SourceForge or Bitbucket.

After you have found an interesting project, you just look at their issue tracker. The first thing I do, is to look how many issues have been created, how they are classified and if the developers create regular fixes. Start with the trivial issues and work yourself up to the blockers. You could also write one of the core developers and ask if you can help on a specific task, even it is localization or documentation.

Another approach is to attend regional user groups for a technology you are interested in. In Germany we have a lot of different organizations, e.g. the Java User Groups or the Linux User Groups. These meetings are often organized and attended by seasoned developers which might shape your future.

Invest In Your Intelligence

It is reasonable to learn a new programming language but you should either choose a language which is in high demand and you did not mark in Supply And Demand or you should choose a language which is unlike anything you ever did.

For me it would be JavaScript and Haskell. JavaScript is very different since it is functional in nature and has prototyping. It is incredibly hard to use good and incredibly easy to use badly. It is also the most established language in frontend web development and emerging in the backend section.

Haskell has a great community and is like a playground for challenging concepts which are beyond anything any programming language has ever dared to even think of.

If you don't know Python, you could learn it in a few days since it has neat tutorials. It is also becoming the standard language in scientific computing, especially in data analysis.

Don't Listen To Your Parents

Write down your last career choices and try to find the underlying motivation for your decision.

Were they driven by emotions, instinct or reason?

Would you choose differently now?

Be A Generalist

Be generally useful, don't be Just-A-x where x is for example Java-Developer or Tester.

So how do become a generalist? You already should be. If you are easily interested in things, you just want to learn. There are several dimensions in which you can improve your general knowledge, e.g. operating systems, natural as well as programming languages or general eduction. It doesn't matter just become curious!

Be A Specialist

If your current job is focused on a single technology, you should try to become a true specialist by understanding the fundamentals. No matter which frameworks will come and go, you will always have a deep understanding of their foundations and a much easier time to understand their benefits for productivity. If you are a Java EE developer, learn about the intrinsics of the JVM.

If possible, try to help people with your knowledge. The best way to learn is to teach. If this is not possible in your job, e.g. with students, interns or new colleagues, you can always offer to hold a presentation about an interesting technology - either at a conference, local meeting or in your company, even if it is just an informal brown bag session.

Don't Put All Your Eggs In Someone Else's Basket

Try to program a game in your most productive language. Why a game you ask? Because it requires the most fundamental and also broadest knowledge.

Conway's Game Of Life is an excellent choice and you could always add some professional flavor by using Test-Driven-Development or new tools, e.g. for Continuous Integration. Afterwards, do the same in the language you choose in Invest In Your Intelligence.

Love It Or Leave It

Some jobs are inherently bad for you and can't be changed from within. However, there are personal or economic situations where a job change might not be possible and you should always have an emergency fund for at least six months. If you are ready for change, I compiled a list of questions to ask in an interview.

A bad job does not only harm your career in the long run by impeding your professional development, but can also ruin your mood which in turn will have effects on your private life and health. I strongly recommend to read The Clean Coder by Robert C. Martin, it will change the way you define professionalism in software engineering. It will also answer the question how you actually know that your job is bad and when you should leave the sinking ship.

Another way is to create an excitement log. For every workday in the next two weeks, rate your level of excitement from 1 to 10.

Do you see peaks and what are their reasons? What is your average excitement? What can you do to increase your excitement level next week?

Try to actively raise your excitement as much as possible. If you cannot change the levels no matter how hard you try, you should talk to your superior if possible or think about a way to change your current assignment or even the job.

Investing In Your Product

Learn To Fish

Do you use a specific technology on a daily basis which you don't really know about? Learn how to use it and understand it. Pick an often neglected tool, e.g. the version control system, and learn the intrinsics. Become the go-to-person for this tool.

Why is it particular useful for your current project and are there alternatives?

Learn How Businesses Really Work

Reading a dedicated business book might help to understand the decisions of your company and also might help you to evaluate your own position and possibilities. I recommend either The Personal MBA or The Ten-Day MBA. Try to talk about it with your managers or superiors and apply it to your current situation.

Find A Mentor

Did you ever encounter a person in your line of work that you admired?

Write down the attributes and characteristics of this person and rate their importance from 1 to 10. Afterwards, rate your own expertise in these abilities and subtract your rating from the importance rating. You will be left with a priority list, e.g. you admire the technological breadth of your role model and find it quite important so you assigned an 8. You think that you are not as versed in different technical disciplines and rate yourself at a 4. Basically, this sets you up with a below-medium priority of 4 for strengthening your knowledge in other technologies. You can then come up with a list of ideas to improve these abilities and try to emulate your role model.

Also, you should always try to stick around these people, as they will help you to develop and you will generally have a good time.

Be A Mentor

Try to help people. Whether it is a new colleague or an unknown person in an online forum. Just keep an eye open and you will always find someone asking for help. It is an art to offer help without appearing to be condescending.

Practice, Practice, Practice

Some people like to do code kata and others use Code Chef or something similar. I wholeheartedly recommend Project Euler. It may be too much for you right now and I think that you can get enough practice by volunteering in open source projects and generally helping others. But you should always diversify your practice projects, i.e. if you work on a web application, you should try some game development.

The Way You Do it

Pick a software methodology and learn about it. I like agile methods, but you should never become a zealot and question their usefulness and implementation.

Why and when is this particular methodology useful? Could your daily work profit from it?

On The Shoulder Of Giants

Pick a project, maybe an open source project that you like to work on, and read it from top to bottom. Make notes about the good and the bad things. Try to understand the decisions and thoughts behind in critical code block.

Automate Yourself Into A Job

Pick a menial task you do often and automate it.

The Passionate Programmer suggests that you take a look at model-driven architecture.

Executing

Right Now

We all have half-finished projects and things we always wanted to do - like writing a blog. Pick one and work out a schedule for completion and then work on it with a determination to finish it as soon and as good as possible. Don't try to be perfect, just give it your best and be sure to finish even it is a first draft.

Mind Reader

Try to come up with a few features for your current or next project which have not yet been discussed and which you think will become relevant. Try to think about the implementation costs and maybe even prototype it.

Daily Hit

Write down the little annoyances which you are facing daily and start solving them one each day starting tomorrow.

Remember Who You Work For

Talk to your manager and ask him about the team's goals.

What are the immediate goals you need to achieve this week?

What are the long-range goals?

Prioritize your tasks accordingly.

Be Where You're At

Recapitulate and ask yourself what you did accomplish in your current job.

What do you want to accomplish from here on and how long will it take?

Work actively to "complete your job".

How Good A Job Can I Do Today?

Some tasks we do are boring and after a few years they rob us of our motivation. Maybe you can bring back motivation by creating a competition. You could compete with your colleagues or with yourself. Find metrics like unit tests and try to increase your performance and maybe give yourself a little price at the end.

How Much Are You Worth?

Think about your current salary and double it, this is roughly how much you cost the company.

Are you currently worth the investment?

A Pebble In A Bucket Of Water

Make your team less dependent on you whether it be the code or documentation. Make documents easily accessible in a way that if you left tomorrow, your team could continue.

Learn To Love Maintenance

If you maintain software and/or work with legacy code, create quality measurements like the number of unhandled exceptions, responsiveness times or the usability. Improve these factors and measure again. Can you actually improve the old system without breaking it?

Eight-Hour Burn

Set an exact time to start and finish your eight hour work day. Plan as much as possible, beginning with the breakfast, lunch time and ending with your commute home. Work in these eight hours, no reading news, just work until you are done. Then go home and do not take work home with you, no e-mails, nothing!

Learn How To Fail

If an issue occurs, you should behave according to these four steps:

  1. Raise the issue as early as you know about it
  2. Take the blame if necessary to move on
  3. Offer a solution
  4. Ask for help if necessary

Say "No"

Do not make commitments you can't keep. Either just say "no" or provide a good estimate. As soon as an issue arises that endangers your commitment, you should inform every participant.

Keep a list of every commitment you make:

Evaluate your hit rate.

Don't Panic

If you care about your job, it is inevitable that you will panic at times. Keep note of these situations and record why you panicked. At the end of the week, you should review your records and think about how it went and if the emotional stress was really worth it.

Say It, Do It, Show It

Create a plan for the next day containing items you want to do. You will sometimes overcommit and not finish your list but you just can transfer the undone items to the next day. After you completed a week, you should communicate your task list to your superior.

Marketing Not Just For Suits

Perceptions, Perschmeptions

Make a list of the groups of people in your office and what they perceive as important, e.g.:

Teammates - programming skills, social skills Secretaries - social skills

How do you interact with the members of these groups, do they perceive you in a good way or do you need to adjust your interactions with them?

Adventure Tour Guide

Take a look at your conversations with people that are not as well versed in the technical aspects as you are and ask yourself what they might have perceived. Did you get arrogant or aggressive? Did you make your position clear in a manner they could understand? Think about what it would be like in a position where you are not the expert and need help from specialists.

Me Rite Reel Nice

You should always keep your writing clean and concise. Clean means that you check for spelling and grammatical errors. Due to the nature of our work, many things are done by e-mail which increases the status of writing and becomes as important as your general attire in a face-to-face conversation.

Maybe start writing a diary or a blog. Reading literature also improves your language skills and is a good way to disconnect from work and especially technology. The top 200 most popular books of Reddit is a good place to start.

Being Present

Make yourself known by showing presence. Don't write an e-mail but phone the person or visit him in his office. Try to make human connections with your coworkers by doing smalltalk. The most important place is often next to the coffee machine.

Suit Speak

What did you accomplish and what was its business value? What do you currently work and what is the benefit?

Change The World

Do you know someone who has a mission at your office, maybe someone who is a defender of agile methods or particular engaged in a local user group? How do they behave and when do they misstep?

By now you should know a lot of technologies and methodologies. If there is one among them which you think might improve your business, you should make it your mission to advertise for it.

Let Your Voice Be Heard

Create a weblog and write articles. Focus on a specific range of topics that are connected.

If you accumulated a list of articles, you should contact relevant magazines and offer to write for them.

Build Your Brand

Google yourself and look at the first page results. Do you appear? If you do, are the appearances positive?

Release Your Code

By now you should be involved in an open source project. You should use a code coverage analyzer and find the parts of the code that are not unit tested. Are they testable? If yes, refactor - else write unit tests and commit the patch.

Remarkability

Do something remarkable on your current project. Maybe you can implement a feature as suggested in Mind Reader or you could finish a task much earlier - even it means extra hours.

Making The Hang

Get in contact with the creator of an important piece of software, thank him and maybe offer him some help. You could write an article in your blog about the software which will make introductions easier.

Maintaining Your Edge

Already Obsolete

What are the latest technologies and trends? Research them, get a grip of them and do some tutorials. It could be a languages like Rust, Dart or Julia, technologies or concepts - just go for the bleeding edge.

You've Already Lost Your Job

Do a bit of roleplay and change your job for a day by pretending to be a tester or project manager.

Path With No Destination

Focus on a menial task like washing dishes. Don't rush it, but experience the moment - be mindful.

Make Yourself A Map

Make a map of your career history. Where did you start and which technologies were involved. This should help you to perceive the correct dimensions for further career development.

Watch The Market

If you found a bleeding edge technology, try to become an alpha geek and if you have the chance, surround yourself with people that don't stand still.

That Fat Man In The Mirror

Get some honest feedback about yourself from colleagues, customers, peers or managers.

Create a questionnaire containing the characteristics which you value as essential to professionalism and let your reviewers rate you. Maybe you can think of additional questions that you could ask?

Evaluate and share the answers with your reviewers.

The South Indian Monkey Trap

Review your values which you hold dearly. Are you right to do so or are you just rigid? Did you become an evangelist for a certain kind of technology or methodology?

If you must answer one of these questions with yes, you should let go for some time and experience something new. Pick a technology you hate and do a project in it.

Avoid Waterfall Career Planning

What do you want, really want? Do you want to be a CEO? A project leader or lead developer? Maybe you just want to hop from one start up to the next which is fine too but think about the consequences. Is it money you want? Fame? Or do you want to balance work/life? Are you currently working on the wrong issues to fulfill this ambition?

Better Than Yesterday

Make a list of complex improvements. How can you do something today to get closer? Even if it is a tiny step like running a single lap more or writing one unit test more. Do it, today.

Go Independent

Ultimately, you should know what you want. There are three big choices:

  1. Work in a large corporation in which you have a certain kind of safety net that is likely to make you lethargic and complecent
  2. Work in a start-up and get your pay checks with a relative direct kind of feedback and responsibility but also with a certain kind of risk
  3. Go independent and accept the possibility of failing at the cost of an immense rate of learning

Have fun.