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 have a colleague who want to go back to programming after 5 years of doing something else. Five year ago he was working with C++ / linux, delphi, and a lot with mSQL . He asked me to help him to go back to programming. I started to support him (in C# and Java) but I see that he is less and less motivated to practice. Probably he is getting frustrated about slow progress or overwhelm by things he had forgotten. I am looking currently for a way how to encourage him. Currently I think about two possible approaches:

  1. find an opensource project that he can start to work
  2. set up a project together (e.g., on assembla.com) and try to develop together something that is interesting for him.

Maybe I should advice him to start with script languages (e.g., groovy, jython) that let to program faster and to not write so much boiler code?

share|improve this question
    
Related: programmers.stackexchange.com/questions/1006/… –  TheLQ Sep 19 '10 at 12:18
2  
You haven't said why he wants to get back into development to begin with. That's pretty important to know, especially if he seems unmotivated to learn. –  chrisaycock Dec 22 '10 at 15:19
    
You got a quite good job as an administrator/"excel analytic" but it is not his dream work and he would like to go back to things you used to like. –  Skarab Dec 27 '10 at 2:34
add comment

14 Answers

up vote 2 down vote accepted
+50

I'll approach this a little differently. Most of the answers here address the "what" of teaching catch-up to a dormant programmer. Most of that "what" is a specific programming language or programming paradigm. But Skarab asked "how", which is a different question altogether.

This is how:

-- If he's done a lot with C++, Linux, and mySQL, but moved away from it, find out why. It could be that he became tired of the way those technologies constrain problem-solving techniques. Perhaps he doesn't want to do precisely that any longer.

-- Find out what the learner means when he says he needs to re-learn programming. What you're looking for his his "happy thought": the thing that motivates him to action.

Clearly from the question, approaching it with a new but similar language like C# or Java isn't it. Find out what he wants to do with his programming, then you'll have a hook for the next thing.

-- Upon learning the "happy thought", identify the best computer languages or technologies for the kind of thing he wants to do. F#, Ruby, Python, C#, VB, and Java, and all the other languages mentioned here are means to that end, not ends in themselves.

-- Share precisely one of these technologies with him. Don't complicate things by introducing them all. The last thing a dormant programmer needs is a laundry list of all the things that have been released in the last 24 months followed by a question about which one he wants.

-- locate a very small project or task which introduces one or two new concepts which directly inform his "happy thought", and then demonstrate those concepts for him. Tie it in with what he wants to ultimately do. Note that this is harder for you than just throwing out a new language, because you'll probably have to write these demos. The signal-to-noise ratio on blogs and other online resources is so high that google searches are slowly becoming useless, and no technology vendor (aside from maybe Apple and maybe some departments at Google) has written a cogent demo in something like 13 years.

So in that sense your second option is more appropriate. The language of choice and the platform of choice will follow behind what he wants to do. Eventually, he'll be able to follow along with the rest of us at places like Stack Overflow and not feel for a moment that he's lost something except that happy thought.

share|improve this answer
    
Thanks for your help. –  Skarab Dec 27 '10 at 2:44
add comment

I can relate in so many ways. He may appear not to be motivated because he may have hit some walls (the "dip"?) when trying to get back into it. The inferiority complex kicks in. If possible, I'd recommend he help out a friend (you?) on a side project (option #2 that you stated). But the project has to have a real goal, and not just be an exercise, otherwise focus can quickly disappear. If the friend is aware of his situation, maybe he wouldn't be afraid to let his vulnerabilities show, and won't feel as funny asking (what he may believe are dumb) questions.

I'm on a similar path right now, and started writing about it. Then I put together a sort of game plan (I've deviated from it a bit, but this may help as well).

share|improve this answer
add comment

If he 5 year's removed, he probably doesn't remember C++ that well. I think a small project to make him familiar with a language again is the best route. The problem is finding something interesting. I suggested asking him to implement a suduko puzzle solver. I think it is a fun problem that should mostly likely exercise most of the fundamental program techniques. For added intensive you two could place a wager to see who's solution is faster.

After that for added complexity ask him to implement an interface to an sql database that loads n number of different puzzles and stores the total execution time for each puzzled solved.

A more advance project that could both work on that I also think would be fun is some sort of simple interactive mutliplayer game over the internet. Chess or checkers for example.

I also suggest having him go through the steps of loading all the tools on his computer and building make files to manage his project.

If interest is not the issue then consider the following.

I think that most often frustration involving learning something new stems from not knowing how to do something AND not being familiar enough with the material to know what questions to ask in order to figure out how to do it. If you really want to help him then you need to figure out what exactly is frustrating him. Is it now knowing how to use the tools? Is it struggling with syntax? Not understanding memory management? ....ect. Just strait up ask him what is frustrating. It might be everything. Once you know that then you can address the issue accordingly. Frequently people will not ask for help our fear of feeling stupid or whatever other reason that you can think of. Sometimes you just need to poke them a bit to get the root of the issue.

share|improve this answer
add comment

I'd focus more on the human side, and less on the technology side. Find out why he got back into programming in the first place, and try to give him more of that. Also, rather than speculating about why he is less motivated, ask him. One possibility is that he is unmotivated by practice problems, and wants something real to do. But he is the best person to tell you that, not us. (Unless he has an account on this site. :)

share|improve this answer
add comment

Start by thinking about him as though he is a fully competent programmer, and the last time he used his programming skills was yesterday.

  • If you want to convince him that Objective HaskellML++ is the language of the future, then convince him same way you'd convince someone who is currently a professional C++ programmer.

  • If you want to introduce him to a project, approach the issue (almost) the same way you would if he had quit his programming job last week to take care of his dying mother and was looking for a project to join as a hobby to keep himself fresh, and to take his mind off the situation.

Only assume he lost his skill and needs to be "retrained" if you realize in the course of treating him as a competent professional that he actually has forgotten something.

And don't assume that C++ on Linux is outdated. There's plenty for him to do with that skill set.

share|improve this answer
    
I would never say that C++ is outdated. –  Skarab Dec 27 '10 at 2:37
add comment

It sounds like he's motivated to change his career, so the steps you take must build toward that goal.

If he has a Bachelors now would be a good time to go back part time for a Master's. He may want to take one class at a time at first, and even retake the more difficult undergraduate classes like algorithms and operating systems. He could even retake the introductory course, particularly if it uses a language that the later courses build on.

I know some student who are able to work full-time and take even two master's courses a semester. At that rate, you can get a Master's degree in four years, with plenty of time to practice and be ready. With a freshly minted degree, he won't have to explain why he hasn't been programming for five years.

On the other hand, if he just wants to polish a lost skill, and isn't looking for a career, this lack of motivation is sufficient notice that he should spend his energies elsewhere. [I'll be happy to update this reply if any more specific information about his circumstances is available.]

share|improve this answer
    
He finished his master studies some time ago. –  Skarab Dec 27 '10 at 2:36
    
Hmm, I guess he's not ready. It's good that he asked for help, but perhaps he was asking for something else instead (e.g., perhaps it was an indirect way to seek advice about leaving again?). –  Macneil Dec 27 '10 at 4:22
add comment

If I had formerly worked with C++ on a regular basis, I wouldn't be very excited about working with C# or Java either. It would seem like having to drive a car with an automatic transmission when you'd prefer a manual.

The rest of the answer depends on why your friend wants to learn C# or Java. If it's just to get a job, I don't think you can expect much in the way of excitement no matter what you do. In any case, he'll need something useful (to himself) to work on to really get it.

share|improve this answer
    
+1 for pointing that for somebody who worked with C++, java/C# may be not so exciting. –  Skarab Dec 27 '10 at 2:41
add comment

Forget the language specifics and frameworks, for a little while, I've found that programmers in general like to solve problems. Often text books or programming books don't present a problem or challenge that someone can get into.

Get to solving problems with something like Project Euler, try out different problems with different languages. Get a feel for which ones he enjoys and then jump into the frameworks and make something.

share|improve this answer
add comment

Make it useful!

It is new technology and unknown to him. The easiest way to get motivation is to have it do something useful and needed. Have a look at his daily work and see if there is a place where a small tool could be helpful.

For Windows a possible thing could be a clipboard peeker (in Java 6) where you can launch a program which looks at the clipboard and show it in a window.

share|improve this answer
add comment

He's already got a CS background. you don't need to "teach" him programming. What you need to do is give him a legitimate project to work on and mentor him in the environment of choice. Show him why for loops aren't the norm in ruby, or [insert idiom from language of choice here]. But do it in the context of solving a problem. Build a legitimate web application, or develop some desktop application that scratches an itch of his. Whatever the case may be, don't waste anybody's time with yet another game that nobody's ever going to actually play or by adding yet another hand-rolled blog to the world.

Regarding choice of platform, if his motivation is to get back into paying work, I'd highly recommend getting him started in Ruby and Rails – there aren't nearly enough developers in that market to satisfy the needs, so with a modicum of practice and expertise, he can find himself in a position to get a fairly well-paying job.

But be aware he may just like the "idea" of becoming a developer again, and not so much the practice. if that's the case, he's just wasting your time and his.

share|improve this answer
add comment

Person who graduated in CS should perfectly know mathematics, right? So math logic, boolean algebra, functional algebra, theory of sets, and many other should not be forgotten even after years, isn't it?

So give to him some programming language oriented on functional programming (like F# (!), OCaml, or even Python), this will be more friendly to him and will not cause such a frustration (of course he got it, there are many so weird patterns, new designs, new frameworks, OMG!).

IMO, it's the same if a PHP-developer will open ASM/C++ ;)

share|improve this answer
add comment

Since he already knows the concepts, you might encourage him to use a framework like Django, Rails or Grails, so he gets results quickly and uses a state-of-the-art language (Python, Ruby reps. Groovy) and a framework without much configuration. And since the language is new to him, the dissapointment about forgotten things isn't there.

share|improve this answer
add comment

I think that the best way to motived him is to try to stablish realtions between what he has been doing in the past 5 years and some new language. if you tell me that he's been working with linux, knows lots of sql, c++ and stuff, i imagine that he will find Java quite frustrating, there are lots of limitations when dealing with tipes, exceptions, structures and stuff.

So my advise is start with something that could be challenging but at the same time easy to start. PHP culd be the best option, because you could add 4 or 5 lines and have yourself a home page on the web, working with a database. Learning curve is much more shorter that other languages, and when he reaches a poin where he starts boring again, then add something like Symfony where you stablish a very big framework with its reatrictions and good practice code, so to polish rought edges in his style.

Also try to set up an evironmanet that he is familiar, maybe install a little linux server, and let him set it up, thats also quite enjoyable.

Bests of luck trying to get him back on the train!

share|improve this answer
add comment

I think he just needs to do something else besides academic projects. If all you do is academic work then something like this can get boring

As you said, just join/start an open source project in what ever language he's learning that does something interesting. Maybe its a robot, a very simple game, video player, or anything else that he finds fun or interesting but where there is usually visible progress. Then write it out. You should be there to help him out and motivate him throughout the process. And if you want it even simpler, write an abstraction layer so that he doesn't have to do much of the boilerplate code to get things done.

And if you think its the language or static-typing in general, then do try another language thats more beginner friendly, like PHP or Python; a language that he can pick up quickly. Then do what I said above. I wouldn't take this tactic lightly though, as learning a new language when he's already stressed about one might just backfire.

share|improve this answer
    
Maybe some kind of pair programming could help? –  Skarab Sep 27 '10 at 18:15
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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