How to train a graduate?

CheekyC

Senior Member
Joined
Nov 25, 2013
Messages
515
Reaction score
0
I recently employed a junior programmer fresh out of training college. He did C#. In my technical assessment of him he battled quite a bit. But I decided to give him a chance as he was in a catch-22. Without experience and without a job. Anyway, he has a reasonable level of knowlegde of C#, but battles to convert concepts into code. He understands OO principles, but has difficulty in translating the problem domain to object domain and code. I am coaching him but it is slow going and it is taking lot of my time. Any pointers as to good books or articles for him to read?

Tx
 
If his trouble is converting concepts into code, then really all that can be done is to practice coding.
 
This is a common problem with college and even university graduates, they have a lot of theoretical knowledge in the back of their heads but when it comes to coding they lack experience with all the small problems that seniors are used to and they can’t even begin to see how to put this knowledge to practical use.
Whatever you do, don’t spoon feed him. It is important that he learns how to research(google) a problem as soon as possible. He shouldn’t ask you anything about C# or the .NET environment before he exhausted every option online. If you don’t do this he will get so reliant on you that you will end up doing his job. Explain programing concepts and reasons for doing things a certain way but don’t, for example, show him how to bind data to a dropdown list, things like that he can research himself and he will remember it forever.
Juniors that are young and energetic, can adapt to any environment, they are not afraid to work hard and don’t care about late hours as long as they have a dream or goal to hold on to. They learn quickly and you have full control over their work. Its just getting over this first bump.
 
Gang of Four would always be a great place to start + there are a few books which present the pattern concepts using C#, for example: "Net Design Patterns in C# and VB.NET"

Also always a good idea to introduce the concepts of refactoring early; the best book IMO on this topic is "Refactoring: Improving the Design of Existing Code", unfortunately it's a Java book, but hopefully won't be too much of a challenge as it deals with structural elements only; making it easy to translate ito C#, otherwise look at: http://msdn.microsoft.com/en-us/library/719exd8s.aspx

IMO the importance of design and structural coding is often either overlooked or too little time is allocated to this area by colleges and/or varsities.

Avoid solely jumping into Googled solutions, ad these can often lead to the formation of some bad habits, habits which will be difficult to break down the line.
 
Last edited:
Yes he can google .NET questions. Hell I even do that myself from time to time.

But the issue is, from problem domain to object domian & code. You cant google that. E.g. given a simple config type class with simple properties, how would you persist that. Not using app.config etc. He battles with that.

The simplest solution is to serialize to XML using built in .NET and then write to file.
 
[)roi(];12052017 said:
Gang of Four would always be a great place to start + there are a few books which present the pattern concepts using C#, for example: "Net Design Patterns in C# and VB.NET"

Also always a good idea to introduce the concepts of refactoring early; the best book IMO on this topic is "Refactoring: Improving the Design of Existing Code", unfortunately it's a Java book, but hopefully won't be too much of a challenge as it deals with structural elements only; making it easy to translate ito C#, otherwise look at: http://msdn.microsoft.com/en-us/library/719exd8s.aspx

GoF is good yes. He has to write code before he can refactor... ;)
 
GoF is good yes. He has to write code before he can refactor... ;)
Lol, true!

You certainly got a tough road ahead if he still isn't independently able to write an app;

If that's the case you might want to simplify it even more and focus on building simple object graphs, for example: something like an address book app.

Either way once he does complete his first app challenge, it's probably a good idea to throw in refactoring; nothing worse dealing with messy code sets.
 
Last edited:
[)roi(];12052143 said:
Lol, true!

You certainly got a tough road ahead if he still isn't independently able to write an app;

If that's the case you might want to simplify it even more and focus on building simple object graphs, for example: something like an address book app.

Either way once he does complete his first app challenge, it's probably a good idea to throw in refactoring; nothing worse dealing with messy code sets.

I put him on contract for 3 months. Want to give him a chance, but he will have to accelerate his learning. Will see how it goes. Problem is that I run a small dev company and have to do everything. Traning him from ground zero was not what I had in mind. I need help. Not a student.

I explained to him to start with simple high level class / structure diagram showing relationships. And then refactor the diagram to break down object responsibilities. Then also draw interaction diagrams to trash out how the objects will interact.
 
I put him on contract for 3 months. Want to give him a chance, but he will have to accelerate his learning. Will see how it goes. Problem is that I run a small dev company and have to do everything. Traning him from ground zero was not what I had in mind. I need help. Not a student.

I explained to him to start with simple high level class / structure diagram showing relationships. And then refactor the diagram to break down object responsibilities. Then also draw interaction diagrams to trash out how the objects will interact.

Sounds tough, but your approach sounds good.

Only other suggestion would be to give him a complete app to build; it makes discussing challenges more topic oriented, and will simplify your assessment of progress or lack thereof.
 
[)roi(];12052289 said:
Sounds tough, but your approach sounds good.

Only other suggestion would be to give him a complete app to build; it makes discussing challenges more topic oriented, and will simplify your assessment of progress or lack thereof.

The apps I do are too big for him to tackle. We talking million lines of code. And I need him to deliver value to me as well.

I gave him a part of the app to do. He needs to write the interface to an accounting system. The solution encompasses all the right principles I want him to use. Abstraction by using interfaces and explaining to him why. Dependency Injection, SRP, etc. And this module is can be developed and tested standalone. But I direct him all the way in terms of design & architecture.

Just though that if there is anyone here that can recommend good reading material it may also help.
 
In my experience it takes quite a bit to get someone up and running and each person is different. At the end of the day you have to look at every line of code they do and then find a way to help them improve on the areas where they lack.
If my time is an issue I usually prepare a bunch of questions for them and get them to work on it for a hour a day and hopefully they put some time in in the evenings and weekends.
For instance lets say they have lots of code repetition I would compile questions on classes and functions etc and have them answer those, once I am happy that they understand the concepts I ask them to redo specific sections of their code using what they have learned.
I often send them back saying I need more information on the questions they have wrong, I try not to say its wrong.

Then of course installing tools like style cop to teach them about coding practices is much easier than having to check all their naming conventions etc all the time.
 
The apps I do are too big for him to tackle. We talking million lines of code. And I need him to deliver value to me as well.

I gave him a part of the app to do. He needs to write the interface to an accounting system. The solution encompasses all the right principles I want him to use. Abstraction by using interfaces and explaining to him why. Dependency Injection, SRP, etc. And this module is can be developed and tested standalone. But I direct him all the way in terms of design & architecture.

Just though that if there is anyone here that can recommend good reading material it may also help.
I implied something independent and of no value except training, specifically far simpler as not everyone will survive a throw in the deep end approach.

You're of course in the best position to assess his capabilities.

Your challenge IMO sounds a little broader than what can be solved by book learning.
 
Last edited:
[)roi(];12052491 said:
I implied something independent and of no value except training, specifically far simpler as not everyone will survive a throw in the deep end approach.

You're of course in the best position to assess his capabilities.

Your challenge IMO sounds a little broader than what can be solved by book learning.

Yes but I cannot afford to pay him R13K per month and hom not delivering anything useful.
 
Yes but I cannot afford to pay him R13K per month and hom not delivering anything useful.
Understandable; if he is not able to perform at the level you require (and assuming you still want to help him), then maybe the compromise is to be honest (to him) about the problem, and offer to keep him on staff as an intern (package substantially reduced).

Otherwise terminate his contract, and find someone more suitable; my recommendation re you're a small business and can't afford dead weight.
 
Last edited:
[)roi(];12052987 said:
Understandable; if he is not able to perform at the level you require (and assuming you still want to help him), then maybe the compromise is to be honest (to him) about the problem, and offer to keep him on staff as an intern (package substantially reduced).

Otherwise terminate his contract, and find someone more suitable; my recommendation re you're a small business and can't afford dead weight.

You're right, but I want to give him a chance. Maybe I am too nice...
I will be pi$$ed however if I train him and then he duck once he is more skilled. That is a reality though.
 
You should probably point him to a couple coding sites like http://codingbat.com/ and make him work through all of the questions.

There are many fun sites that help you learn a language as well as give you questions to expand your knowledge. Even a site like http://www.pythonchallenge.com/ is pretty cool and helps you to think out the box.
 
One thing I do is tell them to think of a program they'd like to see that doesn't exist yet, or doesn't exist with the features they have in mind. Then do it.

Helps them learn how to think instead of just work from instructions given
 
You're right, but I want to give him a chance. Maybe I am too nice...
I will be pi$$ed however if I train him and then he duck once he is more skilled. That is a reality though.

That is not only the reality but most likely to happen unfortunately.
 
What problems are you giving him that he is struggling with. Advice of what resource are good at would depend on the type of thing you want him to write.
 
You're right, but I want to give him a chance. Maybe I am too nice...
I will be pi$$ed however if I train him and then he duck once he is more skilled. That is a reality though.

Tough choice; but as you know his inexperience is going to remain a hurdle for any potential recruiters, so I doubt he's easily able to jump jobs.

As I said consider the compromise: internship (and lighten your financial burden) -- at least this way you offer him a chance to grow, gain experience but not at your expense.
 
Top
Sign up to the MyBroadband newsletter
X