
Ask HN: I'm an incoming freshman to college for a CS major, what should I know? - fish45
I&#x27;ve been coding since I was young, so I&#x27;m not worried about struggling academically, at least in my CS classes. I&#x27;m more interested in knowing what I should do now to give me an advantage in getting a job or otherwise.<p>All advice is appreciated!
======
alexbanks
CS is less about coding and more about thinking analytically about coding. I
started coding at 11, but some of my college classes were still pretty
difficult. I wouldn't assume your classes will be a cakewalk - definitely put
the time into studying your material even if you think it's easy.

With respect to getting a job - I would think about programming as a tool.
What industry do you want to use that tool on? I would think long and hard
about that and consider double majoring/minoring in that new thing. Physics,
math, business, whatever. Computer Science + some area of study where you can
use CS for the betterment of an industry (outside of CS) will leave you in the
best position to do well.

I would also suggest really focusing on Data Structures/Algorithms. Worst
case, you'll be good at whiteboard interviews and can get a job at a FAANG
company.

Network, hard. Your professors probably know lots of people, and your
classmates (in your major) will go on to get jobs you might be interested in.
Develop connections with the people around you, and become a person they want
to work with in the future.

Above all, don't waste your college time. Actually give a shit about what
you're learning. Try new things, make mistakes, have fun, but also work hard
on your degree.

~~~
foxtr0t
> Worst case, you'll be good at whiteboard interviews and can get a job at a
> FAANG company.

Since when is this the worst case scenario for a CS grad? Last I checked,
FAANGs value and compensate their engineers more than basically every other
industry.

I double majored in economics and comp sci, then got a masters in cs/ml. I
didn't plan on going to a FAANG until I realized a few things:

1\. Staying in academia was clearly not an option for me. I still have friends
who are miserable trying to get through their postdocs and I can't deal with
the hobnobbery that some departments exhibit, the political infighting etc. I
felt like if I got into the wrong program for a PhD I'd miss out on 5-8 years
of my 20s and early 30s.

2\. Did the startup thing. Found that most smaller startups are 90% talk and
marketing and nothing really groundbreaking happens there. There are a few
exceptions to that and if you're lucky enough to find one of those companies,
good for you.

3\. Other industries that don't focus on software often don't value SWEs the
same way. It wasn't until a few years ago that the IT guy who maintained
everyones desktops at a small financial firm and the person who wrote the
internal software were the same individual. There is nothing wrong with those
roles, but if you have the skills most CS grads acquire, you can specialize
much more if you find a more software focused role

4\. Starting my own thing isn't an option for me personally. I started some
companies very early on when in doing my first degree (2009-11) and they
failed, great experiences, don't need them again. If this is for you, then
good, go for it.

5\. FAANGs and other large software corps give you the structure to focus on
work, like a laser, and then turn off and still maintain a healthy work/life
balance. There are still politics and other bullshit to deal with, but your
chances of finding a good team that minimize bullshit are high, in my
experience. This doesn't happen at most startups where you have to play many
roles. At a FAANG if you are really into a project, you're free to dive into
it 24/7\. If you're at a different phase in your life, say you just had your
first child, you can take a step back and slow down for a bit. Nobody is going
to ask "why haven't you pushed 50 diffs this week?" And obviously there is the
pay.

~~~
melq
>Since when is this the worst case scenario for a CS grad?

He said this in the context of advising him to focus on algos and data
structures. As in, if you work hard on those things, the worst case scenario
is you'll be really good at whiteboard interviews. The point is that even the
'worst case' is a good outcome. Very different than talking about the worst
case scenario for cs grads in general.

~~~
alexbanks
Thanks, I could've explained better, but that is exactly my point.

------
toomanybeersies
In my experience, social skills tend to be far more important than ability of
knowledge when it comes to getting a job. Personal connections are also very
useful when it comes to finding internships and graduate jobs, I had a B-
grade point average and still managed to get an internship that led on to full
time work when I graduated, purely by knowing the right people (completely by
luck in my case)

I'm not a bad programmer by any means (my poor academic performance was due to
undiagnosed ADHD), but time and time again it's brought up by management that
I'm a valuable asset because I'm a software developer with social skills.
Apparently we're a rare breed.

Don't take only CS papers, thinking that non-CS papers are a waste of time, I
did that and I regret it. Intro to computer graphics was just as much a waste
of time as philosophy or any other arts paper would've been. It's had
literally zero use in my career. Taking arts papers will help you avoid
getting stuck in a CS bubble.

Remember that college/university isn't just a place where you learn things so
that you can get a job (most of what you learn you won't use in practice). It
sounds cheesy but it's also a place where you grow a lot as a person. College
is the time where you'll have more freedom and spare time than any other point
in your life, make the most of it. Make mistakes, fall in love, get your heart
broken, learn from your mistakes, it becomes a lot harder to do these things
when you've graduated and settled down.

~~~
bmikaili
You guys really exaggerate how much people lack social skills in our field.
Most people have perfectly good social skills (at least those I'm friends
with). Someone that exceeds you in technical skills is gonna snag that shiny
internship away from you AND have the social skills to boot.

~~~
toomanybeersies
I guess I'm being unfair when I say that most software developers lack social
skills, it's rare for me to run into another dev who I can't hold a decent
conversation with (it's rare for me to run into another dev at all to be
honest). It's more that most devs are usually bad at workplace communication
with non-technical people.

Besides that, most software developers just aren't that great. By definition
half of them are below average in their ability, so if you're an average
programmer with good business communication skills you're ahead of the curve
by a good margin.

At the end of the day, the best way to get an internship is to know the right
people. My brother went to university with the lead developer of the company I
got my internship at, it wasn't the only reason I got the job, but it was
definitely a big contributing factor. My B- GPA definitely wasn't why I got
the job, and I had literally zero experience with Ruby on Rails or JS at the
time either.

Upon saying that, my experience doesn't necessarily map to everyone else. At
the risk of sounding arrogant: I'm a very talented, although not necessarily
motivated, programmer. I managed to get my degree without attending more than
a week of lectures each semester, while at the same time feeding a pretty
heavy drinking problem.

~~~
pbk1
Building on this, I think good technical skills will definitely help get you
in the door but won't get you that far up the ladder if your ambitions are
management/executive track. And that's not for everybody, which is why larger
companies have built individual contributor tracks.

------
saalweachter
1\. Don't assume your CS classes will always be easy.

Having programmed a lot is a big advantage, but you're going to be learning a
wide variety of things as a CS major that you may not have had to think about
previously, and there is going to be a lot of it which isn't intuitive. Be
prepared to study more than you have in the past and don't get cocky;
sometimes it isn't until your junior or senior year that you get beyond what
you already sort-of know and hit a wall.

2\. Try to double major or minor in something completely unrelated to CS and
math, unless you are _really_ into CS or math.

Programming is a tool to make computers do stuff. A pure CS degree leaves you
qualified to program compilers and IR systems and computer games. If you learn
about something really hard, like chemistry or biology or whathaveyou, you'll
also know what sort of programs chemists and biologists and whathaveyou need
and have a domain to write programs in.

~~~
hatsunearu
double majoring is a hilarious waste of time and money. don't do it.

~~~
javajosh
False. I was a physics/philosophy double and I haven't regretted it for a
second. Physics was profound (although somewhat disappointing!) but philosophy
is the home of ethics, and lots of writing, and the study of both of those
will serve you in good stead.

~~~
andreilys
You don't need to double major in philosophy to be exposed to it. For a
fraction of the money you paid, you could've tapped into free online resources
and paid for a philosophy tutor to walk you through the classics.

~~~
javajosh
How do you know how much money I paid? I was a bit of an overachiever and took
a lot more units per quarter than average.

------
mshron
Skill up in the humanities. Pick topics outside of technology that interest
you, and learn how to communicate about them. Take as many seminar discussion
and writing-heavy classes as you can.

From a career perspective, programming skill is relatively easy to come by.
Programming AND speaking AND good writing will put you on a better career
path. You won't get stuck after a job or two when you know the tools of the
trade but not how to handle things outside the compiler.

But also, just as a person who has to make it in this world, you need more
than one frame of reference to make sense of things. Humanities students are
enriched by taking science and math classes, and getting a new way of seeing
things. STEM undergrads who learn to tolerate ambiguity and learn some history
are rounder humans.

~~~
fish45
Man, to be honest I was looking forward to not having to take humanities
classes now. I have my first advisor meeting for scheduling classes in a few
days, so I'll be sure to find something with lots of writing. Thanks for the
advice.

~~~
alteria
Totally understandable, but I'd strongly recommend challenging yourself. Of
course I'm a little biased having done a CS/humanites major at a liberal arts
college but there are so many great reasons that people have listed and I
fully agree with them.

Sure there are very compelling professional arguments, but I would argue that
the most important reason is that studying humanities can make you a more
well-rounded person and give you diverse frameworks to look at the world with.
Technology products have great benefits, but also great impacts on the world.
Humanities can help you look beyond first-order technical rationale and link
to historical, social, or political factors and themes that are relevant.

This is especially true if you, like many (though not all) people that study
CS, come from a generally privileged environment.

edit: Also wanted to add that the "read a lot, discuss, write a paper, present
the paper" grind can be hard at first, but really breeds good skills. Being
able to read a text, synthesize it's meaning, and relate it to broader themes
is one great skill. Then showing up to class and actively discussing the
material is another great skill. Finally writing and presenting are skills
that take a long time to build, but used continually throughout your
professional life, both formally and informally.

------
todd8
Programming in high school is quite different than the work you will be doing
in a CS program. CS is a hard, but not impossible, major. Depending upon the
school it will be perhaps easier than a Physics degree and maybe a bit more
work but easier than a Math degree.

There is too much CS to learn in four years so every program leaves something
out. For example, some schools will require a class in Artificial Intelligence
while others may not but will instead require a course in Data Science. So
it's hard to know exactly what you will be studying, but I can make a few
suggestions that should be helpful for someone heading off to college and
planning to study CS.

Generally, there is a lot of useful math that you may be required to learn.
Usually one year of calculus, one semester of differential equations, one
semester of linear algebra (matrices, etc.), one semester of statistics or
probability, and one or two semesters of discrete math. It's easy to end up
with a math minor on your way to a CS degree, and I recommend getting one if
you are reasonably good at math. The good thing about this selection of math
subjects is that they are all in different areas and are consequently to some
degree "introductory" or lower division. The trick at this level for doing
well in math classes is simply to put in the time to do all the homework,
attend all the lectures, and prepare for tests by doing every problem (even
the ones not assigned as homework) from the text book sections covered in your
class. If there are problems (even unsigned ones) that you can't do, meet with
the professor and get help. This is a pretty simple formula for getting A's in
math classes. This really works I've done it myself; I was always good at math
in High School, but it took me a while to understand that doing just the
assigned homework was going to result in B's not A's. Doing extra practice by
taking a couple of Saturdays to solve every problem in the book resulted in
getting the highest grades in the class. No matter where you start out, extra
practice will make you better. Great athletes achieve success the same way,
through more practice than others.

CS homework often involves programming. In your web-design class, you will
write programs that implement web-sites; in your data structures class you
will write programs that implement different data structures. This kind of
homework has a special property unlike history homework or chemistry homework.
One can be short on time and do a crappy job on a history paper or maybe get
only four out of five of the chemistry homework problems done, and this might
get you an 80 on the history paper or chemistry homework. In CS, the
programming assignments, sometimes called labs, are different. Doing 80% of
the work required to finish a program generally means a program that isn't
finished and a program that isn't finished often doesn't run at all or runs
and produces the wrong answer. This could result in a 0 or maybe a 25 on the
homework, not an 80. This means that you have to adopt a different approach to
tackling labs. To avoid a disastrous grade, _start early_. If you finish your
program a couple of days early you can go out and party, but I predict that
you will almost always feel a lot of pressure as the deadline approaches
because these labs will take more time than you think they will, so _start
early_. Start on the first day, and put some time in on these projects every
day.

Some of your classmates won't start projects early, there are two possible
consequences. They won't be able to finish and will get a bad grade or they
will realize that they aren't going to finish and will cheat by seeking the
solution on the internet. There are only so many suitable labs for the
subjects you will be studying so the programs can mostly be found on the
internet. You will be making a grave mistake if you take the route of starting
late and then making up for it by copying someone else's work. You have to
practice programming on your own to develop your abilities and prepare
yourself for a career in CS, so _start early_. By the time you are in your
third or forth year, you will know which of your classmates have been doing it
by themselves and which have been taking the easy way. By starting early and
doing it yourself you will gradually become one of the best, and your
professors and even your classmates will know it.

When I taught undergraduate CS classes while in grad school, I noticed two
categories of students. Students that never came to see me during office hours
for help and students that did come by for help. I was always happy to see
someone that had obviously tried to solve a problem but was stuck or didn't
understand. Go see your professors outside of class, they will be far less
scary after you get to know them. Eventually, you should get to know two or
three of your professors well enough that they can be of help when applying to
grad school or when looking for a job. They may be able to help you get an
internship or real job during the summer. If you have a question about
something that comes up in lecture, sometimes you can get a quick
clarification by just walking with your professor after class on the way back
to another part of campus.

Sadly, books are very expensive. I've frequently used my text books after the
course is over, so I don't recommend renting books. Used books are often
almost new so I recommend keeping your books and saving money finding used
books in good condition (make sure they are up to date). I have found few CS
books that are as good online as the hardcopy books, so I recommend hardcopy
books.

Team projects will come up in every CS program I've heard of. I hate these.
(1) don't trust your teammates to get their work done on time. (2) don't trust
them to turn the project in on time, (3) don't trust them to do their part
correctly. So, start early! Give yourself time to straighten things out if you
or your teammate doesn't get their part straight. If you have given yourself
time, you can recover.

You are probably one of the best programmers amongst your peers if you are
planning on going into CS. I was like that. There will be a great temptation
to produce a fancy, faster, better, more feature-full solution in your
programming assignments. That's a great goal, but remember, when programming,
things will take longer than you anticipate. So in addition to starting early,
make your goal the simplest program that will satisfy the requirements of the
assignment. If you'd like to do more, add it at the end if you finish early.
Don't add optional features at the beginning. Get the assignment done in time
to add additional features at the end. For example, if the assignment is to
write a program that will play legal chess moves, make your first goal a
program that plays legal chess moves. Once that works perfectly, you can think
about it making good moves.

If you can swing it, get yourself a second monitor in addition to the laptop
you are likely planning on using for college. Having your work spread out on
one screen and the assignment or java or python library documentation open on
the other screen really helps. Don't program with social media open. Don't
have your laptop open for lectures. So many students do it that it is widely
accepted, but studies clearly show that hand written notes during lectures
results in better retention and better grades.

Something you can do this summer is if you don't touch-type yet, get one of
the touch typing games and learn touch typing. Just learn the standard US
keyboard layout--don't bother with alternative layouts like Dvorak you will
have to use other people's keyboards or keyboard in the library or in the
computer labs and they will all be the standard US keyboard layout.

In college you will have to write some papers, for CS you may have to use
LaTeX. This is a very old, but very good program for writing academic papers.
Almost every serious paper in CS or Math or Physics is written using LaTeX
instead of MS Word. Unfortunately, LaTeX is hard to learn. So, if you want to,
try learning LaTeX. There are lots of free resources on the internet. Because
it produces professional results, lots of the information is very technical
and applies more to people writing math books. However there are simple
tutorials and you can get by with a moderate set of features to write college
papers. If you look at LaTeX and it looks like something you would rather not
learn this summer, try a tool called markdown. There are free markdown
programs available and you can write nice papers using markdown as long as
they aren't too complex.

In addition to LaTeX or markdown you will need to get comfortable with a text
editor of some kind. Emacs is free, old, has hundreds of built in commands,
uses weird keys for things, and can do absolutely anything. Vim is also free,
old and weird, but more programmers use it and it is very powerful. More
modern alternatives, that you will be able to pick up faster because they do
less and are not weird are Atom and Sublime Text. Each of these has it's
advantages, I like Emacs. Pick one and start using it for your programming.
You will eventually have to start using a professional text editor, one of
these four will be fine. See [1] for a professor's Emacs lessons for his
students, but there are many other YouTube tutorials on Emacs and these other
editors.

[1]
[https://www.youtube.com/watch?v=49kBWM3RQQ8&list=PL9KxKa8NpF...](https://www.youtube.com/watch?v=49kBWM3RQQ8&list=PL9KxKa8NpFxIcNQa9js7dQQIHc81b0-Xg)

~~~
toomanybeersies
My university was very accomodating when it came to code that didn't produce
correct results, especially after first year. If your code looked close (e.g.
the algorithm was fundamentally correct but you had an off-by-one error or
your output formatting wasn't correct) they were generous with handing out
part marks.

I never had to learn LaTeX for my degree either, and I don't think I ever had
to write more than 2 pages of anything that wasn't code.

I feel like my university had a much more vocational feel to its CS degree
than a others, they didn't have much focus on academia and preparing people
for doing postgrad at all. I think it was almost discouraged.

------
aloukissas
1\. Sweat the fundamentals. CS isn't a coding school. Algorithms, complexity
theory, databases, operating systems, graph theory, compilers, math, etc. will
get you further than any coding.

2\. Go for depth, not breadth. I know most US colleges make students do all
sort of breadth stuff, which I don't get (I come from European undergrad, all
our classes were CS/EE - coming to US for grad school, I was more prepared
than others coming from top US undergrads). You have time to dive into other
stuff after school. Do adjacent things like Biology or EE.

3\. Find grad students and see what they're working on. This is where you'll
see the value of the fundamentals. Then work backwards and fill the gaps. Try
to get a tiny part in a research project (ideally one that can lead to
publication).

4\. Read timeless papers one each topic.

5\. Hack, hack, hack - the gap between theory and practice is small in theory
but large in practice.

~~~
nv-vn
I disagree on breadth vs. depth. Breadth will give you the tools to succeed in
a wide variety of areas and prepare you to delve deeper on your own. If you go
deep into ML for example that doesn't prepare you to work on operating
systems, but if you have a broad understanding of both then you'll have the
tools you need to find new resources and read research papers in both areas.
(For the record, my school has a huge emphasis on depth over breadth and I
feel like I'm sacrificing parts of my education by not being able to study
more areas of CS).

~~~
aloukissas
Oh I meant depth as in take only CS-related courses, not European History,
Greek Philosophy, Sociology, etc (which seems to be common in US
universities). By all means go broad _within_ the field, from graph theory to
transistors to DSP to anything really. I would venture out to STEM fields that
seem interesting.

------
nlawalker
Not to imply you're not ready, but in response to "I've been coding since I
was young, so I'm not worried about struggling academically":

 _" Computer science is no more about computers than astronomy is about
telescopes."_

Depending on the nature of what your department offers, be prepared to learn
about, spend time on and potentially struggle with concepts that have
_nothing_ to do with coding or software engineering as you might be familiar
with it, or even sitting in front of a computer.

~~~
eythian
> Not to imply you're not ready, but in response to "I've been coding since I
> was young, so I'm not worried about struggling academically"

To add to this, I thought the same would apply to me when I went to uni. And
it did, until about half way through second year. Then I discovered that the
classes were passing the boundaries of what I'd self taught myself, and I had
a big rush to catch up.

------
Jemaclus
My advice might be controversial, but here are some thoughts I have...

My big piece of advice: Major in something useful (CS, check!), minor in
something fun. A lot of the computer science classes you take will be boring
AF, or you'll start to bang your head against the desk wondering why you have
to know how operating systems work when you just want to make iOS apps (or
vice versa!). Some of the classes will be deeply math heavy. It can and will
seem overwhelming at times. So minor in something fun. Pick something that has
no bearing on your chosen career path. Minor in Theater or Music or Art or
Literature or Physical Education. The best part about minors is that you
generally get to take all the fun classes and not the terrible ones! You'll
meet a whole bunch of people with diverse interests that aren't solely
computer nerds.

As far as the CS stuff is concerned, focus on absorbing as much as you can.
Contrary to what other people said, don't sweat the details. You should have a
fundamental understanding of all the big areas (databases, languages,
algorithms), but you don't need to be an expert in any of those things to get
a job. In fact, 90% of the subject matter you learn in college won't be
relevant to whichever job you get. BUT... the act of learning is important,
and the fact that you have fundamental understandings of those things will get
your foot in the door

Think of your college degree as a ticket to an interview, and your first job
as the real education. Your degree is proof of two things: 1) that you can
learn, and 2) that you can start, stick with, and complete a large, multi-year
project. Nobody expects someone with a Bachelor's degree to be an expert
programmer, but they _do_ expect critical thinking skills and the ability to
learn. You'll learn more on the job in the first 6 months than you will in 4+
years of college education... so don't put too much stress on yourself there.

So... take it seriously, but not too seriously. Study hard, but take fun
classes too. Make connections in your computer classes, but make friends
across a wide variety of interests. Learn the fundamentals, but don't sweat
the details.

(Also, pro tip: nobody gives a shit about your GPA. A 4.0 doesn't get you
anything in the real world except a rude awakening. By all means, try to get
all A's if you can, but don't burn yourself out by trying to get perfect
grades.)

~~~
BeetleB
> Also, pro tip: nobody gives a shit about your GPA.

Well, no one except for grad programs.

~~~
Jemaclus
I guess I could clarify as "nobody outside of academia", but I thought that
was a given... And in the CS field, a Masters doesn't really do much for you,
unless you're an immigrant looking for a green card (and if that's the case,
my advice is totally different...)

------
dehrmann
Be mindful of your program's retention rate. My first CS class has a very
bimodal distribution (this is common in CS classes), and about half the
students weren't in the followup class next semester. We lost another third
after that semester. The engineering program at my school was run similarly--
only about a third of students entering the program would graduate with an
engineering degree.

Not every school is run like this, but it's something to be aware of.

Don't immediately freak out if you get a 70% on your first Physics exam. A lot
of science and math classes are graded on curves, and professors don't want to
see too many (or any) perfect scores. I had one class where 25% was the lowest
passing score on an exam.

Especially at research universities, professors are often more interested in
research than teaching. Even when it's not obviously that bad, they're worse
at teaching and care less than the average high school teacher.

Try to get out and have some fun.

Also do something that's somehow very different than programming. I majored in
CS, but got three minors (two in liberal arts), and even found time to take a
golf class and a scientific glassblowing class. But even intramural sports are
good.

~~~
barbecue_sauce
How did you have time to get three minors? I got a 4 year business degree from
a liberal arts college, and between the business school requirements, the
major requirements, and the gen-ed requirements, I had maybe 2 open elective
slots. And this was even with AP course waivers.

~~~
dehrmann
The CS courses got me half of the way to a Math minor, well-planned GEs did
the same for English and History minors. Then I had a heavy load my last
semester to finish them up (with one last CS course). I think I was two
courses from an electrical engineering minor, too, and I did this in 8
semesters.

------
aaron_seattle
"Real life has no curriculum".

~80% of what I've learned vocationally, came after school, under the informal
mentorship of seasoned practitioners.

Arguably the #1 exportable skill you gain from college is metacognition -
learning how to learn. So that the next time you find yourself staring into a
"I have no idea" moment, instead of being stuck, you'll be able to iteratively
expand your mental map of the territory; form and test hypotheses; sketch out
needed or missing tooling, etc.

~~~
aaron_seattle
i.e. remember this when you find yourself deep into some "am I ever going to
really need this" curriculum. Directly, probably not. Indirectly, you are
rewiring your neurons for generalized problem solving to the nth degree.

Also, this "missing course":
[https://missing.csail.mit.edu/](https://missing.csail.mit.edu/)

------
javajosh
Learn to meditate, find a sport that you like and do it regularly, take a
class on how to learn (Coursera has a good one "Learning how to Learn"), and
take a class on how to take good notes. You might also want to study up on
personal organization and personal finance.

WRT study groups, YMMV. I found them incredibly stressful and counter-
productive, but other people really seemed to like them. Eventually I actively
avoided them.

Start your projects as soon as possible, and then put them aside. You'll come
back with new eyes, but your brain needs time to chew on it. Sadly, I think a
lot of college courses go too fast, and sometimes you'll have an "aha!" moment
months, or even years later. Not sure if there is a solution to this.

Love is almost inevitable, and is almost always a huge disaster for everyone.
It's possibly an even worse impact on study than video-game addiction. I would
say try to avoid love, but honestly its wonderful. But if you feel lonely,
feel lucky that you're not either distracted or heartbroken.

~~~
codemonkey-zeta
Whoa, harsh take on love, but I understand it. I met the love of my life
during my freshman year, and though there have been times I feel my focus and
productivity suffered as a result, I would not have it another way. Love, and
even heartbreak, are such fundamental and enriching parts of human life that I
really think they are worth sacrificing for.

I can get past distraction. I still code don't I? I still learn. But to eschew
love for fear of heartbreak is cowardice.

"Far better is it to have a stout heart always and suffer one's share of
evils, than to forever be fearing what may happen." \- Herodotus

~~~
javajosh
I didn't recommend to "eschew love for fear of heartbreak" though. I was
really trying to ease an FOMO he might feel if he doesn't fall in love in
college (which is pretty common, too, especially among the nerdy set, or at
least was when I went to college in the 90's).

~~~
codemonkey-zeta
I did not read your last paragraph that way. With this explanation I totally
understand your advice now. I had friends who seemed dead set on finding a
girlfriend as priority number one. I even had multiple friends express their
jealousy to my face that I had found a person to love and they hadn't. I
wanted to smack those friends and say "just live your life man! There's
nothing stopping you from being happy except yourself."

The FOMO is real and I think your advice is great.

------
random32840
1\. A large (and growing) chunk of the industry considers object oriented
programming to be absolutely terrible, but that's what they'll teach you in
college. Learn functional programming and data-oriented programming in your
spare time before your mind has completely set into OO. Make each of the three
approaches intuitive. It will be way better for you down the road, and it will
help you actually evaluate which approach is best. There's a lot of dogma on
each side.

2\. In my opinion it's cliche to say "social skills are more important than
just the ability to program". Totally depends on what you're actually doing.
If your job is to optimise server farms, they're going to pay you based on how
many CPU cycles you save, not your ability to present to management. If you
measurably reduce power consumption, you could be completely mute and it would
be fine. You'll earn crazy money.

Play to your strengths. If you have poor social skills, find a niche where
that doesn't matter. A good heuristic is whether performance is measurable. If
it is, it matters less that you have trouble communicating it.

3\. "Minor in Something Fun" is common advice & fine if your degree was cheap.
It's _terrible_ advice if you're going into $150k of debt. If something goes
wrong in that situation, you're screwed. Minor in something that you can fall
back on.

What if you develop RSI and lose the ability to type large volumes of text?
That's the point of a minor, it's a backup plan. Life is unpredictable, when
you have $150k of non-dischargeable debt it's much better to have a minor in
"engineering" than "ultimate frisbee".

~~~
Gibbon1
> What if you develop RSI and lose the ability to type large volumes of text?

4\. Never ever let an employer work you to the point that you get RSI. Let
them fire you first.

5\. Ditto your mental health.

6\. Learn to say no.

~~~
aliceryhl
Man I wish preventing RSI was this simple. I have had growing RSI issues for
nearly two years now and I just don't know what I can even do to stop it..

It isn't just using computers; so many things require using my hands. Reading
a book causes it unless I use a stand, writing on paper causes it, using a
phone causes it, cooking can cause it, sometimes I even get it from using
knife/fork when eating.

When RSI is causing me trouble, I just can't do anything at all besides taking
a walk or watching a movie, and sometimes I just need to _make_ something.

I've started to learn voice control software for my computer, but it is going
to take a lot of practice and configuration until I can be productive this
way.

------
sosodev
HN is probably the worst group to ask for advice. Most people here take their
careers way too seriously.

You’ll notice that most people here are telling you to do some specific set of
actions but few of them overlap significantly. That’s because there aren’t
“right” things for you to do. They’re just pushing their biases on you.

I’d argue that you just take it easy and do whatever makes you happy. You can
definitely still be successful that way.

I just finished my CS degree from a no-name state school with a below 3.0 gpa.
But I still found a job making six figures (really good pay for my area)
before I graduated. I attribute most of my success to the various pieces of
software I wrote for fun. Just little things on my GitHub that helped me land
a couple of internships.

~~~
MaxBarraclough
'Take it easy' seems like terrible advice. A computer science degree is the
foundation of a tech career.

The opportunity to build a solid foundation shouldn't be squandered, even if
you aren't planning on being a workaholic careerist. A strong degree opens
doors.

~~~
sosodev
You’re totally entitled to feel that way but I personally think the social
pressure to work yourself harder than necessary is just plain wrong. I know
that’s not a popular opinion here and that was my point.

I met so many people while earning my degree that were stricken with anxiety
about making the “wrong” choices. Often times these people ended up suffering
by spreading themselves thin and ultimately accomplishing less than they would
have otherwise.

------
kccqzy
> I've been coding since I was young

Same here, but that doesn't mean you won't struggle. If you have been coding
since very young, you could very well be quite skilled at software
engineering, the practical aspect of producing software, but not at computer
science. I was fortunate enough that a middle school teacher found out I was
interested in coding and decided to teach me real computer science instead.
That's where I struggled a lot. I didn't even know why for example learning
about heaps or binary trees was a necessary endeavor, when I could very well
build websites or make DOS games on my own. It took until high school for me
to truly grok these computer science concepts, mostly about algorithms and
data structures. Even then I still learned a great lot in my undergrad CS
classes beyond algorithms and data structures.

Computer science is a vast field; don't think that just because you have
coding experience you can afford to coast along, instead there's always
something new to learn. Go find your own subfield that you are interested in
and go deep in it. I personally really enjoyed learning about type theory
(going through Pierce's TAPL) for example. It may not be an undergrad course
but still.

As for advice, I'd say go talk to the professors more often. They are
generally willing to help. And if they sense that you are so much ahead of
your peers, they could very well give you new work to challenge yourself.
Perhaps even ask you to collaborate on a research project they are working on.

~~~
Jhsto
> Go find your own subfield that you are interested in and go deep in it.

Conversely, do know that this may not yield much appreciation from professors.
BSc and MSc degree programs don't generally reward you for doing work that is
so deep to be publishable. Even though you are at college to learn, you can't
get carried away learning by yourself, if it is in the way of passing exams.

~~~
kccqzy
I find the opposite. My professors really did appreciate my deep work and
involvement in PhD-level research. What doesn't appreciate my work is really
the degree: regardless of whether you do so your degree just says BSc. It's
more for learning for your own good.

------
bra-ket
start doing competitive programming as early as you can , enroll in ICPC
[https://icpc.baylor.edu/](https://icpc.baylor.edu/) and join competitive
programming weekly group at you school (or start one if you don't find any)

this is a good book for preparation [https://www.amazon.com/Competitive-
Programming-3rd-Steven-Ha...](https://www.amazon.com/Competitive-
Programming-3rd-Steven-
Halim/dp/B00FG8MNN8/ref=sr_1_3?dchild=1&keywords=competitive+programming&qid=1590954026&sr=8-3)

participate in contests on
[https://onlinejudge.org/](https://onlinejudge.org/), topcoder or similar on
weekly basis (you will hear a lot about leetcode as a hard prerequisite to
getting a job these days, but it's trivial for people who do competitive
programming)

you will learn much more from doing that for a couple of years than any
college can teach you

~~~
tibbar
This. After a couple years of serious effort on Codeforces, algorithms
interviews are trivial. And perhaps more importantly, it becomes much easier
to bang out a state machine, toss around some data structures, check for edge
cases. You'll become really comfortable with that middle tier of software
algorithms that are a non-trivial composition of standard ideas, but still
fall short of needing a research paper, etc. (And you'll develop a sense for
when a problem _is_ actually-hard).

------
RNeff
College is more than just learning a vocation. Another goal is evolving
yourself into a well rounded human being. Each quarter / semester take one
course outside your comfort zone. Public speaking, improv theater, drawing,
photography, music, philosophy, film production, drama, writing. Join a non-
tech club. Learn new stuff, and how to relate to non-nerds. Expand your
abilities, world view, and persistence.

~~~
schoolornot
I think more people who be apt to do this if electives were pass/fail. There
were tons of interesting classes available that I could have taken but chose
not to because I had a decent GPA in major reqs.

~~~
MattGaiser
My university gives certain faculties a certain number of pass/fails for this
very reason.

------
adrusi
You already have skill and hopefully passion in one discipline, use college as
an opportunity to explore a different one, and get an edge up on your peers.
Don't major in CS, major in something else that you care about for its own
sake, even if that doesn't come with an especially marketable degree. You'll
probably want to take classes from various disciplines to see what really
drives you.

You'll want to do something that demonstrates that you have good coding
skills. Try to get a part-time programming job or internship, or get involved
with an open source project, in particular one that's likely to be used at
companies that might hire you. You should also make sure that you pick up the
fundamentals that you would learn in a CS program that you don't already have.
Make sure that you know how to teach yourself math independently. Maybe pick
up a Math or CS minor.

I took roughly this path with a Philosophy and Math double major from an
average school and started working at a FAANG the Summer after I graduated.

~~~
npmaile
I absolutely agree. I have a degree in Business Economics and got a job as a
software engineer within 6 months of graduation. I started in the tech support
help desk of my university, followed by a programming job within the school. I
used that job to get a job doing automation for a large corporation and then
got a job engineering for said company. No ragrets

------
Spooky23
Math.

When I was a TA, the kids who struggled were most hurt by calculus.

The other thing is read up on how to do the college game. Participate in
office hours, understand what drives your grades, etc. I had a hard time with
this, as I was able to coast through high school with minimal effort.

------
diebeforei485
For your non-CS electives - fill them up with classes that are much easier to
learn in a college environment.

If there is an intro to law class (preferably one meant for non-lawyers, for
example Intro to Business Law), you may find that useful.

Take 1 or 2 business classes. It doesn't have to be a minor or double major -
just the basics of marketing, finance, economics, and entrepreneurship.

Get better at "presentation" \- speaking and writing. Public speaking (or
debate) would be helpful. This could be an extracurricular like Mock Trial, it
doesn't have to be a class (though if one is offered and fits in your
schedule, that could be great).

Oh. Machine Learning. Make sure you know the basics of it, even if you don't
want a job in ML.

------
jedberg
Most people already covered that it won't be easy and you should take a
minor/second major in a non-related field.

But I'll add one more. Try to take a class from a famous professor outside CS.
Usually they will teach a class that meets a gen Ed requirement.

I took a Poly Sci course from a famous professor at Berkeley, and it was
great! It was like going to see a show twice a week. And some of the stuff he
taught still sticks with me today. He predicted exactly what would happen in
Iraq when Saddam was removed from power, six years before it happened.

My wife got to take Astronomy from a famous professor, and she really enjoyed
that class too and learned a lot.

------
daniel-thompson
1\. Don't worry if you don't get something immediately. Unless you have an IQ
of 250, then perfect, efficient, bug-free code will not spring from your
fingertips on the first try. That's OK. Get something that kinda-sorta works -
even if it's bad - then dial it in piece by piece.

2\. Every programmer discovers topic they like and topics they don't like.
These are different for everybody. It's hard to decide to spend time on things
you don't like, but that's the only way you'll get good at them. Don't avoid
hard things - plunge into them. It'll suck at first, but if you put in the
effort it will almost always be worth it. Once you've developed a deep
understanding of a topic you were dreading, it's not going to seem as hard to
you as you thought it was.

3\. Learn what it takes to get other people to understand your ideas.
Calibrate the technical content to your audience's level. Always start by
giving background & context. Ask your audience if what you're saying makes
sense to them.

4\. Differentiate yourself from the "full-stack" devs who have infested our
industry like a plague of locusts. Understand how the machine works. Take an
architecture class, take a compilers class, and learn at least one
native/unmanaged language (preferably C).

------
dahart
> I'm more interested in knowing what I should do now to give me an advantage
> in getting a job or otherwise.

Always stay curious, challenge yourself, and have fun.

Take charge of your education, talk to your professors during class, visit
them during office hours, interrupt the class to ask questions when you don't
understand. I was always scared to be noisy in public, but finally discovered
in a grad school math class that when I didn't get it and I spoke up, other
people in the class would thank me later because they were in the same boat,
and I learned faster.

Try to find an undergrad research project.

Do an internship between junior & senior year.

When you're a senior, start researching which companies you like. Read about
job interviews and how to do well. Practice some job interviews! You'll be
ahead of the majority of applicants if you do any practicing at all. Learn
what companies want. (Hint: superior coding skills often aren't the top item
in their list.)

Also, exercise (I'm not kidding, it doesn't matter how, but this will help
your CS career, your life, and your job prospects.)

------
wespiser_2018
A lot of the advice so far is general "what to do in college" type stuff, but
to specifically address the OP's question, "what should I do now (entering a
CS program) to give me an advantage getting a job"? It's a pretty shortlist:

1) Work on projects that matter. In college this would mean finding a
professor who does research, and working your way into the lab. It could also
mean building apps for friends, or helping out in open source. Just solve
problems you think are important, and where the solution is visible.

2) Get good grades and take an academic approach to classes. Don't grade grub
or complain, just try to learn.

3) If it hasn't happened during the above two tasks, make sure you learn a
toolchain that is similar to the industry workflows people are using with
source control, testing, deployment, et cetera. You don't have to do this, but
it will be easier to hire you into jobs using X if you have used X non-
trivially.

4) Look hard for summer internships, and if you can't find one you like, do a
part time project over the summer.

Good luck!

------
tsumnia
This is more of an aside, but since you've been coding for some time, please
understand that concepts you already know need to be taught to those that do
not. Concepts like a nested loop are often one of the hardest initial hurdles
for many students. Your first CS courses will spend a lot of time on these
types of concepts.

Please be patient and not become annoyed with how "slow" the class is going.
Students that struggle with that first hurdle will continue to struggle as the
class moves forward [1]. I would say, if you pick up or complete the homework
without any issues to reach out to your peers and offer help. You don't need
to share code, but something like a small whiteboard to explain concepts would
be good.

[1] [http://www.ppig.org/sites/ppig.org/files/2014-PPIG-25th-
Ahad...](http://www.ppig.org/sites/ppig.org/files/2014-PPIG-25th-Ahadi-
Lister_0.pdf)

~~~
mch82
Building upon tsumnia’s reply...

In my CS101 class students were penalized for skipping ahead. Remember that
the instructor has put thought into how to sequence the course material.
Follow the instructions for assignments. Focus on demonstrating what has been
taught in lectures & do things by hand the long way before jumping ahead to
use an advanced technique that saves time.

If you get done with an assignment early, consider putting time into
formatting your output or improving the user experience (just as worth while
for programs that run in a text-only terminal).

Go to office hours and get to know the professor. If you do well in the
course, the professor may offer opportunities to get involved with research or
even get paid to help with the course in a future semester.

------
newqaz
Discrete math topics teach amazing way to think that most people never get to
see in high school. Knowing stuff in free a book like [0] is immensely
helpful. There are a ton of decent introductory discrete math books like the
ones by Susanna Epp, Ed Scheinerman, Goranko bros and Gary Chartrand. Just
google "list of discrete math book". What google spits out won't even scratch
the surface of what's available out there. But modern CS folk will have to
know much more than the basics of discrete math. For example, math analysis
and probability theory are very helpful. This free book [1] gives a sampling
of such topics. As preparation, one can start by looking at pre-real-analysis
books like the ones by Lara Alcock and Jay Cummings, Linear Algebra by Kuldeep
Singh and Probability Theory by Dimitri Bertsekas/Tsitsiklis. These books are
very easy to read. There are also introductory books that give a bare-bones
sampling of most undergrad math subjects from abstract algebra to topology
like the ones by Gary Chartrand (separate from his discrete math book) and
Steve Warner. Such books are designed to be as hand-holdy as possible. The
more I type the more I realize there's more (much, much, much more) to say
about the math side of things. Anyway, for another thing, google category
theory just to be aware of it. There are a few undergrad/high school level
books on the subject, but I am not sure how useful that is to a freshman.

[0] Book Of Proof by Richard Hammack

[https://www.people.vcu.edu/~rhammack/BookOfProof/](https://www.people.vcu.edu/~rhammack/BookOfProof/)

[1]Foundations of Data Science by Avrim Blum, John Hopcroft, and Ravindran
Kannan

[https://www.cs.cornell.edu/jeh/book%20no%20so;utions%20March...](https://www.cs.cornell.edu/jeh/book%20no%20so;utions%20March%202019.pdf)

------
tracer4201
Let me start by sharing what I think is the most important advice. I would
focus and really ensure you "learn" things. Don't worry about optimizing for
exam scores. In my opinion, it's better to get a 75% on an exam and understand
that 75% well as opposed to getting 95% on an exam but only because you
"remembered" things without really understanding them.

When you study, spend time deeply thinking about the concepts. Yes you're
going to learn CS, but it's not just about learning data structures,
algorithms, compilers, etc. etc. College is an opportunity to think
critically. It's okay to be wrong or to not understand things. Use the
internet to reinforce concepts you don't understand well, or go speak with
your professor or TA's in office hours.

Okay... with that out of the way, here are some other thoughts:

1\. Don't index too heavily on advice folks give you on learning any specific
programming language. Focus more on the concepts that translate from one
language to another.

2\. In the first year or two, do invest in understanding object oriented
programming principles, as OOP is quite common today. You'll probably cover
this in one of your introductory CS/programming courses anyway. Note: OOP is
not the end all/be all.

3\. If you've used Windows your whole life, great. I would encourage you to
spend some time learning a Unix-based operating system. This isn't so much
related to your CS degree/course work, but I will bet it comes in very handy
later on.

4\. Do take a compilers course if it's not required in your degree program.
Many universities who have ABET accreditation require it but I recall at least
one (several years ago) that didn't.

5\. Do pay attention in your Operating Systems course. Take that course if
it's not required. Threading, memory management, scheduling algorithms... you
learn concepts here that will likely be very useful in your career.

~~~
linuxlizard
Dug around until I could find a suggestion that I would recommend highly. As
suggested above, taking a compilers course and an operating systems course
will give you a view into how computers work (not the electrical parts, but
the general software parts).

In addition, I'd recommend taking any programming language course offered: C,
C++, Java, Python, Lisp, Prolog, (Ada, Cobol, Fortran, Basic, and on and on).
Learning the other languages gives one a view into programming _in general_ ,
not just in your favorite language.

My 2c.

------
lackbeard
Join your school's ACM Programming Contest or ICPC team. It will prepare you
well for whiteboard coding interviews.

Also try to do at least two internships; they'll teach you a lot about what
professional work is really like and once you've graduated a lot of companies
will like seeing this experience on your resume.

~~~
akhilcacharya
I did 4, but the people OP will want to be compared with will have done 5 or
6. 2 is a bare minimum.

------
zekehernandez
You should know why you want a degree in CS. Because if it's solely to get a
job in software development, know that it's one of the longest and most
expensive ways to reach that goal, especially since you've been coding for
such a long time. There are many other reasons one would want to go to
college, and if they apply to you, feel free to disregard this comment. But to
reiterate, if your only goal is to be a software developer, I would try to see
if someone will hire you with the experience you have now, or maybe do a
bootcamp of sorts.

Let me add more nuance: I'm not trying to say that a CS major won't be
valuable to a software developer, or that it doesn't have advantages over a
bootcamp-like thing, or just raw experience. But there are tradeoffs, and I
think a lot depends on what kind of software development you want to do.

~~~
fish45
To be honest, I would consider finding some sort of bootcamp type thing if not
for my parents being pretty dead set on college. I do have a lot of stuff I
want to learn which will, in my limited experience, be a lot easier to to
understand with a formal education.

I've been looking for a software dev job for the past few months and almost
everything I've found that's more than a WordPress/shopify job wants a
bachelor's. Do you have any advice for getting a software dev job straight out
of high school?

~~~
analog31
I graduated from high school in 1982, and already knew how to program. I was
keenly interested in programming, and my mom was teaching intro CS courses at
a local community college. Now her advice may be outdated, but it was that
programming _per se_ is too easy to justify 4 years of college study, if
that's what you want to do for a living. Also at the time, many of the
colleges didn't really have full blown CS departments.

I ended up teaching myself programming (and electronics) while doing a double
major in math and physics, which led me to develop enough of an interest that
I continued in physics through grad school.

I had a summer internship at a computing facility, which led me to think that
a pure programming job would actually be kind of boring. Again, this was long
ago, and is related to my interests and not yours.

Today, I program. A lot. In fact, if you walk past my office (my basement
right now), you've got a 50% or better chance of seeing a code editor up on my
screen. But I use programming as a problem solving tool, and am not employed
as a programmer. Good programming skill is a "force multiplier" for virtually
any occupation.

One thing about college is that _many_ students change their majors. College
is a place where you can be exposed to a whole variety of fields, and where
you can soak up the vibe of a field and get excited about it. I don't know
where I'd have found my love of physics at a coding boot camp.

CS attracts a lot of students who are interested in computers, or who hear
that it's lucrative, but are not necessarily interested in computer science as
an end unto itself. But, figuring this out is part of the college experience!

------
cushychicken
You squander a big benefit of going to college if you focus solely on
academics.

This is one of the only times in your life you will have a ton of free time
and proximity to a bunch of smart people your own age. Don't pass up an
opportunity to do something fun, just because it doesn't have anything to do
with school!

------
caymanjim
CS undergrad will teach you principles and fundamentals, but won't teach you
much of anything about actually writing software. Make sure you learn
practical skills, like organizing large projects, deploying, scaling, tools,
etc. You'll be exposed to some of this, but I've never met a CS grad who could
hit the ground running unless they'd already been working as well. Get
internships as early as possible. Work on large team projects and learn some
structured planning and estimation skills. Learn Unix deeply. Don't skimp on
the math and statistics, because while you might not need it for a decade (or
ever), knowing math opens a lot of doors (NASA, finance, machine learning, and
also general utility).

------
aidenn0
Go to your professor's (for any class, not just CS) office hours whenever
those hours _aren 't_ in demand (e.g. they are often in demand right before a
midterm, so go other times).

A college degree is _expensive_ and one of those things you pay for is to have
several subject-matter experts who are required to talk to students about
their field of expertise for an hour if any students show up. People complain
that being an SME doesn't necessarily make you a good teacher (which is 100%
true) but one-on-one (which happened at least once per semester for me for any
class with less than about 150 students), they usually _love_ talking about
their field of expertise.

------
veeralpatel979
I'd say choose an area to specialize in. Whether it's security, graphics,
drones, something else...find what you like and don't just gravitate toward
AI/machine learning/blockchain since that's what's hot.

------
dbcurtis
Do you know how to study?

No, I mean really? Was high school easy? CS won't be. Your math classes will
force you to think in a new way, unless you had a very proof-oriented math
education, which is exceedingly rare in the US.

A significant number of the smart kids that land in freshman engineering are
smart enough that they never had to study in high school, and therefore never
learned how to study hard things, on a deadline. A good number of those smart
kids wash out, not because they aren't capable, but because they just don't
have the study skills. Don't be that guy.

~~~
tester756
I'm not sure whether my math at HS was good or during my higher edu it was
shitty, but what do you actually mean by "think in a new way"?

I don't see big difference between e.g math analysis in college and advanced
math in HS. Except ofc complexity of concepts and tricks used there.

Only graph theory looks relatively different to that.

------
monadic2
This is a great time to be in school and make as many friends as you
can—networking has paid off far more than attending class did (though I am
very grateful I showed up to my algorithms and theory classes).

------
peterkos
Hey there! Fourth year CS Major here. Great news that you're not worried
academically. But as someone whose also been coding for a long time, really be
careful to not get blindsided. I got very screwed over from that mentality --
like, knowing C still didn't guarantee an A in a C class. That kind of thing.
In no particular order: \- Get social! Make friends. You'll need them when
college gets hard and they can be invaluable for the rest of your life.
Student clubs and hanging around the CS building are great ways to do this!
Also ask around your dorm for fun things to do. Don't be afraid to try new
things! \- PROJECTS. INTERNSHIPS. Your first internship will be nearly
impossible to get no matter how good you are unless you get very lucky. It
takes a lot of determination: keep at it! Best way imo is to do projects
outside of class. Also, in terms of a tech stack, something ppl like and get
REAL GOOD over time. Note that certain internships are much harder to find
than others; iOS and Backend in particular. \- As a former dual degree seeker
(BS CS and BM Music composition) I'm biased, but definitely take classes
outside of CS. I took around a year of non CS classes and I have NEVER
regretted a single one. (Maybe chemistry.) Things like economics, music
theory, intro to law, philosophy -- these are what will pay dividends later on
in your career in totally unexpected ways. \- Embrace chaos! And embrace
change. Think of college as your time to try shit out and fail. If you fail...
so what! Get good at getting over failure. Invest in yourself and figure out
what you want to change. \- Finally, please dear god have fun. And truly best
of luck given Covid!

------
JSavageOne
I majored in math with a minor in CS, now working as a software engineer. My
favorite courses in university were a "World Regions" geography class (the
professor was amazing and famous at the university) and "Morality & Justice"
in the philosophy department, both non-CS non-math elective courses I only
took to fulfill requirements. Maybe not the most practical advice, but don't
be afraid to branch out of the CS bubble as you'll likely end up as a software
engineer regardless, but university is a once in a lifetime thing (sure you
can go back, but you probably won't want to once you're making money).

Also university is by far the easiest place to make friends (future
connections) and date. Once you graduate, it gets way harder to meet people,
and if you work in software engineering you're surrounded by men all day, so
if you're a heterosexual single man it becomes significantly more difficult to
find a potential partner. Take advantage of this by being proactive, outgoing,
and joining clubs / pursuing activities.

In terms of getting a job, the best thing you can do is to get internships.
Getting internships is basically just about having a high enough GPA to pass
the resume screen, ideally having some side projects or some kind of
experience (nobody's going to expect much from an undergrad), and passing the
interview.

Good luck, and have fun!

------
oneepic
1) Care but don't care too much about your classes. Job recruiters and
interviewers don't care much about what you specifically take, but they like
seeing a CS, math, stats or physics degree. Shoot for 3.2 (maybe just 3...
opinions vary) to 3.5. My school had options to do a BA (fewer hard
requirements) or BSci (more hard requirements) in CS; in hindsight I would
have just taken the BA. I think no one (or at least no one I think is
important like FAANG or other bigco's) cares about the distinction, just get a
bachelor's degree. Point is to give yourself some free time to enjoy college
while also making sure you have a good GPA.

2) That said... you should still work on a technical pedigree. So put some
time into each new field you discover (ie webdev, cybersec, systems
programming/lowlevel stuff, machine learning, or other fields) to see what you
like. Exercise your curiosity and imagination. As long as you land good
internships and finish college with a few interesting projects to pad the
resume, it should be very strong once you graduate.

3) I have no good advice for landing internships at top tech companies (FAANG)
but you should shoot for one every summer, even freshman year (yes, getting to
FAANG is doable in freshman year). At least do it for the shiny company name
on the resume. Good prep would involve some combination of project work (in or
outside of class... maybe a group project?) and the typical prep like
algorithms.

4) Have fun and be social in college. Go out and do shit with your friends.
It'll build your soft skills.

------
bdcravens
Find a language and learn it deep (at this point, I'd say probably
Javascript).

Find opportunities to work on code someone else has written. Triaging bugs in
open source projects (even if you aren't involved, but are just following
along in issues) is great.

If you can become involved in open source, working on someone else's project,
that's a great way to learn the communication skills needed to function in a
career.

Learn CI/CD.

Learn SQL.

I'd strongly encourage you to minor in business.

Get as good as you can at public speaking, whether in coursework or on an
extra-curricular basis.

------
_hardwaregeek
I've written a lot about this. If you want a job, start applying early. But
don't feel like you have to get one immediately. If you're sufficiently
motivated, consider taking time off to work on your own projects.

1\. Don't take all CS classes. Try other subjects and diversify your
knowledge. 2\. Get good at sending emails. It can help you get a job, get
contacts or just gather information. 3\. Even though you should take non-CS
courses, that doesn't mean you should get a double major. It's not always
worth it. 4\. Make sure you like CS. Having experience is a good sign, but
people can be advanced or good at a subject they don't like. Make sure you
like it even when it gets tough.

[1]: [https://blog.torchnyu.com/2020/03/04/take-fewer-cs-
classes.h...](https://blog.torchnyu.com/2020/03/04/take-fewer-cs-classes.html)
[2]: [https://blog.torchnyu.com/2019/12/19/sent-from-my-
iphone.htm...](https://blog.torchnyu.com/2019/12/19/sent-from-my-iphone.html)
[3]: [https://blog.torchnyu.com/2020/05/15/the-case-against-
double...](https://blog.torchnyu.com/2020/05/15/the-case-against-double-
majors.html) [4]: [https://blog.torchnyu.com/2020/05/14/do-you-like-
it.html](https://blog.torchnyu.com/2020/05/14/do-you-like-it.html)

------
crawdog
1\. Get to know your TAs and professors. This is important... Knowing how to
ask for help is important. Make sure you prepare and walk through the steps
you went through to assess any problem and where you are stuck.

2\. Enjoy the college experience. Join some clubs. Make friends from different
walks of life from you. Take time to socialize.

3\. Treat school like your job. If you don’t put effort into it you won’t get
anything out of it. Don’t procrastinate if you can avoid it. Good habits now
will pay off later in life.

------
httpsterio
When I went into uni, I thought I was the shit. I had also programmed and done
client work for a few years before that and had a lot of real-life work
experience. What I didn't have though, was patience and the ability to sit
through and do the work. The first two years I scored full marks on everything
and I had basically already done work projects that I could directly apply for
all of my course work. When I ended up in more advanced classes, despite
already doing very well academically, I was totally and utterly lost. I
struggled for a few years, barely finishing classes and dropped out.

I went into the work life and did very well considering my lack of degree and
continued working for some 6 years or so.

What I'm trying to say is that even if you know programming, you might lack
specific pieces of knowledge or a certain way of understanding concepts if you
haven't had formal education before. You should do the work and clear even
your 101 courses diligently. I don't know what the opposite of imposter
syndrome is, but it'll be your undoing if you let it.

Now, at the age of almost 29, I'm a freshman at another university and I've
finished my first semester with full marks, but instead of coasting along and
doing the minimum I can foe the grades, I actually learned to value the
process of learning and doing instead of just caring about creating the
necessary work I need for the classes.

I have no idea if this resonates with you at all, but you're always welcome to
hit me up if you have any questions. I've done a lot of different work in the
IT sector and will gladly share my takeaway with you.

------
salamanderman
Know that you should probably take this year off and just take classes on
Udemy, because the classic universities really don't know how to teach classes
online yet.

------
sohamsankaran
1) Consider taking a year off before you start to build things on your own --
I regret not doing this, and I don't know anyone who took a gap year and
regretted it. If you've already gotten admitted, you can probably defer,
especially given COVID.

2) Start showing up to grad classes, research seminars, and lab meetings from
day 1 -- the experience of understanding, analyzing, and critiquing cutting-
edge research with the help of grad students and professors who know what
they're talking about is the most valuable intellectual experience research
universities have to offer, and you shouldn't wait till later in undergrad to
start.

3) When you find people you want to spend time with, actively make time to do
that. Organize events to bring your friends and other interesting people
together in a low-pressure social environment.

4) Look for people to work with whom you trust implicitly to (a) have your
back and (b) make progress even when you're asleep.

5) Learn how to write by writing a lot and posting it publicly -- college
gives you a built-in audience and lots of sources of constructive feedback.

6) Ignore what people think of you to the extent possible, and take more
social risks than you're comfortable with.

------
matt_s
Lots of good advice in this thread about paths to learning in CS, etc. Two
huge items for a software development career I haven't seen (near the top at
least) and I don't know if are covered in college these days (they weren't for
me):

1\. Learn version control. Work towards becoming adept at the different things
you can do. Pick git to start.

2\. Learn overviews of various development methodologies - Scrum, Kanban,
Waterfall, etc. Just the basics of the process and terminology.

Your git-fu could save you when working on projects for school, learn to
incorporate using it as you do work. Knowing project management terminology
will help you at least be conversant about these during interviews for
internships or jobs after. You won't be in charge of what methodology a
company uses - learn trade-offs for them all.

If you find the deep CS curriculum hard and wonder why you would care about
compilers, assembly, etc. if say you want to be a web developer: they all help
teach you how to think like the computer. When some new fad language comes
out, the basics are still the same - processors, memory, disk, IO, etc.

------
xiaolingxiao
Depending on which University you go to, it may have a well oiled recruiting
machine that funnels you into a few firms. Regardless of whether you want to
work at these firms or others, you want to network as much as possible with
upper classmen. They're the ones who have interned/will full time at these
firms, and they're the ones that will pick your resume out of a pile.

Contrarily to w/e narrative people will tell you:

1\. Most college junior/seniors look similar on paper. Especially after they
do some GPA cutoff.

2\. The recruiting process is a lot more about "fit" than you realize. The
amount of "are you my kind" that goes on is more prevalent than you'd think.
They can't admit to this of course. So a senior who vouch for you will go very
far.

General advice: open your blinders and really get to know your classmates and
professors. If you go to a to research school, your professors will often
publish/collaborate w/ people on the R&D side of Google, Microsoft, etc. These
jobs can be very differentiated, but the pipeline into these roles go through
these professors. They do not go through your university cattle call machine.

------
3pt14159
There is no speed limit. I wish I read this when I was younger:

[https://sivers.org/kimo](https://sivers.org/kimo)

I breezed through university and I could have made so much more of it if I'd
just self-taught from the textbooks and started grappling with papers in my
undergrad. Once your foundation of mathematics and CS is stronger than your
peers you'll find so many doors open to you.

------
jackklika
\- Find your school's computer club / computer society / IEEE-CS / etc and
join it. If it doesn't exist, create it. Try to apply for a leadership
position on your second year. Use this opportunity to engage with local
businesses or run events.

\- Try to spend time with people a couple years older than you. The people you
meet in college and make relationships will probably show up later in your
life in unexpected ways.

\- Study hard and go to office hours. Listen to professors and try to catch
them outside of class. Find out what they're most interested in.

\- Learn about many parts of CS, not just coding java applications. Learning
linux and stuff covered in the "MIT Missing Semester" will help you so much.

\- Have some fun, go to parties, get in trouble once or twice. Try to make
memories and stories you can tell your kids.

\- Join some club completely unrelated to engineering -- philosophy club,
conservation club, dance, etc. You'll be seen as a boring person if all you
learn about is CS. Go to some film screenings, attend protests, do
toastmasters, and read some interesting books.

------
bo1024
A lot of great advice so far.

Right now, you don't need to know stuff. The point of college is to teach you
stuff. You need to know _how to learn_ stuff.

Young programmers can get used to solving a problem by alternating between
typing code and googling until it goes away. No, expect to use your brain on a
different level. Be prepared to sit down with a pen and paper and just _think_
for a couple hours. To be stumped, and ask others for help. To spend time with
textbooks and lecture notes trying to figure out what they mean and how they
empower you to solve your problem. To be humbled, to have bad grades or
struggle sometimes.

Find ambitious, excited, positive people with similar goals to yours. Help
each other succeed. I agree with joining an ICPC team as soon as possible.

Many people don't question the standard course progression, but a college path
is very customizable. Ask advisors or professors how you can do more.
Sometimes you can take a graduate version of a class instead of an undergrad
version. Make sure you get the math prereqs early and really nail those
classes, don't just go through the motions.

------
ajsnigrutin
Do some opensource work, from fixing typos, to small bugs. Go to
<yourprogramminglanguages>-meetups/events, and talk with people there (if
someone needs a coder for <yourlanguage>, and they remember you from there,
they just might call you). If you have enough free time, try getting a student
job (even on campus) that has you doing programming related stuff.

Also, use github! Need a script to do some random task? Publish it there. Made
an android app, to show you (or post, or whatever) some crap... publish it!
Script to create a single page gallery of your instagram feed? Post it!

When i worked in larger companies, and also had to read CVs and give my
opinion on students and fresh graduates (I hated that), I always prefered
someone who had a github profile full of random scripts they wrote, no matter
what their grades were (because they were lazy and decided to automate stuff,
and that's always good), than someone with great grades and not a line of code
to be seen.

------
uzername
In my CS undergrad, I took a few ethics courses, one in the CS program and one
in another discipline (Mass Communication). I recommend something like this.

I also suggest looking into CS coursework you anticipate disliking. I had no
desire to learn about compilers and languages, but I took a rudimentary
introduction course and it turned out I enjoyed the topics significantly.

------
musicale
For school: Get enough sleep, especially before exams. Work practice exams.
Turn your work in on time (even if it conflicts with #1.) Take interesting
classes outside your major. Go to office hours and get to know faculty members
and grad students. Cultivate interests and extracurricular activities outside
of CS.

For getting a job: get a campus research (or other) job during the year; take
project courses and put the projects and skills on your resume; join github
(and learn to use git) and upload code you wrote; contribute to open source
projects (also consider Google Summer of Code possibly); do hackathons and
"programming" competitions; build your own web site; apply for summer
internships (and/or research programs if you want to go to grad school); apply
for scholarships and awards if you can.

As another idea, writing an app and getting it into an app store could also
help you with getting a job later on, and it could even be a job on its own.

------
andi999
If the country is not stated, then it is presumed to be the US on HN? This
advice is from another country, so check if it applies.

Take math extremely serious. I was TA for the math 101 module and out of 240
students, 140 registered for the exam with less than 40 passing. The big
problem was complaciency. In the tutorial consisting of 20ppl students were
probably ranking themselves, so I believe the thinking went like this: "well
as it looks I am as good as almost all the other fellow students around here,
well, maybe except these 4 guys in the first row, they seem to play a
different game, well nevermind" Only these 4 mentioned guys passed. This is
surprising for them, since in high school only the worst students failed. If
your college forces the distribution to a bell curve, then nevermind (but
still the math at uni is a different game). Actually what we saw in the exam
results was a double peaked curve.

------
zests
College is a place to learn social skills as well as technical skills. 75% of
your effort should go to technical college work, 25% of your effort should go
to socializing. Conversely, 75% of your leisure should go to socializing and
25% to non technical yet brain stimulating work.

I shouldn’t have to state that this rule is better taken figuratively than
literally.

------
smckk
Pick one programming language and learn the hell out of it.

One way of deciding which language to choose is by surveying the top ten
languages over the last 5 years and comparing it to the most common language
most of your courses will be taught in. If your school is teaching Pascal or
COBOL, the survey of relevant programming languages will help you avoid making
the mistake of learning a “useless” language.

Then pick a nice tome, (I personally use the Deitel series) and just go
through it faithfully for the next few years of college and after until - and
this is the important part - you complete it.

You want a book with complete examples - not snippets of code. You have to
type out these examples and have it run. This works in the skill of being able
to write complete code of up to 200+ lines without breaking a sweat. A very
valuable skill to have going into your senior year and the first few years of
work. You don’t want to learn this on the job.

Learn the fundamentals of the language(loops, conditions, etc), learn data
structures and algorithms and then learn to create GUI applications. Learn
networking and databases. Learn everything in that one language. Again it’s
important that you pick a general-purpose language to learn. You are not
picking a language for its speed or unique characteristics, you simply want a
language in which you can do everything.

And after all this learn to make simple games in that particular language or
any other broad projects that you find interesting. I recommend game
programming because it usually brings every part of the language together in
one application, helping to keep your broad skill set sharp.

I’m also going to throw in a schedule you can use. Ideally aim for one week to
complete a chapter, meaning a minimum of 2 hours every other day within a
week. This weekly consistency will probably set in after your first year but
if you stick to it, I can promise you from personal experience that you will
master programming.

------
harrisonjackson
Join a social club - could be organized around an academic interest or purely
social, but try to find one that has a large, active membership that includes
upperclassmen. These are the people that will help you land a good internship
and eventually a job if you don't already have a good network.

Don't count on a job fair.

Do a significant project, start a startup, or internship each year.

If you do a project or startup then do not do it alone. Find a
cofounder/collaborator to help you make it bigger and better - could be
another CS person or someone that brings something else to the table - design,
marketing, sales.

Don't do an internship at a startup - do one at a big tech company if at all
possible. Pay and perks will be better, better for your resume, more likely to
convert to full-time offer, and in my experience will show you all the things
you don't want and then you can enjoy startups that much more :D

~~~
7thaccount
Start a startup every year? How is that remotely feasible? Where are they
getting this money and time from?

My advice to you would be to study hard and try to get decent grades. Work
hard, network, go to all the Comp Sci professional organization meetings you
possibly can (I think ACM) and ask every presenter from industry for help
getting your first internship. Don't join any clubs or fraternities that will
suck away your time and cause your grades to drop, but if ACM sponsors a
competition, give it a go if you have the time as it will give you something
to talk about with recruiters. Upperclassmen can help to get you internships
too if you're serious (sometimes previous employers will reach out to them for
new interns). It doesn't hurt to have something unique on your resume that all
your classmates don't also have. If you can get some free certifications
online or even experience with things other freshman/sophomore don't know
about, but are crucial to modern businesses (SQL is everywhere) than that
helps.

It's really hard to get an internship without any previous internships, but
once you get one and can talk about it (provide references), you become less
risky to potential employers, and it is much easier to get the second one.
It's kind of the chicken and the egg problem. I once tried to get an
internship at a company that I was uniquely suited to for a lot of reasons and
it just so happened to have a headquarters 1/2 mile from my parents house. I
sent lots of emails, knew all about their company, and was waiting to speak to
them at career day and at professional organization meetings, but they kept
hiring this one very questionable student in his 6th year still taking
sophomore classes (weird situation). I was really interested in a certain
industry though and an older girl (junior) gave my name to a company that
asked her last minute for anybody interested in this niche field. The rest is
history and it's been great since then, so keep your head up.

When dealing with employers, dress nicely, be humble and friendly, but
confident. Persistent, but not annoying :).

------
jasoneckert
My advice is to keep in mind that CS doesn't directly get you a job. Software
engineering (e.g. coding on a project) will get you a job.

Thus, it's important from day 1 that you work on projects, whether it be a
project at a company you work for during school, or a project for your own
personal interests or portfolio. Do some tutorials online, explore some
languages and IDEs that pique your interest - make sure that you dedicate
whatever time you have outside of school to this.

What CS does give you is the abstract theory that allows you to be a _great_
software engineer. The more you code, the more you'll appreciate the abstract
concepts that comprise CS. And if you're coding from day 1, you'll explore the
implementation of some of the CS concepts you've learned, which will truly
make you love CS!

------
Gmw1999
My advice as someone who was in the same position and has just done a year in
industry and about to go back and do my final year of CS (UK), is make sure
you enjoy yourself and learn how to manage your time as this will help
dramatically. Then during this time if you can learn parts of the syllabus, so
it's not the first time you hear about it when going into a lecture. Find your
niche what interests you, and gets you excited, talk to your lectures about
that stuff, that can help later, especially if you get bored or want to go
into research. Overall spend time doing side projects, enjoying learning, part
taking in clubs and societies and if you find it easy find something to
challenge you! If you want to ask me anything more about my experience so far,
feel free to send a message (email in bio)

------
drallison
Don't confuse coding with computer science. You need to learn about
computational thinking and the mathematics of computation--but computer
science is a tiny part of what you need to learn. You need to learn a lot
about everything. Successful computer scientists are intellectual omnivores
and are successful across disciplines. Learn physics, chemistry, mathematics,
statistics, biological science, economics, history, English, geography,
archeology, art, and so forth. Learn humility; eschew hubris. And bond with
the joys of discovery and understanding. Knowing how to do stuff, knowing how
the world works, and being able to communicate that knowledge will ensure a
fulfilled life and economic returns.

------
eximius
1\. Is your college a CS focused degree or a software engineering focused
degree? 2\. With the possible exception of Physics, I've found that CS
programs are the most time consuming. Programming just takes a lot of time
even if you know exactly what you're doing. 3\. If you work on coding side
projects, one complete side project is more impressive than a dozen half
completed ones. Don't worry if the code is terrible if it works and you can
demo it. People will have low expectations and just be impressed with its
functionality. 4\. Your degree is a checkbox. Your GPA is a threshold to get
past a filter. A 4.0 is a flag, not always a good one. Enjoy life, experience
other things and domains, don't focus solely on school.

------
thephyber
Most of early CS is struggling through math. Take the courses, but I would
recommend you look into Khan Academy or some other mastery-based tutorials
(mastery is when you acre able to answer enough questions with accurate
answer, only then do you move onto the next section). If you assume that just
because you got a C that you can forget a topic (especially the early
concepts), you will get bitten later.

Make friends with other students in your department. Engineering students tend
to forget that humans are valuable resources, just like computers are.

Lots of programming (not necessarily CS) is "learn by doing". You will need to
spend time struggling with a compiler/interpreter -- you can't substitute this
by reading a book. You are lucky that they are much more mature and at least a
little more user-friendly than when I started. Finding enjoyable programming
projects which are not too easy nor too difficult will help you hone your
skills/craft.

I would highly recommend you ignore your "cowboy" instincts once you get
decent at writing code and learn Test Driven Development (where you think
about what your function/class should do early and write unit tests before you
write any code). This will help you think more about how your code should be
structured.

Learn to use your tools. In computer science, there is always someone with a
better (eg. more optimized/ergonomic) tool set. Occasionally seek to break out
of your comfort zone and seek to change your editor/IDE, your keyboard, your
window manager, browser extensions, macros, etc. If you start and stick with a
really basic setup for too long, more efficient programmers will get
progressively more efficient and you won't increase your efficiency.

Not specific to CS: Lots of people are willing to help you for free -- you
just have to be brave enough to ask. I'm not talking about doing your homework
for you. I mean help as in mentor or lend you a couch to stay on or a few
bucks if you are hungry. The older I get, the more I see people who are worthy
of assistance be too prideful to ask for it.

Good luck!

~~~
historyremade
"where you think about what your function/class should do early and write unit
tests before you write any code"

I'm 99% sure no one get this!

------
gitgud
The best courses I took in Computer Science (3 years ago) were:

\- _Computer Systems_ : Building a computer system from scratch (virtually)
logic gates to applications
[https://www.nand2tetris.org/book](https://www.nand2tetris.org/book)

\- _Computer Networks and Applications_ : An overview of network protocols and
layers, basically how the internet works.

\- _Event-Driven Computing_ : How to make GUI's, state-machines, event-driven
systems are used everywhere.

\- _Computer Graphics_ : Understanding how graphics pipelines and OpenGL
shaders work. Building a game from scratch in C.

They might not be interesting to everyone, but I felt these were the most fun
and practical in learning how computers work and how to build software.

~~~
fish45
Those are all classes I think I'd find very interesting. Recently I've tried
to naively write my own game engine and OS and failed pretty miserably.

~~~
gitgud
Don't feel bad, writing a game engine is one of the most ambitious projects
you can do! As it involves many interdisciplinary skills; GUI, Graphics
rendering, State management, Physics simulation, Coordinate systems, Sound
systems, AI.

For writing your own OS, I definitely recommend looking at
[https://www.nand2tetris.org/course](https://www.nand2tetris.org/course) it
gives you a holistic view of a computer and it's operating system at every
level of detail.

------
downerending
You're young and your brain is still rather plastic. So, learn everything.
Textbooks for a CS curriculum is a great place to start. But also practical
programming texts, the Unix classics, man pages galore, lots of math (esp
discrete and linear algebra).

------
kailswhales
+1 to everyone who recommended double majoring. CS is a problem solving tool,
so having domain specific knowledge in any other field will be super useful,
assuming that you’re actually interested in said field. Alternatively, double
major in computer engineering — many classes will overlap and you can probably
finish both in 4 years while having a much deeper understanding of what makes
computers tick.

Also I haven’t seen this mentioned, but take advantage of the large number of
resources at your disposal: labs, software, courses/seminars, office hours. It
wasn’t until I graduated that I realized I missed out on many learning and
experimentation opportunities.

------
ChicagoDave
Learn logic most of all. Learn procedural, functional, and object-oriented
principles. Learn a variety of programming languages. Learn about the cloud
(easy and free accounts exist on all platforms). Learn about data storage, but
avoid religion: there are different ways to store and retrieve data for
varying types of use (OLTP, Analytics).

Learn how to communicate well and manage your emotions. Learn how to be
productive without guidance. Learn how to solve problems on your own, but also
cultivate a group of people that can mentor you, along with understanding
searching the Internet's resources.

When you finally look for work, find a place that aligns with your abilities
and interests.

------
shultays
I think the best thing I did back at university was doing lots of personal
projects and doing more than asked for my term homeworks/projects to make them
more presentable. Not only it helped me developing my skills but also I had
lots of stuff I could put on my CV or talk in interviews. Especially when you
are a new graduate, stuff like that can easily separate you from the rest.

I disagree with people that puts more emphasis on "social skills"
"connections" etc. Good programmers are still hard to come by. If you are good
and you can show that, that would be sufficient. Even grades are mostly
irrelevant.

------
xupybd
Find Friends to work with. You will help them they will help you. Exams are
not like coding they need practice despite how well you know the topics.
Sitting down for hours by yourself is near impossible. Sitting with a group
helps to maintain focus and gives you someone to explain this. It also gives
you someone to explain things too. Nothing will sharpen your ability to
clearly answer an exam question more than teaching someone that concept.

Those same friends will be the start of your professional network. The more
contacts you have the better for you career.

Finally try to intern during your holidays. Work experience will help you land
a job.

------
readingnews
As a CS professor, the main thing most incoming freshmen are lacking in is
MATH skills. If the weed out courses of "can you think algorithmically" do not
get them, the math department will. So many students too far behind in math.

I would second a number of comments on here like "study another subject" (most
CS courses require a minor outside of CS, other than MATH, which you should
get a minor in just due to the numbers)

I would also second the idea that CS in college is not coding, is not SW
engineering, etc. It is learning fundamentals and how to prove your code is
correct, mathematically and algorithmically.

------
dragon96
> I'm more interested in knowing what I should do now

Spend some quality time reflecting on high school over the next few weeks.
What advice would you give an underclassman? How should they think about their
four years of high school? What are the principles underlying your advice to
them and the wisdom that applies beyond just surviving high school?

Folks here have had a lot to say about university, but it's equally important
to understand how you succeed and what you wish you'd done better. Advice you
give someone could be a good reflection of what you want from yourself.

------
ulucs
If you are not struggling academically, you can learn more by taking higher
level classes. Talk to your advisor about balancing this.

Learning applied subjects is easier than learning theory, so make the most of
your limited time with the professors by learning the most amount of theory.

But most importantly, go out. Find friends from as many departments as
possible. Get into mamy clubs (you can just drop the ones you don't pike
later). Much of the personal growth from college comes from being exposed to
different perspectives, so don't miss out on that.

------
dehrmann
I'm trying to decide what the right call is if school is online-only in the
fall. On one hand, a lot of what you're paying for is in-person instruction
and all the other experiences you get in college. If it's online, it's not
worth $5k-$10k for a semester. On the other, if a college says you can defer,
there might not be room in a year because of how many people deferred, and the
longer your break between high school and college, you're either less likely
to actually go to college or less likely to graduate.

------
glenvdb
Not CS specific, but generally speaking, in college you should feel dumb. If
you don't, you're not pushing the limits of your knowledge and skills. If you
find yourself breezing through all the classes, speak to the
teachers/professors about things you're interested in to find something that
might challenge you. They might have a project you could work on.

Do it without coming off as being arrogant though.

And it will probably help if you've already aced a couple of courses before
you approach them.

------
hindsightbias
Look to other comments for short term advice. For long term, play to your
strengths and work on your weaknesses. Those things you might never be good at
- look around you. You are surrounded by all sorts of people with their own
skills. Mingle - build a team, it will help getting thru all the ups and downs
of college life and teach you about people

Jobs are mostly about connections. Volunteer. Mentor a freshman every year.
Ask for help. Treat the lab guys well. Connect people.

Finally, the most important thing: screw up enough to get noticed.

------
mattlondon
Here are a few things that either I regretted not learning/being taught in my
CompSci course, or that I see lacking in new juniors who start on my team:

\- How to actually build something entirely from scratch and host it somewhere
so others can use it. I.e. do something 100% top-to-bottom where you not only
design & write a bit of software then hand the assignment in, but actually set
up a server, install what you need, deploy the software, monitor it etc etc -
bonus points for getting your friends to try and use it have them file bugs
for you to fix. Some suggestions - write a clone of
Wordpress/StackOverflow/HackerNews or whatever and do the _whole thing_
yourself, right down to database schemas and installing and configuring nginx
yourself. You will learn so much if you have never done this. Too much at
school was compartmentalised so that you only had to "focus on the problem"
and the other stuff was provided for you.

\- Source control: Git/Mercurial and other distributed ones, plus also still-
in-use dinosaurs like Perforce/SVN. These days with Github everyone probably
knows this, but I'll say it anyway since at school it is often just you
working on your own.

\- Unit testing :-) Bonus points for continuous integration/deployment.

\- Basic project management: how things are run in teams, code reviews, bug
handling etc.

\- web + networking fluently (answer the "what happens when I enter
example.com in the browser" question from the initial DNS lookup through to
the DOM rendering and everything in between)

\- fundamental *nix familiarity. Don't need to be l33t, but at least be able
to get basic grunt work done with pipes and the like instead of having to
resort to dumping data to excel and filtering it there. Sed, awk, grep, wc,
uniq, sort, vi etc etc etc.

\- the obvious algorithms + data structures stuff.

\- These days: Cloud: the 12 Factor App thing is quite a good thing to read
and internalise - it may change your perspective of how you think about
approaching things. Probably worth having at least a basic understanding of
docker + k8ns, as well as using at least one of the major cloud provider's
services (they're all largely the same for the basics)

Otherwise my advice would be to just generally get stuck into stuff and just
keep messing around with as much different stuff as you can to keep your
horizons broad and experience varied. Don't try to focus too much on specific
areas - there might be stuff you didn't even think about previously.

Have fun & good luck!

------
erikbye
> I've been coding since I was young, so I'm not worried about struggling
> academically, at least in my CS classes.

Lamentably, this sentence tells me you think coding == computer science, which
betokens you are not prepared. How's your discrete math and computational
theory? Coding is scratching the surface of CS. A programming language is a
software engineering tool, software engineering is a branch of CS, but CS
encompasses much more.

------
sircastor
In spite of having programmed for many years before starting my degree, there
was a lot of academic challenge. There's a lot of theory that simply writing
code does not teach you. There's a lot of course work that doesn't have to do
with programming. Iteracting with people, project design, team management. If
nothing else, it's 8-9 hours of work a week per class any way you look at.

Do the work, don't short-change yourself in your education.

------
jopsen
Apply for internships!

Consider doing Google Summer of Code next year, or similar. Later go for
onsite internships.

Put something on your GitHub account, maybe contribute to some big name open
source projects. LibreOffice and Mozilla are very contributor friendly.

In school consider taking hard theoretical CS classes. You'll rarely need the
theory, but learning it on your own is near impossible. Improving your coding
skills is easily done through practice, practice, practice.

Have fun :)

------
ykevinator
You just have to know one thing- cs takes more time than you think. It's
normal to spend 4 hours a night, your non-cs friends are going out, you can't.
Everyone's going to the game, you can't. Don't get upset because it takes
time. Literally, some homework may take 4 hours. Just accept that and you'll
enjoy it and you'll do well. If you think it's an hour a night of work, you
will fail.

------
MaxLeiter
Depending on your school, find clubs or orgs to join. Good way to meet people
with similar interests and good professional networking opportunities

------
Sunrostern
\- Watch CS50 by Harvard alongside your freshman CS 100-level courses - it
will help you with fundamentals. \- Read Cracking the Coding Interview - a
very useful book on data structures and algorithms. \- Use Viewert for
building out your knowledgebase and stay on top of to-do items, it will help
you remember things fast. \- Practice a lot, just build projects and iterate.
\- Good luck!

------
enhdless
Some thoughts I have as a CS student right now (for context, I grew up the in
Bay Area and am a rising senior at UC Berkeley):

\- I started coding when I was young, and I still struggled academically.
There is a difference between knowing how to code and understanding computer
science. For me, I found discrete math and formal proofs extremely difficult.

\- It is very, very easy to get caught up in a constant mode of grinding CS
hw/projects, especially if you're around a lot of studious people. Work
smarter, not harder.

\- Grades aren't everything! If your main goal is to get a job, you don't need
straight A's. No recruiter or manager has ever asked for my GPA.

\- Take classes outside of CS. Have hobbies outside of coding. Make friends
who are studying different disciplines. You need outside perspectives to
better understand the impact of technology on the world. Be aware of life
outside the tech industry. Recognize software engineering as a tool to apply
to issues.

\- You'll meet people from so many different backgrounds. Some people come
from high schools that taught Java and some people come from high schools that
are not able offer any technology-related classes. Remember that some people
are learning to code for the first time in their life!

For getting an internship (assuming you're interested in a SWE role):

\- First of all, it's perfectly fine to not have an internship!! You can take
classes, do research, work on side projects, etc.

\- If you don't have prior job experience, spend some time on side projects
(that are meaningful to you!!) to demonstrate your technical abilities.

\- Have someone who is more experienced review your resume.

\- You might hear that it's very difficult to get an internship straight out
of freshman year. Honestly, at that stage, it's just a numbers game–the more
online applications you throw your resume at, the more likely you'll get an
interview.

\- Don't discount career fairs on campus! I used to think they wouldn't be
helpful because they were so crowded, but I got my internship after freshman
year by talking to a manager at a career fair.

\- Be able to clearly and succinctly describe yourself and your goals. What
are your interests, and why? How do your hobbies and/or past experience
support those interests?

------
bane
Computer Science is about writing software in the way that Astronomy is about
telescopes.

Another way to put it is that Computer Science is a Mathematics field that is
about the study of computation. You can do significant amounts of computation
without a computer, and you can study pretty much every topic about
computation with nothing more than a pencil and paper.

Programming is simply a convenient way to use these great devices we have to
assist us in better understanding computation, and a good CS program will go
_very_ deep in how modern computers work, what they can and cannot compute,
and so on. You'll likely have changes to study computational complexity,
queuing theory, grammars and regular languages, and so on.

For all this you need a _really_ strong foundation in mathematics. For an
undergrad, you should be able to handle just about anything in single and
multi-variate Calculus, Linear Algebra, Discrete Mathematics, and be able to
build proofs and if you really want to push as an undergrad more advanced
classes. If you can't hang with this coursework, you can't do CS.

It's okay, you might be better suited to a Software Engineering degree or and
Information Systems degree where programming and engineering practices are
favored. To be honest, these degrees are far more practical for the regular
old software developer than is CS. Most programming jobs aren't trying to
invent an algorithm, or determine the runtime efficiency of some system.

------
NotSammyHagar
Keep writing programs, that's the ultimate skill and what you need to
demonstrate at interviews. Second, if you are shy like a lot is us, take
communications, meet other people. Try new things. You can find friends,
ignore the cool kids if you have no connection. Also, this pandemic and
violence will pass, hopefully we can improve society - but society will still
be there.

------
killjoywashere
Anything over 90% is gravy. If you have 97% in your algorithms class and 82%
in your history class, you should try to spend more effort on history. And
that will be hard to do, because there's less positive feedback from the other
side of that engagement. Learning how to do what you don't like as much is
hard, but worth doing.

------
HomeDeLaPot
Make sure you get out often, have fun every week, meet people. I wish I'd have
come out of college with a group of close friends and more people to talk to
about jobs.

Also, go to the career fair every year and attend other employment events.
Having interview experience and a couple internships under your belt will help
a lot after graduation.

~~~
HomeDeLaPot
Oh, and maybe get to know your professors a little bit, especially if you're
interested in research or a higher degree.

Consider being a TA, it's a good way to learn/demonstrate interpersonal and
teaching skills.

------
zengid
Two main points. Care about the details, but don't get overwhelmed.

1) Care about the details. Programming languages are incredibly powerful, but
there is a lot of subtle effects that even a tiny change of syntax can make
(`*` vs `&` in C++ for instance). Try to pay attention to these details and
their implications, because that is the key to get to being more productive
and also to not making costly mistakes.

That being said, there is a limit to how many details you can keep in your
head at one time, so:

2) Don't get overwhelmed. Just try to focus on the problems you're trying to
solve, and take a first step towards solving it. IT WON'T BE PERFECT! Just
keep going, and always acknowledge that there might be a better solution if
you need to go back and improve on what you have. This is what I believe
technical interviewers will be looking for: "Can this individual solve
problems, and know the value of the trade-offs at hand. Do they know why
choosing 'x' over 'y' is the better choice in this situation, and do they also
know the cost of choosing 'x' now?". You can only spend so much time worrying
about details if you have a deadline to meet, so sometimes you just have to
make a decision and live with it.

Good luck and godspeed.

------
abhinuvpitale
This probably sounds too cheesy, but don't forget to have fun! So, try
different domains of CS, and see which one excites you the most!

There are a lot of subtleties of programming, algorithms and there are enough
domains to choose from. So, don't follow the crowd, try enough new things to
know what excites you, and then be a master at it!

------
bredren
That you should do student activities. That you should join or start clubs
that have nothing to do with science.

Going to parties and having parties is good for you. It’s okay to get in
trouble but not serious trouble.

Taking electives that are interesting and not obvious ones for cs students
will make the education more memorable.

It is good to go on dates and have fun.

------
novok
The hardest part about getting & changing software jobs is the algorithms
interview part. Really dive deep and get good grades in your algorithms class
and you will have a foundation that will help you change jobs and get more pay
for years to come.

------
mikekchar
Don't play Empire. Or X Pilot. Or MUDs.

Hmm... I have a feeling that what I learned in university has become somewhat
dated...

------
gwbas1c
1: Understand the difference between software engineering and computer
science. A lot of "computer science" will help you write a compiler, but you
probably won't write a compiler on the job. Software engineering will help you
when you're trying to make a bulletproof, scalable application.

2: Seek out internships.

------
nickysielicki
Learn to learn on your own. Don't be afraid to look at the material that the
instructor gives you and say, "I don't think this is doing a great job
explaining it, I am going to see if I can find a better explanation
elsewhere." This is something you probably never had to do in highschool.

------
plerpin
Enjoy your college life. Socialize. Revel in the extracurriculars, don't treat
them as an obligation to be endured. Join some clubs. Don't just hole up in
the lab. Being well-rounded from your college experience will improve your
life in many ways, your career being just one aspect.

------
wallflower
If your school offers an opportunity to study abroad, ideally in a country
with a culture that you have personal interest in, please consider it
strongly. I regret not doing this in college, as doing the equivalent nomad
type experience is much more difficult after graduating.

------
currymj
take linear algebra ASAP. it's probably the single most useful course you can
take at a university.

------
WheelsAtLarge
keep up with your math classes and finish your math requirements as soon as
you can. You'll be happy you did. Also, CS does not mean you are a software
engineer or that you can get a job after you're finished. Get a part-time job
the teaches you what companies need from a software engineer or the type of
job you want to target after you are done with college.

Keep in mind, tech types aren't really the ones that change the world. Tech
types do the work but they need a humanities type to inspire them to do it.
Look for inspiration from your elective classes or look to someone to inspire
you outside tech so make friends with people in your elective classes that
aren't majoring in one of the STEM majors.

------
heresie-dabord
As rewarding in many ways as the computing field is, you should know that you
are self-selecting for a narrow understanding of people, history, and
economies. You will need to find the time to condition yourself to be a
thinking, compassionate human.

------
jerzyt
I highly recommend the MIT Missing Semester Course.
[https://missing.csail.mit.edu/](https://missing.csail.mit.edu/)

It's a glue which is not covered anywhere specifically, but it'll make your
life a lot easier.

------
bmc7505
Most CS programs skip the details of software engineering, such as Linux,
command line, editors, IDEs. Maybe you can check out this course from MIT to
get a head start:

[https://missing.csail.mit.edu](https://missing.csail.mit.edu)

~~~
fish45
I've read through that course!

Luckily I accidentally installed Ubuntu when I was in 6th grade because I read
it would give me higher fps in Minecraft and it had an exe installer so I
didn't realize it was a whole OS. I've been Linux only since then and learned
all the other stuff there as a result

------
dreamcompiler
Coding is to Computer Science as plumbing is to fluid mechanics. Knowing how
to program won't necessarily make your CS courses easy, especially if they
involve theory or software engineering. And I strongly recommend you take
courses in both.

------
Myrmornis
One opinion I have about studying technical subjects in general: don't let
yourself believe you understand something until you are confident you could
teach/explain it to someone else. And do that (modestly) when you get the
chance to.

------
sesuximo
Make friends with the TAs. In a year or two, they’ll be able to refer you for
internships.

------
tw000001
Focus on (deep) machine learning and load up on math classes.

You will be equipped with a totally unique perspective for solving problems
and, if things continue to grow as they are now, a very in demand and
lucrative career, if you have the chops for it.

------
JabavuAdams
Do side projects. Do internships, if possible. Aim for A's instead of A+'s.
The time-savings will be enormous, and allow you to do other things.

EDIT> Join project teams, if possible. E.g. game development club, robotics
club, rocketry club, etc.

~~~
acmexyz
Doing side projects is so key and very underrated. The downside of a CS degree
is it tends to be heavily theory-skewed (which can be really great!), but it
doesn't take much to forget the practical side of the craft.

------
verdverm
Learn your first (class's) language now, so when you are learning you can
focus on concepts not syntax.

Learn bash and master the terminal, bash programming guide, advanced bash PG,
[https://github.com/hofstadter-io/jumpfiles](https://github.com/hofstadter-
io/jumpfiles)

Consider Vim

Be involved in the CS groups, this is where the smartest people are

Talk to your faculty all the time

Get into research

Build things that aren't for class

Hit me if you like, email is in my profile

Good luck!

~~~
ta17711771
Underrated comment. Since everyone has the conceptual stuff down:

Learn about Wireguard. Nobody seems to be teaching it yet, curriculum always
3-5 years behind, and it's worth adopting into ed much sooner than that.

~~~
verdverm
Our department had an unofficial policy of not teaching the latest tech and
telling students that was something they can do on their own time.

That being said, with wireguard being merged into the kernel and it's huge
significance to networking, I expect that tech to make it into the curriculum
in some forum.

Also, thank you for the vote of support!

------
geoffmunn
Be prepared to accept that you might not actually like CS, and there could be
something else that really takes your fancy. This happened to me, and several
other people I know. Life can take you in some interesting directions!

------
nknealk
Overall the advice in this thread is really good.

I'll add something though: take one class in GAAP accounting, one class in
sales and/or marketing. These skills will be immensely useful when you
actually enter the workforce.

------
hknapp
Don't spend a bunch on a new gaming rig and claim it's for CS; you probably
don't need more than a $100 dollar laptop for most CS classes.

Basically, be smart with your $.

------
mnky9800n
Paying for mooc courses from your University is going to suck. I would defer
if I was you assuming your University will be having some sort of crazy online
or hybrid thing in the fall due to covid19.

------
jimhefferon
Lot of good advice here. Another is: take courses in accounting and
management.

First of all, the path up from being a coder is to lead a group of coders.
Second-- who knew? -- a lot of this stuff is interesting.

~~~
zerr
Not necessary, people management is a different path. One can successfully
stay as an individual contributor.

------
atlgator
Double major in something more meaningful, like Finance. The last thing you
want to do is take a hobby you love, make it your career, and burn out from
being worked to death in your CS job.

------
yawz
This! You should never lose the curiosity and drive that made you ask a
question here. I would argue this is the most important thing you need for
good first steps in your career and in life.

------
cambalache
Ignore 90% of the advice in this thread, although well intended is just
unrealistic.

Work on yourself, your knowledge, start creating things, no matter how shitty
at first. Do not drink the Kool Aid of any professor, company, open source
leaders, youtubers, etc. Remember they are for themselves no matter how
altruistic they sound. You are an adult so you can have all the rights of any
person, dont get intimidated by older/more experienced people.

If you sell your soul to the devil it is OK, but please dont pretend it was
because of a noble goal. It is OK to like money but it is rarely if ever
compatible with making the world a better place, no matter what the
Zuckerbergs and Gates of this world say.

------
Supersaiyan_IV
Your experience can be measured in the amount of problems you've observed. So
gain experience, observe problems. Then in the future, you will have the
answers.

------
kleiba
Don't forget your social life. Don't forget to study.

------
koenigdavidmj
People like us are tempted to take intro classes on pure ego. It doesn’t get
you as far as you think. Rule of thumb: study for two hours per credit-hour in
class.

------
daver00
Learn with an aim to create. It's the only thing that will keep you sane and
interested in what will hopefully be a long and productive career.

------
nikanj
Nobody cares if you try your best or not, nobody except your future self. Put
in the sweat and labor now, so you don't have regrets later.

------
RMPR
My two cents [https://missing.csail.mit.edu/](https://missing.csail.mit.edu/)

------
dilap
look into ACM aka ICPC programming competitions -- super-fun, you'll learn
tons, & job interviews will seem easy in comparison

------
MattGaiser
Hackathons! Check out Major League Hacking. It is a ton of fun and the prizes
have been quite useful when job searching.

------
teen
the quality of job you receive is based on 3 categories:

1\. being friendly / assuming good intent 2\. raw experience coding 3\.
algorithms / CS

school generally takes care of 3 and a bit of 2. 1 is arguably the most
important in transitioning from junior -> senior level and beyond

------
blocked_again
Let me cut through the BS.

The only thing you have to know to get a job is "Leetcode"

Everything else is optional.

------
koheripbal
How to differ admission for 1 year.

Seriously. College is going to be a shit show this year with covid-19.

------
akhilcacharya
I think this is a question that fundamentally depends on which college/CS
program.

------
theduder99
don't go straight through college fast as possible. take some internships
along the way. If I see a resume that only includes class based projects, it
is an immediate skiperino.

~~~
mch82
If you’re lucky enough to not work during college, then internships are far
more valuable and will likely challenge you to do much cooler things. Intern
lots of places & try out different work environments and even locations.

------
aerioux
Which college if I may ask :) - I'm sure we have alumni here

------
cmonnow
> I've been coding since I was young

but not leetcoding. get on it.

------
bunfunton
Smash as much puss as you can while you're young.

------
bbrree66
Get as many internships as possible. All that matters.

------
chrisgoman
that getting the degree is one thing but learning how to ship a project (aka
"make it live") is another

------
zuhayeer
Build things for fun throughout college. Great way to meet people, solve your
own problems, and a perfect excuse to reach out to almost anyone in the world
with an edu email address (wish I took more advantage of this). But at the
same time, wouldn't try plan everything out. Enjoy it! Wasn't expecting
anything, but my project from college (Levels.fyi) has become my full time job
now.

"There are few sources of energy so powerful as a procrastinating college
student." \- Paul Graham

------
kyuudou
Enjoy your youth! Now!

------
phased20
(Some general advice in the last few paragraphs)

One thing you should absolutely put on your radar: are you at all interested
in grad school?

You have plenty of time to actually make the decision to go to grad school
(plenty of people don't decide until years after graduating), but if you think
it might even be a remote possibility, there are two things you absolutely
need to do:

(1) Get STELLAR letters of recommendation. This is the most important thing to
know, and you should consider that you'll need between 3 and 6 depending on
your program.

(2) Keep your GPA above ~3.5 (landing something lower won't break your
application, but it will make your life harder).

Lots of the career advice I've seen maps to getting SWE jobs in industry,
where things like your undergrad GPA, research experience, and letters of
recommendation don't matter as much. You can be a phenomenal engineer at a
"prestigious" company (whatever that means to you) with a huge variety of
undergrad track records (including not even going to college!). But just like
getting a referral from someone who works at a certain company is a higher-
signal (and easier) way to select an applicant to interview than trying to
sort through a stack of resumes, getting a "referral" from a professor in the
form of a letter of recommendation is a higher-signal way to filter
applications than basically anything else. For research, grad school
admissions committees tend to not care too much about internships / work
experience, unless they're tied to research in some way. If you're interested
in this, read the link at the end of this post [0].

Also, considering COVID-19's impact on engineering hiring right now, if you're
having trouble finding an internship, doing a summer of undergraduate research
can be a great backdoor to getting some hands-on experience, work with a
professor, and

Generally, on the career side of things, I'd say spend a good chunk of time
exploring what types of work you enjoy and find engaging. It's hard to predict
what this will be when you're coming in, so do lots of small experiments to
try to figure this out. Build small projects, reach out to professors and try
your hand at research, join clubs and find other students who share your
interests.

The last thing I'll say here is realize that there might be a whole set of
career options you didn't even know existed coming in. Amongst my friends, the
most common "discovered" post-graduate plan was (management) consulting, which
virtually none of my friends knew existed coming into college, and many ended
up getting excited about while there.

Overall, you'll be hard-pressed to find another space where you're surrounded
by thousands of other people your age who are excited about learning, meeting
each other, and working on ambitious stuff. There's way more to do and
discover than there was in high school, but you'll also have to be much more
active in finding and leveraging opportunities instead of waiting things to
come to you. Work hard and explore, but also remember to make friends, let
loose, find some parties, go on dates, stay healthy, and keep an open mind
throughout. It's a wild ride, and it can be an incredibly rewarding handful of
years. Good luck!

[0]
[https://www.cs.cmu.edu/~harchol/gradschooltalk.pdf](https://www.cs.cmu.edu/~harchol/gradschooltalk.pdf)

------
shaneop
TL;DR. I would say find an internship or programming job ASAP. Practical
experience in the field is generally more beneficial than classroom learning.

Pro Higher Ed: Programming classes are great for repetition and rote
memorization. I had one class that was 70% Bash and VI (not VIM) - just the
basics. Labs were agonizingly mundane, drilling the same commands over and
over, but now at my job I'm considered an SME (subject matter expert) on
random Linux servers because the basics were drilled into me. I was hired as a
developer, but my general understanding of system led me to become more
valuable

Pro Maybe Not Higher Ed: My sophomore year our IT department was hiring for
two student programmers, and I was accepted (though including me, only two
applied). However in my first 3 weeks of training I think I learned, in the
field, 90% of what was taught for my junior and senior years (Web design,
database design, SQL, data structures, and the most important (since I was
hired after my senior year): institutional knowledge.

Working in a professional environment, even as an intern or student, you get
to learn how project timelines and management work, how businesses
calculate/expect returns on their requests (and maybe react to critical
successes of failures), analyzing and modifying legacy code bases,
integrating, deployment workflows, source management, how frustrating it is
when vendors have terrible APIs, bureaucratic nonsense and pace, etc. All of
this is critical knowledge you need at some point, so get it early (and pad
that resume). If you can publicly contribute or distribute code/solutions via
GitHub or whatever, that's an asset for sharing with employers (if it's semi-
decent).

I will and ask you a question I ask student developers in interviews: "In what
field do you want to be working in in 10 years". I get answers like "Machine
Learning", "AI", "Web Development", "Networking", etc. All CS categories. So I
push back and say: "Ok, but for what purpose?" and list off some broad options
"education, health, entertainment, gaming medical, financial, legal,
political, industrial, environmental, etc?".

Very few have a good answer to that question. They "like to code", or say
"anything really". I encourage everyone to look at CS a tool towards a cause
or a goal. Find a field, locality, or business you believe you'd like to one
day make an impact on, and keep thinking about how what your lessons can
contribute to that.

But again, please look for real-world experience.

------
snicker7
Get enough sleep.

------
sys_64738
Take ECON 101.

------
red_admiral
1\. Use your uni time to build up a portfolio as well as your grades. Bonus
points for anything that is being used in practice to solve a real problem for
someone other than you, because that's one kind of thing that a business can
make money with. If you have time for any side-projects, include them -
obviously include any coursework/projects too. I got my first job because of a
combination of doing well at uni, and working as a teaching assistant where I
got fed up with a complicated excel-and-email-based system for tracking
people's engagement and grades, and I wrote a database application with a web
UI to make everyone's life easier. Back in those days CGI (common gateway
interface) was all the rage and XHTTPREQUEST hadn't been invented yet, but it
did the job. The interviewers were impressed that I'd already written "real
code" and that set me apart, because one question they're trying to answer is
"what will the candidate be able to do" and a good answer is "here's examples
of what I've done already".

2\. Learn how to build a web-based database front end application properly.
This is a kind of bread-and-butter job that's not the most interesting thing
in the world on its own, but is fundamental for a lot of things that create
business value. There's a whole stack of technology behind this, and it pays
to know what's going on "under the hood" of tools like ORMs, "reactive" JS
frameworks, dependency injection etc.

3\. Spend some serious time on at least one thing that is not CS.

4\. On the CS knowledge side, algorithms/data structures and compilers are two
things to take seriously to the point where you've achieved mastery, not just
passed the class (even with a good grade).

5\. Learn and use tools. At a not-too-bad uni I've still seen students in
their penultimate year e-mail ZIPs of their code to each other ... version
control, continuous integration, unit testing, linting etc are all things that
happen in professional software development, but (mayby I'm just being Europe-
centric here) especially at some good unis, they think this stuff isn't worth
teaching and students can just find it out themselves. Knowing all this stuff
is a huge plus in an interview, but even before then, it will make your life
easier when you're doing coursework projects.

6\. There are situations where an IDE is the right tool for the job and you
shouldn't turn your nose up at it. Find one that suits your taste and learn
how to use it, things like debugging, "go to declaration" or "find usages".

7\. Finally, decide where your personal moral compass lies. Some people want
to write AIs for self-targeting missiles, other's don't; same for "ad tech".
You want to work in a sector and company that's a good culture fit for you.

------
flaque
You should take a serious look right now to make sure you're going to a
college with a good program for getting a job.

From someone who went through a school with effectively no program, I
definitely wished I'd considered this before devoting 4 years and 100k to one
particular school.

So here's some actionable questions you can ask your career center right now
to see if you're getting your money's worth.

 __Does the university protect you against exploding offers? __An exploding
offer is when a company offers you a job offer, but you have to decide
immediately or within a short time period (like a day or two). In the "real
world" this can make sense because the company may actually need someone
immediately. For students though, this practice is a bit scummy, since no
company immediately needs an intern. Typically it's just manipulating someone
who might not know any better. To prevent this, any college worth it's tuition
will require all companies recruiting students to follow some form of [offer
guidelines]([https://ecs.engineering.illinois.edu/career-
resources/offer-...](https://ecs.engineering.illinois.edu/career-
resources/offer-guidelines/)).

If they _don't_ have this sort of guideline, it likely means they don't have
any leverage or industry connections. For example, most schools will just
blacklist companies from their career fairs that don't follow their
guidelines. If the companies don't care, then the career program is pretty
bad.

And on that note, __does the school have regular career fairs attended by tech
companies you 've heard of? __

In some schools the vast majority of students get their internships or new-
grad jobs from career fairs. In others, there won 't be a technical career
fair. Or if there is, there won't be any CS/programming jobs that show up.

One hack to figure this out is to check if the school is _charging companies_
money for STEM career fairs. For example, San Jose state charges $850 a table
the last time I checked. If a school isn't charging, it often means they can't
actually get anyone to come. (though obviously YMMV)

 __Does the school have course offerings for technical interviews? __Many,
many schools these days are creating classes specifically to help students
pass their technical interviews. For example, here 's [Boise State's
class]([https://github.com/BoiseState/CS-
HU390](https://github.com/BoiseState/CS-HU390)).

If the school _doesn't_ have a course like this at some point, it may mean
they are disconnected to the real world and have little to no support for you
in general. It is not a hard thing for CS professors to setup a class for
extra practice with algorithms & data structures.

 __Do students have access to investment capital or startup support? __Many
schools have some form of a "student startup" program specifically around CS
students. If they don't, there may also be a "college student" specific VC
fund nearby, such as [Contrary
Capital]([https://contrarycap.com/](https://contrarycap.com/)), [Dorm Room
Fund]([https://www.dormroomfund.com/](https://www.dormroomfund.com/)), or
[Rough Draft VC]([https://www.roughdraft.vc/](https://www.roughdraft.vc/)).

_You_ may not start a business, but one of your peers might, and that creates
a network that can help you get a job in the future. Plus, this opens up
opportunities you may not have considered before.

It's important for you that these are heavily associated with the computer
science program and not uniquely available to the business students. Some
schools only allow biz kids to do these; the money comes from a grant that's
only allocated for biz students.

 __Does the school have access to hackathons? __Hackathons may be for you, or
they may not be. (I personally dislike them) But you should seek out a place
where they exist or you have access to them. They encourage students to
actually build things, which is the type of environment you want to be in. You
should surround yourself with other people who are actually using their CS
skills rather than just passing their classes.

Does the university host a hackathon? If not, is it in the local area? If not,
does it sponsor students to go? If not, have _any_ students gone?

You'd be surprised how many schools with a CS program where all of those
answers are "no".

 __In general, you should a baseline goal in your university. __There 's
obvious benefit to learning as much as you can in many different subjects
while you have the time. But get a job at the end.

------
Ologn
In recent times I have been taking night and weekend classes to finish my CS
bachelors along students half my age, so I will tell you what I told them.

One thing is we took CS classes, and also some English courses in writing.
Even on the job, those writing classes are important. You will be writing
e-mails, documentation etc. and being able to be clear and to the point is
helpful.

Also, in my eyes, some students were not doing enough to get an IT job out of
school, never mind a good IT job with an upward trajectory. One guy told me "I
don't study for quizzes since they are only 10% of the grade". I studied for
quizzes because they were 10% of the grade, but also because I wanted to keep
up with the subject and know about it for the future. Then part-way through a
semester, or after a semester, I would often manifest whatever I learned. So
if I learned Java, I would write a project in Java for myself. Or at least go
on Github or somewhere and fix an issue on a Java project. Or if I learned
graphics programming I would write a graphics program, or at least contribute
to a free/open-source one. Through this, I would take all the theory I had
learned over some months and ground it and manifest it in real work.

Also you would probably do well to get on CS department mailing lists, and
check the bulletin board or whatever for internship listings.

I was surprised how lackadaisical some kids took it. Maybe it was their youth.
I have seen many people parlay their CS skills into everything from a well-
paying job, to parlaying it into an enormous amount of money. So I went above
and beyond. I recall one homework where we had to talk about process
schedulers, something I was always interested in but never stopped to read
about. I figure in the first half hour of work, I already had gotten an A, but
I spent hours and hours reading about process schedulers before turning in my
homework.

I recall speaking to a bunch of the brighter CS seniors, and I mentioned
something about version control. "Version control?" one said. I said, "Yes,
you know, like git". "Git?" he said. None of them knew what version control
was. You should know things like that before your first job interview, taking
classes is not enough. It's good to know what algorithms are linear big O, and
which are exponential, but you are going to have to learn some things they
won't teach you in class to get a job. I would suggest going to Github,
finding a project that has merged pull requests from a number of contributors
recently, and looking at contributing a pull request to that project. Then at
least you'll get an idea of what work is - someone posts a bug to issues, you
look at it, you fix it and put up a pull request, then someone with more (or
equivalent) experience looks at it and either gives you some pointers, or
merges your changes. At work you will be doing similar stuff.

------
temp0531
Do as many drugs and have as much sex as possible

~~~
bunfunton
Agreed 100%. This should be the #1 answer.

------
paulcole
The best advice I can give is _do not_ take advice from anyone who graduated
college more than 10 years or so ago. The problem is that their advice is
woefully out of date and even worse, they’re incredibly confident that it’s
still useful advice.

Most people are wrong about most things most of the time. Keep that in mind
when listening to any advice (yes I am aware of the irony).

