I recently had lunch with a nineteen year old Computer Science major who requested my advice on many things software, but mostly about how to pursue a fulfilling career in IT. We had a wonderful discussion which concluded about how academic computing differs from what one finds in the industry. To summarize:
- An academic project is nearly always a fresh code base with few interactions, whereas most software development involves improving existing functionality or adjusting systems to comply with current business policy.
- The system requirements of academic projects are nearly always discrete and clear, whereas most software requirements are vague and it is the task of management and developers to translate requirements into a software design.
- An academic project is mostly evaluated by how well it matches specific requirements, whereas most software is judged by its correctness in addition to how well it scales and resists malicious or careless data inputs
In all fairness, when I studied Computer Science I had an instructor for a database design class who masterfully tested software. He would make students demonstrate in front of the class, except that he would interrupt the demo and ask you to enter in awkward data. Nearly everyone’s program crashed or corrupted data as a result. The lesson remains with me today and represents one of my most practical classroom experiences.
A British Computer Society essay identifies an even larger delta emerging over an increasing mode of developing software as a service.
If the gap between public knowledge and academic curriculum isn’t large enough, the gap between academia and industry practice is a gaping hole. While academic departments concentrate on developing new computer systems in an ideal organisational environment, a lot of industry has moved away from in-house development to a focus on delivering a service.
…
Interrupts, loops, algorithms, formal methods are not on the agenda. IT is about deploying resources to meet the information needs of its customers. Implementation, facility management, systems integration, service management, organisational change even environmental audit are the language of IT. These hardly feature on computer science courses.
If all of this hand wringing seems irrelevant, consider that Department of Labor forecasts, as summarized by Business Week, that “computer/math scientist jobs, which include programming, will increase by 40%, from 2.5 million in 2002 to 3.5 million in 2012.” Yet, “Colleges aren’t keeping up with demand. A 2005 survey of freshmen showed that just 1.1% planned to major in computer science, down from 3.7% in 2000.”
The good news may be, as the BCS essay illustrates, that software development is becoming ever more approachable to the masses. Many “good enough” programs are developed by amateurs which don’t justify the rigor of the CS curriculum, but the applications benefit immensely from being written by people fluent in the domain logic. If you have ever witnessed a programmer’s blank stare as you describe finance or metrical poetry you can appreciate why this transition is important and empowering.
The academic curriculum does an excellent job introducing students to computational task and theory, but more projects should be framed by someone outside of the discipline. Every CS graduate knows how to simulate the Towers of Hanoi but few have practical experience collaborating outside of the domain of math and science. Those who do possess a strategic advantage over their peers.
The good news for my young lunch companion is that the field is growing, but the bad news that the field is changing rapidly. Anyone over the past 40 years could say effectively the same thing, but I mean that a software developer must consider supporting and collaborating with stake holders who increasingly expect to build part of the software.