99

I have been asked to take a person in our IT department who has no programming experience but is a smart and capable person and help him move into programming at lets say an entry level developer supporting existing .Net applications. I definitely believe this person can do it but I am looking for the quickest way to get him to speed. I have a bunch of ideas but wanted to see what other people thought. I know this is going to also be highly dependent on how he learns, but I am talking in general.

So the question: What do you think are the best ways to get a non-developer up to speed quickly on development (.Net in this case)?

gnat
  • 21,442
  • 29
  • 112
  • 288
Richard Fantozzi
  • 1,153
  • 3
  • 8
  • 10
  • 1
    Maybe related question: http://programmers.stackexchange.com/questions/10930/explaining-programming-to-a-child :D – jmservera Jul 28 '11 at 15:12
  • Take a look at [Small Basic](http://msdn.microsoft.com/en-us/beginner/ff384126.aspx). It is simple, but useful for the beginners. –  Jul 28 '11 at 17:17
  • @jmservera I like that one, I may have to use some of those techniques – Richard Fantozzi Jul 28 '11 at 18:34
  • Good discussion thank you all. This approach does validate the avenue I am pursuing. Of course I started this person off with Code Complete 2 (and not just because it is a Microsoft press book) but think it is pretty pragmatic in its approach. I do tend to agree with the assessment that there is no easy shortcut to being a programmer. But unfortunately also agree that many of the developers I have met could not make it through these books and have no interest in being able to. – Richard Fantozzi Jul 28 '11 at 18:55
  • 3
    I think explaining programming to someone who has no mental model of anything your talking about is useless. Figure out what language your going to be talking about and have them hit the tutorials and get their hands dirty then explain. They will struggle and you will swoop in and speed up the learning process. – The Muffin Man Jul 28 '11 at 23:39
  • I think that you guys are totally unpractical. Don't teach them C++ or C# or C or any of your junk. Teach them about Access. Team them about queries. 90% of business applications either pull stuff out of a database, or push it into a database. Only with MS Access can you make him productive in a couple of days / weeks. – Aaron Kempf Nov 07 '11 at 06:22
  • I would not start with a programming language at all. I would try to explain programming using a vending machine or something similar. Try to understand how a vending machine works and if we were to write a program what level of detail is involved. – l Pedro Santos Nov 07 '11 at 09:04
  • The quickest way usually isn't. – Caleb Nov 07 '11 at 10:42
  • 1
    I would ask him to read Edgser Dijkstra's |On the cruelty of really teaching computing science|, get him to learn about the reason for that article, so he can be wary about the possible brain damage that can be inflicted on him by the generally accepted ways of teaching programming – vfclists Nov 07 '11 at 17:59
  • So it has been about a year and a half, what has been the progress? – Jay Corbett Dec 31 '12 at 20:09
  • I've heard that [Learn Python The Hard Way](http://learnpythonthehardway.org/) is good for non-programmers starting out. – john2x Jul 28 '11 at 16:48
  • This course http://www.lynda.com/JavaScript-tutorials/Foundations-of-Programming-Fundamentals/83603-2.html gives a language-independent introduction to programming concepts (using JavaScript as a teaching tool). It is not free though. – JoelFan Nov 29 '12 at 17:29

10 Answers10

124

I usually prescribe the same sequence for anyone who wants to learn programming. It's very theoretical, but it lays a good foundation. It should take three or four months of fulltime study, but programming isn't something you learn overnight.

If you can't get through this sequence, you're not going to be able to program, so you might as well give up now.

  1. Code, by Charles Petzold.
  2. The C Programming Language, K&R
  3. The Structure and Interpretation of Computer Programs, Abelson and Sussman.

My rule is: work your way through those three books by sheer force, if necessary. Ask any questions you have, but only after struggling to figure it out on your own. If you can make it through those three books, congratulations, you're a programmer, now I can throw you PERL IN 15 MINUTES or whatever rubbish is at the bookstore in the Big Bookcase of Java and you will manage fine. If you can't make it through those three books, give up, go home, you're never going to get it.

I don't think you need to learn C and Scheme, to be honest. They're just a foundation for future learning. These two fairly simple books are both very simple on the surface (C and Scheme are super-easy languages) but they get very deep on the real art of programming without wasting time on confusing syntax, so they are excellent to start to re-wire your brain to be a good programmer.

Attempts to take a shortcut and go directly to learning the exact thing you want to learn right now (like starting with C# and ASP.NET) are doomed.

Ivo Flipse
  • 103
  • 1
  • 6
Joel Spolsky
  • 7,074
  • 21
  • 56
  • 49
  • 25
    As someone who has had to bang his head on the desk over "programmers" who came highly recommended for their C# abilities, but couldn't do simple things like implement a very well documented base class, find memory leaks in c and c++ programs, or simply figure out a problem on their own or learn a new idea at even a moderate pace, I agree. This isn't elitism; it's common sense. If you can't master pointers and recursion, you will never be very useful to anyone who needs developers who can solve problems on their own. – Jonathan Henson Jul 28 '11 at 05:01
  • 4
    @Joel you seem to be very harsh on Java, I'm sure C# is just as easy as Java, how come you never say "Whatever rubbish is at the bookstore in the Big Bookcase of C#"?. – Mahmoud Hossam Jul 28 '11 at 05:48
  • 1
    Is this really the only way to be a good programmer? I'm someone that wants to study programming in my spare time and that's a bit of a daunting list for someone new to the industry... – JuniorDeveloper1208 Jul 28 '11 at 14:54
  • 53
    No, it is not the only way to be a good programmer. But if three books is a "daunting list" than you might be underestimating what it is that programmers do. – Joel Spolsky Jul 28 '11 at 15:05
  • 32
    You are so out of touch sometimes, Joel. – Robert S. Jul 28 '11 at 15:09
  • 46
    Sorry, the newspapers take a couple of days to arrive at my private club because they need to be ironed by a valet before we can see them. – Joel Spolsky Jul 28 '11 at 15:13
  • 5
    Prior to one of my recent phone interviews, I was asked to provide a photo of my collection of programming books. This turned into a two hour long, rather fun conversation where I had to justify my decision to acquire each book, what I gained from it, et cetera. – Bill Blum Jul 28 '11 at 15:24
  • Yesterday my friend asked me this and I gave him something more-like Your sequence. He didn't want to listen to what I had to say - he "just wants to make dynamic websites with simple databases" ... some people are doomed far beyond my brain's perception – Wojtek Turowicz Jul 28 '11 at 15:34
  • 1
    @Bill Stack Overflow Careers has a section on books. I love it for the very reason you just mentioned. – Jonathan Henson Jul 28 '11 at 15:52
  • 4
    @JoelSpolsky can I have one of those shining white horses your ride on? – Raynos Jul 28 '11 at 16:05
  • 9
    @Joel I am now helping a theoretical physicist improve his coding skills from "can hack a Matlab script" to "can write a maintainable 10k line C++ software system for simulating black hole thermodynamics" (or whatever they do in theoretical physics). The guys is way more intelligent than you and I, Joel, but if I tell him to read 3 books about linked lists and other stuff programmers love, he's going to tell me to stop wasting his time. He can't invest 3 months into doing this, because he doesn't have the time (nor the patience). He needs to learn on the job. What would you do if you were me? – quant_dev Jul 28 '11 at 16:22
  • @Joel Spolsky; Is there anything in those books that a CSE graduate wouldn't know? I'm willing to learn in my free time, but I wouldn't want to read a 400-page book and learn nothing. – Michael Jul 28 '11 at 16:24
  • @quant_dev; if you want to go out of your way to help him, figure out what his program would need -- maybe he doesn't need linked lists at all. There's really not much choice here... he can read books and learn quite a bit about programming, or someone can figure out what precisely he needs to know and he can learn only that, or he can pay/convince someone to code it for him. I don't know of a fourth option. – Michael Jul 28 '11 at 16:28
  • 6
    @Michael Well he needs to know how to write readable and extensible code, how to design his programs, how to optimize code (that's a big one), the O(N) notation, but he doesn't really need to know the difference between merge sort and quick sort. Actually stuff Joel likes to present as "tough" (pointers, recursion) is peanuts to people who mastered functional analysis and operator algebras. They get it quickly. But filling their heads with useless (for them) knowledge about algorithms -- it won't work. So the books Joel recommended are of little use. – quant_dev Jul 28 '11 at 16:33
  • @Michael, K&R is a good read regardless of your experience level. If you are already good at C then it probably won't be eye opening but it is a great refresher. Abelson and Sessman is a must read for everyone. Even if you already know a ton, you can only improve by reading that one. – Jonathan Henson Jul 28 '11 at 16:34
  • 19
    Unfortunately, this answer fails the `up to speed quickly` part. – rlb.usa Jul 28 '11 at 16:35
  • @Jonathan Henson Been ~7 years since I've programmed anything even remotely serious, so it sounds like a good refresher. :) – Michael Jul 28 '11 at 16:41
  • 3
    @Joel - "If you can't get through this sequence, you're not going to be able to program, so you might as well give up now." Baahh, when was the last time you thought about logic gates when coding in Wasabi??? – B Z Jul 28 '11 at 16:41
  • 1
    @rlb.usa up to speed quickly usually refers to getting someone who knows a trade but has not been keeping up with the times "up to speed" with a new technology. It can't refer to someone learning a trade. In my experience, such excursions cost you more time in the long run than simply doing it right. The truth is, you can't become a good programmer that way. It is an art, and if someone doesn't understand their theory, they will not have the tools they need to do anything on their own. – Jonathan Henson Jul 28 '11 at 16:44
  • 7
    @quant_dev If he can't invest 3 months, then he'll never be a programmer because he doesn't want it bad enough. He didn't become a great theoretical physicist via casual involvement. – Kevin Laity Jul 28 '11 at 16:46
  • 2
    @rlb.usa imagine telling someone who wants to become an electrician to just start wiring up your house. Hell, who needs all of that theory, the best way to learn is to just dive in. I am certainly not denying that experience is invaluable, but I am saying that without the theory they will not have the proper tools to interpret their experience. – Jonathan Henson Jul 28 '11 at 16:47
  • 8
    @Jonathan That's how I learned! I got a few run-time errors, though. Fire Department had to come help me debug the system! ( JK ;) ) – Michael Jul 28 '11 at 16:50
  • @Joel, it is pretty daunting for someone new to programming, I guess it depends on whether your aim is to become an expert in your field, or just as a hobby in your free time... But thanks for posting that reading list, this is an interesting thread and I'll definitely dedicate some time to reading those books! – JuniorDeveloper1208 Jul 28 '11 at 16:55
  • @Michael, honestly, in a sense, I learned that way too. However, there is certain knowledge that someone must attain to eventually to be a good programmer. Also, if you are trying to evaluate how well they will eventually learn that knowledge, there are few better ways than to see if they can produce a linked list or the like. However, starting with C, c++, scheme etc will be much more didactic than starting with something that doesn't force you to wrestle with basic CS concepts--i.e. JAVA, c# etc... – Jonathan Henson Jul 28 '11 at 16:57
  • 4
    Sounds a bit too theoretical for somebody to get into entry level .net development. I know plenty of .net devs who haven't mastered C, for example. So my recommendation: Mess with processing to get into algorithmic thinking, then maybe learn OOP and web stuff. Surely this will not give him/her the background of somebody with a CS degree, but will be enough to get the job done. – Nils Jul 28 '11 at 17:05
  • @Kevin Actually, he doesn't want to be a programmer. He needs to be a physicist who can manage on their own coding. An occasional screwup is OK, but he needs to know the basic principles. – quant_dev Jul 28 '11 at 17:15
  • 1
    @Joel is it possible to read these books without requiring the help of an experienced programmer? I would love to sharpen my theoretical background, but I'd hate to be stuck constantly and lacking anyone to explain it. – Ivo Flipse Jul 28 '11 at 17:28
  • 8
    Yes. You might have to ask the occasional question online (if only there were a website...) but all of those three books were written to be for absolute beginners. – Joel Spolsky Jul 28 '11 at 17:34
  • 1
    How strong do your math skills have to be? – JuniorDeveloper1208 Jul 28 '11 at 18:07
  • 4
    high school algebra oughta do it – Joel Spolsky Jul 28 '11 at 18:21
  • 1
    Discrete mathematics might be helpful if/when you hit big-O and the like. – Jonathan Henson Jul 28 '11 at 18:23
  • Good discussion thank you all. This approach does validate the avenue I am pursuing. Of course I started with Code Complete 2 (and not just because it is a Microsoft press book) but think it is pretty pragmatic in its approach. – Richard Fantozzi Jul 28 '11 at 18:50
  • @Joel - I do wonder though have you actually tried this approach and what were the outcomes. Even though this is the avenue I am pursing I am a bit skeptical that it will work. – Richard Fantozzi Jul 28 '11 at 18:57
  • 10
    Having spent a good portion of last year trying to teach programming to middle schoolers I'm now of the opinion that you cannot TEACH someone programming. The best you can do is give them the environment and tools that enable them to learn it on their own and then be available to answer questions and give guidance. There truly are some very bright people that just won't get it. And that's okay. – Stever B Jul 28 '11 at 19:39
  • 1
    That's it though isn't it, where is the point when you give up? I find that when I sit down and concentrate I find it very easy to understand the concepts, just sometimes I look at how far I still have to go and find it to present a mountain that appears very hard to scale :) – JuniorDeveloper1208 Jul 28 '11 at 21:46
  • 2
    While this could certainly be a good first step in creating a great programmer, the OP asked for an "entry level programmer" in "the quickest way" possible. You really believe this is the quickest way to do it? Three hard text books? I'm not buying that this is the optimal solution to producing a decent programmer. To be fair though, the question wasn't detailed enough to come up with a great response. "Up to speed" could really mean anything. – Casey Patton Jul 28 '11 at 23:49
  • 1
    Thank you Joel. I've just read the first half of Code (and now reading the second half) and this must the most brilliant book I've read in a few years. I just wish somebody would had translated it into Finnish so that I could distribute it to my elder relatives. – lhahne Jul 30 '11 at 21:26
  • 1
    ^ Same as above, I'm about 1/3 through, struggling with parts, but it's really interesting. – JuniorDeveloper1208 Aug 01 '11 at 18:10
  • @quant_dev I realize he's not trying to become 'awesome' but I feel that programming improvement happens in spurts, and usually with alot of effort each time. If he wants to go from "sucks" to "ok" it's still going to be a huge investment, one that he'll probably never feel is worth it, no matter how you slice it. – Kevin Laity Aug 03 '11 at 20:03
  • 2
    I'm a little bit sceptical of the claim that SICP is easy to tackle for someone with basic high school maths. I've given it a try on a couple of occasions and kept on stumbling on stuff like "write a proof for x" or "give a concise mathematical definition of x". It's not impossible for a non-mathematician to approach by any means, but I think you may be overestimating the mastery granted by high school maths classes! – thesunneversets Aug 04 '11 at 10:25
  • 3
    @quant_dev, Have you actually read or even looked at the books Joel recommended? 'Code' is a pop science book that a physicst could breeze through in a day. 'The C programming language' is all of 248 pages long, and widely regarded as one of the best, most concise guides to a computer language ever written. SICP is the only one of those books that would get a research physicist out of intellectual 1st gear. None of them are catalogs of algorithms, though "The C Programming Language" does use qucksort for a couple of examples. – Charles E. Grant Aug 12 '11 at 01:22
  • 3
    I do agree that you don't learn a language overnight. But I do wonder how many *great* developers actually have started out by reading those three books, or if they've ever read them at all from cover to cover. Some of the things they write about should come to a developer intuitively after lots of practice and experimentation. – Spoike Aug 12 '11 at 08:18
  • 2
    @Bill Blum - I love that photo idea. And plan to implement it next time I'm hiring. But seriously, only one photo? ;-) – Mike Woodhouse Aug 12 '11 at 08:32
  • @Stever: There's a difference between "bringing the necessary prerequisites for becoming good at a specific trade" and "having been taught a craft". Yes, there are those who will never make a good programmer, and, yes, there even are a few those who do not need much in place of an education, because they are so bright, they'd shine through any book. But there's a lot of middle ground, people who are programmer material in different grades of gray, but need to be taught the craft to become real programmers. Those need, and can, be educated. – sbi Aug 12 '11 at 22:52
  • @Joel, this post made you my new hero! Let the stalking commence! – Gleno Aug 18 '11 at 02:57
  • I got Code for some holiday early in high school and thought it was fantastic. Then, of course, I promptly forgot about it and it has been sitting on my bookshelf since. Sounds like its due for a reread. Strongly agree with K&R as well, although I can't say I've ever read #3 or had anything to do with any lisp dialects. – Aaron Dufour Nov 07 '11 at 04:16
  • 7
    K&R is full of typos, mistakes, and bad practices. It may have been a good book when it came out, but better books have come out in the last 23 years. My hunch is that there are two types of people who recommend K&R. First, those who actually have read it and recommend it due to a combination nostalgia and their not having read it in so long that they've forgotten just how bad it is. Second, people who see the book mentioned every time someone asks for a book about C and they recommend it as a form of tradition. There really needs to be a movement to get people to stop recommending this book. – Swiss Nov 08 '11 at 04:02
  • @quant_dev: A physicist should already know O(n) notation from e.g. Landau and Lifshitz or just about any competently taught statistical mechanics course. – wnoise Nov 09 '11 at 19:23
  • @wnoise Yeah, but programming is much more than O(n) notation. – quant_dev Nov 09 '11 at 19:55
  • @JonathanHenson Your analogy to the electrician wiring up a house does not apply. Actually, experience is one of the best teachers. If you had a simulator that an electrician could work on side by side with a book, that would be best. Programmers almost always have a "simulator". So they can learn without destroying things (most of the time). People learn in different ways. I learn by doing. Once I use something, I start to see it's capabilities and imagine what else I could do. Then I read on that topic and iterate. Simply reading a book is a horrible way for me to learn how to DO something. – iheanyi Feb 24 '14 at 15:48
30

The best way to get a non-developer up to speed quickly is to inspire them!

To have any success, the candidate must be at least curious, if not passionate, about programming (regardless of the platform).

While I agree with Joel in the case of the ideal candidate, I'd be careful not to cram too much theory into a weak mind - it'll only put them off. If they're inspired, curious, and hopefully passionate, they'll want to understand the theory after they've seen the magic.

I completely agree with @karudzo - self-accomplishment and a constructive review can be very inspiring.

jkoreska
  • 692
  • 4
  • 5
  • 29
    "If you want to build a ship, don't drum up people to collect wood and don't assign them tasks and work, but rather teach them to long for the endless immensity of the sea." - Antoine de Saint-Exupery – Julien Chastang Jul 28 '11 at 17:00
  • Julien - nice! Exactly! – jkoreska Jul 28 '11 at 17:04
  • I completely agree with you on this one! I've mentored/tutored many developers whom had no experience and at times had no idea they would end up programmers. I did this simply by guiding them along the way... their own curiosity and passion lead them to the end-result. Had they not had any of those two attributes, I don't believe it would have been possible for them to achieve what they achieved. I work with too many programmers who lack one or both those attributes and are in it just because there is a lot of work available...it's awful! – Jeach Mar 20 '13 at 14:33
  • I agree. I feel the question of learning programming is answered in a very literally. People learn things for a reason. People learn to program to solve problems, help people, and turn ideas into something real. I've met people who forgot this along the way and when they rediscovered it they rediscovered their love for programming. When you really enjoy something you will learn, you will find ways to learn, and you will get better. – Luis Perez Nov 03 '13 at 14:14
12

I am looking for the quickest way to get him to speed.

The quickest way might be to give him the time it takes, although that could easily be a year or two.

Sure, it seems easy to teach him a simple language (C#, if he's to do .NET stuff), but learning a language is not learning to program.

If he never has programmed, then, besides the syntax and library of at least one language, he will have to learn about arrays, linked lists, the compilation model of whatever language he learns, modularization, resource management, paradigms, patterns, Big-O-notation... - the whole enchilada. That's a lot of stuff to plough through, and most of us took several years just to learn these basics, and even more to become a real professional programmer.

There's material out there that covers a lot of this (like Stroustrup's newest book that teaches programming using C++, rather than teaching the language C++), but there isn't very much of it and nothing that covers all of it. So the guy must be willing to learn, and to read a lot of books and articles.

As to how to do this: I don't have a full-blown curriculum at hand to paste here. (Sorry.)
What I'd recommend, though, is to start with teaching him one programming language, so that he has a chance to make some fast initial progress and get some encouraging results. There's quite a few books out there to teach such languages, pick one you're familiar with. If the book has many exercises, and he is willing to do them, be prepared for spending a lot of time helping him with those. If the book doesn't have (m)any, start to think up your own ones well ahead, but be prepared to adapt them to his level/speed of understanding.
If that first language wasn't either C or C++, IMO he should learn one of these next. K&R is good for that, as is Stroustrup's TCPL or, if he can (with your help) deal with a steep learning curve, Koenig/Moo. The reason I'd recommend this is that, once you know C or (IMO preferably) C++, it's relatively easy to pick up any of those C derivates like C#, Java, ObjC...

For the rest, provide him with a constant stream of good books and articles. I don't think it's very helpful if we suggest too many of those, since 1) it has to fit to your company's culture, and 2) you have to feel comfortable telling him to learn that stuff.

sbi
  • 9,992
  • 6
  • 37
  • 56
  • 1
    "entry level developer supporting existing .Net applications" ... "he will have to learn about arrays, linked lists, the compilation model of whatever language he learns, modularization, resource management, paradigms, patterns, bit-O-notation" Those are all 'nice to haves', but I bet that a good chunk of the developers who *wrote* the code don't have those skills. – Kirk Broadhurst Nov 07 '11 at 04:27
  • 1
    @KirkBroadhurst: If so, then something is wrong at your company. – sbi Nov 07 '11 at 21:36
  • @sbi I think you'll find something is wrong in a lot of companies. OP's company is suggesting that a non-programmer (but he's a 'smart guy'!) be moved to a role doing application support. I don't know where *you* work... but in my experience that's 'the real world'. Really good, competent programmers are the exception - like in most industries, most people do just good enough to get by. – Kirk Broadhurst Nov 07 '11 at 21:41
  • 1
    @KirkBroadhurst: Where I work is my decision. I have fled companies for being incompetent, and I'd flee if none of the developers know about at least most of these things. – sbi Nov 08 '11 at 06:05
7

I wouldn't start them on .NET. I have made this mistake too many times. Don't let an employer pressure you in to creating an incompetent programmer because of time. .NET may be a fast development platform, but it doesn't force developers to learn programming. In C# alone, you will find a developer getting stuck on reference types, object lifetime, they will leave huge memory leaks (yes it is possible in .NET), and will have poor designs. It would be much better to start them on C or C++ (probably c++ since they will need to use OOP concepts) and then say something like: "Now wouldn't it be nice if your memory was managed for you, every thing was object-oriented, and you didn't have to deal with all of these nasty pointers?" Here is C# and JAVA. If they have mastered c++, they will conquer both in a week or two each. I recommend Joel's regiment. That was the list that my CS 101 teacher gave me, and I was much better when I hit numerical analysis because of it. This will also allow you to find out earlier if the candidate will cut the mustard or not. Also, once you get c and c++, you will automatically understand c# and java after reading the introduction to the books. Not only would you understand them, but you would understand them better than someone who didn't know c and c++.

Jonathan Henson
  • 5,039
  • 3
  • 26
  • 33
  • 4
    ""Now wouldn't it be nice if your memory was managed for you, every thing was object-oriented, and you didn't have to deal with all of these nasty pointers?" You mean Here is the STL. Wait, what. Why didn't you teach me to use the STL in C++ from the start?! – Raynos Jul 28 '11 at 07:40
  • Well, STL is sweet. I am referring more so to the Windows API in so far as Windows programming goes. The windows API is not designed with OOP in mind. I find it a great exercise to make some poor chap write an application using the API in c++. I then have him/her write a Window class and encapsulate the event loop so on... you know, make it object oriented. Then after they finally have it working I show them Windows Forms. It really forces them to deal with some basic concepts--i.e. how a Windows application works-- that someone would never get if they just jumped into .NET. – Jonathan Henson Jul 28 '11 at 08:04
  • 4
    why would anyone touch the windows API with a stick. I mean were talking about the `hWND` from the 80s right? Clearly you use some nice abstraction instead (Which abstraction is a completely different debate). Sure knowing how it works under the hood is nice but you don't need C#.NET for the abstraction – Raynos Jul 28 '11 at 08:08
  • 2
    The Windows API is amazing. Anyways, I only use it for a teaching tool. For instance, people usually do not understand how events get magically fired in the windows programs. It is helpful for them to have to fool around with the event loop. Also, programmers need to at the least be familiar with the hWND especially if they will be dealing with any apis that fool around with graphics--just as you will have a hard time doing anything in Unix without knowing how to use an XID. Anyways, it forces them to learn how a windows program works. Also, once they finish, they know how Windows.Forms works. – Jonathan Henson Jul 28 '11 at 08:13
  • It doesn't have to be a transition to C# b.t.w, just to .NET in general. I think @Joel has a good article on the Law of Leaky Abstractions as to why it is often good for programmers to look under the hood before using a framework. – Jonathan Henson Jul 28 '11 at 08:15
  • John I think you forget that C and C++ are also abstractions. You might as well ask that he program assembly so he can really understand C and C++. Personally I say start with a language like C# where you don't have to stop every half step because of a null pointer or memory leak. Be productive then dig deeper. While he's learning just assign him work that corresponds to his skill level, I doubt every change in your application requires the best programmers the word. – Luis Perez Nov 03 '13 at 14:26
  • @luisperezphd Good point, people should learn ( or at least play with) at least one assembly language early in their career. ;) Also, you are correct about not every project NEEDING the best programmer in the world. I just don't want to work with or hire people who don't aspire to be the best programmers in the world. – Jonathan Henson Nov 26 '13 at 17:04
  • @luisperezphd To clarify my stance. I want JAVA programmers who can rewrite the JVM if they were asked to, .NET programmers who can rewrite the CLR if they need to, C++ programmers that could rewrite C with Classes if they needed to, and I want * programmers to be able to swap between languages and platforms within a week of being asked to. Will they ever need to? Maybe not. But, if they can they will actually know their domain better and be able to come up with more valuable and creative solutions to problems. – Jonathan Henson Nov 26 '13 at 17:12
6

Pair programming. Let them shadow you while you write your own code - any code. Within hours, then have them enter your code in for you, while you tell them what to do, keystroke by keystroke even if necessary. Answer a few of their questions, but not so much so that you get slowed down by much - just let them soak it all in. They'll also find your typos and more of your bugs than you might think. Within a few days, they'll be able to start 'navigating' telling you what code to enter for tasks similar to ones they've seen before.

I learned much of what I know as a developer this way within a month, and have taught several other new developers this way, one of whom was able to take over for me as the lead developer at a startup after several months. When we first started working together, he hadn't ever written a single line of code.

trace
  • 61
  • 1
  • 1
  • 1
    I think pair programming is a really great way to teach novice programmers, but I think pair programming all the time can be problematic. I think novice programmers need some time working alone to learn how to solve problems and to build confidence in their abilities. – Helephant Nov 07 '11 at 20:37
  • Yep, get them going with the pair programming & give the simple tasks -- real tasks, on the software they're meant to be working on, in the language they're meant to be working in, with real accomplishment. **Review & mentor _all_ their work and they will progress.** – Thomas W May 15 '13 at 00:52
6

Give them something simple, but useful to solve. Let them fumble through a bit and help them polish it up. There's nothing like a small accomplishment to help spur them on (although someone not interested in programming w

jschorr
  • 169
  • 2
2

Give him a good ide (visual studios, express is still good). Teach him the common 60% of syntax (leave out yield, linq, enums, attributes, etc, do teach classes, virtual and override). Spend time on the debugger (especially callstack). Then tell him to google "msdn functionanme" whenever he needs help and that should get him off to a quick start.

Also teach him to never catch and swallow an exception. Tell him he must rethrow or log it!

Bonus: teach him how to serialize json data so he can easily read/write to a file. A db is overkill and too much to learn and you dont want to have him writing custom file formats although i may let one entry per line type of file pass to save/load an string array as acceptable.

1

I know a lot of people have been talking about languages and books for those languages. I differ.

Programming is about learning to think analytically. First and foremost the person should be able to think and come up with the algo on a piece of paper for what the problem is. You have to guide them so that they get the right thinking technique.

Next comes the fundamentals of the language. Get them started on the language of choice. Give a problem to program.

After this first cut is over get them to do the CS fundamentals and the Design Patterns.

Now get them to reprogram the earlier problem with these new concepts.

Nomad
  • 19
  • 1
1

Start him on the basics: variables, loops, while loops, for loops, arrays, teach him basics, printing to screen, doing some simple math. Move into methods and basic OOP, things like here's how to create a class, show him the why not just the how.

The language doesn't matter, but pick something you know and that is highly abstract (java, python etc...) that way he doesn't need to worry about things like memory management, pointers etc... Teach the basics of recursion, towers of hanio or recursively searching directories.

Learn to program is a good free resource on Ruby programming. Make it fun, easy and entertaining.

Snow_Mac
  • 349
  • 1
  • 3
  • 9
1

Give him some challenges and have him learn how to find resources to solve the problem himself.

If you can teach him how to find answers and be self-sufficient, he will naturally learn how to program well. Critical thinking and resourcefulness are two key skills for a programmer.

At the end of the day, passion/interest is definitely going to be a key factor in how successful they will be in learning it quickly. If he doesn't have or catch "the bug", it might be a slow and/or painful process. If he does catch the bug, he will be up late coding, off work hours, having the time of his life.

Andy Fleming
  • 444
  • 3
  • 9