views:

225

answers:

3

No doubt there is a lot to read on blogs, in books, and on Stack Overflow, but can we identify some guidelines for CS students to use while studying?

For me these are:

  • Finish your course books early and read 4-5 times more material relative to your course work.

  • Programming is the one of the fastest evolving professions. Follow the blogs on a daily basis for the latest updates, news, and technologies.

  • Instead of relying on assignments and exams, do at least one extra, non-graded, small to medium-sized project for every programming course.

  • Fight hard for internships or work placements even if they are unpaid, since 3 months of work > 1 year at college.

  • Practice everything, every possible and impossible way.

  • Try doing every bit of your assignments project yourself; i.e. fight for every inch. Rely on documentation as the first source for help and samples, Google, and online forums as the last source.

  • Participate often in online communities and forums to learn the best possible approach for every solution to your problem. (After doing your bit.)

  • Make testing one of your habits as it is getting more important everyday in programming.

  • Make writing one of your habits. Write something productive once or twice a week and publish it.

+6  A: 

I would definitely push all students for an internship, and one in which you can write some real code. There's SO much stuff I never learned in school (code versioning, code reviews, real world debugging) that took me a while to ramp up on once I got my job right out of school.

Additionally an internship could turn into a fulltime, paid position once you're finished, and the networking alone is worth the time.

pzearfoss
+ 1 + 1 + 1 + 1
jrummell
+1: I thought I knew stuff when I left school; only to get a job and realize I knew nothing. p.s. i still know nothing but I know a lot more than I did before
gatorfax
+4  A: 

I think what you're really asking is, "What should you do to be a successful programmer," but your bullet points sound like you're trying to apply traditional studying techniques to achieving an undergraduate Computer Science degree.

I'd present these instead:

  • Learn to work on coding projects in groups and with a partner.

  • Use revision control and write tests.

  • Identify an open-source software product that you use, join its community and contribute back to it.

  • Take the hard CS classes.

  • Learn to enjoy your craft and enjoy learning.

a paid nerd
Why "take the hard classes"?
ChrisW
It's true. Read this post http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Asad Butt
@ChrisW Because it pays off. I really, really wish I had taken Advanced Operating Systems and built a Linux driver to control a robot arm. I wish I had taken Advanced Programming Languages or a harder Compilers course so I would be better at writing parsers and grammars.
a paid nerd
+3  A: 

Things I would hope most CS students would come out of school with:

1.) Know how to test and debug code.

I say this not only b/c testing is a big deal, but if you learn to test properly early in your career, you'll write better error checking and exception handling within your code. I remember coming out of school and noticing how much more error and input checking "real" code had in it compared to what I was used to. In school, I found I had a goal for my program and that was to work at the task assigned. I was good at doing that, but what I found was I needed to add much more for my programs to be safe in a more "hostile" environment.

2.) Learn a lower level language.

I think actually learning how to deal with pointers, pointer math, memory management, etc. is a great exercise. You should try and learn as much about what is going on under the hood as possible.

3.) Look at a lot of code.

Whether it be code snipets on sites like SO, or joining an open source project, look at code that professionals write and learn from it. You'll find techniques, keywords, data-structures you haven't thought of or seen before and over time it will greatly increase your programming vocabulary and understanding.

4.) Learn at least the most basic design patterns.

5.) Read the best books/sites about the language you're learning or want to learn.

Many of the concepts are useful in other aspects of CS. For instance if you're a C++ developer, read something like Effective C++ by Scott Meyers. SO is a good place to find great suggestions of books per language and skill level.

6.) Have fun!

Learn what type of development you enjoy doing the most and embrace it. This is inevitably where you'll be looking when you come out of school and where you'll more than likely to excel as a student and a professional.

RC