I'm a 73-year-old Canadian programmer with no formal education in computing.
After completing a PhD in pure Mathematics, I started working the next day writing scheduling algorithms in Fortran on an IBM 4341 (my supervisor played poker with the company President, so that helped).
Although I picked up Fortran quickly, I had to study scheduling algorithms because my specialty was mathematical logic.
Then I became a university Statistical consultant, but I knew nothing about that either (my boss wanted to learn logic).
Five years later, when Prolog became a popular AI language, I quit my job and began writing expert systems as an independent.
Prolog (PROgramming in LOGic) is based on the first-order predicate calculus, so my formal training was exactly what I needed to understand logic programming.
After that I branched into databases, which I'm still doing as an independent.
So, I didn't need to know anything about computing to become a programmer.
But my domain knowledge (math) gave me a powerful tool to solve some computing problems.
Mathematics isn't just another toolbox - it also represents an attitude. Well-structured code, modularization, and generality are natural by-products of theorem proving. So interest in any area of mathematics will make you a better programmer.
Presumably you mean Justin. His father, Pierre, was supremely confident and for good reason. He was in a class by himself as an intellectual and politician.
I did a PhD in pure mathematics decades ago, simply because it was so interesting. None of it seemed practical at the time (eg. category theory, topology, Horn logic) but that changed when computing began to embrace these ideas. In fact, one of my profs suggested that I study whatever I want until I reach 30, when the concrete begins to settle. That was really good advice for me.
I obtained a PhD in pure math 30 years ago, and promptly went into computing with no programming skills.
Mathematics allowed me to see things in a more general light, appreciate the importance of elegant code, and work on interesting problems that others might find difficult (eg. graph-theoretic constructions, encryption, etc.).
And it's really nice to formulate and prove your own theorems just to make your code work.
Putting a $ figure on higher education is like setting the value of a hair transplant.
Abraham Robinson's Non-standard analysis (http://en.wikipedia.org/wiki/Non-standard_analysis) used a modern axiomatic approach to legitimize Isaac Newton's intuitive use of infinitesimals, by creating a superset of the real numbers, some of which were smaller than any ordinary real (infinitesimals), or larger (infinite).
Thanks for the Chaitin lecture - he's a brilliant guy and outstanding speaker. His reference to Liebnitz reminds me of a beautiful quotation of his that goes something like: "Although the world may be a dream, I would call that dream real enough if, using reason well, we were never deceived by it."
I'm cleaning up someone else's code that didn't contain a single comment. When finished, the cost for doing this will exceed the original project (we're talking man-months here).
After that, I'll worry about correctness and efficiency.
In the mainframe days, we used to have code reviews that forced programmers to structure things properly, or they'd hear about it in the reviews.
Nice article. But no real reference to code documentation. As someone who's done a lot of maintenance programming, few programmers seem to care about this.
This is amazing data, and I expect that much more research is coming our way. It would be interesting to speculate on what kind of databases might be needed.
After completing a PhD in pure Mathematics, I started working the next day writing scheduling algorithms in Fortran on an IBM 4341 (my supervisor played poker with the company President, so that helped).
Although I picked up Fortran quickly, I had to study scheduling algorithms because my specialty was mathematical logic.
Then I became a university Statistical consultant, but I knew nothing about that either (my boss wanted to learn logic).
Five years later, when Prolog became a popular AI language, I quit my job and began writing expert systems as an independent.
Prolog (PROgramming in LOGic) is based on the first-order predicate calculus, so my formal training was exactly what I needed to understand logic programming.
After that I branched into databases, which I'm still doing as an independent.
So, I didn't need to know anything about computing to become a programmer.
But my domain knowledge (math) gave me a powerful tool to solve some computing problems.