
Ask HN: Is it necessary to be a CS major be successful in the tech sector? - eugeneross
Tell me HN, what are your thoughts on this? Do you believe it&#x27;s absolutely necessary to be a CS major to be competitive in the technology world?<p>Can the same result happen for someone who isn&#x27;t a CS major but goes through all the hoops to teach themselves?
======
brudgers
I am not saying that a CS degree is necessary or necessarily better, but I
believe it is a categorical mistake to treat the experience gained obtaining a
formal CS education with the experience gained teaching oneself...if only for
no other reason than that a student, by definition is less able to distinguish
among the hoops and accurately separate them into useless, useful, important
and critical.

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.

~~~
eugeneross
Thanks for your input. Adding to what you've said, I've read and heard on some
occasions (from professionals in my sector) that taking some CS classes as
electives was beneficial and wasn't too overwhelming.

~~~
brudgers
You're welcome. Many years ago, I "just got the piece of paper to hang on the
wall," Amost as many years ago, I got another piece of paper that hangs on the
wall as a credential - not in CS and in a field where credentials have legal
standing in the pursuit of other non-academic pieces of paper to hang on the
wall. Which is a way of getting to the core decision that you face. What is
the value to you personally of the piece of paper that you can hang on your
wall?

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.

------
byoung2
I am a self taught programmer, and I am now director of engineering at a tech
startup. I think CS has its place, but just like music, some of the best
musicians and producers have not studied music theory formally. There is not a
day that goes by that I am not learning something new about programming or
technology (which should also be true of CS majors), so keep that in mind,
learning doesn't end at graduation.

------
lloyd-christmas
The tech sector is a big place. There are countless people who haven't
programmed anything in their life and are successful. Assuming you mean in a
programming role... I wasn't a CS major and am successful. Continuing
education is a necessity, and I'm always going back and learning things I may
have missed not having been a CS major. That being said, "CS" aren't magical
letters that open doors to the golden kingdom. I know plenty of dumb-as-rocks
CS majors. Most success tends to boil down to the human element.

------
Ologn
> 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.

~~~
louthy
Is there a point to this other than telling us how amazing you are because you
know some facts? As a self taught programmer there's probably just as many
things that I can do that you can't. And how would you rectify your lack of
knowledge in those areas? That's right, go and find out for yourself. The
amount of hours you list are meaningless also (there are only 168 hours in a
week by the way); self taught programmers have spent more time on the areas
they're interested in. Not everyone who's self taught started by bashing out
web-apps in Ruby and you do us all a disservice by tarring.

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](http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming)

~~~
eugeneross
You make some interesting points and I appreciate that you weigh out different
aspects. The things that you mention are very inspiring to me. Everything that
you've accomplished makes me want to work harder than ever. Is there a way I
could reach out to you privately to ask you some questions if you don't mind?

~~~
louthy
Yes, i'd be happy to help as I can. Although take my advice with as big a
pinch of salt as any opinion on here. No-one really knows the right way to do
this properly. We're all shaped by our experience in this, still young,
industry.

Feel free to drop me an email: plouth at gmail.com

------
nikdaheratik
It depends on what you want to do. The "technology world" is a big place. If
you're going into biotech, for example, you can do just as well with a BS in
Biology or Genetics and taking a few programming courses to give you an edge
when it comes to areas that are using computers heavily (like Bioinformatics).
The same goes for Physical Sciences, or Mathematics/Econ or even Geography.

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.

------
dllthomas
"Absolutely necessary"? No, of course not.

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.

------
kasey_junk
I personally have and greatly appreciate my CS degree. I don't know if anyone
else on my team has a CS degree and I largely don't care. It is not a
requirement to do the job of software developer and lots of great software
developers do not have CS degrees.

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.

~~~
monroepe
I agree with your "Why not?" point. If you are already in college and plan to
do 4 years, you might as well get a cs degree. For me it was too late to
switch majors when I found out how much I loved programming. And it really
wasn't worth it to do a 5th year. But I did take as many courses as I could
before I graduated.

~~~
lloyd-christmas
"why not" comes down to time. There are things I enjoy more than programming.
Most of these things I know I wouldn't be successful enough at in a
professional sense. I might as well spend that magical time in college where
nothing actually matters to pursue some other passions.

~~~
kasey_junk
Nothing wrong with that reasoning at all. That said, studying both should be
an option.

And you might consider those other things as a profession anyway. The magical
time after college lasts a lot longer and being stuck doing something you
don't like sounds terrible.

------
lgsilver
You don't need a CS degree to be successful but it'll be a lot easier to get
in the door.

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.

------
Bahamut
I studied math & physics - never took a CS class. I have made my way to a lead
frontend engineer position in under 2 1/2 years, and I am courted by many
companies. For me, the ability to solve problems quickly without oversight has
proven to be valuable. It took a lot of hard work to get to that point, but I
am absolutely of the opinion that a CS degree is not necessary. In fact, I
once roomed with one who apparently couldn't find a job coding for a living &
was not particularly intelligent.

------
philjr
Just another data point, but you've already gotten your answer i think.

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!

------
monroepe
Honestly it comes down to motivation. Whether or not you get a cs degree you
have to super motivated and hard working to achieve greatness.

~~~
eugeneross
I agree. What you've said can be applied to anything.

------
czbond
I self taught myself before college and then used a CS degree to force me to
study things I never would have. It tended to round me out better in areas
where a self taught might avoid. For example, optimization, refactoring,
underlying OS implementation, architectures, etc. No way on earth would I have
diligently taught myself those for months on end.

~~~
louthy
I think this just shows how 'fluffy' the advice here is. As a self taught
programmer starting with a computer that had a clock speed of 2MHz and 32k of
RAM, I learned very early how to optimise, how to refactor and how OSs worked
under the hood (as well as the underlying hardware). When I look at Big O
notation, I always see the efficiency description of any algorithm as 'well,
durr', because I just have a strong sense of whether something is going to run
in fixed, linear, or exponential time.

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.

------
mlitchard
Eugene, I'm going to pass along advice that was given to me years ago. Do the
hard thing.

~~~
eugeneross
I've been hearing hints of this for some time now. Doing the hard things in
life can open new doors as an individual, or steer you into the right
direction for something else.

------
jpindar
The majority of people I know who have successful careers in technology
couldn't write fizzbuzz. (That's why they pay people like me).

When did "technology" stop meaning machines, electronics, chemicals etc. and
start meaning websites?

------
snap12789
No; you can learn anything on your own online, but it's easier through the
structure from school. If you're paying for school yourself, however, you'll
be in a much better financial position learning cs on your own.

------
LukeFitzpatrick
It helps, but not necessary. Most of the awesome coders I know, didn't study
CS - they learnt by themselves.

------
zeeed
no, but it makes starting easier. you have no track record to prove yourself
(unless, of course, you do) so having a good education is sort of your entry
ticket.

------
_RPM
If you don't get a CS degree you'll be at a disadvantage when you're lined up
adjacent to other potential hires that do have CS degrees.

------
Jemaclus
Nope.

Source: theatre major, masters in education

------
trcollinson
Disclaimer: I am "self-taught". I have a degree in logic and rational
reasoning (a philosophy at most universities) and I went to (and drop out of)
law school. A bit of background for you.

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.

~~~
eugeneross
Thanks for sharing your great advice! I truly appreciate it. I'm currently in
an intern position with a software company. Working here opened this whole
topic for me.

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.

------
khyryk
It's the path of least resistance.

------
gumballhead
No

------
sparrowmaxx
er

