Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm in charge of hiring for a small java shop. We have a very limited hiring budget so we tend to pickup fresh grads cheap and spend time training them. I have found colleges and universities do quite an inadequate job these days and usually a lot of training is required. I train in 2 steps:

a) Get them comfortable with Java conventions.

b) Teach them programming concepts (again).

Training ranges from 1 week to 1 month depending on the number of people we hire.

My problem is that training them on Java I feel I rob them of the ability to understand what they are doing. Colleges train them for C# so they never really understand what the code translates to for the JVM or how the computer interprets this. I of course keep realizing this when I see blatantly inefficient code being laid down.

My question is, if an employee will stick with the company for 3 years, is it better to train the employee for the job so they can start coding in Java or is it better to get them comfortable with Java and pick-up languages like Python, C/C++, Prolog, LISP to teach them what they are really doing? (Keep in mind there will be a learning curve again if I change languages). So over 3 years, what do you feel will pay-off more? The suits clearly say train for the job since iteration is high.

UPDATE Bottom line is that they will be working on a product that is effectively a development environment in Java. Basically a BPMN based product that lets you specify the flow of an application graphically and use stock features to add functionality and lay-down custom java code as needed.

share|improve this question

closed as off-topic by MichaelT, gnat, jwenting, Bart van Ingen Schenau, Kilian Foth May 28 at 13:45

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – MichaelT, gnat, jwenting, Bart van Ingen Schenau, Kilian Foth
If this question can be reworded to fit the rules in the help center, please edit the question.

    
I guess you could get more focused answers if you specify your line of business. LISP, Prolog will add no value for line-of-business development. –  Emmad Kareem Aug 24 '11 at 21:58
    
    
Thanks BlackJack, how the world has changed since that article (2005). Back then I would have agreed with the article, now I would be grateful if the people trained in Java just understood OOP. –  Ali Aug 25 '11 at 10:44
    
Question updated to hint on the type of product these guys will be working on. –  Ali Aug 25 '11 at 10:47
    
Many I.T. / Comp.Sci. Collegues & Universities only teach programming as general concept, because graduates are intended to be Programing Managers or Analysts, not programmers –  umlcat Aug 25 '11 at 17:10

8 Answers 8

up vote 7 down vote accepted

A lot of this depends on your business needs.

My first job was in Visual Basic, but I didn't know any VB - my employer basically tossed me into the deep end and let me swim. Granted, I learned a lot from being forced to learn or die, but in general I'm not a fan of "trial by fire". It produces, as you alluded to in your question, programmers who frequently employ shoddy development practices and "workarounds".

However.

I don't think you need to go so far as to have your developers learn C and LISP. These are college kids, and they're going to be overwhelmed enough early on trying to learn all the requisite domain knowledge that comes with a new job.

You're a Java shop, so teach them Java! Where is your lead developer? Do you have a senior staff member who is highly skilled in Java, and has been around long enough to really get the core business? A great lead can ramp up a smart college kid far quicker and more effectively than arbitrarily having them "learn" six complicated programming languages.

If you don't have any senior staff, its time to take a hard look at your HR policies. I'm not saying that you need to try and keep a full staff of lead developers at all times (sometimes the money just isn't be there), but if you can't keep one solid developer to act as your lead then there is a problem.

Have code reviews, let your juniors do paired-coding with the seniors, anything that will expose them to the day-to-day practices of a more experienced individual.

share|improve this answer
    
I am the lead developer :-) I agree with you that the kids so seem overwhelmed enough with Java and the java exercises we have them do (like creating some data structures). My main issue is having them understand that not all code is the same, there is an efficient way of doing things and an inefficient way. Perhaps this is best left to a second round of training after their first year on the job? –  Ali Aug 25 '11 at 10:38
    
It should be a continual process, from day one. The new hires aren't going to be writing top code, day one, or even day 366. The best you can do is get in the room with them, and guide them in their development as programmers. –  Jarrod Nettles Aug 25 '11 at 13:05
    
If somebody has a problem with working with data structures, the simple solution, you shouldn't hire them. These students should be able to work with a data structure that exists both in C# and Java without any problems. You do not need to understand everything about Java to be a very good Java programmer. It sounds like you need to expand your pool. –  Ramhound Aug 25 '11 at 14:17
    
You misunderstand Ramhound. They can work with these data-structures. The task is to get them to re-create their own versions of those data structures so as to improve their OOP-understanding. –  Ali Aug 25 '11 at 16:00

You should offer internships. You'll get candidates for a summer to do your training and let the know what it takes to be a programmer. You can pay them less to train than offering a full time job after graduation. If you get them started on the right path, they may spend some time working on their Java development and possibly look into other areas.

I think this will make your firm a more competitive employer in the long run.

share|improve this answer

Oh my god, train them for the job: unless you're the owner you shouldn't really take such freedoms.

Management or the market chose Java, and they are not gonna change it.

If they are gonna change it, you should have their permission to proceed and a full set of coordinates.

You shouldn't train them trough their first 2 years of CS a second time, and in a single month.

share|improve this answer
1  
+1 "They didn't learn adequately in college, but I'll teach them everything they need to know in a week or a month". –  Kirk Broadhurst Aug 25 '11 at 1:51
    
Kirk, the purpose isn't to teach them everything they need to know but rather to make them comfortable with their primary language at work. ZJR, the hope is to train them to write efficient code rather than just write code. Java is the language of choice in our shop and that's what they are trained on question is whether I should bother at all to try to train them to write more efficient code, whether when they join or perhaps a year or so later. –  Ali Aug 25 '11 at 10:42

Instead of solely concentrating on Java, make sure they also know data structures (and can implement them in a language). I say this for the following reasons:

  1. Programming languages change far too often to be overly concerned about.
  2. Data structures haven't changed a whole lot in the 50ish years that they've been around. If one of your new hires really gets data structures, learning a new programming language is relatively easy.
share|improve this answer

Approach the university. I know Cal State Northridge regularly consults with local businesses to tailor their curriculum.

share|improve this answer

Don't hire computer science graduates.

Hire engineering or mathematics graduates. If you cannot afford engineering graduates, go for the mathematics graduates. One little secret, you should also consider linguistics (not literature or language) graduates who are interested in programming.

These people train themselves, and they don't stick to one language. They are trained as analysts not computer language fixasists. The most effective programmer is one who analyses and is enthusiastic about learning effective ways.

They understand the raison d'etre of computer programming - not to get stuck to a particular dogma of programming but to get things done. Not to be fixated on OOP principles but to understand the most efficient and effective way to perform a job. When you hire such people, give them clear directions of what you expect them to achieve.

Then you won't have to micromanage their attitudes of whether they are training for the skill or for the job - because that question fades into irrelevance.

Further edit:

I am returning to appending this post after a couple of months.

First, CS graduates have no/poor knowledge of the mathematics involved in excellent programming styles. Experience is useless, when you don't possess those mathematical skills.

First: Project - could you write a logging utility to gauge users preferences? The CS is clueless. The engineering guy whips out his/her statistical analysis skills.

Second and most prevalent problem: The CS refuses to use boolean algebra analysis. No truth tables no de Morgan. Does he/she even know what truth tables are? They just code with gumption repeating again and again their thought experiments on how to write their if/then/else spaghetti, when a simple truth table and some quick de Morgan would quickly solve the problem. You can see from the code the struggles they have been thro.

Third example: Does CS people know what State Machines are and how to analyse them. You use them everyday or have close brushes with them. Events, MVP, MVC - rings a bell? How do you plan your event-driven architecture? Or your event-bus hierarchy? Do you have a complete picture of your state transition possibilities? No need, just depend on testing? Just code it and everything automagically falls into the picture? OK.

I am sure I can think of a few more examples why CS people are really approximate programmers.

share|improve this answer
1  
I don't think a CS degree is a requirment, but you've gone to far in the other direction. You hire people who can learn. The programs you mention do not have any monopoly on programmer qualifications. Just because someone knew they wanted to be a programmer and went the CS route is no reason to write them off. –  JeffO Aug 25 '11 at 2:30
1  
If I had enough rep I would definitely down vote this answer. Those people that studied mathematics and engineering can learn the material but they would regularly come in with 0% of the foundation associated with programming. In regards to the OP Q though, if a school taught C# and the student learned anything, they should be up and running in Java with minimal time. If they can't hiring screening may need to be revised. –  Rig Aug 25 '11 at 2:50
    
I'm not sure what CS degree you are referring to, probably the infamous "java schools". Many CS degrees include a lot of mathematics. At my university the 3 Bsc. years in CS (which are intended to be followed by a Msc.) have more courses in all kinds of mathematics than any other engineering curricula. Only physics and mathematics do more, and not by so much (except they continue in the Msc. years). I'm in Europe but I'm sure top US universities like MIT, Harvard & co. are just the same. –  Francesco De Vittori Dec 19 '11 at 10:25
    
I think i differ here as far as i know in India you cannot enroll for a CS degree if you do not have Mathematics as main paper till senior school and Mathematics is always a main paper in every year of the course. Students learn stats, Boolean algebra, Graphics etc... –  amar Nov 8 '13 at 6:02

Go from general to specific making sure to continually reference the general as you get more specific. So if you taught them about Encapsulation, when you get the the Java part, then show them how they would achieve this in Java. Some people don't easily make the connections between general knowledge and specific knowledge.

So, teach general programming concepts first, teach Java specifics second. Then teach internal best practices and how you want them to handle certain types of problems. This is a good time to familiarize them with the code base and how it's structured and why certain things are done the way they are done. The inexperienced are also often unfamilar with how to effectively use source control and how to do a code review and this specific-to-the-code-base section can help you make sure they understand how to do work effectively in your organization.

And don't forget at least a couple of hours on the business domain so they start to understand the business not just programming concepts.

share|improve this answer

Give them tools, and teach them to use the tools (or make them some tools by yourself) to measure the performance of software. Remind them to measure often. This will improve the learning outcome through self-discovery.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.