What's the one thing you would you tell someone just starting at Uni, or wish someone had told you before you started?

[Edit: thanks already for the astounding advice, I won't mark any as accepted because I couldn't choose.]


Work hard, be conscientious. Play hard, try new things and new people.

The rest will take care of itself.

I second this ... and make it a *habit* of writing code (practice makes almost perfect).
+8  A: 

Do some internships. Contribute to some open source projects.

bridging from the academic world to industry is rather boring but super important. if you just leave at the end of your degree and enter a workplace the shock will kill you. :P
+12  A: 

Don't just do the bare minimum on your programming class final projects. Try to spend time going above and beyond what the course requires you to do.

Spend your spare time, away from school, working on a hobby project. Get into Game Development to make it interesting, or find a hole in your life where you'd find value in having it automated.

Case in point: Experiment beyond what the school teaches, and complete projects.

David McGraw
+1 about the final projects. I took the documentation for my final project to interviews to show as an example of my work. It helped me get my first job in the field.
I did that too, both the extra work and I sent the code to interviews
Benjamin Confino
Absolutely agree. There are a lot of people out there with a CS degree and no tangible experience outside of class projects.
join an open source project for that matter!

Code a lot, but remember that theory, and understanding of the theory, not half-understanding is the only thing that will prove to be enduringly useful.

Anything that focuses on teaching you how to e.g. use .NET may be of transitory use, but new annoyingly slightly different tools that are basically the same will come along soon enough.

+3  A: 

If I could have given myself some advice:

"Don't think everyone there will be programmers, or like minded. The first year will be pretty much a waste of time from a learning point of view, but don't become complacent, 'cos the work will overtake you and you might screw up your final year."

I exaggerate slightly, and it all depends on your abilities now, and what you want to get out of it. Just don't assume that because you find something easy, it will stay that way.

I'd also say to try to absorb even the stuff you don't find interesting - some of it becomes a lot more useful / interesting later on (ie. in your job). There were a few bits that only "clicked" for me much later.

As a last point, make the most of the theoretical/fun stuff if that's your bag - 'cos there isn't that much use for it in most industries (much as I wish that wasn't true).

Remember this is about your development, not about completing the course

I greatly agree, mostly that many folks in the program at my school, only heard that people with CS degrees make a lot of money, and don't really put any heart. It's sickening but a ton of students here cheat frequently on assignments and tests. I don't get it.
+1  A: 

And yes, get a job programming whenever you can.


Ask if your class gets together to do the assignments the night before they are due. I struggled in my first semester somewhat by not knowing that they did and I could join them and do well too.

Remember to know how you learn: Do you like abstract ideas, concrete examples, looking at something visually, hearing something orally, etc. This along with the combination of working with you classmates, your talent and your indutrious abilities should take you far.

Lastly, beware of taking the same material in multiple formats concurrently. I had a couple of examples of this in my University years:

Least squares computations: Numerical analysis course of how Matlab does this contrasted with a statistics course covering what this is was a bit of a head scratcher for me at times since this is the same material but I hadn't done this formally until this point.

Optimization: Linear and non-linear at the same time. Confusing would be putting it mildly in a sense. I wouldn't do that again.

JB King
+9  A: 

Don't wait until the night before the thing is due to start.

Ask questions.

Consider the stuff they assign you to be the minimum that you should be doing.

Test your code. More than once. Consider writing some tests. Adopt a 'test first' approach, perhaps.

Don't skip lectures.

Don't expect everything to be handed to you. I was amazed at how many whiners there were in some of my intro classes.

Find some open source code to look at - there is a TON out there. Consider getting involved in a project, but get the assignments done first!

Don't forget to have some fun. You'll likely burn out otherwise. Go kick a ball around, hang out with some friends, etc.

Best of luck!

I wrote a side scroller from scratch in java in 20 hours. (Night before it was due, of course) Some of the worst moments of my life...
@windfinder - yup, there's something to be said for time management. I spent a lot of sleepless nights as a first and second year undergrad debugging FORTRAN 77 code (now I sound like a geezer!) using an editor that wasn't a full-screen editor.

Rewrite every single assignment you get, your own way. Professor wants you to use Java in such and such a manner? Try it in Scheme, or Ruby, or Erlang as well. Every so often go back and refactor/translate your own assignments.

Jeff Atwood has written on the remarkable percentage of CS majors who really cannot code their way out of a paper bag. The best way to avoid this is to code a lot, in more languages and paradigms, than the bare minimum you must understand to pass the course.

Trust me, you might look like a genius following your professor's artificial constraints and jumping through his/her loops, but so does a rat who has only learned how to solve one maze.

+6  A: 

Work/School != Life. There's more to life than University or coding. Don't live on your computer, don't make love to it(as it were). Make friends, make a point of doing non-geeky things.

Think of school as your job. Go to work at 8, get home at 5 or 6. Do honest work during that time period, don't slack. When you get home, then goof off. Try to focus on time management and don't procrastinate. Procrastination is a killer for many many students. Staying up late is a huge temptation - don't do it, get a good night's rest.

The professors will likely seem to be ignorant or out of touch. Generally, they are neither, but they aren't focused on being geeks anymore and keeping up with the latest TLA in technology.

Work hard, play hard, do well, don't be a slacker.

Paul Nathan
+1  A: 

The most important thing you can learn in school is how to solve problems. That is, how to figure out what you need to learn and do to build a solution for the problem. It's the one attribute which I have found most lacking in poor engineers, and conversely it alone can make you valuable.

I would say in addition to the rest of the good advice here, remember to take a step back from each assignment or discussion, and make sure you're learning how to approach solving the problem in the absence of someone getting you started or telling you what to do. It's something that's usually lacking in an educational environment, but it's essential in the real world.

I wish I could upvote this twice... Excellent advice!
+1  A: 

If given then chance to do some research work or project work, take it. Especially something you are proud of and can go on and on about when talking to potential employers. Many recruiters say one of the distinguishing features they look for in a candidate is that they, by choice, worked on a project and are proud of it.

This also has the benefit of getting you to work on a project with long-term goals in mind, which is usually the complete opposite of CS coursework, where you only focus on the end of the term.

+5  A: 

Learn how to touch type.

Most bad coding habits come from a desire to save a few keystrokes.

James Curran
One of the best things I did in college was taking a typing class.

Learn to manage your time, or you'll never have enough of it.

Keep in mind that work/study != life. You need to make friends and do fun, non-techie stuff.

Participate in class, show interest in the topics, maintain high grades, and impress your professors. If you do, it's likely one of them will offer you a senior-year undergraduate research position (along with a nice scholarship), and recommend you for graduate school if you're interested.

+2  A: 

Take at least one class each year that's outside of your major/minor areas. Take a class that simply interests you -- just for fun.

Barry Brown
And you'll want to do that in part because you'll want to meet more members of the opposite sex. CS classes are typically not the best place for that. But, at least you can concentrate a little better in class!
Chris Farmer

My best advice to get the most out of college has nothing to do with the coursework. Look around for what else is available: organizations and societies, fraternities if they are big on campus, etc. You can gain a great deal of leadership experience and make contacts which benefit you the rest of your life.

+2  A: 

After you turn in a project or get your grade, search for the program on the internet, or see what other people did. There are many ways to write a program and chances are someone has done it better. Learn from that!

Also, if you want a job after you graduate: Get an Internship!!

+2  A: 

No matter how smart you think you are (or actually are), there will someone smarter than you on your course. In fact, for most of us, half the class will be smarter! Don't be daunted by this.

Mitch Wheat
+3  A: 

Learn as much theory as you can. According to me, university is (mainly :) for the theory, the rest of your life will be for the practice. Don't be afraid of it.

Ok, practical skills are important, but you aren't going to attend lessons only to learn skills one could learn searching with google. You are going there to build a solid ground, and a way of reasoning, that will always serve you during what will come next. And don't expect they will be teaching tools to memorize and apply immediately.

Well, I'm speaking above all for my country, where "computer science" is thought of, and taught, as a branch of mathematics :)

Federico Ramponi
+1, I think too much people here think that CS should be about vocational skills. Theory is much more powerful.

Assuming you're looking at software development for your future, take some extra time to think about how to represent problems and solutions in code, especially between different languages and paradigms. This will help you know your way out of the paper bag, as pookleblinky mentioned.

Developing a good maintainable coding style is also a good investment. Save some of your projects and occasionally go back and revisit them later. See how well you understand the code, and consider how you might re-write it (and if you have the time, do re-write it). Also if you have any projects that are actual applications, consider how you would add a feature to it later (or consider how you'd add it when you revisit the code). Having to deal with that obstacle will help you learn how to plan ahead for architecting code in later projects.

And perhaps most importantly, balance your workload and have a social life. Don't take too many courses so that you never have room to breathe; instead make sure you can go out and have some fun. Don't put off doing your work when you can wrap up and go out later. Personally, I tried to take earlier classes (not necessarily first thing in the morning, but before noon) and get most of my work done by evening. Then I could either wrap up early, or take some time to go out and enjoy myself.

+2  A: 

Camp out in your professor's office. Seriously. If you don't understand something, go to office hours. Have the prof review your work before turning it in. Make it a point to go in, even for 5 minutes, to all your profs ever other week at the least. When it comes time to grade, make a recommendation, or select someone for a cool project, they'll know who you are and what you can do.

(Note: replace professor with coworker and this is exactly how the real world works.)


There are a lot of good items here already. I would add find out whether your school has an ACM chapter an join the chapter and be active. You will make contacts here that may result in jobs later and you will also meet other good programmers.

If you are interested in working part-time while working your way through school, find the School's IT department. You won't be programming at first, but you will have access to resources and you may even get opportunities to do programming. Alternatively, talk with the Professor's of your programming classes you like. See if they have openings for paid research positions.

It can be difficult to approach your professor's. Don't let them intimidate you. Stop by office hours even if the projects are too easy. Get them talking about the subject; find Professors who are interested in whichever field you are interested in (AI, Graphics, etc.) and engage them. They're being paid by your tuition dollars; and if you are honestly interested in their subject they will be happy to spend time with you.

+3  A: 

What's the one thing you would you tell someone just starting at Uni

Kiss her, you idiot.

David Hicks
+1  A: 

Learn your environment. As a CS tutor, it's depressing to see people learning the bare minimum to get by in the labs. If you know your environment really well, you'll be so much more productive and you'll be able to work the problem rather than fight the computer.

Build a name for yourself. If you nail the assignments and engage the lecturers/professors/wizards/whatever-they're-called, you'll be able to get into research more easily. It will improve your chances of getting approval to do unusual things like fudge prerequisites, sit special topics classes, find research supervisors and so on.

Don't forget the social side of things, though. Student groups are fantastic for this sort of thing. I didn't move when I started University, so I hung around with local friends and didn't join anything. Big Mistake. You won't have that many chances to do things with such a high concentration of like-minded people, so make the most of it.

Finally, dare to be stupid.


Get involved in research if you can hack it. Anyone can do open source or a pet project, but only in the university setting will you have a chance to contribute to groundbreaking research (even if you're only a ugrad).


Learn how to use a debugger. I cannot remember how many times I have been saved by GDB. Additionally, learning to go to the documentation when you have a problem is a good skill, it's quicker then waiting for the teaching staff, and better for you.