Computer programming skills have been in crazy demand in the last half century. These skills have been the driving force behind the most lucrative jobs at scale. Learning technology is fundamentally different from learning other skills. The paper books and assignment scheme that suffice for subjects in literature, sciences and mathematics do not translate well to learning technology. Yet, a vast majority of learning resources are still paper books(or its brother the pdf).
Learning and evaluating technical skills is like math but different. It needs practice as much as it needs reading and understanding the concepts. Mathematics was designed in a way that it could be practiced with pen and paper. Technology was not. The major problems with paper learning are:
- It cannot execute, time or evaluate code.
- It is not collaborative.
- They cannot have complex setup behind them.
- They are not smart. They cannot understand the student.
Teaching technology classes with paper books is like putting a square peg in a round hole. Massive open online courses (MOOCs) are a great development but they again are more general purpose and do not serve programming classes well. They mostly deal with introductory high volume classes and the emphasis is not on practice as much as it should be. Also, niche skills that require a lot of prerequisites are hard to capture as a MOOC because MOOCs don’t run all the time. If I am ready to take Geoff Hinton’s Deep Learning course today, I should not have to wait for when Coursera offers it again.
A vast majority of tech learning happens in universities. They offer the ideal collaborative and competitive environment for students to learn technology. Learning is tied to grades which in turn is tied to employability. This reward system propels students to learn at their best. Most research teams are based in universities. And the university system is mostly dependent on paper books for learning.
We need to improve paper books in universities to be more interactive for computer based subjects. For many less mathematical subjects (Like Introductory programming, OS, Networks, DataBase etc) the emphasis needs to be more on problems and less on just theory. The coding tests needs to be on a computer. Because grading coding assignments is so tedious, we do not get enough of it. Auto-grading and smart practice problems can make learning much more smoother.
In the workplace, there are many technologies and libraries that computer, statistics, math etc professionals have to learn to get the job done (mysql, react.js, websockets etc). Most of the time, us engineers do not get the time to master the skill but only the amount that is needed to get the job done. But these skills could be learnt best with practice. Instead of a paper book to learn sql, It would be better to learn with an interactive program where you can read the theory and do various other tasks: create databases, tables, views, indexes, schemas, queries. Learning could be much more effective if these concepts are explained with the right examples. Once we have read the books, it would be great to keep getting tests customized to things we have read before to refresh our understanding.
The major problems we have not graduated to better learning methods are:
- Every technology requires a different setup to learn on and there have been no easy way to share and access these setups. For eg, a database course may require a very different setup than a regular programming course. A practical ML course like http://fast.ai requires GPU access which is hard to get.
- Programming traditionally has been done locally on a variety of computers. The tools are not web-based.
- Book publishing has not caught on to the demands of Computer professionals and students.
In the last few years, we have seen a general push in the direction of web-based programming environments: Jupyter, Eclipse Che, CodeAnywhere etc are trying to push development itself to the cloud. But they are still away from being adopted as a general purpose programming IDE. There is also Docker and Kubernetes which could make environments lightweight and easily shareable. Facebook, Google Plus and others could make sharing and collaboration much better for books.
We already see tools like these becoming available in the market:
We hope in the near future, we will have much better way of learning technology.