Podcast #36

by Jeff Atwood

on January 8, 2009

Joel and Jeff, with special guest Eric Sink of SourceGear, discuss source control present and future, why writing a compiler is an important rite of passage for programmers, and how budding software engineers should be educated.

  • I was convinced Eric was going to agree with me on whether or not software developers should know C. Unfortunately for me, he agrees with Joel. Doh!

  • Eric's Source Control HOWTO should be required reading for every software developer. Eric literally wrote the book on this, and in fact this series is being converted into a book. Deservedly so; it's fantastic. The best person to explain source control is someone like Eric who literally wrote a source control system from scratch -- SourceGear Vault.

  • An extended discussion of the evolution of source control systems, into distributed version control (DVCS) such as Git, Mercurial, Darcs, and BitKeeper. Eric feels Linus Torvalds' video "evangelizing" Git does the opposite for many. He's also uneasy about branching and merging becoming easy, common operations, which is much of the promise of DVCS.

  • Eric feels DVCS solves certain edge conditions very well, but those edge conditions should only be explored when you feel the need, not promoted as broad feature bullets to the average developer. "The harder you try to explain DVCS, the worse it gets, so stop!"

  • Eric points to Eric Raymond's evolving Understanding Version-Control Systems as a pretty good survey of today's source control landscape.

  • Often, features aren't the point -- discoverability is. I was amused to find that Eric discovered how convenient background compilation is in Eclipse. This is something that Visual Basic developers have had for 8 years! Java and C# developers don't appreciate what they're missing because it hasn't been surfaced in the product, until now.

  • Eric and Joel note that, at some level, source control is about putting obstacles (let's call them safety barriers) in front of developers -- and the question is, how many does your shop need? Do you remember working without version control at all? It's incredibly fast, until stuff gets overwritten or lost, of course.

  • Joel and Eric maintain that writing a compiler is an important rite of passage for a programmer. There's an enormous class of programming problems where writing a lexer, parser, recursive descent, and parse trees will help you. Once you understand how easy it is to set up a state machine, you'll never try to use a regular expression inappropriately ever again.

  • Eric also wrote a web browser. It's interesting to contrast the experience of writing a compiler, which is typically extremely strict and will fail to compile if a single character is out of place, versus writing a web browser, which accepts all kinds of malformed and downright incorrect HTML and JavaScript. Eric and Joel think this was categorically a huge mistake; I'm not so sure.

  • On Postel's robustness principle: "be conservative in what you send, liberal in what you accept." This becomes a painful war of attrition at some level; everybody is vying to accept just a little bit liberally than the next guy, so isn't there an implied element of mutually assured destruction at the end?

  • Eric: "Computer Science degrees do not teach programming; they teach how to learn". And he's OK with that. We all agree that it's hugely important to complement your computer science curriculum with either hobby projects, internships in the so-called "real world" -- or both!

  • Congratulations to our new UserVoice community moderators -- Joel Coehoorn and Sean Massa. Do participate on the Stack Overflow UserVoice feedback site, we check it every day, and we read all the feedback we get!

Our favorite Stack Overflow questions this week are:

  • Eric: What is the single most effective thing you did to improve your programming skills? Eric says it was when he wrote a compiler. "You'll write the crappiest compiler ever, but you will learn so much."

  • Jeff: What's your most controversial programming opinion? This question is almost a textbook example of what we don't want on Stack Overflow, in that it's an unanswerable and probably contentious discussion. And yet it's an extraordinarily high quality question! This is a testament to the quality of the participants, another example of the Stack Overflow community defining what they want to see and setting a positive example for other programmers to follow.

We answered one listener question on this podcast:

  1. Espen Grindhaug: "In many universities and colleges, they don't teach the 'new' technologies. Can you list some books to get up to speed on the new technologies?"

If you'd like to submit a question to be answered in our next episode, record an audio file (90 seconds or less) and mail it to podcast@stackoverflow.com. You can record a question using nothing but a telephone and a web browser. We also have a dedicated phone number you can call to leave audio questions at 646-826-3879.

The transcript wiki for this episode is available for public editing.