Every once in a while I get an email like this:

Sir, I am a beginner to python and programming. I started with the C++

and found it hard so one day via google I found your perfect tutorial

“A byte of Python”. I read the whole tutorial in one day because it is

so interesting and helpful. Sir, I have created the script to backup

files from directory as you mentioned. Please see the script once and

tell me if I have chances in programming career. Sir I am final B.tech

student and I love programming. But I was rejected by every company

during campus placement because of my poor communication skills and

due to this my confidence level is very low. Sir I have also created a

web based application using PHP, MySQL and Kannel on Debian based

server for intra-college communication. Sir, I am regular reader of

your blog and I respect what you are doing to help freshers like me.

Sir I would like to know if you have any advice for me.

And like this:

I want to thank you about this great book ;-). I am a 20-years-old

student in computer science from Bulgaria and i found this book very

interesting and helpful. I’ve been programming in python for half a

month. I had little experience in C from the university and I wanted

to learn a high level language with simple syntax like Python and then

learn C++ and start writing useful programs. I send you a solution of

the problem in the end of the book that is just a demo version. Can

you give me a hint what i got to improve to make the address book

program better and give me the source code of your solution? I really

want to become a programmer so any advices especially from a man with

your knowledge would be highly appreciated! Thanks.

For a long time, I used to scratch my head for every such email because I really didn’t know what advice I have to offer. I did end up writing How Fresh Graduates Can Grow which a lot of students have liked.

In the past couple of years, I have started replying with just one line – I ask them to read The Passionate Programmer: Creating a Remarkable Career in Software Development by Chad Fowler. I happily  recommend this book knowing that if they actually do read and apply the principles in this book, they can’t go wrong.

I had read this book in its first edition when it was called My Job Went to India and I read it again when the renamed second edition came out.

The title of the book is self-explanatory but what makes the book special from other regular career books is that it is geared specifically to the art of software programming as well as explaining networking and many soft concepts/human aspects in a for-geeks “53 recipes” style.

Some of my favorite recipes/lessons are:

4. Be the worst

Legendary jazz guitarist Pat Metheny has a stock piece of advice for young musicians, which is “Always be the worst guy in every band you’re in.” Being the worst guy in the band means always playing with people who are better than you.

Being the worst guy/gal on the team has the same effect as being the worst guy in the band. You find that you’re unexplainably smarter. You even speak and write more intelligently. Your code and designs get more elegant, and you find that you’re able to solve hard problems with increasingly creative solutions.

6. Don’t listen to your parents

I remember talking to a friend about potentially moving out of this

company, and he said, “Is it your destiny to work at $big

company for

the rest of your life?”

Hell no it wasn’t!_ So, I quickly found

another job and left.

This movement marked the clear beginning of a nonlinear jump in my

success in the software industry. I saw new domains, I worked on

harder problems, and I was rewarded more heavily than ever before. It

was scary at times, but when I decided to be less fear-driven and

conservative in my career choice, the shape and tone of my career – my

life – changed for the better.

15. Practice, practice, practice

When you practice music, it

shouldn’t

sound good. If you always

sound good during practice sessions, it means you’re not stretching

your limits. That’s what practice is for. The same is true in sports.

Athletes push themselves to the limit during workouts so they can

expand

those limits for real performances. They let the ugliness

happen behind closed doors – not when they’re actually working.

Our industry tends to practice on the job. Can you imagine a

professional musician getting onstage and replicating the gibberish

from my university’s practice rooms? It wouldn’t be tolerated.

Musicians are paid to

perform

in public – not to practice. As an

industry, we need to make time for practice.

Practicing may include learning more about your programming

environment (APIs, libraries, methodologies, etc.), sight reading

(reading new pieces of open source code to improve your ability to

read and understand code), improvisation (introduce new constraints in

small projects to improve your thinking abilities) and so on. [paraphrased]

32. Say it, Do it, Show it

You should start communicating your plans to your management. The best

time to start communicating the plans is after you have executed at

least one cycle of the plan. And – this is an important point – start

doing it before they ask you to do it. No manager in his or her right

mind would be unhappy to receive a

succinct

weekly e-mail from an

employee stating what was accomplished in the past week and what they

plan to do in the next. Receiving this kind of regular message

unsolicited is a manager’s dream.