Ask HN: How to choose the right university subjects for a career in IT
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.
60 comments
[ 2.8 ms ] story [ 124 ms ] threadAlso 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.
How much Biology have you done so far ?
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.
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.
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.
Do you find one often needs to know advanced Math when working as a developer? (or do you do something else for a living?)
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.
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 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.
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
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?
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 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.
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'.
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.
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).
http://rose-hulman.edu/academics/academic-departments/comput...
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.
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.
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 wish I had instead spent the time hanging out with friends...
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.
If all you want to think about is gathering requirements, building pratical software than use you'll probably find computer science uninteresting.
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.
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.
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.
Maybe just answer this: do you enjoy working with people, or not? Then, after that, what are you optimizing for: money, or job satisfaction?
(I know you probably meant me to answer these questions to myself, but I posted it here anyway)
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.
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.
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.
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.
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.
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.
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.
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-...