Hacker News new | comments | show | ask | jobs | submit login
Ask HN: How to choose the right university subjects for a career in IT
30 points by Eugeleo 11 months ago | hide | past | web | favorite | 59 comments
Hello. I interest myself in programming and I've been dabbling with many languages (Swift, Python, Haskell), reading books and doing little projects (mainly Code Wars-type, or small apps for iOS).

Soon I will have to decide on what university I go, and what exactly I'll study. But how do I choose? There'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'll refine once I get my bachelor's degree (e.g. I can go general IT now, and choose AI for masters; or go bioinformatics now etc.).

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.

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

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?

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.

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

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.

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.

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 :)

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.

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.

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.

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.

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.

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?

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.

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)

Seconded. I chose a BS in Informations systems and took many CS classes as electives. Looking back it would've taken me longer to graduate due to a difference in course requirements, but it would've been worth it for CS.

I self-taught anyway so it worked out for me but a formal algorithm class would've been nice. My IS program did more web dev and web app development which is what I'm interested in.

Looking at getting a masters in the next few years, not sure if a masters in CS, IS, or an MBA, gasp!, would be best. Some soul searching is required.

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.

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.

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

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.

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.

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?)

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.

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.

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.

I agree that most students are terrible at studying, but most teachers also suck at teaching, especially at the university level, and especially in maths.

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.

^This is the advice you need. There are so many streams within IT that it is difficult to pin point one. There is sysadmin, security operations etc. Then it depends on companies. A startup focused on opsec will be much better to work in opsec than say equifax, they will have one department for compliance purpose. So the goal should depend on the job you want and company instead of subjects.

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.

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?

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)

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.

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.

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

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

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.

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.

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.

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.

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

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


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.

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.

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

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.

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

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.

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.

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

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.

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

How much Biology have you done so far ?

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.

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.

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

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.

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.

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

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.

Well, if I choose CS, I'll really want to do the cool stuff (AI/data science). Our university offers something like AI Master's, so the required Math background will be (hopefully) provided. I skimmed the study-plan for the General CS bachelor's, and there's bunch of linear algebra, discrete mathematics and combinatorics classes.

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.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact