10 Things You Should Have Learned with
Your Computer Science Degree…
But Probably Didn’t
BY ANDY LESTER
Every programmer should know how to create repositories, edit and
commit code, and branch and merge effectively as part of a project
workflow using Git or Subversion.
1. VersionControl Systems
Working as a programmer also involved writing release notes for your
projects. You also write commit messages for version control and tickets
for bugs in the system. All of these and many more require clear, effective
English communication – a skill that computer science programs seldom
emphasize.
2. How To Write
Regexes are a language all their own, and every modern programmer
needs to be adept in their use. If part of your code assignment is to
validate that a part number is five letters, a dash and a digit, you should be
immediately able to express that as /^[A-Z]{5}-d$/.
3. Regular Expressions
Every modern programming language offers access to a standard library
of common functionality. Code that has already been written, tested, and
debugged is going to be better quality and faster to implement than new
code that has to be created.
4. Using Libraries
The era of storing data in flat files is over. Everything goes into and out of
a database, and SQL is the language that’s used to retrieve it. SQL is also
a declarative language, not a procedural language, and so requires
learning a new way of thinking about problem solving. But every
programmer should understand the basics of database normalization and
be able to do SELECTs (including basic INNER and OUTER JOINs),
INSERTs, UPDATEs and DELETEs.
5. SQL
It’s astonishing that schools can turn out CS graduates who know only
Notepad or pico. It’s the job of programming tools to help manipulate the
source code and all other data in the computer to make the programmer’s
life easier. The Unix command line, shell scripting, find, grep, and sed
should be part of every programmer’s knowledge set.
6. Tool Usage:IDEs,Editors,CLI Tools
Every programmer should be able to debug with an interactive debugger
or by sprinkling print statements liberally throughout the code. The ability
to track down a problem through stepwise refinement is too important to
be left for programmers to learn by the seat of their pants.
7. Debugging
If things didn’t go wrong, we wouldn’t have to check file opens for success,
assert that customer IDs are valid integers, or to test our code to make
sure that it works properly.
Programmers need to grasp that compiler warnings are helpful tools that
make life easier, not nuisances to be avoided. Every programmer should
know why each PHP program should start with
error_reporting(E_ALL), or each Perl program with use strict; use
warnings;.
8. DefensiveProgramming
Few programming jobs let you work entirely on your own. Your code must
interact with code written by others, or often be intermingled with code
from others. A programmer who can’t collaborate on projects with others
has negative productivity, and quickly becomes a liability to the
organization.
9. Teamwork
School assignments are new, greenfield projects. But the first thing that
happens to new hires is they get assigned to fix ticket #8347 in the bug
tracking system. Then they have to add a small new complementary
feature to an existing system with an established codebase. Designing
new code comes months later, if they’re lucky.
10. WorkingOn ExistingCode

10 Things You Probably Should Have Learned With Your Computer Science Degree... But Didn't

  • 1.
    10 Things YouShould Have Learned with Your Computer Science Degree… But Probably Didn’t BY ANDY LESTER
  • 2.
    Every programmer shouldknow how to create repositories, edit and commit code, and branch and merge effectively as part of a project workflow using Git or Subversion. 1. VersionControl Systems
  • 3.
    Working as aprogrammer also involved writing release notes for your projects. You also write commit messages for version control and tickets for bugs in the system. All of these and many more require clear, effective English communication – a skill that computer science programs seldom emphasize. 2. How To Write
  • 4.
    Regexes are alanguage all their own, and every modern programmer needs to be adept in their use. If part of your code assignment is to validate that a part number is five letters, a dash and a digit, you should be immediately able to express that as /^[A-Z]{5}-d$/. 3. Regular Expressions
  • 5.
    Every modern programminglanguage offers access to a standard library of common functionality. Code that has already been written, tested, and debugged is going to be better quality and faster to implement than new code that has to be created. 4. Using Libraries
  • 6.
    The era ofstoring data in flat files is over. Everything goes into and out of a database, and SQL is the language that’s used to retrieve it. SQL is also a declarative language, not a procedural language, and so requires learning a new way of thinking about problem solving. But every programmer should understand the basics of database normalization and be able to do SELECTs (including basic INNER and OUTER JOINs), INSERTs, UPDATEs and DELETEs. 5. SQL
  • 7.
    It’s astonishing thatschools can turn out CS graduates who know only Notepad or pico. It’s the job of programming tools to help manipulate the source code and all other data in the computer to make the programmer’s life easier. The Unix command line, shell scripting, find, grep, and sed should be part of every programmer’s knowledge set. 6. Tool Usage:IDEs,Editors,CLI Tools
  • 8.
    Every programmer shouldbe able to debug with an interactive debugger or by sprinkling print statements liberally throughout the code. The ability to track down a problem through stepwise refinement is too important to be left for programmers to learn by the seat of their pants. 7. Debugging
  • 9.
    If things didn’tgo wrong, we wouldn’t have to check file opens for success, assert that customer IDs are valid integers, or to test our code to make sure that it works properly. Programmers need to grasp that compiler warnings are helpful tools that make life easier, not nuisances to be avoided. Every programmer should know why each PHP program should start with error_reporting(E_ALL), or each Perl program with use strict; use warnings;. 8. DefensiveProgramming
  • 10.
    Few programming jobslet you work entirely on your own. Your code must interact with code written by others, or often be intermingled with code from others. A programmer who can’t collaborate on projects with others has negative productivity, and quickly becomes a liability to the organization. 9. Teamwork
  • 11.
    School assignments arenew, greenfield projects. But the first thing that happens to new hires is they get assigned to fix ticket #8347 in the bug tracking system. Then they have to add a small new complementary feature to an existing system with an established codebase. Designing new code comes months later, if they’re lucky. 10. WorkingOn ExistingCode