Recently, I attended a meetup where Baishampayan Ghosh, of Helpshift spoke. BG, for those who do not know, designed ClearTrip’s flight interface, which I immediately fell in love with. He went on to found Helpshift, an In-App mobile customer support sdk. This has been installed in billions of devices, and his company is on its way to creating an unusual animal – a profitable Indian Unicorn.
BG, of course is an outlier (in the same sense that if everyone followed Bruce Lees tips on training, he would still not be a Bruce Lee!). But his thoughts on the Indian Computer education system was telling. He said he dropped out of college for two years because nothing worthwhile was taught there, spent some time finding the curriculum of the best institutions in the world, got the relevant books, studied them himself, and then went and cleared exams as a formality.
I am myself involved in a small way in technical education ( I guide a group of students), and my observations are grim too.
The stated and actual aim of computer science education is to help people get gainful employment, yet there is no correspondence between what is required in industry and what is taught in academia.
In industry, only a very small proportion of people are developers. You have development, research, project management, Business Analysts, Designers, UI, UX, devops, System administrators, DBAs, QA, cloud specialists, Data science specialists, AI and machine learning specialists.
In college, we have Computer science, MCS, MCA. Msc courses. All of them teach similar things. QA is not taught, neither is UI, UX, system administration or many of the things mentioned above.
This gap is filled by the NIITs and Aptechs of the world.
For too many years, in too many colleges – Computer science is still a theoretical subject, it is a science not a craft. So you have lots of tomes of all the prescribed textbooks, which students dutifully ingest, and as dutifully spew out on exam day, and pass out with flying colours – without knowing much about the art or craft of programming. Often, their first encounter with a programming exercise is at their workplace – with disastrous and predictable results.
Most of the college passouts do not know basic operating system commands. They do not know how to keep their laptops in good shape. They do not know about processes, threads, sockets or memory allocation. They do not know about operating system paths, bashrc files, basic logging techniques, or debugging.
They have never learnt to test the programs they have written, nor to write unit tests.
Many of the students have a very fancy project on their CV. This could be on the Bluetooth protocol, steganography, the ant scheduling problem or some such. They can spew information on these areas without any doubt or uncertainty, but the same people are unable to write a small basic program.
Rumours abound that many of these projects are purchased off the shelf, there is even a website where one can purchase college projects. It is a great site, with options to choose area (Ecommerce, system software, middleware, electronics etc).
When will academia try to understand what Industry requires and provide that? When will they try to do what is best for their students and prepare them for a long and rewarding career?
We do not require much, you know? Over the years, expectations from freshers have really reduced.
- We want someone who loves coding – this is the first prerequisite.
- We want someone who can communicate well enough to understand very quickly, what needs to be done. This need not be confused with a person with great language skills. On the contrary, technical requirements can be communicated and understood with very few words.
- We want someone who knows their operating system well. They should be able to navigate well throughout the system, know shortcuts for doing different things, understand what processor their laptop runs on, whether it is a 32 bit or 64 bit operating system, know how to ensure that disk space is available, defragment hard disks etc
- It would be great if they know their way around a shell – be it bash, or sh.
- They should be very comfortable with one editor or IDE
- They should write clean code and have knowledge of Basic OO principles, SOLID principles
- They should know enough to test their creations
It would be desirable if they read up on software technology regularly. If they know the heroes of computer science – Ritchie, Stevens, Djikshtra etc
Over the last decade and a half or so of Metadesign, I have seen a common thread amongst the best programmers that I have the privilege of working with. Most of them got a computer when they were in 6th to 9th standard, fell in love with coding, and started coding with small programs (basic perhaps), and then went to increasingly complex programs and systems.
So one of my favorite interview questions is ‘When did you write your first line of code?”. If this brings a smile to their face, and sparks some memory of a computer being brought home, of writing that first line of code, and the joy thereof; then I know I am on to a good thing.
So, it is a no brainer really – what universities should do to bring out more relevant programmers.
First of all, they should create relevant courses. The single monolithic computer science course should give way to separate courses for development, research, Testing, system administration, UI, UX etc
Admission should be granted based on aptitude and interest. General aptitude is not the same as programming aptitude, which is not the same as QA aptitude, UX aptitude or UI aptitude.There are significant differences in the wiring of a System administrators mind versus a programmers mind.
Admission should be granted for people who are genuinely interested, not for those who are getting into it for the money. This is of course easier said than done.
Curriculum should be devised with great care. A Business analyst need not be subjected to the rigors of computer science – perhaps she needs to know psychology, human nature, sociology, systems thinking, ethnology etc more than computer science.
Colleges need to admit to the shocking truth that programming is an art/craft as well as a science. Tinkering laboratories need to be established. Students need more coding time than theory. Theory should supplement coding, rather than the other way round.
Colleges should instill a love of software in kids. Currently, there is an atmosphere of terror and fear that is generated. Students are taught to fear deadlines, and failures. So kids end up having fun in non academic activities for most of the year (because of lack of interesting things to learn) and a brief period of abject terror in the last days before the exams.
There should be a gentle curve. Start with some small things to do, easy wins. Gradually raise the bar till students are finally doing extremely complicated and theoretical things. NCST had a very nice curriculum, where coding, programming and algorithms were taught first, and then concepts like databases, graphics, networking and OOPs were taught. CDAC has a similar aim, but their courses while professing to teach the latest technology is heavily overloaded with theory, and too less practice.
Technology coursses should leverage technology. There are innumerable online courses on MOOCs.The world’s best teachers have put videos online. Students should be informed about them and develop the habit of watching these.
There should be regular online grading. There are many online graders available. They can be used to automate the task of verifying knowledge.
Colleges should hold meetups and hackathons. They should become hubs of innovation, where people get together to create beautiful things, not weighed down by thoughts of commercialisation, money etc.
Industry should help too. The best minds in industry should regularly spend time in colleges, educating, inspiring and learning.
Worldwide, brick and mortar universities are losing relevance. Indian IT services industry with its focus on labour intensive billing is also losing relevance. Perhaps the two can get together to create something wonderful.