Joel Spolsky of Joel on Software puts it plainly enough, but he isn't the only one who thinks CS courses need a change. Bjarne Stroustrup of C++ fame recently did an interview with Datamation discussing Educating Software Developers. As a student, I became very interested in how computer science courses could be changed along with different approaches that could be taken. Bjarne Stroustrup, unlike many in academia, has a strong background in commercial software development. Academia has been producing graduates who are unprepared to enter the world of a working software developer because computer science courses are not designed to help produce great software developers.
So how has my education affected me?
I graduated from Neumont University, a private, for-profit school that offers a Bacherlor of Science in Computer Science degree. Neumont's curriculum was created by Graham Doxey, Scott McKinley, and Marlow Einelund as a response to the growing demand for qualified CS graduates. Neumont attempts to fill the gap that many computer science courses create when a student graduates. New graduates often have little to no working knowledge of programming in the software development industry. Neumont's project-based curriculum teaches students early on how to work in teams to accomplish a goal.
The project-based teaching style at Neumont is what attracted me to the school.
So what did I like about Neumont's approach and what could be improved now that I've had some working experience with software development? Lets start out with what Neumont does right.
Bjarne Stroustrup emphasizes that serious programming is not done individually, it is done as a team, often working with other teams to accomplish a goal. Project-based learning helps teach students how to interact with other team members in an effective team dynamic.
Serious programming is a team sport.
Neumont's project-based curriculum works great in this aspect. From the very first quarter I started, I was working in at least one team to accomplish a programming goal. The course curriculum starts with small team projects and begins to add more and more responsibility to the teams as the students progress. By the time students are seniors, you are working most of your time in a group on projects. The Enterprise Project aspect places these groups inside real companies such as IBM, Novell, and EDS.
Project-based learning also helps Neumont emphasize the business side of software development. Working in teams allows us to learn how to communicate better among our our teams, other teams, and our teachers. Skills we need to learn how to function on a team come with experience. With each project we attempted, we learned how to work as a team and manage all the "soft" issues that come with teamwork.
There were teams that were great, and we learned how a well-gelled team comes together to produce great results. There were dysfunctional teams, where no one got along with each other and the project floundered. There was the prodigy programmer who obsessively controlled all their code and re-wrote any code he had to touch that wasn't written by him. There was the lazy teammate, the ever-late teammate, and your indecisive teammates. Each type I encountered helped me learn ways to work to keep my team as gelled as possible and ways to work with each type of teammate.
As Bjarne Stroustrup summarized, developers need to learn how to present clearly your projects, ideas, and the goals the project achieves. Neumont helped me improve my presentation skills dramatically from when I started school. Each quarter students do at least one presentation in front of their class. Most often it is at the end of a project class to present the project you worked on and attempt to 'sell' the product to the class.
Its easy to spot the difference between new students and those who have learned from a few bad presentations. As I learned more, my presentations sucked less and less and I was able to present a clear, concise idea of my teams project and what it could do.
Writing skills are also critically important as a student at Neumont. Email and IM are two major forms of communication between students, teams, and teachers. My time at Neumont quickly taught me how to keep my emails short and concise to keep the communication understandable. I also learned the importance of IM while going to Neumont. This has become very handy when I joined IBM since IM is now the preferred method of communication for many IBMers.
Probably the most important skill I learned from Nemont is also an important business skill that is can be very difficult to master. I have become a self-directed learner. I am by no means an expert at self-directed learning but by nature of the compressed course schedule at Neumont, I spent much of my time at Neumont teaching myself more about what we were learning in class.
I consider this the most valuable skill I learned from Neumont. It allows me to adapt to new changes in the workplace and to learn skills to stay ahead of the technology curve. At IBM, many of our teams are beginning to transition from the old-school waterfall method of software development to more agile practices. This transition seems to be a little more difficult for some of the developers who have been with IBM for a long time. Being a self-directed learner lets me cope with any transitions and learn how to work in new environments or programming languages more quickly.
Overall I feel that I received a great education from Neumont that allowed me to learn in a style that feels very comfortable to me. Neumont's project-based curriculum is what made me decide to even attend school in the first place. I feel that I graduated with a great working knowledge of the business and soft skills that I need to really become a great software developer.
Neumont is not without faults, of course, there are many many things about the curriculum I feel need to be improved, but that will be the subject of another blog post soon enough. :-)
Image by: Sybren Stüvel
Image from: Neumont.edu
Image by: inju
Image by: jisc_infonet