The age of the desktop is dead – long live the mobile device!
But where does this leave computer science? Are we still just giving students a “foundation” in programming, software and hardware with a sprinkling of specialist courses? Fundamentally our curriculums haven’t changed much in 30 years – sure we have mixed up the languages on occasion, but we haven’t made radical changes. Industry has, in many ways, evolved – but there are still vestiges of the early days of computing. Indeed the greatest amount of code written every year is still Cobol, and few institutions teach it anymore. But few industries rely solely on one programming languages anymore, and even financial institutions which rely heavily on Cobol layer it with Java, and Ruby, so the real guts of the system are hidden from view. Companies like Google have increasingly relied on languages such as Python – and software has moved to the mobile device.
Traditional ways of designing and coding software are dead. The evolution of the ubiquitous app has guaranteed that – it has literally become an organic entity. It is created, released, and then goes through various cycles of “healing” whereby crowdsource-testing finds bugs which are fixed, or advancement where new capabilities are added. A new version of the operating system, or device requires the app to become adaptive. Failure to advance or adapt results in its expiry. It really is survival of the fittest.
We teach software design – but do we really know what goes on in a modern startup? What we need to do is spend time shadowing software groups in small companies, finding out what makes them tick – and what makes them successful. What software design practices have they developed that we could teach? We also need to provide facilities for training instructors on new techniques such as mobile device programming. Last but not least we need to move away from the traditional model of teaching computer science. What is needed is a model whereby students are formed into “start-ups” after the first year, and spend their remaining university time working in groups designing real products – say one piece of software per year. No formal classes per say, yet all the relevant concepts are taught by way of workshops, including relevant workshops on mobile usability, agile development, and iOS/Android programming, and the like. Assessment would be gauged by how successful their product is. This would ultimately create a cohort of industry-senstive individuals ready to tackle the future. Students would maybe start creating command-line software and progress to creating viable mobile apps.
This IS the future. Whether or not we embrace it and push the envelop is up to us. We too need to evolve.