|
> goes through all the hoops to teach themselves The average course is 50 hours a week in class, plus 150 hours a week studying, meaning 200 hours total. So to repeat what I did, you would have to spend 200 hours studying graph theory, then 200 hours studying data structures such as trees and graphs, then 200 hours studying algorithms that operate on data structures as well as big O notation, then 400 hours studying calculus, then 200 hours studying discrete math, then 200 hours studying theory of computation, then 200 hours studying logic gates, ALUs and assembly language, then 200 hours studying mutual exclusion and critical sections, then 200 hours studying floating point numbers and data representation, and so on. In my experience, it is quite rare to find a self-taught person who can explain what deterministic pushdown automata are, or what the elements of mu-recursive functions are, or how to find a function maxima with Lagrange multipliers, or how you can prove a problem is NP-complete through reductions. They might even have problems explaining exactly what the relation in a relational database is. Usually self-taught people go straight to trying to learn Ruby or PHP or something. Their knowledge of CS is not very deep. There are exceptions, John Carmack has a better knowledge of C++, programming techniques, computer graphics and other areas then the average BSCS graduate. But he is very honest and open about what he knows and does not know, and what topics he is getting around to now. One time I had lists of numbers (like "1 7 3 0 2 4 6" or "8 3 5 2 0 1") and had to make a hash of them. I suddenly thought, why not just turn the lists into Goedel numbers? I then did a Google search and saw other people had used Goedel numbers for hashes in similar situations. How many of those people were self-taught? Probably very few. |
At the end of the day you learned some facts in a structured setting. It is entirely possible in a non-structured setting. The beauty of self-tuition is you take it as you need it, and you dig deeper when you find an interest. It is true that self-tuition as part of your job doesn't always allow one to delve as deep into a subject as one would like, however the best self-taught programmers are self-taught in their own time.
To answer the original question: No, you don't need a CS credential to be successful in the tech sector. I'm a CTO of a successful medical software house, I've developed my own databases, distributed systems, languages, frameworks etc. I'm a polyglot, knowing high and low level languages (as well as many assembly languages). Before that I worked in the games industry where I developed high-performance 3D graphics engines, animation systems and physics engines. And yes, I can read The Art of Computer Programming[1] and understand it. All without a math or CS degree. I have never had a problem finding work, and often when I have looked for work in the past I've been inundated with offers.
As a CTO when I receive CVs the education section is almost irrelevant to me. It's a useful guide, but it has very little bearing on whether I bring someone in for an interview.
I have worked with many graduates over the years, and they're mostly useless when they join the world of work (unless they'd spent their childhood self-tutoring). There's clearly benefits to the academic knowledge, but mostly you won't even need it. It's only when you start to dig a bit more that missing knowledge pops up. Then you just go and learn it.
However, if you've not learned how to learn then a formal education may be the best choice. When I had the opportunity to go to university I turned it down because I was sick of the stifling educational environment up until that point, but by that point I'd already been teaching myself to code and everything about computers from the age of 10.
[1] http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming