28 Mar 2017

Redesigning Our Education System for Lifelong Learning

Our education system dates from hundreds of years ago, and hasn't been updated for today's world. So what aspects of it need change?

Instead of offering a degree consisting of different courses, offer courses individually. Some students will spend years going deep. Others take a few courses and then leave college and take up a job. And perhaps return later to study more, either along with their job, or taking time off. Let students choose which path to take.

The concept of a four-year degree is stupid. No omniscient bureaucratic knows how much training is right for every single student. Besides, in today's world, you need to keep learning throughout your career, anyway. Given that reality, why cram in everything at one point? It may not be needed in practice. For example, I learnt compilers in college and never having built a compiler (or parser or formal grammar) in nine years of working. Even if I did need to build one today, I've long forgotten most of my compiler course. You'll get more value for the time spent if you learn things when needed.

What you learn should depend on your interests. Forcing everyone to go through the same courses leaves no room for individual tests and passion, reducing eager students to cogs in the bureaucratic machine.

Letting students decide what courses they want to take will also result in them choosing courses that are useful to them in the real world. Like how to build web or mobile apps. Or how to design and code securely, which is applicable across domains. Or the practical aspects of how software teams work, like version control, or code review, or using a bug tracker. Or how to do product and UX design for an app.

Instead, students are forced to learn stuff with niche applications in the real world, like formal specification and verification of programs, or functional programming in Haskell. Education should first teach people what they need for a job, the basics. Then go to the advanced, niche or academic stuff. Education works the other way around, which is topsy-turvy. Imagine you were teaching someone to drive a car, and instead of teaching them how to park or signal, you teach them how to evade someone chasing them, or how to drive at high speed in reverse. That would be a crazy driving school, but that's exactly how education is today.

Even when colleges do teach a relevant topic, they're outdated. For example, I was caught CVS in college, when Subversion had already taken off. Besides, we committed to version control individually, which defeats a big point of a version control system. We should have been asked to work together in say 6-person teams for a quarter, so we understand how not to step on each other's toes. Which goes beyond version control, by the way. How do you communicate? Co-ordinate? Track progress and bugs? And so on?

Letting students decide what courses to take fixes many of these problems. They'll learn practical, useful stuff. Professors will then have to compete for students, which is a useful real-world check to ensure they don't go off and do things nobody cares about. For example, I had a prof who liked type systems, and would say things like if you have

struct {
    int a;
    char b;

and the set of integers is represented by A, and the set of characters by B, then the set of values of this struct is represented by AxB. Which is all fine, but how does this help me write better programs, I asked him? He had no answer. He preferred things that are formal to those that are useful, as Paul Graham put it.

When professors have to compete to get students to attend their course, it will act as a safety check against this kind of intellectual masturbation. They could also be paid per student attending their course, rather than a fixed monthly salary.

Next, get rid of the difference between a degree, a diploma or a certificate. A three-week course should be treated the same from a regulatory perspective as a three-year course. Why have all these bureaucratic classifications? As long as you're learning useful things, both in the sense of getting a good job in the short term and in the sense of equipping yourself for your career in the long term, who cares what it's called?

This applies to schools as well. Instead of awarding someone a certificate saying he's passed tenth class, a student should be able to take only 10th class maths, pass, and earn a certificate saying he's passed 10th class maths. He can then take 11th class maths without completing the other subjects in 10th class.

Or even skip 10th class maths and then take 11th class maths. Maybe the student has learnt informally, such as online, or from books, rather than through the bureaucratic education system. If he passes the 11th class maths exam, he's proven himself, so award him a certificate saying he's passed 11th class maths.

Get rid of the rigid differences between a school, junior college, undergrad and post-grad.

Get rid of attendance as well, which is a dumb concept: it selects people who turn up to class but pay no attention, while penalising people who learnt more by themselves. Attendance also assumes that the teacher has turned up to class in the first place, or that that teacher knows something, which is unfortunately not always the case. Even at a better than average college in India, I once had a lecturer consult with me on something because I knew more. The whole concept of me attending his class was a farce, when it could have been him attending my class. Getting rid of attendance as a requirement fixes these problems.

There should be no age limits as well, except for risky courses like learning to fly a plane.

Anyone should be able to take the exam at the end of the course by just walking in to an exam hall. Get rid of the concept of enrollment, that there's a list of students taking a course. You should be able to just walk to an exam hall, like you walk in to the cinema. If you want to make sure there's a seat for you, reserve one a month in advance, like buying a train ticket instead of just turning up at the railway station.

Let anyone conduct exams, which could be different from the entity that's conducting the course. And let the exam-conductors compete: if companies offer jobs based on an exam, or a top college accepts a PhD student based on the exam, that must be because the exam is doing a good job of evaluating students. Then the exam will acquire a reputation amongst companies, students and parents. Let the exam work to prove itself, rather than being a meaningless piece of paper issued by a bureaucracy.

An entity conducting an exam can also strike a deal with a company so that people who pass the exam automatically get job offers from the company. Or the top rankers automatically get a job offer. In an ideal world, companies shouldn't have to conduct their own tests and interviews. It's redundant to have two evaluations of the same person. If a company is conducing their own tests, that's a sign that the one conducted by the college isn't testing the right aspects. Let's have more integration.

Exams can be written, multiple-choice, taken on a computer in the exam centre, taken on a computer at home, a lab, a panel discussion, pair programming with an evaluator, a panel discussion, an interview, or any other form. It's all up to the party conducting the exam. Why should some bureaucrat assume they know how best to test students than the people actually doing it?

People should be able to legally work once they're 13, in jobs that are safe, like a clerk, not in a construction site or steel plant. If there's a concern that kids will be strained, limit working hours to 5 hours a day, 5 days a week. Maybe kids should be allowed to work only with parents' approval, as a further safeguard.

For low-skill jobs, like working as a clerk, a decade of education (4-13) should be more than enough. Society needs a lot of low-skill workers. We can't wish that fact away. Why waste these people's time and life making them learn things they don't need? If the education system can't teach students what they need to learn in a decade, which is a long time, then it's the system that is broken.

If someone does continue education after 13, they shouldn't have any compulsory courses imposed, either by the college or the government. The decade before 13 is plenty of time to teach them what they need. Beyond that, they should be free to learn what they want.

Another problem with educational institutions today is that students don't know whether they're getting a good deal for the money they pay. Many teachers don't show up to class, or have no clue, simply reading aloud from the textbook, which students can do by themselves just as well. Even if they're competent, are they benefitting students more than the fees they charge? Given the astronomical cost of education, in India and the US and other countries, parents sacrifice a lot for their children's education. This makes it critical that they get they money's worth. Then there's the concern that people who can't pay are excluded, so the poor's children remain poor, which is unacceptable.

We can solve all these problems by first requiring education institutions to post data about students' incomes before and after graduation. What's the median income after completing the course? What's the median increase in income after completing the course, compared to their income before? How many students earned more? And so on.

Every educational institution must guarantee a certain salary after graduation. People who don't make this much money [1] automatically have their fees waived [2]. If someone does make more than the threshold, they pay a fixed percentage of their income, say 10%, as fees every year [3].

The threshold keeps getting increased for inflation every year. A decade after the course finishes, you're no longer required to pay any fees [4].

Fees are not due until the course completes, and even then are only a percentage of one's income, so educational institutions will no longer have an incentive to turn away poor people. There will be only one fee, not a separate lab fee, exam fee, entrance fee or toilet fee, which is a rip-off.

There will no longer be any need for accreditation, which is bureaucratic, and dysfunctional, anyway. Institutes that don't equip students with useful skills, deliberately or not, will suffer the risk of not getting paid, not the students.

Let educational institutions compete on the guaranteed income and the fee percentage. One institute can guarantee a salary of ₹5 lac for a fee of 10%, and another can guarantee a fee of 6 lac for a fee of 15%, presumably because they're offering better training or are doing a better job of selecting intelligent students. A student who receives both these offers can decide, along with her parents, whether to pay more for a better job. And it's a risk-free decision — if she doesn't end up making 6 lac a month, she doesn't pay for the training. There's no downside in taking the better offer. And since the fee is paid only out of the student's future earnings, taking the best offer won't strain the family finances.

A third institute can guarantee a salary of ₹5 lac for a fee of 15%. This would appeal only to students who didn't get a better offer, say from the first two institutes.

Let educational institutions compete [5] by being better at their job. And let them have a profit motive. There's nothing wrong in earning a profit while serving students and society. Earning profit doesn't somehow make it less effective. If anything, it's likely to make it more effective, as long as the incentives are aligned.

Liberalise the system so that foreign educational institutions can set up shop in India, including repatriating profits back to their home countries. That's a necessary part of any business.

[1] Yes, it requires tracking everyone's income. Perhaps students will be able to opt out of this tracking and instead pay whatever the institute asks, ahead of time.

[2] Maybe it can be based on the median income of the class: if it's less than X, nobody pays. If it's more than X, everybody pays. This reduces the misaligned incentive of students wanting to take low-paying jobs to avoid paying fees, or understating their income.

Another solution to this incentive problem is to ensure that an increased salary always corresponds to an increased take-home pay. If the threshold is 5 lac, and someone makes exactly 5 lac, and the fee is 10%, they'll be left with 4.5 lac. This incentivises them to understate their income, to 4.9 lac, say. To fix this, if the threshold is 5 lac, the fee shouldn't reduce their take-home pay to below least 5 lac.

So, if an institute guarantees a salary of 5 lac, and the student makes at least 5 lac, the fees will be: min(10% of income, income - 5 lac).

This is the same reason for income tax slabs being defined so that if you fall in the 30% slab, it's 30% of your income above 10 lac, not 30% of your total income, which would make people unhappy when they get a raise from 9.5 lac to 10 lac.

[3] Not a fixed fee, to align the educational institute's incentive with maximising students' earnings, thus maximising societal good.

[4] One's success more than a decade after a finishing a course is more likely to be due to one's own effort than the course.

[5] Competition is effective only when students can easily compare two offers to see how much they're paying. So, all institutions should have the same pricing formula: If you're income is above X, you pay Y% of your income for a decade after the course finishes. Institutions can change X and Y, but not other factors, such as asking for a fixed fee of 5 lac, say, or changing the payment period to 5 years or 15 years. This makes it easy to compare offers and pick the best one.


  1. Hi Kartick, Nice ideas indeed. When we think about the way humans have organised their education system, it's very foolish indeed. I'm just making a transition from a masters course at iisc into the industry. I realised that though I have done a lot of research projects , these are probably not considered as useful as some of the things you mentioned here like learning version control systems and secure coding. Can you write a post on what are the essential skills that are valuable in the industry which are probably not taught in universities ? Also, What do you think of the standard hiring process in the software industry today, that is mostly based on proficiency in data structures and algorithms ? Should we not be hiring people based on the software that they have developed bcoz' that seems to a better indicator of the persons skill-set? Thank You.

  2. Hi Srinivas, Good to see that this has been useful.

    Here are some essential skills I can think of:
    - communicating succinctly and clearly, in email, meetings, phone calls.
    - writing crisp documents to help multiple people and teams reach agreement on something.
    - prioritisation.
    - understanding other people’s and the team’s unstated expectations of you, and trying to meet them.
    - managing expectations, so that people don’t expect what you’re not planning on delivering, which will make them think bad of you.
    - reviewing code and design docs.
    - how to collaborate without blocking others’ work.
    - Speaking up and fighting if someone is making you unproductive, or decisions are being made that will produce a bad app from the user’s point of view.
    - responding to people who are blunt or rude in a calibrated manner, rather than escalating the conflict.
    - When in a conflict, keeping the focus on what needs to be done to make progress, rather than finger-pointing.
    - ability to do something to some extent, leave it and revisit later, if needed, rather than doing it perfectly the first time.
    - thinking of development as a series of commits rather than just producing the final version of the software.
    - UX and product design, so that we build the right product, and users are able to use it.
    - debugging, not just in the simple sense of setting breakpoints, but also, when nothing else works, being able to formulate a hypothesis, test whether it works, if not formulate another, and finally solve the problem, or work around it.
    - working with large, complex code bases that you didn’t write and are poorly documented.
    - deploying to production servers, understanding release processes, debugging things in prod when they fail at 3 AM.

    I agree that hiring people based on software they've written is far better than data structures and algorithms, if they have software they wrote by themselves. As opposed to a team, where it's hard to know how much work an individual has done. And source code needs to be viewable by the interviewer, which it isn’t for software built in a company. And it shouldn’t be too specialised, like the Haskell debugger I built in college — most interviewers won’t be able to understand that to evaluate it fairly. If all these conditions are met, then, yes, the software they’ve written is a great way to hire people. But hiring is hard, in any case. I advise a startup and I’m helping them with hiring, and I see first hand various things that make it hard.

    The other problem with data structures and algorithms is that it benefits people who’ve spent a week brushing up before the interview. That’s fine for a college student, but as someone who has worked for almost a decade, I can think of better ways to spend that time, like learning a new platform. Data structures and algos are used less than software design — how do you structure a program? How do you break it down into components? What are the interfaces between these? How do you keep code quality high enough? How do you keep it readable? And so on. Interviews (like Google) that give a lot of weight to data structures and algos, are testing the wrong thing.

  3. Thanks Kartick for your reply. In the academia, nobody cares to even look at the code as long as it works. The pressure is always to get things to work within a deadline. Nobody seems to be bothered about teaching us how to design the code.I need to work on a lot of these points you have mentioned. I need to work on a lot of these points you have mentioned. Thanks a lot.

  4. Happy to help.

    BTW, what's your specialisation? Please email me at kartick DOT vad AT gmail. Thanks.