What schools should
be teaching IT students
  Andy Lester, andy@theworkinggeek.com
        http://theworkinggeek.com
Andy Lester
• 23 years in software development and
  management
• Author, Land The Tech Job You Love
• Many friends made sure their pet peeves
  were in here. We thank you for listening.
• I welcome comments and follow-up at
  andy@theworkinggeek.com
Tools of the trade
Source control
Source control

• Branching
• Merging
• Team-based
• How to write a commit message
Bug tracking
The compiler
The compiler

• Turn on all warnings by default
• Warnings are good
• gcc is amazing
 • 90% of what a good lint does
 • Highly tuned and optimized code
The compiler

• Perl: use strict; use warnings;
• PHP: set_error_reporting( E_ALL    );

• gcc: -Wall -Wextra compiler flags
Make, and
the philosophy of
  repeatability
Lint / splint
Serious editing
Serious editing

• vim
• emacs
• TextMate
• Eclipse
• Not notepad for God's sake
Concepts
DRY:
        Don't
       Repeat
       Yourself
"Every piece of knowledge must
   have a single, unambiguous,
  authoritative representation
        within a system."
Defensive programming
Maintenance
The vision
Actual first project
How about...?

• Your assignment is code that does such-and-
  such.
• It will be based on one of your classmates'
  previous assignments.
• You may not disparage your classmate's
  work.
Manual testing
Automated testing
"Efficiency"
and why it (usually)
  doesn't matter
Thinking business
Thinking "Project"
Thinking "release"
Thinking deadlines
A project is a set of
code at a point in time.
How about...?
  Your assignment is code that does such-and-
  such. Your deliverables are:
• Code that will compile + build without
  warnings under GCC 4.2 and GNU Make.
  You must use -Wall and -Wextra.

• URL pointing to the class git repository that
  I can pull down and build using setup.sh.
Full project lifecycle
Building for the future
         and
        YAGNI
Good enough
     and
not being sloppy
Soft skills
Teamwork
Culture
You are not the
 smartest one.
"If we don't do it my
way, we might as well
   not do it at all."
How else can
 they learn?
Get into open source
Open source work is
    real work.
Students will learn
• How to work with difficult people
• Source control
• Dev with disparate teams
• Project lifecycle: new features, bugs, etc
• Test-driven development
• How to work with difficult people
They will NOT learn

• Thinking Business
• Thinking about deadlines
• Working with a boss
Experience on the
     resumé
Sample code for a
   portfolio
Missing textbooks


• The Pragmatic Programmer, by Andy Hunt
  and Dave Thomas
• Code Complete, 2e, by Steve McConnell
andy@theworkinggeek.com

http://theworkinggeek.com

What schools should be teaching IT students