Marc Andreessen, co-founder of venture capital firm Andreessen-Horowitz and of Netscape argues that software is eating the world:
Today, the world’s largest bookseller, Amazon, is a software company. The largest video service by number of subscribers is a software company: Netflix. Today’s dominant music companies are software companies, too: Apple’s iTunes, Spotify and Pandora. Today’s fastest growing entertainment companies are videogame makers—again, software. The best new movie production company in many decades, Pixar, was a software company. Disney—Disney!—had to buy Pixar, a software company, to remain relevant in animated movies. Photography, of course, was eaten by software long ago.
Today’s largest direct marketing platform is a software company—Google. Today’s fastest growing telecom company is Skype. LinkedIn is today’s fastest growing recruiting company. In today’s cars, software runs the engines, controls safety features, entertains passengers, guides drivers to destinations and connects each car to mobile, satellite and GPS networks. Practically every financial transaction, from someone buying a cup of coffee to someone trading a trillion dollars of credit default derivatives, is done in software.
Health care and education, in my view, are next up for fundamental software-based transformation.
Software is, of course, created by competent programmers and the best software, those which we use every day and cannot live without, are created by exceptional programmers.
Paul Graham, co-founcer of Viaweb (which became Yahoo! Store) and Y Combinator, says the following about exceptional programmers:
There is a huge variation in ability between competent programmers and exceptional ones, and while you can train people to be competent, you can’t train them to be exceptional. Exceptional programmers have an aptitude for and interest in programming that is not merely the product of training.
The reason why exceptional programmers cannot be trained is because programming is an art as stated by the World Intellectual Property Organisation:
Copyright (or author’s right) is a legal term used to describe the rights that creators have over their literary and artistic works. Works covered by copyright range from books, music, paintings, sculpture, and films, to computer programs, databases, advertisements, maps, and technical drawings.
As we all know, it is quite possible to become a competent artist (whatever the art): you need to start early and put in years and years of effort. For example, a lot of the music we hear today is being done by quite competent artists.
Mauritius needs a lot of very competent programmers. Or else, as Marc Andreessen mentions, nothing will work. In a certain way, we are more reliant on technology than other countries: we are far from everything and the population is tiny.
According to my observations, tertiary level education in Computer Science is substandard in Mauritius. Those who are responsible for this should go and be replaced by more competent people who have understood the importance of Computer Science for the country.
I am not speaking of cosmetics: a revolution in teaching is needed if we want to have a critical mass of competent programmers to make the country function in the coming years.
Who are the exceptional programmers?
As mentioned by Paul Graham, “exceptional programmers have an aptitude for and interest in programming that is not merely the product of training.” Most of them discovered programming by accident when they were kids and were immediately hooked. They understood everything and always wanted to know more. A lot of them became avid book readers and some even went to university to study Computer Science (but this is not a requirement to be exceptional — especially in Mauritius). Here is what Peter Norvig, Director of Research at Google, says about how to become truly exceptional in ten years:
(1) Get interested in programming, and do some because it is fun.
(2) Program. The best kind of learning is learning by doing.
(3) Talk with other programmers; read other programs.
(4) If you want, put in three or four years at university. “Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter” says Eric Raymond.
(5) Work on projects with other programmers.
(6) Work on projects after other programmers.
(7) Remember that there is a “computer” in “computer science”. Know how a computer works and how long it takes for different kinds of operations.
(8) Learn at least a half dozen programming languages.
What programming languages to learn?
Peter Norvig advises to learn one language that emphasizes class abstractions (like Java or C++), one that emphasizes functional abstraction (like Lisp or ML or Haskell), one that supports syntactic abstraction (like Lisp), one that supports declarative specifications (like Prolog or C++ templates), and one that emphasizes parallelism (like Clojure or Go).
My personal selection as of 13 December 2015 would be:
- Class abstraction: Java.
- Functional abstraction: Haskell.
- Syntactic abstractions: LISP because of its reader macros or even Ruby because of macros or DSL.
- Declarative specifications: Prolog.
- Parallel abstraction: concurrency in Rust or Erlang.
To that list, I would add Python, which can be used for mostly everything and is slowly becoming one of the most important programming languages on the planet.
Do we have exceptional programmers in Mauritius?
According to Paul Graham, 5% of the population of any country have the aptitudes to be exceptional in programming. This means that there are potentially 65,000 exceptional programmers among us.
Are they all programmers? No.
Given the pathetic state of our education system, I would argue that a substantial number of the 65,000 have failed their CPE exams and are now working in an atelier bicyclette somewhere.
I have been teaching programming for more that 15 years now at tertiary level and at Knowledge Seven and, up to now, I have stumbled upon maybe 50-100 exceptional programmers.
I wonder where the 65,000 are. I know they exist.
I wonder whether it is still possible to make them discover each other and start creating things together?
What do you think? What would you do?