I have been thinking about this for about three months now. One of the major problems in software industry these days is to find good programmers. (retention comes after hiring 😉 It’s easy to find people, but extremely difficult to find good people. It becomes important then, to groom candidates to become better programmers.
So how to transform someone into a good programmer? Do you want to be a good / better programmer?
I take a session about being a good programmer as part of our induction training. I am thinking there should be something more concrete on the subject. Paul Graham’s Great Hackers is a wonderful piece and so are the Pragmatic Programmer and Mythical Man Month – (and the whole pragmatic series actually.) But can we come up with something that can bring out transformational results?
Thinking…
Windows programmers are Good? or Linux* programmers or Mac (I haven’t seen any in India yet!)?
🙂
Good programmers are trained in childhood. Programming is an attitude to life, and a way of thinking. The very talent that our school system sets out to destroy.
The question I am trying to answer is how can we train programmers after they are out of college. I agree that the seeds of good programmers are in the childhood – but how can we get that in youth?
The answer would be to train people. And then the next question is what kind of training. Something that can shake people enough to consider new ways of thinking and something that will inspire them enough to continue practicing that.
🙂 i m not exactly programmer so, perhaps i shouldn’t be advising you. But, i do work for a company and perhaps my views help you. apart from this, here’s an article i found on the net.
http://www.joelonsoftware.com/articles/FieldGuidetoDevelopers.html
now my views.
first off, secure them. while doing something or solving something, they shouldn’t be worried for anything. I mean ANYTHING!. this anything includes money, position future etc. etc.
Secondly, treat em like stars. have faith in them. let them know u have faith in them and then Challenge them and they will try their level best.
Reward them. not with money, but acknowledging with their colleagues (praise is what, almost all the human being crave for. its not only the money).
Reading your blog, i don’t think you are lacking in any of above topics. but, i just wished to point out this facts. As for the logic and all, may be some good programmer could help.
i agree with wht bliss told about programming being a non programmer…ones mind should be free from worries and other thoughts…then only one can concentrate on the thinking …secondly one should have the love towards solving problems logically..one should enjoy doing programming or thinking logically….
Having no other worries and concentration are good. But that’s just one thing. I believe the internal drive of a good programmer is too strong and can go through adverse conditions.
I am thinking about that drive. That love of solving problems.
How to generate / groom / grow it!
“The answer would be to train people. And then the next question is what kind of training. Something that can shake people enough to consider new ways of thinking and something that will inspire them enough to continue practicing that.”
My first reaction was to give you a link to read up: http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html
But that won’t work. It’s for nurturing those who are already good for the task.
Here is what you can do: pair the new ones with good ones. The keys to the pairing are:
1. Hire the new ones who can learn by themselves. Bring in extremely sharp people. Any mediocre, and it’s going to frustate the good programmer.
2. Make sure your good programmers have an incentive to mentor the new ones. One good incentive is — if they teach a part of what they typically do to the new guy, they can offload the responsibility off their shoulders and enjoy some free time for a while for their own research. Benefit – the new guy learns fast; the good guy makes sure the new guy becomes as good as him.
3. Make sure your only try this with good programmers who are also excellent time managers. If they can’t manage their time before this, they won’t be able to do that with the new guy, leaving all the parties in the game frustated.
“I am thinking about that drive. That love of solving problems.
How to generate / groom / grow it!”
Disclaimer: Given my affinity for coding contests, I’m biased for this approach.
How about organizing programming contests at office?
And no, don’t give them assignments to implement well-known algorithms.
Give your (relatively) newer staff a week to implement a tool that can save your developers some time. What kind of tool? Let them decide (or you can give them a direction, but not more than that).
After one week, ask them to demo what they coded, and award for the most creative solutions, the most cleverly coded ones, and the most time-saver products.
Everyone wins – you get new tools, they get new enthusiasm to think creatively to solve real problems.
Slowly, evolve this into solving real product problems.
Keep the suggestions flowing! We are following most of these practices already, but I would love to know what others do as well!
🙂
I keep of thinking how do I make a strong soccer team (ofcourse make some money over them)- whats it that makes winners – is it just training or is it ones ability to shoot goals or naturally born stamina or is it incentives….
I was reading Steve Jobs and his company Apple, he could make this computer and GUI (before anybody) with people who were History, Arts and Lingusitic students. They weren,t programmers from childhood but these were the guys ready to work late nights, hippies, sleep under their desks and few in to drugs also and rest altruists. But they all lived with dream and a paasion to do superior work.
if as a leader one aims at making innovative products his team should first be able align with this vision:
1. I am sure you wont find them in graduated students who start of writing their GRE/TOEFL/CAT. We are guys who can be good employees, cut copy and paste guys and look for better paychecks at the end of month.
2. Your kind of guys do not care for education/information but knowledge. For them Degree’s are ornamental and if we inspire them of glory, they probably could goto any extent. They do not fear shifting their core areas most of them laterally talented. Unfortunately you will find less of them in our country but you surely can find them. Catch them when they are young 18 – 23 and see that they grow (economically and rewards wise) with you. I have personnaly seen and experienced a couple of Non-engineering guys (one of them used to run a Cybercafe and of my age)much more innovative but untapped. These are the best ages for research.
As the head of group, we should be a marketing genius focussing on creating products that market wants. Its waste of energies if we technically superior work and mark doesnt want it.
Note: many parents do consider it waste of time and future and you could be facing their wrath, so create a den where they goto college and comeback to work with you and interact with their parents too.Leave professionalism to pits, no dress code and assign responsibilities. Focus on getting things done and establishing smooth communication channels.
Note2: if ones focus is services industry do exactly opposite.
I think its easier to make Mavericks(futball team) than Ebay, Apple or even Dell. 🙂
Best Wishes
oh! I did not mean to say everybody in Apple team were from non engineering background but they were many.
Creating products the market wants? I am not so sure that such things even motivate hackers (in the old sense of the world). I know that the best people I know do their best work for fun.
Hire the best. It’s ok not to get people, but is it not ok to get more average people.
Make the work fun. This does not mean the HR way, with contests and things like that (the occasional hack day is different). This means that you throw challenging problems at people. This would mean being on the cutting edge, living without deadlines.
Think Research, not Manufacture. You want PhD types, not marketing driven people, or 9 to 5ers. Put good people in this mix, and they will rise to the challenge. Put average people in the mix and they will burn out.
Trying to convert average to good is an exercise in futility. Training at the good level requires the ability to hit the ground running on logic and mathematics. A decent pay package is an incentive, but the biggest incentive is the ability of your company to provide a fun environment to work.
Drop the big M methodologies. You need some communication overhead, but keep it as low as possible. Let the programmers decide how much overhead is actually needed. That link from Manish is a good read.
Teams happen, they can’t be made.
“We do the impossible every day, miracles take a little longer”
— RAF in WWII.
“We do miracles every day”
— Unwritten motto of every good programmer.
http://sztywny.titaniumhosting.com/2006/07/23/stiff-asks-great-programmers-answers/
and
the related /. story
BTW, that’s a great interview! Something I was thinking about doing! Anyone who’s not yet read it, I strongly suggest doing it now!
And the Slashdot post is here.
Thanks DVB!
To all people interested in this topic:
We have an Effective Programming Workshop going on at Magnet these days. It’s a 3 month workshop, today was the second full day session (3 full Saturdays, and 2 hours each Thursday). The results so far have been great. We have seen a clear improvement in the quality of programming and outlook of the participants. Some have shown great progress and have taken up a lot more responsibilities – and are delivering on them. Some are catching up (didn’t complete their assignments ;-), but it’s going on very well.
I will post the details and findings after the workshop gets over – around first week of February.