// Internet Duct Tape

The Missing Curriculum for Programmers and High Tech Workers

Posted in Programming and Software Development, Technology by engtech on March 01, 2007

I’ve been thinking about what I learned in University and more importantly what I’ve learned since University. These are the essential subjects and skills that were completely ignored at the University level, but would have been very useful to have. They might not have worked as full courses, but a lecture or seminar on the subjects would have helped.

Estimation, Procrastination and Motivation

  • Personal Estimation: Why it is Going to Take More Than Two Weeks to Hit Your Deadline
  • Why Cramming for a Deadline is Effective at School but Not in the Workplace
  • The Internet: Do You Really Need It For Your Job?
  • The Passion of the Code: Loving What You Do
  • Metrics: What Isn’t Measured, Isn’t Done
  • Focus on the Important, Not the Immediate

Programming and Testing

  • Why We Don’t Teach Scripting Languages Even Though You’ll Use Them More Often Than Fortran, Pascal, C or Java
  • All Programming is Maintenance Programming
  • Why Re-writing from Scratch is Always the Worst Choice
  • Verification: If It Wasn’t Tested It Doesn’t Work
  • Automation vs Doing It By Hand: What Is More Efficient?
  • Hardening: The Only Bug-Free Code is Old Code
  • The Turtle and the Rabbit: Fast and Lazy vs Slow and Diligent


  • Don’t Blame the Tools (Even Though the Tools Suck)
  • Don’t Reinvent the Wheel: Leveraging Open Source
  • How Version Control Will Save Your Life
  • Text Editors: Why Notepad Isn’t Enough
  • Bug Tracking: More Than Post-It Notes!
  • Back-up Strategy: Painful but Necessary


  • Diagrams, Diagrams, Diagrams: A Picture is Worth a Thousand Words
  • English: Not Just for Managers!
  • Automatic Documentation Generation: Why Documentation Should Be Tied to Code
  • Abbreviation: Why Abbreviating Four Letters to Five Helps No One

Users and User Interface

  • Keep It Simple, Stupid
  • Cognitive Overload
  • Users are People, Not Problems
  • Support Isn’t a Four Letter Word (It’s Seven)
  • Servicing Interrupts: Getting Work Done While Supporting Co-Workers

Delegation and Interpersonal Skills

  • Passing the Buck and Shifting the Blame
  • Making Small Talk When You Have Nothing in Common
  • Why Co-Workers Are Companions, Not Competition
  • Trust Issues: Don’t Assume That What Your Co-Worker Gave You Works
  • Bribing IT: Getting Your Computer Problems Fixed In a Reasonable Time


  • How to Avoid Meetings
  • Who to Invite to Meetings
  • How to Stay Awake in Meetings When They’re Unavoidable
  • Shutting Up: Keeping Meetings Productive When You Have Nothing Useful to Say
  • Why Design By Committee Doesn’t Work

Health and Appearance

  • Staying in Shape Even Though You’re Sedimentary
  • Eating Healthy When You Have Fast Food Every Day
  • Hygiene: Friend or Foe?
  • World Wide Wassup: Meeting Your Mate on the Internet
  • I am Pretty: Why Go Into Consulting or Marketing

Finance and Future

  • Planning for Retirement
  • Public Companies vs Start-ups: Pros and Cons
  • *HOW* Much of the Company Do the VCs Own?!
  • Stock Options Dos and Don’ts
  • How to Evaluate Benefits Compared to Salary

I think each of these subjects could be a post in itself (and probably has been). If you have any relevant links then please drop them in the comments.

Related Posts

18 Responses

Subscribe to comments with RSS.

  1. willCode4Beer said, on March 01, 2007 at 6:52 pm

    Looks like you’ve been reading a lot of “Joel on Software”

    In reality the problem is the majority of the professors teaching this and developing the curriculum, have no real world work experience.
    The people with real world experience aren’t likely to give up a 6 figure salary to get involved in university politics and take a major pay reduction to become professors.

    Maybe one day we’ll get to an
    apprentice=>journeyman=>master model of creating programmers. one day…

  2. engtech said, on March 01, 2007 at 7:34 pm

    You got me :)

    I think I’m going to see if I can find a post by Joel or Jeff Atwood for each of those subjects…

  3. jkndrkn said, on March 01, 2007 at 10:52 pm

    The problem with a computer science degree, is that it is a computer *science* degree. It emphasizes the theoretical over the practical.

    Often, such degrees will include a software engineering course.
    However, the lessons one can learn on the job simply can’t be learned in an academic setting where programming projects are small, you don’t maintain large codebases, deadlines are less strict, and you don’t spend a solid 40 hours/week in meetings or in front of an IDE/editor.

    One solution to this problem would be to require that every CS student take an internship position as an entry-level programmer. This guarantees that by the time you graduate, you will have had exposure to real-world issues.

  4. Jacob said, on March 01, 2007 at 10:59 pm

    Sedimentary? I think you mean sedentary. Although, some people I know are so sedentary that they could almost qualify as being sedimentary. :-)

  5. Garam Chai said, on March 01, 2007 at 11:55 pm

    Interesting observations.

    Corporations don’t care about employees’ health. Donuts, pizza, nachos/cheese, etc. are the free foods provided at workplaces. Don’t forget all kinds of sodas, too. If work doesn’t kill, food certainly will make sure one doesn’t survive!

  6. engtech said, on March 02, 2007 at 12:00 am

    @jkdrkn: I agree that the problem is theoretical vs practical. My education background included 16 months of internship plus 12 months of internship I had before university. It was invaluable.

    @Jacob: That was an intentional mistake for exactly that reason :)

    @Garam: So very true. Some corporations try to compensate by including gym memberships in the benefits (or at least, did in the hey-day before 2000).

  7. codestalker said, on March 02, 2007 at 6:00 am

    I have to agree. As simple and short as that. Mind you I’m only 15 though.

    ~ CodeStalker

  8. PB said, on March 02, 2007 at 7:15 pm

    And, of course, after sedimentary comes cementery.

  9. Charlzz said, on March 05, 2007 at 4:25 am

    Of the computer science teachers who actually want to teach, there is a dilemma. Programming is hard. And many of the students who want to be computer science majors aren’t cut out for it. When you have someone who took a programming class, then took two semesters off, then decided to take another programming class and can’t recall anything, you see the problems that can affect even the best teachers.

    Yet, teachers want to succeed, and often, failing 80% of your class is not something the administration wants. What are your choices?

    You make programming easier. Many of the topics mentioned are dropped because it would be clutter for both the student and teacher. And many teachers simply aren’t technologists, by which I mean, they don’t try to keep up with the latest trends, hoping that what they learned ten or twenty years ago is good now and will be good forever, when people in industry know that isn’t true.

    Professors with Ph.Ds know how to educate those seeking a Ph.D. A few of them even fit the hacker mentality a la Paul Graham, who understand what’s happening out there. They think training students to be software engineers is tantamount to being a trade school, that they teach stuff that’s more fundamental, not the latest trend that’s going to be replaced by the Next Great Language.

    My feeling is that the big-name software companies need to invest (say, through their own summer schools) in education as well if they hope to see students graduating that can handle the ever-changing software industry.

    Yours is a good list to get someone started.

  10. engtech said, on March 05, 2007 at 11:44 pm

    @Charlzz: great comment.

    I think some of the stuff like Microsoft certification programs were attempts by the software companies to invest in education (although how effective…)

    I wouldn’t be surprised if instead of funding summer schools they hand pick university programs to donate to. I’m sure Stanford gets a nice chunk from Google.

  11. engtech said, on March 06, 2007 at 3:00 am

    Ooh, good article over here on a similar subject:

  12. […] Missing programmer curriculum Missing programmer curriculum. […]

  13. Tulipe.Moutarde said, on March 06, 2007 at 3:19 pm

    Great article about real-life compsci job, as i’m currently still a student and big reader of Joel on Softawre I have an inner view of the education problem

    Some of the point you give are heavily teached in certain university. This year, I’m doing a year abroad in Durham University (UK) and they do teach importance of version control, of the tools, as well as the schedule problems, software metrics, real-life risks, testing, …
    All those things are heavily experiment by student by doing a real life cross-development project (they call it ‘SEG’).
    The best team in this project participate in the IBM University Challenge (national competition in UK).

    When I come back in my home university (Université de Mons, Belgium) i’ll try to increase the compsci dept’s awareness of such topics.

    Of course the best way for a student to be realize all those things is to find a good internship or participate in an opensource project.

  14. cdr said, on March 08, 2007 at 1:16 am

    My school’s Software Engineering program covers the vast majority of your points. Admittedly SE curricula is pretty new, but it looks like your program was not a very good fit for your career path. CS degrees can’t hold a candle to SE degrees if you’re going into the working world.

  15. Maggie Leber said, on March 08, 2007 at 7:09 pm

    sedentary -> sedimentary -> cementary -> cemetary

  16. […] que a grande maioria só aprende na marra. Um ótimo resumo de muitas atrocidades que costumo ouvir de outros ‘ITers’ mundo afora que se julgam […]

  17. Dan said, on April 18, 2007 at 12:55 am

    Nothing substantive to add here, just wanted to say that I loved this post.

Comments are closed.

%d bloggers like this: