Recently, there’s been a lot of talk in the tech world and beyond about getting more people to learn computer programming. I think this is a worthy goal*, but the question should be considered from various angles.
1. Jobs & the economy. Businesses all over the world need more programmers. Every company I know is hiring engineers (e.g. see this list of NY tech startups). Top programmers can make $100K+ right out of college. Yet there were only about 14,000 computer science (CS) majors last year. Meanwhile about 40,000 people got law degrees even though demand for lawyers has been shrinking. America is suffering from what economists call structural unemployment: jobs are available but our labor force isn’t trained for those jobs.
2. Programming is a great foundation for a tech/startup career. CS is a great foundation to do other things in tech industry like starting a tech company (although I’d argue that design is an increasingly valuable foundation for web startups). I suspect one of the reasons for the low number of CS majors is people don’t realize all the non-programming opportunities that are opened up by a background in programming.
3. Programming is an important part of being “culturally literate.” Algorithmic thinking is as fundamental a type of thinking as mathematical thinking. For example, Daniel Dennett convincingly argues that the best way to understand Darwin’s theory of evolution is by thinking of it as an algorithm. (I haven’t read it yet but I’m told the premise of Stephen Wolfram’s A New Kind of Science is that algorithmic methods should be applied much more broadly across the sciences). Teaching algorithmic thinking – which is what CS does – should be a core part of a liberal arts education.
4. Programming is a great activity. Most people who program describe themselves as entering a mental flow state where they are intensely immersed and time seems to fly by. It feels similar to reading a great book. You also feel great afterwards – it is the mental equivalent of going to the gym.
5. Should non-technical people at tech startups learn to code? This is where I disagree with some of the conventional wisdom. Certainly it is worthwhile learning programming, at least for reasons 3 & 4 above. You should realize, however, that to become a good programmer takes thousands of hours of practice. I’d also argue that if you are a non-technical person working at a web company the the first thing you should learn is internet architecture (DNS, http, html, web servers, database, TCP/UDP, IP, etc). Learning some programming is good too, to help relate to technical colleagues. But if your goal is to build a large-scale web service, your time as a non-technical person is better spent recruiting people who have been coding for years.