
Ask HN: How to choose the right university subjects for a career in IT - Eugeleo
Hello. I interest myself in programming and I&#x27;ve been dabbling with many languages (Swift, Python, Haskell), reading books and doing little projects (mainly Code Wars-type, or small apps for iOS).<p>Soon I will have to decide on what university I go, and what exactly I&#x27;ll study. But how do I choose? There&#x27;s so many things that sound really interesting - systems programming, data science, bioinformatics... And no way to try them out beforehand! I need to plan some rough route at least, which I&#x27;ll refine once I get my bachelor&#x27;s degree (e.g. I can go general IT now, and choose AI for masters; or go bioinformatics now etc.).<p>I have nobody to ask, because nobody in my proximity understands this kind of stuff, not even teachers. What would you advice me to do? 
Thank you very much for help.
======
patio11
My perspective weights towards industry, not academia. That is an important
thing to acknowledge up front; note that almost everyone you talk to on a
university campus has the opposite perspective and many of them are unaware of
it.

It is far more important that you actually write code than the specifics of
what you study, from the perspective of a career in industry. This attitude is
very not shared by academia.

I would bias towards a course of study which included the opportunity to work
on longer-than-a-lab meaty projects. Some schools offer courses where the
primary thing that you do is a single semester-long project on a team; that is
a useful thing to have done.

University is also a good time to low-consequence graze across a variety of
fields to expose you to things you _could_ do in your career without
necessarily needing to commit to them. One undergrad course on AI, for
example, costs you ~2% of your units of study effort and, while it probably
has negligible real-world utility, will give you a feel for whether it is an
energizing topic for you.

Does your school have a strong internship program? I would expose myself to
opportunities to do an internship, particularly if it were an internship at a
company with a strong engineering culture. Bonus points if it is one you'd
consider working at after school

~~~
Eugeleo
I'd like to work in the industry, not academia; even if I study
bioinformatics, I'd like to work in pharma industry or apply it in practice,
not do research.

If I take only schools from my country (Czech Republic) into consideration, it
doesn't seem any of them offer such long project-courses. Maybe some game
developing class in masters.

About the internships, it would almost seem my school (Charles' University)
only participates in Erasmus+. Not sure if that's really everything they are
offering, I'll have to look it up sometime.

Charles' University offers three basic bachelor "routes" (for lack of better
word) - general CS, programming and computer systems, software and data
engineering. In addition, each of them has around three branches. Even if I go
this "CS Highway" (and not Maths or bioinformatics), which of the routes
should I choose?

------
bkovacev
The most important thing I was told while in college - you get out of college
what you put into it. You'll still be a junior developer once you're out of
it, and you'll re-learn 90% of what you know.

Classes won't matter much because you won't learn any real world usage of the
technology, but you will learn all you need about algorithms, data structures
and big o notation (if you want to pass the interviews). Pick classes that
force you to think and use what you know to pick a solution. Don't pick
classes that shows you the language, but rather how to approach problems, how
to think in terms of solving them and how to put it all together in an
architectured solution.

And as someone else said - internships. You'll learn 10x more in 3 month
program, than you'll learn in your entire college career - guaranteed.

~~~
antigirl
I agree with this, i have a BSc and an MSc and tbh i learned everything
outside of university - by myself and in work. I would consider my self a full
stack JS developer and i do work at that capacity. Still waiting on the day i
have to use binary search tree or run massive perf test with big o notation

------
And1
When I look back at university now, I put in a ton of work to chase things I
was curious about and I feel like when I had my first job and compared myself
to the other new grads around me I had a very broad knowledge base which even
now ends up being really helpful. I'd recommend tasting everything you can!

There are so many things to learn that you cannot possibly master them all
(you probably won't find them all interesting anyway, or maybe you'll see a
specialization you'll like!) but learning new skills and keywords to google
later makes you really adaptable and feel more comfortable just diving into
the unknown. Having a broad knowledge base also makes learning new skills
later feel WAY less daunting- approaching a totally foreign concept in
something like a MOOC is much less scary when they use words or concepts
you've encountered before. (e.g. I didnt do any ML when I was an undergrad,
but all the statistics I took helped me through the coursera ML course later).

Do internships- the real world is very different from school and you want to
get exposure to it before it comes- it makes you far more attractive as a
candidate when looking for work.

And make sure to surround yourself with other curious people, that's a habit
that'll help you your whole life.

------
patja
Aside from the more obvious answers, I would suggest taking some philosophy
courses. I still frequently draw upon what I learned in my logic course from
philosophy.

That and anything that improves your communication skills. Courses with an
emphasis on analytical writing will pay dividends down the road. Doesn't
matter how great your coding skills are if you can't communicate well with
others.

------
mamon
There's a contemporary paradox: if you want a great career in IT, don't study
Computer Science, study pure mathematics and become Data Scientist, or Machine
Learning researcher :)

~~~
le-mark
I would suggest studying mathematics as well, but not for this reason. If
you're already coding, you won't get much from a CS education you can't pick
up on your own. Studying mathematics gives you the background to see more
deeply into CS, and other fields. In the US system, if you major in
mathematics and minor in CS, I think that's a much more fruitful path,
especially if you're interested in continueing on to grad school.

~~~
jfaucett
I would agree except I think studying physics is perhaps even better than math
because it lets you get more practice modeling real-world scenarios and math
gets more abstract and less relevant to CS at the later levels. But studying
CS itself is something I would not recommend for those who know how to code
already.

------
edw519
Don't forget the non-tech stuff. Good engineers are everywhere. Good engineers
who know how to write, can run projects, can lead people, and can get stuff
done are much rarer. Tech skills make you competent. Non-tech skills make you
senior.

I suggest looking into a liberal arts school that will enforce a well rounded
education while still getting your tech classes in. Sadly, this may be your
last chance to get that for a while.

The tech you learn in college will be obsolete in a few years. The "soft"
stuff will last a lifetime.

------
andyjohnson0
I'd be wary of specialising too much at this point. Maybe choose a bachelor's
course with a good balance of subjects, and specialise when/if you want to
take your studies further.

Also bear in mind that things change, and you might graduate and not want to
go on to an MSc or PdD. And after you've been working for a while the
composition of your degree course is going to be much less important than the
in-work experience you've gained.

------
ndh2
Go with CS.

For most students, maths is the hardest part, but if you manage to stay on top
of it, you'll be very much ahead of the field. Pay attention, always ask
questions if you don't understand. If you don't understand, you're probably
not the only one, and it's probably the teacher's fault anyways. It sounds
stupid, but always be aware that a university course is not a book or a video:
you can ask questions and the teacher can answer.

In your first semesters, find out as much as possible about different fields
for your bachelor thesis when the time comes. The work groups at your
university will post thesis suggestions for what _they_ are interested in.
Find something that _you_ are really interested in. Pick a subject, write your
own thesis, then find a prof that is willing to support you.

Avoid the mindset of "what are the hoops that they want me jumping through".
You're not a circus animal. Find something you can be passionate about, then
follow that passion. Once you're interviewing for jobs, you want to be able to
talk about what you did with confidence.

~~~
Eugeleo
Thank you for your answer. Some people here advice me to take Math, and learn
CS/programming (from the point in which I'm now) by taking elective classes or
learning on your own. What do you think about this?

~~~
ndh2
I don't think that was good advice for your situation, it was more like an
observation. The person who wrote it probably didn't even study math.

It really depends on your interests. If you like math, sure, go for it. You
can have a good career in IT. But if you're not absolutely sure, I wouldn't do
it. I switched my major from CS to math, failed, and switched back to CS. I
don't regret it, but pure math was a bit too much for me. But there are lots
of people who graduate in math. So it really depends on what you like.

~~~
Eugeleo
Yeah, they didn't and (as they say) now regret it. I'm also not a 100% math-
guy, I'm not sure I'd be able to handle it. Also, I hope I'll get the required
Math background for AI/data science even when studying CS. (our school has AI
Master's)

------
decasteve
Don't underestimate the value of distribution/elective courses: philosophy,
psychology, linguistics, classics, languages, etc. Expand your horizons and
touch on things that may tangentially impact the route you see yourself on as
a professional and as a person.

------
wai1234
Any decent undergraduate program will have a defined sequence of courses for
most of the first three years. The third year may, and the fourth year will,
be all or mostly electives that you choose. The idea is that you will be
better prepared to decide what to specialize in once you know the basics. The
main point of going to university is to learn how to learn because that is
what you will do throughout your career. Choose the best university you can
afford and get into. Worry about choosing courses later. If you like
programming, major in computer science but also take every math course you
can, not just the required ones. You can usually use a math course or two to
satisfy CS degree requirements.

~~~
Eugeleo
Yeah, it is similar here. I need to decide whether I want some general CS, or
data science intro, or Bioninformatics, though.

------
iopuy
Computer Science is truly the way to go. If you become a developer of normal
skill (in comparison to 10Xer's) this will open so many more doors than say a
degree in bioinformatics. The mindset around here sometimes seems to be we are
so skilled at writing code that job offers fall into our laps out of thin air,
but the reality is you will often have to go through the annoying application
process that us mere mortals face on every job change. Having a degree in
Computer Science makes these transitions much much easier. It won't be a
constant uphill battle to prove you know as much (probably even more) than the
typical CS grad. My 2 cents.

------
0x4f3759df
I got a degree in "Computer Science", but I wish I had gotten a degree in
Math. You can learn programming outside of university courses, but very rarely
can an individual pick up advanced mathematics outside of a university
setting.

From another angle...what companies do you want to intern at? What classes
would help you get that internship?

You can learn some AI and data science with Coursera - see if you like it.

~~~
Eugeleo
That's an interesting point of view. I'm not sure I'd be able to outlast 3+
years of pure Maths, though... I like Maths, and am moderately good at it
(straight As on high-school, not winning any competitions though), but doing
it for so long and on such a high level might as well drive me crazy.

Do you find one often needs to know advanced Math when working as a developer?
(or do you do something else for a living?)

~~~
0x4f3759df
I generally don't need to know math at all. But I'm just a boring developer,
I'm not working on AI or big data / data science (ie. cool stuff)

But to expand on my point, I basically never use anything I learned in
college. I had one semester of assembly programming where I did a little
kernel programming (I don't program in assembly or mess with kernels), one
semester of Java programming for data structures (ok, I use data structures
but they're pretty simple to understand), one semester of c++ programming just
to learn the language, etc. A mish-mash of concepts and languages.

What do I need for work? These days I program in C# in Visual Studio. Great
language and IDE but I didn't learn it at the university. Learning WPF, WCF,
ASP MVC, etc... you just have to sit down and grind it out, its not really
university learning stuff.

In terms of math being hard... I think its more the case that young people are
terrible students... Sit in the front of the class, take notes, form a study
group!, ask questions online, learn how to learn math...

I for one was not a good student, but I blame myself and my laziness and not
the inherent difficulty of undergraduate math.

~~~
Eugeleo
Well, if I choose CS, I'll really want to do the cool stuff! Our university
offers something like AI Master's, so the required Math background will be
(hopefully) provided. I don't have to major in pure Math to be somehow
proficient in it.

~~~
0x4f3759df
Well, good luck.

Make sure you want to go to grad school. Too much time in the university comes
at the expense of years you could use building a startup.

------
tboyd47
IT is a vast industry. What kind of job do you want to end up with in IT? Do
you know yet? Ask yourself what kind of company you want to work for, doing
what exactly.

If you don't know, I highly recommend taking a web development elective if
your university has one. Web development is like the HVAC of the software
industry: a good job that's always in demand.

~~~
Eugeleo
Very vast indeed, that's my main problem. I'd maybe like to specialise in AI,
or deep learning etc, but it is because of it sounding cool, rather than me
having some concrete plan in mind.

~~~
tboyd47
Well, if you want to delve into a subject for curiosity alone then university
would be the place to do it. Just don't expect it to necessarily turn into a
career.

Maybe just answer this: do you enjoy working with people, or not? Then, after
that, what are you optimizing for: money, or job satisfaction?

~~~
Eugeleo
Those two questions are very difficult to answer for an 18yo. Although I never
really worked with them when programming, in general I don't mind working with
people. I like helping others and collaborating in a team. Well, and the
question of money vs job satisfaction... I'd take the money, now (ideally both
ofc). Not sure what I'd pick five years from now, though.

(I know you probably meant me to answer these questions _to myself_ , but I
posted it here anyway)

~~~
tboyd47
If you don't _mind_ working with people then I'd gravitate more towards jobs
that require teamwork. Those tend to be easiest to break into because you have
people around you that can help you ramp up. Getting hired for a "lone
genius"-type role usually will require you to present some kind of pedigree
such as a PhD or leadership on a well-known open source project.

We all want both money and job satisfaction. Generally, large corporations and
governments tend to be the biggest purchasers of software, and that's where
the money is. The downside is that the bureaucracy and politics of those large
orgs tend to attract a lot of unsavory characters and produce a lot of stress
in people. Non-profits, small businesses, and startups need software too, and
can be more satisfying to work with.

It sounds to me like web development is going to be the job (or at least a
job) for you. So you'll probably do fine with a general CS education. It's
easy to get a job in web development, so use your time at college to branch
out into whatever you find interesting, like AI, deep learning, etc. Unless
you go for your masters', you probably won't get the chance again.

------
braymailloux
Hi. I majored in Applied Mathematics with an emphasis in computer science.
And, at least from my personal experience, the computer science part felt like
a waste of time. Undergrad computer science classes are all rather
uninteresting and will not prepare you for the job market you are going to
enter. If you really (and I mean really) want to design algorithms then
computer science is for you.

What I've learned in my first two years in industry is that computer science
and programming are JUST a means to an end.

What is really important is your DOMAIN KNOWLEDGE. You should get out there
and learn something about a field besides computer science that interests you.
Computers are so fast and powerful now that hardly anymore is asking if
something is computable anymore or trying to get matrix multiplication lower
than O(n^2.3).

I, for example, really like football. So I've been spending my spare time
developing models and gathering statistics for the NFL.

~~~
ForRealsies
Depends which school you go to. I went to an engineering college. Brutal, in a
good way.

~~~
braymailloux
Thats good. I'm one of those people who does not think writing code is
engineering. And computer science is soft science ;).

~~~
UK-AL
I think your confusing programming and computer science.

If all you want to think about is gathering requirements, building pratical
software than use you'll probably find computer science uninteresting.

~~~
braymailloux
That's all anyone thinks about in any operational setting. Unless he plans to
go into academia and publish papers for a living (rare). There are few and far
between settings where the hard theoretical aspects of comp sci are marketable
and/Or desirable traits on a resume.

Domain knowledge. Or, in other words, added value. Anyone can be taught to
program (see bootcamps) or fix a crashed hard drive (see it department).
Domain knowledge is being able to say "I specialize in crypto" or "I have in
depth knowledge of distributed hash tables. In short learn something you
actually want to learn because computer science is just a tool in your toolbox
you're going to learn anyway.

~~~
UK-AL
Desired traits on a resume, and what you enjoy are different things.

People go university not only to get job relevant skills, but learn things
they find interesting. For a lot of people pure cs is pretty interesting.

------
xenophonf
Here's another recommendation for a Computer Science/Software Engineering
degree, and find a degree program that focuses on the fundamentals:
algorithms, data structures, computer architecture, procedural and functional
and OO styles, design patterns, user interfaces, project management, etc.
It'll be good if you get exposed to a _wide_ variety of problems and languages
and tooling and techniques across the entire OSI stack. My degree program
forced me to learn at least one new programming language each trimester, and
past the early 200-level classes, we were expected to pick up the languages on
our own from the reference manuals. The really good degree programs will have
you do things like design/simulate a CPU and write an interpreter/compiler
(both pretty far into the theory side of the house) in addition to internships
or senior projects with local/regional businesses (exposure to the real
world). Ideally, you'll graduate with both a deep theoretical foundation and
broad practical experience.

If you're interested in combining CS/SE with another field---awesome! Consider
a minor in that field, or double major/double degree if you're sufficiently
motivated/funded. I majored in CS with a minor in Psychology, and I was one
class away from a Literature minor (which I regret not completing). My Psych
classes ended up getting me ready to work supporting IT and computing in
healthcare/bioscience, though admittedly somewhat indirectly. Regardless,
there will always be openings in your course schedule for electives, so if you
want to do AI later, take an AI elective. If you're interested in
bioinformatics, take a few biology classes. In general don't constrain
yourself to a single educational course; make choices that expand your
horizons.

Focus on the fundamentals, go as broad and as deep as possible, and get as
much practical experience as you can. You will graduate with a wide variety of
doors open to you.

Edited to add: Do not neglect the arts, humanities, philosophy, sports, etc.
Aim for "well rounded" as best you can.

~~~
Eugeleo
Thanks, I'll keep that in mind. I have a tendency, I must admit, to overlook
humanities.

How does it work in the US?

In my country, it works like this: you choose a "route" (for lack of better
word). Based on the route, there are some compulsory classes you must take,
some optionally-compulsory classes (around 5 in a group, you have to take at
least 2 of them) and then you can take whatever classes you like, from
whatever other route you please (you don't have to take the whole second
route, just nitpick the interesting classes).

E.g. We have three routes in bachelor CS - general CS, software and data
engineering, programming and software systems. All of these are divided into
2-4 branches, which differ in couple of the compulsory classes, but are
otherwise very similar. All those three routes also have some classes (most of
them, actually) in common, such as Linear algebra, Calculus, Probability,
Analytics, Intro to Programming etc. I can pile up as many other classes on
top of this as I please... Even take all the genetics, molecular biology and
others from bioinformatics (if time and mind capacity permit).

~~~
xenophonf
It varies by college but what you've described is basically how it works in
the U.S. Take my alma mater for example:

[http://rose-hulman.edu/academics/academic-departments/comput...](http://rose-
hulman.edu/academics/academic-departments/computer-science-software-
engineering/majors-and-minors.html#CS)

A while ago they split the CS degree program into three tracks---computer
science skews towards research topics, software engineering is more process
oriented, and international computer science combines the two with study
abroad---but the three programs overlap so much that you could have a CS
graduate go into industry with zero problems, and you could have an SE
graduate go into academia just as easily.

------
glax
I was also in this same spot as you few years back. Back then computers were a
novelty in my country. My first encounter with a computer was at my father's
office, the banking industry was then shifting from paper transactions to
computers. He showed me MS-DOS and the incredible mkdir command. The computer
came installed with chess, what a amazing day it was. I was chess with a
computer. There and there i knew what i want to do with my life.

You should ask yourself, why did you choose IT in the first place. Then you
will find your niche.

Computer language is just the path, what you will want to become will be based
on choices on the core CS Subjects you will choose.

------
madiathomas
Focus on learning the fundamentals of Computer Science, the rest of the
decisions, you will make them later when you have enough data. Learn to
program. Don't learn a specific programming language. Learning a new
programming language is easy when you know the fundamentals of programming.
Focus on learning the concepts, not the implementations. Don't focus on the
tools. New ones always come and go, but fundamentals rarely changes.

While writing this comment, I was reminded of a verse in the bible that tells
Chrstians to 'seek the kingdom of God first and the rest will follow'.

------
blauditore
A big factor for successfully learning while studying is having genuine
interest for a certain topic. This will help keeping your motivation (and
probably your grades) up, but also later make a good impression on potential
employers.

I think most IT-related topics have a high enough demand that you'll be able
to find a decent job with proper education and motivation, so I'd suggest to
go for whatever thrills you most. If you find out it's not your thing,
switching subject is generally no problem within the first year or so.

------
JSeymourATL
> How to choose the right university subjects...

Go visit several schools and check out a wide variety of classes & subjects.
Take the courses that strike you as the most interesting/stimulating.

Steve Jobs famously audited a random course on calligraphy, which later had a
huge impact > [http://www.businessinsider.com/robert-palladino-
calligraphy-...](http://www.businessinsider.com/robert-palladino-calligraphy-
class-inspired-steve-jobs-2016-3)

------
tnecniv
My advice is that most learning takes place outside of the classroom. I
learned more when I joined a research group in my third year than I did in my
first two years combined. That said, take as much math as you can. You don't
need a lot of math to make webpages / iPhone apps, but if you want to do
something more complicated (AI, bioinformatics, etc.), having those extra
tools in your box will make it that much easier.

------
daxterm
Look for schools that offer and have madatory co-op programs. Schools with
good relationships to help you get jobs will get your farther when you
graduate.

------
dsfyu404ed
Get a degree in CS.

Join an academic club that does a lot of sysadmin stuff (if there's a security
club then they're probably a good bet) or get a job in the networking side of
campus IT. Do what you need to do to pass your classes. Focus on the sysadmin
stuff.

If a HR person or recruiter asks your about your GPA the answer is "around 3.0
depending on how thinly spread my time resources are any given semester".

------
jomkr
It doesn't really matter too much, within reason. Do what you think sounds
interesting.

Do internships.

Play sports/some form of physical activity to a relatively high level.

Start reading Cracking the Coding Interview now and do chapter a month, if you
want to get a job at FB/GOOG etc after graduation.

------
rjsw
The answer might be different depending on which country you are studying in.

How much Biology have you done so far ?

~~~
Eugeleo
I'm from Czech Republic. I have pretty good English, so I'd be even able to
study abroad, if the budget would suffice of course.

Not so much biology, just some basic stuff about various organisms, from
viruses to humans. And we're going to learn about molecular biology & genetics
this year.

~~~
rjsw
I was just wondering whether you might have done enough Biology in school to
be able to be productive in Bioinformatics without studying any more Biology
at university.

~~~
Eugeleo
Well, no, I don't think so. Learning Biology outside of school is also harder
than learning CS or programming by yourself.

------
paulmooreparks
Take an accounting course. It's the most useful course I took other than
writing. The further you advance in your career the more you'll need it, and
if you work on any systems that involve money it will be especially important.

------
megamindbrian
Stretch your mind, try to take something really hard and don't be afraid to
fail. One dropped class or an F or even a GPA below 3.0 isn't going to ruin
your entire life or career, most sane companies don't even check GPA. I missed
out on math and physics, I wish I had taken the advanced classes like
differential equations. There was also a fluid dynamics class that sounded
cool. As far as electives, I hated taking them. Now I just wish I could take
another art class or reading class and give more purpose to the activity. I
also took Religions of the World and that gave me a basic understanding of
other people's belief systems that has a small impact on my friendship with
multinational friends. Such as not eating a cheese burger in front of Indians.
And not being offended when someone from the middle East doesn't want to eat
in front of me. High school history class also sucked, so rather than being
discouraged to take a history elective in college, I wish I would have taken
one. You need all of these topics to enjoy society.

Forgot to mention. I have used math professionally at a medical company I
worked for. You will need it if you ever plan on exploring big data or AI or
even usual algorithms. I avoided math in college because it was hard and
that's a mistaken mindset.

~~~
frozenport
I took a bunch of advanced classes at a top five school (physics minor, for
example). Even my grad research was in a related field. I learned that what I
was taught was historic and that most people don't get to work with equations
anyways.

I wish I had instead spent the time hanging out with friends...

~~~
megamindbrian
I think about that a lot. If I applied the same work ethic that I have now to
school, I would probably be way smarter. Perseverance is hard to learn. At the
education company I worked for we proved that there is enough time to study 3
hours outside of class per credit hour and still work and have free time. It
just takes time management and a daily calendar to find that balance.

------
yllaucaj
I would also advocate for computer science. Keep in mind that no matter what
you choose to study, many people change majors or schools before they
graduate. If you feel like you want to learn something else, don't be afraid
of taking a different path (after consulting with trusted advisors/mentors, of
course).

I think an important function of higher education is exposure to a wide
variety of ideas and disciplines. I don't want to preach too much, but there
is value in learning things that don't seem immediately interesting or useful-
I really regret not working harder on subjects that I thought were boring or
easy.

Best of luck in whatever you decide to do.

