On the 17th of October I presented a talk at SMU to a group of computer science students.
Here’s my abstract:
This presentation will show how fundamental computer science concepts such as data structures, recursion, object orientation, and runtime analysis are not only useful beyond the classroom today but also essential skills for tomorrow’s software engineers. I’ll begin by demonstrating real world code where these fundamental concepts come into play. I’ll then show how a robust understanding of fundamentals can mean the difference between an elegant solution and a hack. I’ll conclude by discussing how tomorrow’s reality of many cores, functional languages, massive scalability, and the coming cloud revolution necessitate a solid computer science foundation.
The value of a college education to a career in software engineering has always been questioned. The venerable Robert Martin recently tweeted:
“It doesn’t take a college degree to be a programmer. Programming is a trade that can be learned through apprenticeship and mentoring.” – Robert Martin
Bob is being narrow; Programming is a broad concept. Designing compilers, operating systems, embedded systems, circuits and DSLs does require a foundation of computer science. While you can succeed in object oriented business programming without a college degree, you will appreciate knowledge of fundamentals when you step outside this comfort zone. Yes, you can succeed in today’s 4GL languages without a degree ,but you will be at a disadvantage each time the industry shifts.
Joel Spolsky offers the following on the subject of fundamentals:
“I want my ER doctor to understand anatomy, even if all she has to do is put the computerized defibrillator nodes on my chest and push the big red button, and I want programmers to know programming down to the CPU level, even if Ruby on Rails does read your mind and build a complete Web 2.0 social collaborative networking site for you with three clicks of the mouse.” – Joel Spolsky
I couldn’t agree more.