In my rare spare time, I hold lectures on software engineering at the University of Cooperative Education in Karlsruhe. The topics range from evergreens like UML to modern subjects like aspect oriented programming (AOP) or Test Driven Development (TDD).
One thing I observe is that students don’t have difficulty separating the old topics from the current ones, even if they hear both of them for the first time. It seems that subject matter ages by itself, just like source code does. So, I’m constantly searching for new topics to include in the lectures, replacing the oldest ones.
Three things to include in your lectures
Some months ago, I read a very good blog post written by Alan Skorkin, titled “3 Things They Should Have Taught In My Computer Science Degree”. Alan covers three points:
- Open Source Development
- An Agile Process (e.g. XP, Scrum)
- Corporate Politics/Building Relationships
The idea of missed opportunities to tell some fundamentals to my students struck me. I compared my presentations to the list, finding the leading two topics covered to a great extent. The last one, corporate politics, is a bit off-topic for a technical lecture. But nevertheless, it’s too important to omit completely, so I already had included some Tom DeMarco lessons in my presentations. Perhaps I can build this part up a bit in the future.
What they should have taught me
Soon afterwards, I though about things my lecturers missed during my study. Here’s the list with only two points in addition to Alan’s list:
- Age and “maturity” of topic: When I was a student, I quickly identified old topics, like my students do nowadays. What I couldn’t tell was if a topic was mature (a classic) or just deprecated. It would have helped to announce that a topic was necessary, but of little actual relevance in modern software development craftmanship. Or that a topic is academical news, but yet unheard of in the industry and lacking wide-spread acceptance. Both extremes were blended together in the presentations, creating an unique mixture of antiquated and futuristic approaches. This is a common problem of Advanced Beginners in the Dreyfus model.
- Ergonomics and Effectiveness: I still can’t believe I didn’t hear a word about proper workplace setup from my teachers. I had courses teaching me how to learn, but not a single presentation that taught me how to work. This topic ranges from the right chair over lighting to screen size and quantity and could be skimmed over in less than an hour. But it doesn’t stop with the hardware. Entire books like Neal Ford’s “The Productive Programmer” cover the software side of effective workplace setup. And even further, the minimal set of tools a software developer should use (e.g. IDE, SCM, CI, issue tracker, Wiki) wasn’t even mentioned.
I hope to provide all these topics and information to my students in a recognizable (and rememberable) manner. They deserve to learn about the latest achievements in software engineering. Otherwise you aren’t prepared to work in an industry changing fundamentally every five to ten years. Of course, hearing about the classic stuff is necessary, too.
Give me feedback. What are your missed topics during apprenticeship, study or even work?
Update: In case you can’t visit my lectures but want to know a bit about ergonomics, I’ve written two blog articles on this topic:
4 thoughts on “On teaching software engineering”
design patterns and other sw architectural issues.
I really like the idea to cover “missed opportunities” and talk about new and intriguing things. Agile development is already covered comprehensively in your lecture, and I’m a bit into Open Source Development and contributing to a few projects (fedora, songbird, ffmpeg).
What would be really worthy to talk about, is Corporate Politics, ’cause not everybody has the pleasure to play by his own rules 🙂 What I’ve seen in the fairly big company I’m working in, is that politics often interfere with software development so much, that it can really mess up your whole architecture. Often managers want to see new features and want “timely/early delivery”. Refactoring is just a waste of time as long as the system runs partially and regarded as luxury. I was looking for some material about this subject, but I can’t find a paper that really covers my experience.
But a few month ago, I’ve read in the “Engineering Windows 7”-Blog a really read worthy article, with the experiences of an MS-developer:
Furthermore a few pain points are listed here:
An other interesting topic, I think students would find interesting is “Security vs. Cost”, with the bottom line “If you need security, don’t start trading security vs cost”. To quote it: “Security systems cannot be “a little better” or “a little worse”. Either they are effective – or they are not. By saving money on the security system, you may easily make it not effective at all, not only
wasting the money spent on the security system, but
also making losses because it is not effective.
I think it is also a really read worthy paper:
Click to access 591-paper_xbox.pdf
Keep on teaching new and interesting topics we students can benefit from in our further life’s.
I am a PhD student doing my PhD at University of Malaya, Malaysia.
I am conducting research on Requirements Engineering Education, and I am collecting data about student’s perception about this course in the form of online questionnaire, the population of this study covers all undergraduate software engineering students who have studied Requirements Engineering course. The questionnaire is uploaded through this link
it will hardly take 10-15min to complete the questionnaire, so friends please help me to carry out my study by filling up this questionnaire….
Thank you for your time, consideration and cooperation. I greatly appreciate your contribution towards furthering the research endeavour.