Wednesday, January 4, 2017

Continuous Developer Education

Continuous Developer Education


I cannot recommend anything other for undergraduate studies than Physics. Most of the models you will be studying are a few hundred years old, and most of them are wrong! Most of the students think it is a mere exercise of futility, whereas only a few really get the “point”: Physics is about building models based on experimental data, trying to predict something using the models, and updating the models whenever needed, while using the minimally adequate model for each situation. Most people don’t need to understand models beyond those using the gravitational force. A few need to understand models including electromagnetic forces. Only those applying for a B.Sc. in Physics need to know about the existence of the strong and weak nuclear forces. By then either you got the “point” or you will be deeply disappointed. Hope someone among the disappointed ones can create a model based on a “grand unified theory”.

Having only 50 years of history, instead of 500+, the education on Computer Science and Software Engineering suffers from something obvious: lack of history! Just because people can create billions of messages in social networks in a few days and we need stateless front-end machines talking in a complex data center tiered architecture to back-end data stores, it doesn’t really mean those are scalability problems people will care about in 50 years. Hopefully, instead of posting ludicrous status reports about their latest lunch, people will be talking to their personal computational agent to seek for video automatically recorded within the last 30 minutes to find where they forgot the umbrella. Meanwhile, PCA2.0 will be a little more proactive, and warn the person the moment it is perceived that the umbrella is getting too far away to be retrieved without significant effort.

Software developers need to consider a more continuous education process. A few years back, I read a post by Minimsft titled “Microsoft Academy”, and it suggested a bunch of technologies people would need to study, and I quote “For developers, it would be stuff like C/C++, Win32, COM, ATL, XML, DHTML, AJAX, .NET, debugging, performance, Watson analysis, design patterns, security, using our best internal tools and resources and so on”. Hopefully, only a few developers followed such advice. Over the last few years it became more important to know, besides the basic computational concepts, languages like PHP or Python, technologies like Ruby on Rails or Hadoop, and then jQuery. Only within Microsoft walls I still hear of people interviewing candidates and asking about what are “COM categories”.

Even what I cited as “basic computational concepts” is changing nowadays. Computer Science looks like being stuck in the “complexity models” that are based on the Turing machine. The problem is: that is an inadequate model for most of the “data center”-based computation happening nowadays. The end-result is that we continue to build larger and larger data centers where CPUs wait in single-digit utilization while data channels struggle to deal with the large amounts of data transfer required by “very efficient algorithms”! Applications are written, and then rewritten for a “more efficient and updated CPU”. Improvements need a new deployment, and “machine learning” is still considered something from A.I. movies.

Luckily, users are not stuck in the past, and are coming up with solutions that we can learn from. Watch the TED 2011 video by the founder of “Khan Academy” and you may have a glimpse of how both traditional and continuous education may happen in the future.

Available link for download