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."
On programming languages
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."
Sign up for Computerworld eNewsletters.