Every so often you see the tech press come out with some commentary on how to reform IT training to make it better or more competitive. Invariably it involves pushing away from the fundamentals of Computer Science toward "the here and now." Take this for example. The author suggests that the real problem is that students need to be taught how to bring value to a business.
The problem is that the very reason we have the suits in charge of the business is to figure out how to "leverage" (I hate business speak) engineers to bring value. If business schools aren't teaching their students how to work with skilled people from a diverse set of professions, what the hell are they teaching them in terms of being good business leaders? That's what I want to know. The engineer's job is to take the business' defined needs and translate them; the businessman's job is to understand what his needs are and be able to define and articulate them to his diverse team of workers.
This is why I don't trust business schools. Outside of the more specialized degrees like accounting, they are just there to provide a more respectable frat boy-friendly environment than a liberal arts college. The mistakes that you frequently see these college edumacated idiots making with skilled workers illustrate that, such as firing senior engineers because they're too expensive and replacing them with a legion of junior engineers.
As a junior software engineer, allow me to be the first to say that I am the last one in my profession you want to designate as the tech lead or give the work of the senior guys to, and I'm not being lazy. Experience is worth the cost in virtually any profession out there, and you simply cannot take someone with two years of college experience and expect them to handle the work of a ten to twenty year veteran. That's like expecting a fresh recruit to shoot like a grizzled special forces veteran, but sadly that is precisely how a lot of business people think experience works in any skilled profession or trade. I know from experience, I had an offer letter from a major company for a senior development position in J2EE coming out of college (and I turned it down).
If you want to fix the Computer Science curriculum to make engineers more flexible, here's an overview of what I suggest based on my undergraduate experience from 2001-2005.
- Require six credits of project-based programming classes every semester, all three and a half semesters, after the first semester. Oh I'm sorry, did you want to major in Russian literature on the side? Not our problem. You will be required to code in teams and alone every semester once you have the fundamentals.
- Require that as seniors they take a six to nine credit hour class, their only CS class, where they meet with a prospective client such as another department in the university or a buisness, and they build a complex project for them based on their needs.
- Require students to learn several languages and use them interchangeably for their fundamentals classes such as data structures and algorithms classes.
In practice, such a curriculum would look like this if I were to design it:
- First semester:
- CS101: Beginning Programming with Python
- Second semester:
- CS102: Multi-Paradigm Programming with Python, LISP (or Scheme) and C
- CS103: Data structures and Algorithms(taught simultaneously in C and Java)
- Third semester:
- CS201: Computer Architecture with Assembly Language
- CS202: Software Engineering I - Fundamentals and Design Patterns
- CS203: Network Programming in C and Java
- Fourth semester:
- CS204: Software Engineering II - Intermediate
- CS205: Advanced Network Programming with Java
- Fifth semester:
- CS301: Software Engineering III - Architecture
- CS302: Database Development and Administration I
- Sixth semester:
- CS303: Database Development and Administration II
- CS304: Maintanence Programming I in Fortran, C++ or Ada
- Seventh semester:
- CS401: Maintanence Programming II in Fortran, C++ or Ada
- CS402: Compiler or Operating Systems Design
- Eight semester:
- CS403a: Requirements Gathering
- CS403b: Project Planning
- CS403c: Senior Project
- CS404: Independent Studty Review of Four Languages Learned of Student's Choice
You see it's tricky for me to relate to anything "geeky" like...
However, I do read it, for whatever that's worth ;)
Well, a few people who stop by from time to time would understand like Mark Call or Difster. Btw, you've been added to my blogroll :)