“Who are your peers?” A response to Joel Spolsky

A number of colleagues have pointed me at Joel Spolsky’s latest post, Capstone projects and time management.  In it, Joel argues for the inclusion of real-world projects in computer science programs and laments the near universal dismissal by (top) schools of any grounding in things like version control, debuggers, testing, etc.  He writes:

It is amazing how easy it is to sail through a Computer Science degree from a top university without ever learning the basic tools of software developers, without ever working on a team, and without ever taking a course for which you don’t get an automatic F for collaborating. Many CS departments are trapped in the 1980s, teaching the same old curriculum that has by now become completely divorced from the reality of modern software development.

Where are students supposed to learn about version control, bug tracking, working on teams, scheduling, estimating, debugging, usability testing, and documentation? Where do they learn to write a program longer than 20 lines?

He ends with this interesting observation (emphasis mine):

The only reason the real world gets this right where all-student college teams fail is because in the real world there are managers, who can set deadlines, which a team of students who are all peers can’t pull off.

This echoes another conversation I had on Mozilla’s Education irc channel today.  Sid, Blake, and I were talking with about the complete lack of version control use among most students:

< sid0> bwinton: I’ve even tried convincing several people to switch to version control, but I guess zips are “good enough” for the kind of assignments we get (at most a thousand lines or so, 1-2 people)
<humph> sid0: exactly.  you have to need it before you need it. they don’t need it with that stuff
< sid0> yep, exactly
< bwinton> So, sid0/humph/jcranmer, how would you get people to switch to version control? Just give a really big/long assignment?
< sid0> bwinton: I guess a more productive way would be to get people into open source
<humph> if you want people to learn things like this, you have to insert them in a mature environment that already does this stuff and have them do what the others do.  if they do what the others do, and the others are just their peers, they never learn anything new.

You can sum up this conversation and Joel’s conclusion by asking a simple, but important question: who are your peers?  As a student, with whom do you surround yourself?  As a professor, who are the people collaborating with your students?  As a developer, manager, or other industry professional, with whom are you (and your employees) engaged on a daily/weekly basis outside your company?  Who are your peers?

Joel’s solution to this problem is also the same reason Sid knows version control, and uses it as a student studying computer science in India: the only way to learn real-world skills is to engage with the real world, and more specifically, with the problems of the real world.  Sid’s a professional software developer even though he’s still in school because he’s taken it upon himself to work on Mozilla development now, and in so doing diversified his peer group to include some of the best software developers in the world.  That problem you can solve the night before it’s due for class, the one whose code you are swapping back and forth across email with your group members, it’s not real.  The fact that you can work on it like this, and get away with it, necessarily disqualifies it from any definition of ‘real.’  It’s not real, it’s simply due.  It’s uninspired, unimportant, and unnecessary.

It doesn’t have to be this way.  Despite Joel’s broad statements, there are schools where this is understood.  I know because at Seneca we’ve spent the past five years doing what he describes, and it’s been a huge success.  The key to making it work, though, is missed by many of my colleagues in academia, who assume that the only way to approach this is to partner with closed-source companies.  I liked how Joel said that he was going to sponsor a group to work on Mercurial–one of the best version control systems there is, which also happens to be open source.  What’s significant about that?  It comes back to the possibility of connecting students to a new peer group.

Let me give you a real and current example.  I have a student in my Mozilla Open Source Development course named Ehren Metcalfe.  In this course, students are asked to work on a real project/bug within the context of the Mozilla project.  We don’t let them choose the project out of the air; it has to be real, which is another way of saying, Mozilla needs to care about it enough that they will get involved, will become a peer for the student(s).  Ehren came to me on the first day and said, “I want to work on gdb.”  I probably don’t need to tell you that I don’t hear this often from a student.  But my philosophy in the course is to let students get passionate about a topic, so if you want to hack on gdb, JavaScript, python, whatever, let’s do it.  There are crazy people at Mozilla who do work on gdb, so I knew it was a possibility.  But as I introduced Ehren to a tool developer at Mozilla, a new idea emerged:  “Want to make Mozilla really fast?  We have some gcc optimization work we want done.  I’ll help you.”

So before I continue, let’s summarize what we have so far: a student who wants to push himself in a certain direction but with no formal background to do it coupled with a need from a real-world software project/company who is eager to see it happen.  It’s important to note, before we go further, that this sort of apprenticeship can only happen in the context of open source software.  No closed shop, no matter how much they believe in the cause, is going to risk letting a bumbling student look and poke at their internal code, or allocate the time of an employee to training him/her.  Students drop courses, they procrastinate, and sometimes that succeed wildly.  How do you like those odds?  Ready to bet your company on them?

Back to gcc, Mozilla, and Ehren.  How far has he gotten two months into the project?  Pretty damn close.  How is this possible?  It comes back to the question of peers, and the potential of open source communities to mentor new contributors.  I don’t want to pretend that I’ve taught him how to pull this off.  I’m not a gcc hacker.  Instead, I’ve taught him how to be lost productively, how to manage fear and turn it into forward momentum measured in inches.  And more than this, I’ve gotten him connected to some amazing new peers:

The next morning I tried a new approach by consulting GCC’s bugzilla. Searching for bugs marked enhancement and containing the word “attribute” I came across Bug 36892 Support __attribute__((deprecated(“text string”))).

“Did you notice that your student just copied source from the web for his assignment?”  I did, and he’s getting bonus marks for it.  More than that, I’ve seen him overcome his fear of sounding like a fool, and asking questions:  “The other night I was stuck on this function, and so I asked on irc.  A gcc dev gave me some info, and later I noticed that he’d written the file I was working in!”  To date Ehren has had interactions with developers at Mozilla, Google, and Red Hat, all of whom are actively developing gcc.

Who are your peers?  Who are your students allowed to talk to about their code?  Who are your employees allowed to help?  Ehren is doing great work this term, but he’s not unique.  I’ve got a class full of students like this, and it isn’t because of something I’m doing, or something they bring (we’re not a “top” school, by any means).  It comes back to peers.  We throw our students into the midst of the best developers in the world, we let them work on meaningful work, and we let them become peers with professionals.

Open source projects like Mozilla aren’t just about code you can download.  They are about peers you can work alongside.  Every computer science student needs this opportunity for growth.  This is how you teach software.

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

8 Comments

  1. cuz84d
    Posted October 28, 2009 at 8:31 pm | Permalink

    I just got a survey from my school i graduated with CIS with focus on Database and Programming. We worked on some software engineering class work, risk management, database development, project planning and documentation.. they want to know how I’ve faired or how they faired actually since I graduated school 9 years ago. The school I went to had some really good professors who taught a lot about old languages, Basic, Cobol, Fortran, Pascal, C/C++ and VB 5 or VB6. True is I though the major downfall, was lack of classes in Business Intelligence, Data Warehousing, etc..

    This write up is so true across the industry, I cannot tell you how many times I everyday people trying to be programmers in this language or developer in that tools, but don’t know CS Fundamentals 101.

    I learned while I was in high school how important that was.. modularity, OOP, documentation, version control at an ISP i worked for.. and not to mention how to debug code.. that was actually part of a few classes I had. We even had to document software code paths.

    I just finished a Database project where a co worker developed all the Validation documentation and test scripts. I comment my code, we put it on paper, version controlled the software. So you start to see this SOX compliance and medical industry applications, but your average programmers don’t know how to do it right.. So may times I see no Fundamentals used, and a lot of times I rewrite reports/code/databases/tools because its just easier than trying to fix something that wasn’t designed and developed to last longer than the initial problem and user.

    Thanks for the write up. I see plenty of code in mozilla that suffers from we don’t need that comment or we’ll just remember what we did in bug so and so.. only to find out, what bug changed that? Where did we regress? What was the window… somebody help, I cannot figure out why it broke.. this is because we try too hard to keep it clean, with out keeping it documented or modular for the sake of 2k or 2ms. My computer goes 2.x Ghz, I don’t care about 8 megs vs 9. On mobile, sure i get it, smaller the better.. less memory use, less footprint.. but that is changing too. Phones can load 4 gbytes SD memory cards, 528mhz to 800 mhz processors.. 640K is enough.. but it will all change.. its not like Firefox cannot grow here and there.. because we all do.. and we have to clean house, which I have been seeing a lot of good effort the past several months.. though fundamentals sometimes go down the drain when you have hackers from all walks of life.. who haven’t been properly introduced to software project development. Documentation, modulatory, best use of code, all contribute to better quality and less errors and regressions and cleanups.

  2. cuz84d
    Posted October 28, 2009 at 8:43 pm | Permalink

    We had to actually go out to the town and create real-world scenarios to develop databases around. Real-world experience is a must. You cannot hardly get a job with out it, so we had to do internships before we could graduate college.

    Some people even go back to school to stay current, but not everyone can afford that.. people who want to help code/develop really do better with a mentor first. Many companies provide such help. I’ve walked into some companies not knowing a thing and I first had to take classes on the tools/programs I had to use to do my job.. which I didn’t have the skills for at the time. You learn so much on the job by real developers not people who try to be developers. Those are the CS folks and CIS folks. MIS folks do more of the project planning, etc.. CS folks just hack code most of the time. CIS is a hybrid, management and code.

    The fundamentals have keep me from creating disasters for myself and others. I have been able to go above and beyond my employers expectations (most of whom don’t know much about SDLC or tech I admit) but they are most excited when they get something even better than what they expected.. this is because I’m trying to use my fundamentals to give people the quality they should expect. Not to mention I am a bit of a perfectionist.. I don’t like leaving crap behind for others and if i have to use it everyday, I don’t want crap either.. other people don’t care.. those are the fly by nighters taking all the real developer jobs because they match personalities.

  3. cuz84d
    Posted October 28, 2009 at 8:53 pm | Permalink

    Its much better to learn to work on team projects and most of computer science classes were team project based. It helps you experience the type of work environment that is developer typical. Real developers do the real work the rest just try to fake their way through their day.. I’ve worked on projects that were more assignments to real software problems. My professors where people who worked in the industry before landing teaching jobs. Some were very smart and pushed us to learn things the right way and put the effort in. I think if a use can take something someone else worked on, try to understand it so they can make something work around the fundamental software problem, then they learn, but copying code without having to debug or create something which only uses a portion of the pseudocode, doesn’t help them learn, but only help them pass tests. The real tests are those setup to work on real-projects, develop your own ideas, learn how to fix the problem, how to please the customer, how to do the homework to present your solution, etc.. it requires a fundamental shift in how we help others learn and grown in the field. Because anyone else who is not trying will flunk out and for good reason. When they do, it becomes apparent, either that person needs tutoring/mentorship or they don’t care enough to be a real developer.

  4. Posted October 29, 2009 at 3:25 am | Permalink

    It’s not just CS students who need this opportunity for growth through peers – we all do.

  5. Posted October 29, 2009 at 4:21 pm | Permalink

    I really appreciate your experiential approach to education, it reminds me a lot of John Dewey’s thoughts about how not only students, but everyone learns.

    In regards to collaboration between Mozilla and your students, it seems that they are learning habits of successful software developers (version control, commenting (hopefully!), design patterns, etc..) rather than just information.

    Wish I had time to write more, just wanted to say nice article!

  6. Colby Russell
    Posted October 30, 2009 at 3:15 pm | Permalink

    I really like this post, and I’m glad you’ve articulated it in the way you have. (It seems like Joel’s post is on target as well. Is this rare?)

    On the other hand, I’m fearful. I’m fearful that if such changes that you and Joel seem to be advocating were to occur, professors and CS department heads would get the wrong idea. Then you end up with the mandate that you must use Visual Studio to develop your project, and that you’re insane to be doing anything other than “real” Win32 development.

    Given the option between the two, I think the status quo is much better. In that case you’re free to do makefiles, write code in a real text editor, use whichever SCM you prefer on your own, and no one cares that you didn’t use MSVC, so long as your assignment is in on time. The only thing lacking with the status quo is the push to do those things. I think that can arguably be a more accurate model of the real world, that is, a results-driven approach.

  7. Posted October 30, 2009 at 5:02 pm | Permalink

    @Colby

    I’m not sure where you got “have to use Visual Studio” from what I wrote. I use emacs, gcc, gdb :) I think mandating a particular tool is not the right way to do this for sure. But teaching students about tools is.

  8. Colby Russell
    Posted October 31, 2009 at 10:09 am | Permalink

    I’m fearful that if such changes. . . occur, professors and CS department heads would get the wrong idea. Then you end up with the mandate that you must use Visual Studio to develop

One Trackback

  1. By Theory AND Practice « UCOSP on October 29, 2009 at 5:34 am

    [...] students in ongoing open source projects, as David Humphrey describes in “Who are your peers?, also holds tremendous promise, as do the dozens of other ideas that people are trying out all over [...]