There is a big set of posts about this issue lately. From Ayende‘s Can you learn to program better? and What can make a great programmer? to Phil Haack and his Better Programming By Programming Better to Jeff Atwood and his How To Become a Better Programmer by Not Programming and many others…
Well, they are all great developers and they all give us a great view for what is a great developer and how can you become one(or realize that you already are, for that matter). I like the way Jeff sums it up:
” You won’t– you cannot— become a better programmer through sheer force of programming alone. You can only complement and enhance your existing programming skills by branching out. Learn about your users. Learn about the industry. Learn about your business. “
I agree with all of them about the HUGE leap each great developer should take from being a good developer into a great developer. Not many have done it, although I believe that many more can. I’m not sure if you heard about Ron Clark, his story is an amazing demostration of true passion to bring the best out of people. Ron managed to take a bunch of kids from Harlem, those that no one believe in them, and make them one of the best classes in the US. In his first lesson, he wrote on his board: “Dream Big! Take Risks!”. He manged to direct his students with his 55 rules and teach them how to become a great human beings before everything else. It’s a story about how to get everyone around you excited, driven to extract the very best out of themselves.
In my point of view, great developers are the one that really into code because they love it and because they want to make the rest of us guys better. They possess Ron’s Passion to make everything better. The software they are building and the guys that are involved in doing it.
I tried to come up with my “rules” that helped me progress and influence others in the last 7 years:
- Be proud of your work – The most important rule I give others – Love your job, Enjoy code, Appreciate elegant solutions and let them be your inspiration.
- Be Eager to learn – In order to become one, you must learn the “55 rules”, the foundation of your progression bar. Ayende says it best:
” At any rate, what I am trying to say is that you need to act. Doesn’t matter what you do, you need to keep pushing your knowledge until extra knowledge is easy to absorb. “. Always have a list of things you would like to know. Clear some time for you in order to progress. baby steps.
- Write it all down – It will take you years to understand why X is “better” than Y. Why writing logic inside a stored procedure is not always the smartest thing(or why SP is not the best way in common\simple scenarios), why it’s important to unit-test your classes or why loose-coupling is that important. Following only ideas from others without suffering from your mistakes will keep you always a mediocre\good programmer at best. I have started my world with Data-Access-Layer written manually, then generated it and only then using some sort of ORM tool for this task. I’ve learned so much in the process that “spending” years at each phase made me understand better the way I work and the way I want to work. It was worth it. I don’t encourage repeating others mistakes, I just want you to follow your heart. There are mistakes worth repeating, if it will improve you and make you releaize things about yourself.
- Seek for better ways to solve things – In time, you’ll see a lot of recurrent patterns in your code. The way you write your application tiers, your data-access, your database, your sql, your security handling, your logging mechanism, how you integrate with other applications or how you create a solid framework. In time, you’ll see a lot of recurrent thinking you were used to. Only in time you’ll know how to solve code duplication in a proper manner, how to build a smart API and how to estimate your mission so you’ll meet the deadline without staying at work for 14 hours a day.
- Don’t be afraid to get credit for your work – remember, be proud of your work. You deserve it. Take ownership!
- Be proud of your people – Your people will make you progress or stay put. It is simple as that.
- Share your knowledge – I remember that a good friend of mine talked with me about whether is should help others at the office on the expense of his time. He felt that writing code for others will make them progress on his expense. I could relate to his thoughts, but I strongly disagree with him and that’s what I told him: Teaching others is the best way to take the next step. Make sure you educate others, it will make them easier to give you back. I believe that this ability and willingness to teach distinguish the great ones from the good ones. If you really want to progress from being a programmer to a Team Leader\Architect\Adviser\whatever, you would need your co-workers support, right?
- Find a mentor – find someone at work that will make you work harder just to so they would be proud of you. I call it the “work-daddy syndrome”. It is much easier to motivate yourself if you know that someone expect greatness of you. My parents expected that I’ll be great from the first day I could remember myself. They never pushed me too hard or made me stress. They were there for me when I needed them. Always with something good to say to calm me down. The reason I am so motivated to be the greatest programmer I can be is that I have great friends that expect it from me and I had the pleasure to work with my mentors and get their feedback to push me forward. I want to make them proud.
- Be a mentor for others – All my life I thought that I am blessed with great family, great friends and great co-workers because I manged to contribute to others. I allow myself to feel this as I know that I do my best to contribute others, to make my surrounding feel that we’re heading for a better place. That we will actually be there soon. Look hard and find someone that you can see the potential in him, and if he\she let’s you, help them to become better. There is no better feeling that getting a big Thank You. I’m hardly a religious guy, but I feel it easier to except good surprises in life due to good acts on my side. If something terrible happens, I know that I have a good place to fall into, that I’ll bounce back.
- Enjoy life, it’s yours – leave a funny comment in your code, don’t be afraid of saying geeky comments, laugh about your\others old code. Laugh as much as you can. People will follow you if you’ll know how to make them smile when things are hard. Coding can be a bitch, great programmers makes you forget it for a while.
Good luck, I know you can make it.