
Ask HN: If you could go back to study any CS-related field, what would it be? - offbytwo
I&#x27;m a sophomore in college, and feeling pretty bogged down by the not-so-relevant required courses at my school. I love the CS courses but I keep finding myself looking at entry level code monkey jobs and thinking of dropping out. I work part time as a developer right now and I enjoy working far more than doing any of my homework, so this is something that is on my mind a lot.<p>What are some lesser known areas of CS that would be worth studying while I have the chance? I would say the subjects that excite me the most are Machine Learning, p2p tech like IPFS, UX-design, and alternative computer-interface things (like brainwave sensors, VR, and that jawbone thing from MIT that was posted a few weeks back [1]).<p>[1] http:&#x2F;&#x2F;news.mit.edu&#x2F;2018&#x2F;computer-system-transcribes-words-users-speak-silently-0404
======
jimmies
As a former-dropout myself [1]: You might some of the courses utterly stupid
now, and you might have many doubts about the usefulness of a degree, but I
think ultimately a degree is very very much worth it, both intellectually and
for logistics reasons. A degree will open doors to you, for example, most jobs
will throw your resume right away if you don't have a degree. Some countries
won't allow you to immigrate if you don't have a degree. There are many dreams
that require a degree.

The only reason that you can justify dropping out is that either (1) you think
you can't possibly learn anything useful from the professors that are teaching
you and you'll rebuild/repay what you didn't learn one day (and you better
have to have a good answer when you'll do that right now), or (2) when you
have a grand startup like Bill Gates or Mark Zuckerberg. But I don't think
that's why you're wanting to drop out now. So don't drop out. Keep pushing.

For me, I wish I learned assembly, kernel development, stats and machine
learning. First two because I love to, the latter two because they are useful.

I am now almost finished with grad school, and I feel like I know nil. But in
a very Lao-tzu way, I think the biggest enemy of mine is myself (the willing
to sit my ass down and learn), not that these can't be learned by myself.
Lately, I think I somehow I overcame that problem and was able to read, learn
and make a lot of stuff on my own. I think the same thing can be said about
anyone who had the patience to get a degree as well: It means they are willing
to deal with things they don't totally enjoy to get what they want. As Lao-tzu
said, patience is a good virtue by itself...

1: If you need to verify, read the entry called crankshaft #2 on my blog on my
profile.

~~~
washadjeffmad
I remember signing up for a course in mass transfer that we joked would have
been better titled bubble science. It seemed so obvious at first, but as we
progressed, the math and concepts became more vast and inscrutable to me, and
by the end I'd learned so much about something outwardly so simple that I felt
that I'd barely scratched the surface of the topic. But that's not really an
unusual outcome for learning, right?

Pursuing a technical education is tricky because those interested often have
an elevated baseline knowledge and want to jump ahead without relearning
fundamentals, but it's often those fundamentals that cause growth to suffer
later on. Realizing that you're actually struggling with algebra while you're
taking mv calc is a big eye opener, and realizing that you get the basics and
applications of certain implementations of certain technologies in the first
two weeks of a course can feel redundant and insulting, but that's because
it's hard to gauge or trust that there's more to things beyond the limits of
our understanding, not because the material is unworthy.

Overcoming that is humbling, and that can put people eager to get a start on
making money because they're already slightly better at something than the
population at large at odds with the goals of higher learning, but it's a
necessary part of our growth and perspective.

People who grew up being told how smart or special they are can have a harder
time with this, and I know it was pretty embarrassing for me when I realized
early in my adulthood I was much closer to the "kid who's good with computers"
category than an actual "IT professional", despite being able to successfully
complete contracts and make money from what I was doing. Those experiences
helped me re-evaluate my approach and get out of the "I'm already awesome, why
would I need to do more" mindset. Had I not realized that, I might have
stubbornly stalled out thinking I didn't need anyone else while the world
passed me by.

~~~
bhu1st
> Those experiences helped me re-evaluate my approach and get out of the "I'm
> already awesome, why would I need to do more" mindset. Had I not realized
> that

What helped in getting out of the mindset, what did you do?

~~~
washadjeffmad
I hit a number of walls professionally, interviewed more ambitiously (and
unsuccessfully), and in general discovered the delineation between my
perceived and actual values. It was more "look at me doing what people go to
school for and make careers out of just because I can" novelty instead of
realizing what kind of role I was serving, understanding my market, and trying
to have good business sense. I thought of what I did as a series of problems
to solve for cash instead of a mutual relationship, and I was just good at
getting my foot in the door. Pretty obvious mistakes, really.

Even more generally, I left my comfort zone and put my experience to the test
against people with either a lot more resources and education. I either was
unable to complete these larger scale jobs, wasn't able to negotiate
effectively or else let them run all over me with pay or feature creep, or had
to be able to say (read: admit) I couldn't actually do or understand the work
as I was.

------
LocalMan
I dropped out in 1971 for reasons similar to yours. I am now retired. I've
supported myself by writing software since the 1970's.

Dropping out has cost me several hundreds of thousands of dollars. I don't
know how many. Lots of companies pay more just for having a degree.

Consider transferring to a cheaper and/or easier school. You'll have more time
to yourself, which is often a good thing. Unless you're actually depressed.

If you're interested in CS, math is almost always useful. I wish I'd had more.
Most of the topics you list are research topics only available to research-
level academics.

Changing schools is the one thing I regret not trying. Another thing to
consider is to change girlfriends. Or find a better one. That can certainly
impact your overall view of life. In other words, don't ignore the social
aspects of choosing a school.

In the 70's through the 90's I had to contend with management that was often
quite stupid. And quite often did not even know what a computer really was.
You can avoid situations like that more easily if you have a degree.

------
gitgud
No-one has mentioned Cryptography. Although it seems boring, the applications
are almost ubiquitous. It's used everywhere in internet connected systems,
secure software and data storage (to name a few).

It would seem that would get to work on the large and important things if you
pick up cryptography as a skill.

~~~
greenhouse_gas
And also, its one of those things that's hard to learn on your own. On the
other hand, do they cover defense against practical attacks in uni? As in,
will you be told to roll your own crypto, and have the professor show you the
timing attacks, etc.? Because honestly, the theory you can pick up on your
own, in industry you just use a library, and I don't know how nice will
OpenSSL devs be if you just show up as a crypto noob on their doorstep asking
for mentoring.

~~~
whiskers08xmt
Danish university student here. In the course I'm currently taking, they've
made a point of stressing the importance of not rolling your own crypto, along
with using salts, and have had assignments where the point was to crack weak
encryption like MD5, and do dictionary attacks on stronger crypto. Timing
attacks were covered as well.

~~~
greenhouse_gas
>they've made a point of stressing the importance of not rolling your own
crypto,

I think there should be a class on _how_ to roll your own crypto, because
_someone_ 's got to do it, and, as we saw with Heartblead, you don't want
something like crypto to be something only a handful of people in the world to
understand.

~~~
QML
That belongs to the realm of graduate courses where theory and rigor are more
emphasized.

------
gnodar
I would take some Electrical Engineering classes, maybe even minor in it.
Given an abundance of time, I would also take some higher level math classes.
Based on your interests a broader exposure to these fields, which are strongly
related to CS but only lightly-to-moderately covered in a standard CS
curriculum, can only help.

For me personally, I would do a deep dive on distributed architecture, which
you may also be interested in given your interest in p2p.

~~~
mehrdadn
When you say EE, do you mean signals/optimization/control/etc. or do you mean
circuits/device physics/RF/etc.?

------
edejong
The ones that will help you long-term: management, requirements analysis,
distributed aystems architectures.

Technologies come and go and you’ll be autodidact during your career.
Management, however, will help you identify how to become more effective,
regardless your actual posistion.

~~~
quintes
This

------
nojvek
Compilers - every programming language uses this.

Databases - Btrees, indexes, distributed key value stores. The world runs on
databases.

Graphics - if you like games, how a 3D scene is rendered, photo realism with
Ray tracers, GPU pipelines and OpenGL

AI and Machine Learning - tons of fascinating problems and algorithms.

I’d say focus on the basics. Hash tables have remained mostly the same since
they were invented. C still uses pointers, the basics are fundamentally so
powerful that they are kind of eternal.

When I hire someone, i’m looking for someone with strong fundamentals. They
understand the basic datastructures, algorithms and how a computer works.

------
your-nanny
I regret not taking linear algebra (not required by most programs, but very
relevant to what I do), computer graphics, and software engineering
methodology. If I had taken these classes, I would not have taken other
interesting and useful coursework that I would regret not having taken. Hard
to measure which path would have minimized my regret. Possibly none, because
it may be that degree of regret isn't a function of the path you take.

~~~
thisone
Same as with linear algebra. It was never part of my course work. Differential
Equations, yes. Linear algebra, no.

I plan to teach myself one day. Maybe I'll start today

------
Endy
Being honest, if I could study any CS-related field, it'd be pretty simple -
advertisement technology management. I'd want to know how to get in the game
of stealing people's private data for money; it seems that's the wave that's
going to be cresting soon - and people always want to know more about other
people.

------
manish_gill
One thing I've been always fascinated with was the Symbolic Systems course at
Stanford. It was a fascinating curriculum involving a mix of Computer
Science/AI, Philosophy and Linguistics. I've tried searching for material
online, but it's a course taken by only a few people every year and there
isn't a whole lot of information available online. If someone reading this
studied that/or knows about the methodology/syllabus, I'd love to delve into
it!

~~~
Animats
That's "traditional AI". I once took John McCarthy's course, "Epistemological
problems in artificial intelligence", also known as "Dr. John's Mystery Hour".
It was about how to hammer the real world into predicate calculus. That turned
out to be mostly a dead end.

------
jahewson
I felt exactly the same way and made it through my undergraduate degree,
worked for 6 months, realised that being a coding monkey was going to consist
of repeating those same six months for decades and promptly returned to
school, ending up with a PhD.

The best advice I can give is to find a mentor - someone who captures your
imagination. Most professors are desperate for enthusiastic students to do
stuff for them!

And yes, do more math. You need people around you for that.

~~~
fyfy18
Out of interest, what are you doing now you have a PhD. How does it compare to
being a code monkey in terms of a career (salary, hours, prospects)?

------
msoad
Databases. Those are the most fascinating and complex programs I know but I
have no idea how exactly they work.

Most of complex algorithms and data structures are used in databases.

~~~
Animats
Databases are conceptually simple. It's making them go fast reliably that's
hard. Naive databases are "Lock everything, take search criterion, run over
all records, return result, unlock." (DBASE II in the DOS era actually worked
that way, and that's what people using Excel as a database are doing.) Now
make it go fast and make it reliable despite failures while updating.

------
baus
I agree with everyone who says focus on math and stats. The best programmers I
have worked with have come from a math background. This is an area I greatly
underestimated in my education, and if I went back to school now it is where I
would focus

------
muzani
I made the perfect choice when starting with Android. Great job prospects,
great pay, allows me to go in and out of a lot of fields.

But if I could try over, I'd focus more on small skills instead of breadth.
Full stack is nice to know but ultimately not useful. Anyone can learn to
program something over 3 months. That doesn't necessarily make you valuable.

What makes people valuable is being better than other people at a skillset.
Like right now we really need a good AngularJS (1) programmer, but that's hard
to find.

"UI/UX guys" are a dime a dozen, but what's extremely valuable are the ones
who can prototype quickly, write their own CSS/HTML. These guys will be core
to any group.

There will always be new, sexy tech. The hard part would be coding the
algorithms. The guys who are cashing in on e-commerce know their Big O. The
guys who are well paid writing code for Uber know their algorithms. The rest
will change, and will either be reading documentation or copy paste.

------
kyleperik
I feel as though many of the comments here are throwing out fields because
they're interesting. I think college is a very long term investment that will
change what you'll be spending your valuable time on for the next 4+ years.

I agree with many comments that suggest pursuing something more "meta" like
management or architecture that will help no matter where you land in 5-10
years. Although personally, I'd say experience is practically the best
education you can get.

------
jimpudar
Not exactly a "lesser known" area, but computer architecture and operating
systems. No matter what you are doing with computers, no matter what high
level language you are using, you will eventually need to understand what is
happening "on the bare metal".

~~~
ikeyany
Computer architecture was my undergraduate focus and sometimes I'm not too
sure what's happening on the bare metal. You'll want to take VLSI,
semiconductor physics, and a course on compilers to get the entire picture.

~~~
godelmachine
I would also suggest Digital Design.

------
floatingatoll
Factory operations. In absolute seriousness! If you want to get years ahead in
Ops, learn queuing theory and applications years ahead of your CS peers :)

~~~
jimpudar
I'll second this - queuing theory is extremely relevant in all sorts of
places. If you haven't studied it, you might not know when the concepts will
apply.

It's applicable to all sorts of things like event loops, job queues, network
packet analysis, even database access.

------
brightsize
Geospatial technologies. Cartography, visualization, remote sensing,
geospatial databases. If you're good with Python you'll go to the head of the
class. My _impression_ is that most students and practitioners in GIS don't
have CS backgrounds and thus programming and relational/geospatial database
(e.g. PostGIS) skills are in demand.

------
tytytytytytytyt
I would take all of the electives I could, if I could go back in time, even if
it required staying an extra year. Graphics, networking, databases, ML,
everything. I would even go for the masters, really. The undergrad degree is
in a sense the prep work for the really interesting stuff.

------
bennyp101
Something that I looked at doing recently was getting into law around the
internet/AR/cryptography etc.

It seems that there are a lot of people currently making laws and rulings on
things that they don't understand - and there is going to be a lot of change
coming soon with the way technology is going.

Unfortunately I can't afford the time or money to do it now (I think it was
like 6 years to just get qualified) which is a shame.

(I never went to university or even finished my A-levels, I just went straight
to get a job at 17, looking back 20 years later, it hasn't hindered me in
anyway, but I do think that going would have had a positive effect and maybe
changed my career)

------
xfz
Don't drop out; you'll spend your whole career trying to push open closed
doors (it gets easier with many years' experience or during an acute skills
drought, but the issue never goes away completely).

Study whatever you enjoy most. It'll be easier for you to excel that way, and
you'll still get the all-important degree.

Once you get your career underway, continue to learn and work on whatever
interests you most; be prepared to continually learn and adapt over the
decades. New technologies and ideas will come along that haven't been imagined
yet, while some of the stuff you study at uni will be surprisingly relevant
later.

Best of luck!

~~~
LocalMan
As you get older, it gets harder to learn new stuff.

------
quickthrower2
Study something that makes you excited. For me, if I had enough money to
retire and I am just doing this for fun/intellectual I'd probably look into 3D
graphics. I'm not a big nut on Machine Learning. Programming Language design
would be kind of cool but I'm afraid it would get a bit dry. I did well
studying topics I could visualise. Therefore I did well at analysis at
university because you can visualize limits then transcode that to a proof.
But vector spaces blew my mind out and I didn't really enjoy that.

------
peakai
Dev work probably feels enjoyable since you end up creating things for the
product and see where it impacts the business everyday. Coursework is a little
more abstract, but you can still make it enjoyable by talking with peers and
professors to find out what is interesting and chic local to you. You might
try taking some statistics, algorithms and engineering courses since you seem
attracted to the by-products of the theory there. Good luck, and hope you
don't drop out!

------
keynan
Pick what your passionate about and learn it deeply. However you would be well
advised to take atleased one course on:

\- networking, focus TCP \- Compilers, focus theory behind lex and yacc, or
equivalent \- parallel algorithms, focus on lock free and message passing \-
A.I. focus on or-tree search and genetic emergence. (Not ML, important but
that comes later) \- functional models of computation and recursion.

------
iliketosleep
Front end development. It's incredibily useful for when you get an idea for a
product and want to whip something up.

------
aurelianito
My suggestion to you is to take any courses where a 10 years old book is not
outdated. This probably includes almost all math, algorithms, big o notation,
databases, OS fundamentals, etc. And it probably does not include things like
machine learning, HCI, etc.

------
pfzero
I think that this website gives a great study roadmap for computer science:
[https://teachyourselfcs.com](https://teachyourselfcs.com)

You should definitely consider choosing some topics from the and study them.

------
azhenley
Human-computer interaction!

I didn’t have any exposure to this as an undergrad but have been doing
research in the area for my PhD, and now I’ll be starting as a professor in
August. I think it can benefit you in just about any job you go for.

------
shiado
Information Visualization. It fits in really nicely with the ML and big data
hype.

------
adamnemecek
Photogrammetry. It’s the art of reconstructing 3d models from several 2d
images.

------
amorphid
Hey OP, I'm a self taught programmer and former tech recruiter. I wish I had a
BSCS for the following reasons:

\- it would have been easier to get interviews at places I wanted to work when
I had less experience

\- it would be easier to get interviews now at places I want to work if I had
prior experience at companies like the ones I could have joined with a BSCS

\- I'd finally know what I could have learned in school but didn't, and what I
just needed to learn on my own

\- I'd spend less energy on feeling like I have something to prove to BSCS
grads

If I were in a BSCS program, and I wanted to drop out, I'd do the following
before bailing:

\- prove to myself that I could power through boring work AND do it well to
reduce the chances that I'd get fired from a job because I couldn't/wouldn't
do the crap work that job required of me

\- I'd seriously look at my finances to understand how much time I could
afford to be unemployed, because I was damn broke in school, and if I got
canned from a good coding job, and had to take a crappy non-coding job, I'd
have less time to code, which would make it hard to get another good coding
job

\- immediately start living as cheaply as possible on cash I had, only using
student loan money for school expenses, and completely staying away from
credit cards

\- line up a job before dropping out, and keep still playing student well
enough until I had that job

\- talk to my professors about my challenges in remaining interested in
school, and see if they can offer me some perspective that might help me
appreciate the pros and cons of staying in school, because unlike your boss at
work, you can talk to professors about your non-growth/personal development

\- find some professional mentors who could guide me on how to be an employee
and/or entrepreneur

\- stop throwing around derogatory terms like "code monkey", because that kind
of job may be the I could get, and I wanna certain I'm not insulting people
with whom I'll be working by unintentionally coming across as an a __hole

\- figure out how to pay for health insurance

------
jxub
I just wanted to chim in and say thank you for the question, @offbytwo. I'm in
a similar situation now and these answers provide a better mental model to act
on.

------
glebashnik
For machine learning take math, especially advanced stats. Algorithms and
architecture will help you to get high-level CS jobs. A couple of business
courses will help you to advance your career.

------
mooneater
The degree itself opens doors that can remain closed to you otherwise. Get
some theory in you and you will stand out from those without it. There is lots
of time to be a code monkey.

~~~
mooneater
You may not see the relevance of certain courses, some may never be directly
relevant. But they are shaping your mind getting you used to abstract thought
and greek letters.

What we have atm is a job market where you can make good money with your
skills. Consider that the "weather", it may come and go. In leaner times, the
degree can be of more value.

------
rajacombinator
Even if you can’t find interesting courses (unlikely), you could use the time
to work on a startup or for “personal learning” experiments.

------
jbros
I would do whatever these guys are doing at [lambda the
ultimate]([http://lambda-the-ultimate.org](http://lambda-the-ultimate.org)).
This all looks strangely fascinating.

------
macawfish
Math!!!

------
purplezooey
Computational Phrenology

------
tristanj
Econometrics.

I completed all the pre-reqs too, just never got around to taking it.

~~~
mlevental
isn't econometrics basically just a math methods class for economy student
that want to do theory? just like how in the physics department it's called
"theoretical physics" or something like that but it's just a Hodge podge of
odes and linear algebra (and maybe calculus of variations)

~~~
tristanj
A few people I know who studied it ended up working in Data Science/Machine
learning.

------
megadeth
Automata and FSM

