Can the same result happen for someone who isn't a CS major but goes through all the hoops to teach themselves?
The features of a formal education include guaranteed access to experts [for some definition of 'expert'] and a proven set of priorities [for some definition of 'proven']. The downside is less potential breadth since standardized systems are standardized.
The real question is what does 'make it' mean? For some people the piece of paper matters. It's a goal with social and personal significance and there is nothing wrong with that. If 'make it' is tied to wealth...well it's easier if you were smart enough to pick rich parents.
In the end it depends on what you want. And in any event, while a CS degree won't necessarily make anyone good [for some definition of 'good'] it may open opportunities and if they are good a CS degree will probably make them better, and almost certainly not make them worse.
Good luck.
It doesn't really matter much how much I value a diploma, unless I a hiring manager and you are a candidate and that's the typical case. Diplomas are meaningful culturally. If you already have a piece of paper to hang on the wall your calculus may be different than if you don't. That's ok either way.
If you have a diploma, then Coursera's MOOC's are a middle option. There is the formality, at least in some offerings, of a fixed course schedule and consequently a peer cohort and clear instructor student relationships. And it offers some excellent courses by excellent CS teachers. But it's not going to get you academic credit if you might really want a degree at some point.
I've taken a bunch of them and gotten a lot out of it [I've also dropped a lot of courses when I haven't]. But my situation is my situation - that's why I described it - and not your situation. Or YMMV.
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
Most CS Degrees cover:
1. Basic and Advanced Programming 2. Design of Computer Systems (both hardware and software) 3. Design of Operating Systems 4. Theory of Computing (so Algorithms and Data Structures) 5. Other special topics like Networking, AI, Expert Systems, Bioinformatics, etc.
These topics are important for some jobs, and people who excel in some of the advanced areas (and often go on for an MS) can make mega bucks. However, a programmer designing a corporate website or other CRUD system probably won't need/use half of the stuff they learned in their degree, and would likely earn less than someone who excelled in another engineering/science degree that also picked up some programming knowledge.
I would say that, for most people, the best approach includes a degree. Probably a CS degree; mathematics or other engineering disciplines may work as well. That will change somewhat the kind of exploration you need to be doing outside of class. Any which way, you need to be doing quite a bit of exploration outside of class.
That said, most of the really good software developers I know who do not have a CS degree, at some point in there career wished they did. Whether those wishes are worth the investment is hard to say.
My biggest question is why not get a CS degree? If it is a question of resource allocation, then I completely understand. If it is a question of lack of interest, that would be a red flag to me, either of the institution you are studying at or of your own motivations. But that could just be my bias because I found CS fascinating.
Most top-tier tech companies (google, fb, twitter, etc.) won't even interview a non-cs candidate for an engineering or product role unless they have incredible (like, you built instagram) evidence of their talent.
It's also a lot harder to skip the degree and still learn what you need. I did, and it's taken me 10+ years of constant curiosity (and tons of nights and weekends) to be on par with my peers who have degrees.
That all said. You gain other skills with a liberal arts or science degree that CS majors don't get. I'm a much better communicator and manager than many of my engineering colleagues, and that has allowed me to outpace them in terms of career growth.
Some of the best guys I've seen have majors in fields similar to x's - physics, ee, maths. I've hired and worked with people from majors in law, sociology and psychology, to name but a few. Some of the best (and most interesting) guys I've worked with.
The difficulty will be the "first job", but if you're skilled then you'll be fine. Teaching oneself is no meagre feat however!
So I feel the exact opposite of you: I would only have learned "optimization, refactoring, underlying OS implementation, architectures, etc." if I had the 'infinite' personal self-tuition time. I couldn't imagine learning any of that stuff in a class-room.
I'm not saying you're wrong, you're not. But clearly there's cognitive biases on both sides, which might not be very helpful to the OP.
When did "technology" stop meaning machines, electronics, chemicals etc. and start meaning websites?
Source: theatre major, masters in education
Is it necessary to be a CS major to be successful? Simply, no. Does it help? Yes. You see many people ask this question because they want to know if they can start working right now and make money and skip all of the hassle, time, and expense of going to a school and majoring in CS. In order to be competitive and get the positions you want and make the money you'd like, you are going to have to learn CS. One of the better ways to start (more on the start in a moment) is to go to a University with a good CS program and learn. You'll also get a number of other soft skills that will stick with you for the rest of your life.
If you aren't going to get a CS degree you will still have to study all of those aspects to CS in order to be competitive at an advanced level. I have met other "self-taught engineers" who can handle CRUD operations pretty well and who can make a pretty front end with a little bit of framework help, but when it comes to things like traversing a simple binary tree structure or explaining memory management techniques or even just explaining a simple FILO stack, they can't handle it let alone make one work for a specific scenario. You're going to have to learn those eventually, a CS program will give you a lot of that knowledge and it is useful!
Early I mentioned it's a good start. I have been working professionally since the mid-90's as an engineer. A lot has changed in 20 years. Now, a number of the concepts that I mention before have not (FILO stack's are FILO stack's, after all). But CS and engineering is a constant learning experience. New techniques and technologies come out every single day. I would argue that a CS degree teaches you how to learn as well. And you are going to be learning for a long time to keep up and keep your competitive advantage.
Final thoughts: College is fun! Sure it is stressful at times and somewhat expensive. But it's a good time! You can keep those relationships for a lifetime and they will also give you a competitive advantage.
A CS degree is not enough! Work on real projects while you are learning. Get internships or junior spots and work. Those are fun too! They will help you. Enjoy this time in life.
If you like the idea of going to school but you aren't sure about CS, think about what you really want to do and do that! I thought I wanted to be a lawyer (in hind sight, this was an absolutely horrible thought, but I digress). I still had fun in school. I took a long, winding road to get to my successful development career, and I don't regret it at all. But don't believe CS is the only way. But you do have to pick a way. There are no short cuts to success.
I was contemplating whether or not I was making the right choices for my education. Sure, everyone's different when it comes to learning and choosing their paths. I just want to make sure I won't regret my decisions. Again, that being said, there are pros and cons for these types of situations, but that's besides the point.
I originally plan on majoring in the businesses field, while minoring in something to do with computers(CS, Eng, etc.) Ultimately, I want to create tools for people to use, make them pleasant to look at, all while contributing to something I could be proud of. Luckily, I have a little bit of time ahead of me to really think about my options to send me into my future.