How much of software engineering can be taught prior to industry? There are many opinion pieces on this, and it’s a recurring theme in journals like Communications of the ACM. The question is how much of the necessary practices for software engineering can be instilled in an academic environment. There’s a big difference between being told about a particular environment or situation and actually experiencing it. Would it be possible to describe the situation adequately to have the solution or mitigation of that particular problem be retained in the memory of the budding engineers? Alternatively, would the ability to look at a particular situation theoretically actually help rational evaluation rather than having to suffer it with deadlines pending, etc. ?

I reckon the bulk of what I would call software engineering experience is just common sense, though it is common sense after having gone through the experiences of the situations which require it, and all too frequently seeing the results of making the wrong choice. It’s something we try to pass on as quickly as possible in industry by coaching, mentoring, pairing, etc. Is it possible to pass on the concepts and rules of thumb we use in an academic setting, without the environment which displays their relevance? There’s a big difference between a six week part time group coding project for course credits, and developing for a global financial platform, or a software suite for heavy industry, where a bug could cost millions per day. The fear of screwing up is an important teaching tool in the real world.

Another difference is that for most of us, the day job is our only job. It receives our entire focus. At university or college it’s likely one course among a few, each competing for time and focus. Even during crunch times for large projects, it’s one of a number of deadlines looming.

That said, the software engineering academic courses I’ve seen and taken over the years all tried really hard to instil the feeling of the real world in them. It’s not perfect, but they do the best they can in the situation available to them.

One notable example I remember from undergrad was the Systems Design Project in third year. We had three weeks to build a product from scratch as a team - specification, hardware, software, marketing, the works. It was a crucible for many, we all overreached and learned a hard lesson in realistic expectations. Many of us got very little sleep during those three weeks as it consumed almost our every waking moment. We saw first hand the effects of stress and depending on our teammates.

At the end of the project we then had to present our product to representatives of the big firms that would likely be hiring many of our cohort the following year - that was just nasty ;) Attempting to be coherent after a three week long crunch was one of the hardest experiences I’d had to that point. Oh, and then a week or two later the final exams started, so we were supposed to be revising during it too.

At the time there were moments I thought the project was hell. In retrospect I think it was sheer genius. It (in some cases unintentionally) crammed the best and worst of software engineering as a career into an extremely short timeframe. We learned a lot about teamwork, project management, effects of overwork on degradation of performance and just generally dealing with problems.

In the years since, it has been restructured - taking a longer time with more support rather than a three week inferno, presumably to preserve student sanity :) While this was probably necessary in the evolution of student experiences at universities, I do miss the pressure and excitement of that project more than anything else of my undergrad. It’s possibly part of the reason why years later I still enjoy high pressure projects so much.

In summary, can software engineering experience be taught? In many cases yes - instilling a conceptual framework so that the consequences of choices and work patterns can be extrapolated and evaluated is doable. It’s not an easy job though.

Shared at https://www.linkedin.com/pulse/teaching-vs-experience-software-engineering-donal-stewart