One thing we get asked often is how we train our junior coders. And the answer is never an easy one, since we don't have a set training program for this. But we follow some principles, which over the years have worked remarkably well in creating top professionals. Kaz developers are highly valued in the industry - a sure sign that our principles are working. Here are some of the basic principles we use for developing our younger technical staff.:
The master and the apprentice
Coding is a craft, and it needs to be learnt just like how any other craft in this world is learnt - through working as an apprentice to a master craftsman. Using this as the guiding principle, we put our new recruits into a team where there is a guru lead to guide them through their work. The freshers are put on real projects as soon as possible, typically starting with back-end tools working in a pair with a more senior resource - usually the lead. The pair programming model works like magic and we have noticed that within the first few weeks we can transform a not-so-sure person to a very confident coder who can contribute directly to our code. This master-apprentice approach is really a long term process and as the junior programmer works through a wide range of challenges the professional skills improve greatly.
A Swiss knife
One of the first thing we ensure about freshers is that they are not put in a single technology for too long. The idea is to give them a taste of various technology/programming languages/domains/problem sets so that they can have a balanced view. Our fear is that if a fresher is stuck with a single thing for too long, she might try solving every problem with that single tool rather than choose the correct one (or look for a correct one that she doesn't know about). The aim is to create a Swiss knife rather than a single blade knife. We think after two years of experience in this mode, a resource can be put in a technology where she can start being an expert - by that time she has gained enough experience to know that there are other things out there.
The art of disagreeing
A major skill in a life in software is the ability to argue well. It is a skill that has to be learnt, practiced and perfected daily. We teach our freshers to be fearless in putting their views across. We teach them to overcome their worry of being wrong - which is typically the biggest block for new comers. We try breaking the ice in every way we can so that they feel comfortable in voicing their disagreements to seniors within the team.
The loss of ego
Ego kills a great software career - it as simple as that. Ego pushes a person to make irrational decisions about technology. Egos also mean that technology meetings never come to a compromise. Since great coders come with great egos this is a huge problem in the professional software space where teams need to make decisions together and work in harmony.
It's also one of the hardest thing to get rid of! We try breaking the ego by examples. Our senior resources make a show of displaying that they can be wrong. Saying "Oh I see your point now and I was totally wrong" is something that is pretty common in our culture - and this helps freshers a lot. In some cases individual counseling may also be given - always by someone who is respected for her technical skills.
Creating a tech addict
A life in software is also a life of constantly staying in touch with the latest developments. We take active steps to motivate our freshers to keep reading up new technology and try using those in their work. We move our new recruits into projects that uses new platforms that will challenge them and make them read and learn the new API sets or new paradigm of coding. Our culture of technical excellence also brings in the peer pressure for staying on top of new things - which soon becomes a habit, an addiction! We think this addiction is a must for a great career in software.
So those in short are our secrets for creating great developers. Are we missing anything?