For new programmers, knowing which languages and skills to learn can be overwhelming.
Just to secure a job interview, developers often have to show they are familiar with the long list of languages and associated technical skills demanded by employers.
While it can be tempting for new developers to dive straight into learning every skill recruiters ask for, those who want to maximise their chances of a successful career would be better served by first getting to grips with three fundamentals, according to Joel Spolsky.
"The three things I would tell people to learn are economics, writing and C programming," said the Stack Overflow (SO) co-founder and globally-recognised expert on software development.
Economics "because programmers often don't know that" and consequently don't understand how they add value to the business, he said. Writing, as well as communication in general, because "essentially, the most successful people are the ones who can explain their ideas the best" and who can work well in teams. Finally, the C programming language, in order to provide a technical foundation for the developer's understanding.
Coding in C gives programmers a better idea of what the computer is actually doing, in that it is a low-level language whose instructions more closely resemble those being executed by the computer's CPU than those of a high-level language.
"A lot of programmers these day will end up learning a higher level language — such as Python, Ruby or Java — and then not even really have a good grasp on anything that is causing that code in the language to execute and therefore not appreciating why things are slow or weird.
"The idea is to have a really good comprehension of what happens at the level of abstraction below the level where you work, of what the CPU is actually doing," he said, comparing it to how psychology students are taught the biological basis of behavior.
Programmers generally follow two separate career paths, he said, one focused on knowing specific languages and associated skills and the other on understanding of the fundamentals of computer science and acquiring an aptitude for learning new tech rapidly.
The top-tier tech companies of the world, firms like Google and Facebook, prize the adaptability that comes with the deeper, non-specific skillset, said Spolsky, due to the speed at which these companies work.
"In a year, maybe they'll have you working on something that hasn't even been invented yet."
Do you need a degree in computer science?
For anyone planning a career as a developer, a computer science degree is helpful to open doors, said Spolsky.
'In general a computer science degree will get you into a job or interview that you otherwise might not get into."
However, studying computer science at university is by no means a prerequisite, he said, adding "the number of programmers who don't have computer science degrees is enormous".
For Spolsky, firms that stipulate a computer science degree are shutting out a swathe of talented programmers.
"The ones who don't have the formal training are probably every bit as good as the ones who do. It's more a function of experience. I'd rather hire a welder who had 10,000 hours of experience than one who went to a famous school of welding."
What about MooCs?
In recent years, a plethora of massive open online courses (MooCs) have been launched.
There are MooCs that teach the majority of programming languages and associated skills, with some MooCs offering certification and others work placements for graduates.
The quality of MooCs, free and paid for, varies but is it even worth considering signing up for a MooC?
Yes, says Spolsky but the danger with MooCs is that you'll never finish — a study found that fewer than 13 percent of those who sign up for a MooC complete the course.
"It's the same reason that nobody who vows to learn French ever learns French, but everybody who moves to France learns French."
The best MooCs and programming boot camps, says Spolsky, are those which place people in entry level jobs where they can get the experience they need.
'It's really a matter that you need an awful lot of practice programming and the boot camp is just not enough time to get that practice."
The need for more experience is also true of a computer science degree graduate, said Spolsky.
"It's very rare for somebody who has no programming experience when they arrive at college to do the bare minimum that a computer science degree requires and come out as a programmer'," he said, estimating that to be good enough to get a job programming requires about 5,000 hours of practice.
Learning as you go
The way that people learn programming has evolved, says Spolsky, with new developers generally learning as they go, thanks to the massive amount of information available online, in particular on the question and answer site Stack Overflow that Spolsky co-created.
Whereas programmers once waded through massive instructional texts, creaking under their own weight, 'today you just start coding and when something doesn't work, you go to Google'.
"It's amazing to watch somebody who is a young programmer and see them Googling and writing a lot of code and Googling and writing a lot more code," he said.
"The code is very dangerous and scary, and I hope no-one puts any of it on the Boeing Dreamliner flight control system, but, that said, it does work for the most part."
Stack Exchange, the network that SO is part of, plans to build on SO's community-led model to advance programming knowledge in other areas. One beta project is a Stack Overflow site aimed at providing crowd-sourced, wiki-style documentation, aimed at improving the poor standard of official documentation available for many technologies. Another is called Team Pages, and will let developers share details of the project they're working on and who their colleagues are, whether they're part of an open-source project or within a company.
For Spolsky, bringing new people into programming and helping those already working in the field has never been more important than today, a time when every interaction is increasingly mediated by software.
"Software is eating the world and it's written by developers. Programmers are writing the script of the future and that's why they're so important."