Taming your new Junior Developer
Junior Developers...You can't live with them and it is illegal to shoot them. Well, except maybe for our North Korean readers. So how the hell can you pass software development knowledge to someone who thinks that Maven is a city in Eastern Europe?
In his book 'Software Development as a Cooperative Game,' Alistair Cockburn describes the three levels of learning in Aikido. They are Shu, Ha and Ri, and roughly translate into learn, detach and transcend.
Let’s consider the communication between two people in different levels. If we deduce it to our world then it is between a Senior and a 'Shu' level worrier/developer. A Junior will always prefer to receive a set of instructions/rules for every task he needs to accomplish.
A Junior joining a software development team has a lot of catching up to do. He doesn't know the product. He doesn't know the business domain. He might not know all the tools and technologies you are using. He definitely has no familiarity with software development idioms such as Dependency Injections, Continues Build, etc. Make sure his assigned tasks are with no more than one unknown domain. Moreover, make sure he understands that one of the task goals is to better understand that unknown domain. Taking a different approach will lead the Junior to believe that the world is too complicated to understand, rushing to you with problem descriptions like "That red thing is not talking to the green part of my screen anymore. I tried to restart it but it doesn't help." Remember that a software developer must be inspired to understand what is happening under the hood. Throwing too much complexity at once might generate the exact opposite.
Embracing new technologies is a good practice, but it depends on when and where such embracing takes place. Google-Guice's home page describes how using the ‘new’ operator is old-school. In the Git home page they tell you that using a client-server source control is old news - Distributed Source Control is Da - Bomb. When visiting the Scala home page they will convince you that using critical sections ‘synchronize’ is ancient history - STM (software transactional memory) that is buzzing. The Junior will believe them all. One day he will call you all excited for a simple dialogue-application demo. It will be on a Git branch, while all objects will be created using Guice, and instances will only communicate using an inner event bus that uses a weird syntax of embedded Scala code. You get the idea. So please don't let a Junior embrace new technologies without your review.
Remember that the Junior only recently graduated from the University. He already gained experience in problem solving. In the University, solutions were always elegant yet complicated where in the real world, chances are that the best solution is naive yet simple. Once more he will come to you showing off his latest coding. He was instructed to read some configuration from a database and save it in-memory. You desperately try to keep up with his explanation on why he had to use a red-black tree (something about reducing the complexity from O(nlogn) to O(lognlogn)) while also trying to overcome the sharp pain you suddenly feel in the chest. So stop mumbling "...but there were only 20 rows in that table..." and remember that you must change his approach to the well-known "keep it simple."
Stating the above, we can't ignore the benefits of Juniors. Their ability to adopt new technologies while staying highly motivated and hard working (usually they don't have 3 mouths to feed) can't be disregarded. With patience, us senior developers can get these Juniors to the Ha and Ri levels sooner rather than later.
Published at DZone with permission of Nadav Azaria, author and DZone MVB.In his book 'Software Development as a Cooperative Game,' Alistair Cockburn describes the three levels of learning in Aikido. They are Shu, Ha and Ri, and roughly translate into learn, detach and transcend.
- A worrier in the Shu level learns techniques from his master and copies them. This level is also called ‘Follow the Master,’
- In the Ha level the worrier learns the strengths and limitations of a technique. He learns other techniques and can now choose which one to use according to his position.
- In the last level Ri the worrier creates a blend of techniques he knows, while also inventing new ones.
Let’s consider the communication between two people in different levels. If we deduce it to our world then it is between a Senior and a 'Shu' level worrier/developer. A Junior will always prefer to receive a set of instructions/rules for every task he needs to accomplish.
A Junior joining a software development team has a lot of catching up to do. He doesn't know the product. He doesn't know the business domain. He might not know all the tools and technologies you are using. He definitely has no familiarity with software development idioms such as Dependency Injections, Continues Build, etc. Make sure his assigned tasks are with no more than one unknown domain. Moreover, make sure he understands that one of the task goals is to better understand that unknown domain. Taking a different approach will lead the Junior to believe that the world is too complicated to understand, rushing to you with problem descriptions like "That red thing is not talking to the green part of my screen anymore. I tried to restart it but it doesn't help." Remember that a software developer must be inspired to understand what is happening under the hood. Throwing too much complexity at once might generate the exact opposite.
Embracing new technologies is a good practice, but it depends on when and where such embracing takes place. Google-Guice's home page describes how using the ‘new’ operator is old-school. In the Git home page they tell you that using a client-server source control is old news - Distributed Source Control is Da - Bomb. When visiting the Scala home page they will convince you that using critical sections ‘synchronize’ is ancient history - STM (software transactional memory) that is buzzing. The Junior will believe them all. One day he will call you all excited for a simple dialogue-application demo. It will be on a Git branch, while all objects will be created using Guice, and instances will only communicate using an inner event bus that uses a weird syntax of embedded Scala code. You get the idea. So please don't let a Junior embrace new technologies without your review.
Remember that the Junior only recently graduated from the University. He already gained experience in problem solving. In the University, solutions were always elegant yet complicated where in the real world, chances are that the best solution is naive yet simple. Once more he will come to you showing off his latest coding. He was instructed to read some configuration from a database and save it in-memory. You desperately try to keep up with his explanation on why he had to use a red-black tree (something about reducing the complexity from O(nlogn) to O(lognlogn)) while also trying to overcome the sharp pain you suddenly feel in the chest. So stop mumbling "...but there were only 20 rows in that table..." and remember that you must change his approach to the well-known "keep it simple."
Stating the above, we can't ignore the benefits of Juniors. Their ability to adopt new technologies while staying highly motivated and hard working (usually they don't have 3 mouths to feed) can't be disregarded. With patience, us senior developers can get these Juniors to the Ha and Ri levels sooner rather than later.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Barry Smith replied on Thu, 2012/07/19 - 12:17pm
With that attitude you are not ready for any form of management.
Loren Kratzke replied on Thu, 2012/07/19 - 1:26pm
in response to:
Barry Smith
I found much humor in the comment. My 8th grade teacher once said that 7th graders should be in grade school, 9th graders should be in high school, and 8th graders should just be taken out and shot. (it was funnier back in the 70's, but you get his drift) He was a great teacher.
I think that teaching 8th graders has similarities to bringing new developers up to speed. They need to know everything eventually, what little they do know is incomplete, unpracticed, and sometimes downright dangerous, but it is a mistake to think that you can teach them everything all at once or in an order that fits your needs at the particular moment.
And much like 8th graders, new developers are very impressionable. They have more questions than answers. This is a positive thing but if not channeled properly will result in strange solutions that are destined to be the mistakes that the new developer will look back on later in life and shake his or her head. These are usually expensive mistakes and can and should be avoided though proper mentoring.
And anybody who thinks teaching is easy just because they know a subject is badly mistaken. Not only is it difficult, learning good teaching skills takes a lot of practice.
Wal Rus replied on Thu, 2012/07/19 - 1:46pm
Loren Kratzke replied on Thu, 2012/07/19 - 3:37pm
in response to:
Wal Rus
Wal Rus replied on Thu, 2012/07/19 - 8:22pm
Gordon Milne replied on Thu, 2012/07/19 - 9:53pm
in response to:
Barry Smith
Gordon Milne replied on Thu, 2012/07/19 - 10:09pm
It would be wonderful if I only saw this problem with Junior developers but I regularly see exactly the same thing from Intermediates and Seniors. I rarely see if from Leads or Principals.
It would appear that the tendency to solve the most general of problems (http://xkcd.com/974/) is endemic at the lower levels of our profession/craft. Unfortunately, it requires tireless vigilence to keep this sort of cruft from escaping into production. After all, what is wrong with it if it works?
How about it's not effing understandable to any normal human being looking at it?
John Ortiz replied on Thu, 2012/07/19 - 11:32pm