That’s right only 3 things. Oh, there are plenty of things that I wish I would have learned about at university, but I am well aware that no degree will give you an exhaustive education in your field. A degree is meant to teach you the basics and equip you with skills so that you can learn the rest yourself. However, as I get more experience as a software developer, I find that I am increasingly frustrated about not having been exposed to these three things before I entered the workforce.
I believe that any Computer Science degree can be made a lot more relevant simply by paying more attention to these three points. Had I had more exposure to these things before starting my working life, I believe it would have given me some real world skills that I could have applied straight away, rather than having to scramble to learn everything I needed to know on the job. It would have made me better able to deal with the requirements of my work and would also have made me a better citizen of the IT community.
1. Open Source Development
I found that open source was never really taught. Some students found out on their own and got into it, but the majority didn’t find out at all. At no other time in their lives will students have as much time on their hands to get involved as they do at university; it could truly be a mutually beneficial relationship. Instead, a great opportunity is lost here both for the students and for the open source movement.
I believe most CS subjects should encourage students to either start their own open source projects or preferably participate in existing ones. It should be part of the curriculum and part of the grading process. Open source projects could gain valuable contributions, while students not only gain skills in a real-world setting, but also the use of tools, processes and valuable interpersonal skills that a simulated university environment just can’t provide.
2. An Agile Process (e.g. XP, Scrum)
I’ll amend this; I wish they taught any process to such a degree that people can actually gain at least a passing familiarity with it, even waterfall. I found process was more or less glossed over during my university time. Sure there were a few lectures that mentioned it, but noone really explained the need for process and there was never any practical application of the knowledge. In this case without practical application it is almost impossible to take-in the concepts.
Of course it would have been even better had agile processes been taught since these are a lot more relevant to the industry today. Teaching agile processes to university students is probably one sure-fire way to start changing the software industry for the better. Students would come out with a decent understanding of how software should be built and would be a lot less likely to be brainwashed by companies with outmoded modi operandi (lets face there are still plenty around). Instead students enter the work force completely ignorant about how things should be done and another great opportunity is lost both for the students and for the IT industry in general.
3. Corporate Politics/Building Relationships
It may not seem so to most people, but I believe that this is by far the most important point where my CS degree let me down. So much emphasis is placed on technical subjects that you never get to find out how life really works in the corporate world. Of course this is the hardest to figure out on your own.
As a freshly minted CS grad, you think technology is the most important thing in the world. So, when you find your feet in the corporate world it is a bit of a rude shock how everything seems so dysfunctional and moves at such a glacial pace, until that is you figure out that technology is not the most important thing at all and that corporate politics rules the coop.
Even in high technology companies, politics is king and the cornerstone of politics is relationships. The right relationships can let you get things done, and make your life a lot less difficult. However the concepts around politics and relationships are not well defined, there are no hard and fast rules, everything is very relative and fluffy. Of course for technically minded people this is the most frustrating thing in the world.
It doesn’t have to be like this though, just like everything else, politics and relationship building have basic principles that can be taught, so I fail to see why they are not. Had they been maybe industry wouldn’t crying out anywhere near as much for technical people with great interpersonal skills. Because it is not the interpersonal skills that the grads are lacking (there are plenty of CS grads with great people skills), it is the ability to use these skills to effectively build relationships.
Well that’s, my take on it. It has been a few years since I was at university so maybe in the intervening years things have improved and what I mention above is part of the curriculum (somehow that strikes me as unlikely). Then again perhaps you disagree with me on one or all of the points I mentioned. Do you think there are any other vital subjects that your CS degree should cover? Let me know.