A network of sites, tools, and technology to bring ideas into reality.
The Digital Tumbleweed
Thoughts and ramblings of an enthusiast
Good Engineers…Where?
Today I decided to take a stroll through some of the blogs I like to read up on and saw “Undergraduate Programming” on joelponsoftware.com. Joel’s post was to discuss “Computer Science Education: Where Are the Software Engineers of Tomorrow?”. I decided I wanted to comment on this as it’s been a recent topic of discussion with some friends and myself. The real question is, “Where have all the good engineers gone”?
Computer Science Education
While I can certainly say I was satisfied with my undergrad in Computer Science, I do wish I had more training in theory and algorithms. To be perfectly honest, these are the elements that are crucial to a true CS understanding. I’ve also seen a number of people both in jobs and looking for jobs, in school and graduating, who are supposed to be the Stallman’s and Torvalds’s and it seems to me that people just don’t have the same understanding that people who were educated in this field had a few years ago. I think the article makes an excellent stab at trying to pinpoint the reasons.
Computer Science programs all over are dumbing down the curriculum’s to attract students. The problem with this is self evident. If you’re program doesn’t teach as much and isn’t teaching the theory then how do we expect the students to really provide the innovation and software of tomorrow? In fact, the article points to this quite well.
The resulting set of skills is insufficient for today’s software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals.
However, I don’t think the introduction of Java is to blame for this. The reason being that the same theories and algorithms can be taught in Java based courses. The issue is that the programs are not challenging the students enough. The courses don’t push students to the edge of their mind. Also, students aren’t pushing themselves (we’ll come back to this trend). A number of courses I’ve seen consist of the code being spoonfed. By holding the students hands through wading in the kiddie pool we are really just setting those students up for failure when they are tossed into the shark infested lake and expected to be able to walk on water.
Now, back to students and lethargy. When has it ever been acceptable for people to expect that they will be coddled? What kind of future will the field really have if people don’t discover on their own, try new methods, read new and old theories to better their abilities as developers, innovate, or think critically? People seem to be extremely apathetic towards bettering themselves. I don’t know that this is distinctly seen in the software engineering field or if it can be seen elsewhere as well. But it seems to be a major problem. Unfortunately I don’t know that there is a fix. People do not simply change how much they care about something overnight. Thoughts? I feel that this trend has and will continue to lead to the decline in truly competitive software engineering.
To get back on point; there are issues with both the education system and the people attending these systems. But I think that the guys in the article are on the right path in that, we can’t dumb down the courses taught. In the courses I took at college we were expected to write the libraries ourselves _before_ we could utilize the ones provided, all in Java too. Java should not be taught starting with a GUI, this is not Visual Basic folks. Instead teaching OOP constructs, which helped me to fully grok pointers and other C constructs, teaching the threading model, etc. are incredibly useful tools for developers.
A language is a tool in the toolbox of a developer. My friends and I have this conversation consistently, no developer should be so keenly attached to a language that “that is how I program”. Instead they should see where a language provides the best solution for the problem they need to solve, and then use that language to solve that problem. And, to be fair, the authors make this argument as well.
Real programmers can write Fortran in any language
The point I’m trying to drive home is that while these guys make some great observations, they are misplacing the blame. The blame is on the departments and the students, not a language. The professors should be trying to push their students above and beyond what the student believes they are capable of, and the students should be begging the professors to get a better understanding. This leads into another discussion that seems to be coming up a lot that I may talk about at some point which is the 80/20 percentage break for programmers.
Joel on Undergraduate Programming
Ahh, back to where this post really got started. Joel, taking the thoughts of the authors from the article above provided some thoughts on a possible solution. To an extent I agree with Joel. A Computer Science degree should consist of a rigorous set of CS courses in theory, algorithms, systems, languages, etc. How can the slack be picked up? Is creating a new school the place to start?
I disagree with Joel in that I think math really provides a foundation for critical thought. With math things are black and white, right or wrong. There is no middle ground. While software problems can have many solutions, just as math, there are always better and faster ways. We too often think that the first solution is the most accurate. This is usually incorrect. In fact, whenever I or my coworkers are developing something my boss tends to ask, “You’ve reworked it about three times right? It should be pretty good then right?”. Mathematics helped me to learn to think in new/different ways about problems. Going from basic arithmetic to find the slope of a line to calculus and integration showed me that while there are many ways to skin a cat, getting a chainsaw might be overkill. Learning proofs and theorems helped me to realize this. Seeing the ways in which mathematicians approach problems gave me a foundation for my approach to software.
I can’t give math all the credit there. I attended a liberal arts college for the intent purpose of getting a well rounded education. It’s important to be able to understand other things, interact with others, and to be able to examine other methods.
Also, Joel makes mention of starting up a new school with the expressed desire of building a software development factory where you’re education is essentially an internship on roids, thats right 50 Cent…I went there. I actually like the idea. While I do not think that all of the school should be coop/internship, I do believe that you learn more from working with others. Hell, if anything else, you learn that you may be the only thing that saves a project from failure. But more seriously, real projects, with real deadlines provides a foundation for some of what I discussed above. Students aren’t pushed…well, push them. Right on Joel.
Conclusion
Keep in mind that I’m not trying to say that everyone is lazy, careless, and stupid. Nor am I trying to convince anybody that I’m right. I’m only just point out observations that I or friends of mine have made. Also, we’ve obviously seen the opposite where people really amaze you with their level of understanding, ability, and desire to better their craft.
Normally I wouldn’t be so explicit about this whole topic but it seems to be very habitual which is disconcerting. And, it seems that others are seeing this trend too. If the issues can be addressed, awesome. I’m sure there are some more intelligent people than myself mulling this issue around and working on a fix or some fixes. To them I say, “I salute you”.




