Don't just code: Career advice from the programming masters
Given that, it's little wonder why students and non-tech professionals are considering a career in programming. But how exactly should would-be developers prepare themselves to take advantage of the growing demand for programmers We turned to dignitaries in the software development realm to get their takes on what young programmers should do. Those surveyed included JavaScript creator Brendan Eich, Clojure founder Rich Hickey, Spring Framework originator Rod Johnson, Npm founder Isaac Schlueter, and Guido van Rossum, inventor of the Python language.
Here's what they had to say about education opportunities, languages to master, and what makes a great programmer today.
While the debate over the value of a computer science degree rages on, these programming leaders emphasize the importance of a well-rounded education, with plenty of time spent studying subjects beyond the console.
"The biggest challenges in life do not have technical fixes," Eich says, "so it's important to study history, literature, art, and other kinds of human knowledge than anything to do with computers."
Hickey agrees, placing programming into a broader perspective.
"Programming is a very new endeavor in the historical scheme of things," he says. "One shouldn't presume that we understand how best to pursue it."
Instead, Hickey suggests pursuing other educational interests to help understand the kinds of problems programming can solve.
"The best programmers are those that can understand, communicate about, and solve problems in the domains they are in," he says. "Software is just a tool for that."
Johnson agrees that would-be programmers should investigate subjects outside the CS lab and mathematics department to help round out their education because, ultimately, "programming is about people rather than math."
Even when it comes to pursuing CS as a degree, Johnson is "torn."
"Mostly one uses things learned on the job," Johnson says. "There's a real value in a good CS education, but I've seen a lot of great programmers who had different backgrounds."
Van Rossum agrees. "You have people who come with an English degree and they go to a Django Girls workshop, and from then on they are Web developers," he says. "You also have people who go through the traditional four years of college with a major in computer science."
Of course, theory does have its place, Johnson says, even in the real world.
"Yesterday I used some compiler theory that I learned as a CS student, and it helped me get a neat, robust solution to the problem I had," he says. "But that doesn't happen very often."
Eich sees more value in studying mathematics as mathematics, rather than as a pretext for studying computer science theory.
"Programming is not all about mathematics, sometimes hardly at all," he says. "But if you're good at math, study it as math while you are young. Don't worry about programming so much."
Van Rossum goes a bit deeper, recommending "the kind of math that develops logical thinking."
Schlueter has a different theory for going general before becoming a programmer: "A liberal arts education is a great way to spend four years after high school, if you can afford it," he says. "There won't be another time in your life when you can mostly just goof off and party for that long with societal approval."
If you do take him up on his suggestion, Schlueter also offers advice that's deadly practical: "State schools are way cheaper, and student loans are no joke, so be thrifty," he says. "Try to get any scholarship or grants that you can."
Writing, Schlueter argues, is a key facet of being a strong programmer.
"Whether you go to college or not, try to make time as early as possible to read lots of literature and philosophy, both primary and secondary sources, and write as much as you can," he says. "If you're not going to college, then as soon as you can, shell out for a writing tutor who'll give you assignments and then help you polish them. This job happens on the Internet, and the written word is how people communicate there. The more effectively you can write, the better off you'll be."
Once you do sit down to program, which languages should you consider first
"OCaml, Haskell, Rust, C++, TypeScript, JS, Racket -- or Scheme as in SICP," Eich offers. "Obviously I don't expect everyone to learn all of those programming languages. But just a few would be good at the right time and place, especially for undergraduates who have interest and aptitude."
Hickey, too, suggests a multi-language approach, but offers a more philosophical take on putting together a representative mix of the wide variety of languages out there.
"[Pick a language that] makes it evident how a computer works (C), one that encapsulates that (Haskell, Prolog), a good statically typed functional language (Haskell, again, fine), and a good dynamic language with a functional emphasis. I'm partial to Clojure," he says.
Johnson suggests learning languages with contrasting approaches.
"Languages can influence thinking about programming, so it's important to learn more than one language, and to learn languages that have different approaches," he says. "So, for example, an OO language and a functional language, rather than, say, Java and C#."
"I say that Python is a pretty good language to get started in, of course," van Rossum says. "Then immediately the question of which Python version comes up and I would say start with Python 3. It's easy enough to learn Python 2 afterwards if you have to for some job or project. If you're starting from scratch Python 3 is the better language, no doubt about it."
Johnson also suggests young developers take a look at Swift.
"It's a nice modern language that includes a lot of good ideas and I think we're going to see it spread from iOS to other platforms," he says. "JavaScript is very useful, although not a great first language. Java is worth learning. It's not a particularly hard language to learn, continues to grow in popularity, and the JVM is everywhere."
Once you've got a few projects under your belt, how do you take your skills to the next level
Eich suggests learning from the early (and current) masters by studying great code.
"Read high-quality code, sometimes even on paper printouts, where you can write notes and mark with colored pens," Eich says. "On high-quality code, I think a classic is still Kernighan & Ritchie's The C Programming Language, but I'm showing my age. Also, The Unix Programming Environment. More recent code worth reading: 'Solving Every Sudoku Puzzle' or anything on norvig.com, really."
Hickey advises patience and preparation.
"The most important part of programming happens away from the computer," he says. "Figure out what you are going to do before you start, rather than mashing away at the keyboard until you get something that appears to work."
But once you do sit down at the keyboard, Eich advises, keep at it: "I still find Ken Thompson's ‘When in doubt, use brute force' saying to be eternally helpful. Don't get stuck!"
Johnson offers another source for code worth studying: open source.
"You can learn a lot from the code of good open source projects and there are lots of opportunities to contribute," he says. "It also helps pick up collaboration skills. I've seen this be a valuable bridge from school to industry, or from a boring job to the potential to get more exciting work."
As for where that exciting work may be for young programmers planning future careers, Eich suggests "space, 3D printing, 3D rendering, bioinformatics, web."
Van Rossum advises against settling when it comes to choosing work: "Avoid accepting work that you don't think you'll have fun. There is so much work for programmers. Find something that you actually enjoy doing because you'll be more productive and happier and it will be better for everyone."
Hickey agrees. "One of the great things about programming is that software is needed in almost all domains. Pick a domain that interests you," he says.
Whatever you chose, Schlueter suggests you keep an eye on the horizon.
"Programming is pretty easy if you're patient and keep learning. But eventually, all career paths either dead-end or lead to management of some sort," he says. "Even if you're focused on technology, eventually you'll be leading people, so that you can have a bigger reach and accomplish more."
To that end, Schlueter advises reading books on leadership, communication, and business as you go.
"That stuff is more complicated than it seems and is super important," he says.