HOWTO: turn a student into a software developer

Yesterday I was frustrated.  I’m teaching my open source Mozilla courses, and I happened to look at our blog planet.  Right now we’ve got more than 30 students working on various open source projects, and to look at their blogs, you’d think they were all on holidays.  I view blogging as a barometer for development activity.  “I don’t have anything to write about” is synonymous with “I am not doing anything worth writing about.”  I went around the room and asked my students why they hadn’t done the coding I’d assigned (I asked them to modify something simple in Firefox).  The answers were weak.

I’ve been teaching long enough to know that students often do the minimum required to get a grade.  And while that might be a reasonable way to get grades, it’s not going to turn them into software developers.  Software is hard.  I was commenting to Chris yesterday that a computer is basically just a box built on a system of reason you don’t understand yet.  Programming is mostly about overcoming your own limitations.  It’s creative, problem solving work, and it is something you have to spend a lot of time to get the hang of before you’re any good.

Some of my colleagues talk about students either getting it or not getting it.  I’m not sure I believe this.  I think the right way to think about this is that there are students who push themselves, and those who don’t.  I know some developers who seem to just be built for the task of thinking through these problems.  I also know that they’ve worked really hard to get to this place, and that it’s easy to confuse their ability now for something innate vs. something acquired.  Sure, you have to have certain qualities in order to get there; but the one we don’t talk about enough, which I think is the most important, is that you have to be willing to put in the time and push yourself.

While I was getting after my students, I pulled up a favourite essay of mine, Peter Norvig’s Teach Yourself Programming in Ten Years.  He’s writing about a phenomenon I don’t see as much today–the “Learn X in 21 Days!” books.  What I wanted to show my students, though, is how well what he’s saying maps onto open source development.  Here are some examples:

  • Get interested in programming, and do some because it is fun. Make sure that it keeps being enough fun so that you will be willing to put in ten years.
  • Talk to other programmers; read other programs. This is more important than any book or training course.
  • Program. The best kind of learning is learning by doing. To put it more technically, “the maximal level of performance for individuals in a given domain is not attained automatically as a function of extended experience, but the level of performance can be increased even by highly experienced individuals as a result of deliberate efforts to improve.” (p. 366) and “the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors.” (p. 20-21) The book Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference for this viewpoint.
  • If you want, put in four years at a college (or more at a graduate school). This will give you access to some jobs that require credentials, and it will give you a deeper understanding of the field, but if you don’t enjoy school, you can (with some dedication) get similar experience on the job. In any case, book learning alone won’t be enough. “Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter” says Eric Raymond, author of The New Hacker’s Dictionary. One of the best programmers I ever hired had only a High School degree; he’s produced a lot of great software, has his own news group, and made enough in stock options to buy his own nightclub.
  • Work on projects with other programmers. Be the best programmer on some projects; be the worst on some others. When you’re the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you’re the worst, you learn what the masters do, and you learn what they don’t like to do (because they make you do it for them).
  • Work on projects after other programmers. Be involved in understanding a program written by someone else. See what it takes to understand and fix it when the original programmers are not around. Think about how to design your programs to make it easier for those who will maintain it after you.
  • Learn at least a half dozen programming languages. Include one language that supports class abstractions (like Java or C++), one that supports functional abstraction (like Lisp or ML), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), one that supports coroutines (like Icon or Scheme), and one that supports parallelism (like Sisal).

Notice how your grades aren’t really what matters here?  Some of the best programmers I know never went past high school, and some of them went to Harvard.  It turns out that there is something other than grades that makes you good at this stuff.  I honestly believe that involvement in open source for students is one of the most critical things to doing what he describes.  How do you do some of this stuff without open source?  How do you work on projects with other programmers if you can’t get hired somewhere (no experience? no job)?  How do you get to work with programmers who are better than you if you don’t know any?  How do you get to work on large code bases after someone else has written them if you can’t access them?  How do you learn half-a-dozen languages without a need for them all?  How do you learn how to read code without code to read?  Open source might not be the only way to do what he describes, but it is the most readily available way for large numbers of students.

The last thing that happened in my day before I went home was that another student (not in my class) came to see me to ask about how to fix his Firefox debug build.  He came to me a while ago looking for a bug he could do in Mozilla.  “I want to learn, what do you suggest I work on?”  I gave him a non-trivial C++ bug in Mozilla’s XPCOM system that is causing some strange crashes.  Since then he’s taught himself a lot, started to ask some useful questions, and gotten underway on his 10 years to becoming a software developer.

What is necessary to get students to do this kind of work?  They have to want it.  They have to push themselves.  There’s not much you can do to make them do it, since no course lasts 10 years.  It’s not that there are those who are good at this and those who aren’t.  There are those who push themselves and those who don’t make the time.  Want to get good at this stuff?  What are you doing about it?

This entry was posted in CDOT, Mozilla Education, Seneca, Teaching Open Source. Bookmark the permalink. Both comments and trackbacks are currently closed.

7 Comments

  1. Aaron Train
    Posted February 17, 2010 at 6:39 pm | Permalink

    Dave,

    It’s fascinating to see the tilting degree of variance in student participation and ability to ascertain knowledge, question and inquiry. As a professional option course you are teaching to mid-to-end program students, it makes me wonder what some of the root issues are. You mention that, “The answers were weak”, which may be so – but are these cover-ups for something troubling? Let me present pose some questions that your blog post made me think of .

    Is the underlying area of concern, a conflict with uncertainty, an issue with the role of a culture coping with a bombardment of decisions and anxiety to plan for our future? Is it simply a matter of finding out what exactly what we are interested in, what we want to do, what we are willing to do? But then again, at this stage in the game we should have an idea. Is it a matter of finding our niche? Is it finding an issue of finding the right avenues that best interest us?

    What do you think? Are the, “weak answers” just a blanket over underlying issues? Is there something else? As a student, I am fascinated that in late semester, there are still such issues amongst students.

    - Aaron

  2. Posted February 17, 2010 at 6:58 pm | Permalink

    I’m sorry but I think this is somewhat unjust. I’ve been working for at least 3 weeks straight pretty much, maybe an hour of tv on the side while I eat, on all of my classes equally and have been working towards trying to get to OSD, but have been struggling trying to get to my bug and to work on OSD as much as I’d like to because other classes also take priority. I have had other assignments due throughout the weeks that I have had to accomplish because they had earlier due dates. It doesn’t mean that we’re not programming, or that we’re not trying…it doesn’t mean that we don’t want to be good, that we aren’t trying to better ourselves, or that we don’t want to work on the open source labs/projects/bugs assigned to us. The only problem is, other assignments are equally important. Not because we care about them more or think that they’re more important; just because they also contribute to our overall marks and mean the same in the end. Perhaps not overall in terms of life lessons and getting recognition, but as far as school goes, they mean a lot as well.

    I know that you say that everyone gets A’s and that’s not so important as what’s out there on the internet, but we also try to achieve the best that we can and a D or a C on our transcript is not something that we hope to see because one class took priority over others. We care a lot about your class and the things that you say, and it is definitely my favourite class that I’ve taken so far in college, or before, but I can’t let my other classes slide just because of favouritism. I have been working non-stop trying to get the time to do the labs that you assigned, the bug assigned to me, and overall just do as well as I can in your class, but I have a very demanding schedule this semester and I can’t do everything that I want to or hope to do. I’m sorry for that, but if I could I would be working on your class all the time.

  3. Posted February 17, 2010 at 8:31 pm | Permalink

    Hi David,
    I came up with the concept of the Open Source Learning Lab – a mentoring based teaching and learning model and we’ve been working on the first stages of it. It was very pleasing to discover similar philosophies at Seneca about halfway through our project . See http://staging.eduforge.com and http://staging.eduforge.org which are soon to replace the current http://www.eduforge.org.

    We appreciate the insights you off in this space.

    regards
    Richard

  4. Posted February 17, 2010 at 9:15 pm | Permalink

    I agree with Derek, I guess it comes down to time management as well, Hopefully the march break will give us time to get all organized and we can push our self’s even further….Though for me last weekend it was hard getting my mind off one thing which was working on my Iphone App(APD601 course) but because I was running into problems I nearly spent two days on it…and Didn’t want to do something else until I finished it….and I don’t think I distributed my time equally but I guess sometimes its hard to get your mind off something, your just keen to finishing it? I don’t know, nevertheless OSD600 is one of my favorite classes from all the courses I took at Seneca College and this was just my opinion on this issue:)

  5. Posted February 17, 2010 at 10:45 pm | Permalink

    It’s a very important topic that you have touched on and thanks for that. Here are my few cents:

    - You’ve said that you view “blogging as a barometer for development activity”. Well, this is probably the first problem. Your view is important but neither blogging nor open source work by itself can be a good indicator of student activity or turn a student into a software developer.

    - Another problem could be that sometimes students do want to make progress or solve problems, but they need help and at times that help is not available. I as a student have experienced this many times.

    - And last but not the least, how much work students put into a course may have to do with the course they are taking! Unfortunately, open source is sometimes not an option, it is the only option!

    Also thanks to Aaron, Derek, and Harjinderv for pointing out some other very important factors.

    Hope everyone succeeds in what they are meant to succeed!

  6. Posted February 18, 2010 at 9:27 am | Permalink

    As a student taking this class, I am one part to blame, but I get something good from this. How much work one does, whether it’s a lot or a little, more or less, is relative. You can be doing a million things, and meet someone doing a million and one things.

    In this case, we might feel like we’re really busy, and have no time, and where we are now, it’s probably true, but to Dave, I would say it’s very little, we CAN do more, and Dave obviously knows this, we just have to push ourselves to do more.

    Being part of this environment is good, and Dave is truly pushing us, maybe for the first time since first semester.

    Personally, I went home after this and started on Firefox. I did not get very far, I spent most of the time just trying to understand the code (I still am) but I think we all should of tried, and failed, and mentioned that on our blog’s instead of nothing at all. Doing what you can and posting something is better than posting nothing. *shrugs*

    I think there is a lot of passion in this post, and Dave truly cares.

  7. andre
    Posted February 18, 2010 at 2:09 pm | Permalink

    I really liked David’s post. It’s deep, motivating and profound. Time management was always a problem for me, i even went to see the student council regarding this issue. So, i decided to split my time into 2 segments:
    1.School during weekdays with homework in the evenings and
    2.OSD and Iphone projects on the weekends.
    You can do alot in 2 full days if time is controlled and prescheduled. I love school, and not in the rush to get out of here. Switching to BSD is very exciting and I’m looking forward to new classes especially OSD. Keep it up Dave!