Suggestions (books, projects, things to learn, things to do) for a 2nd year Computer Science Student over Winter Break?
December 12, 2008 4:05 PM   RSS feed for this thread Subscribe

Suggestions (books, projects, things to learn, things to do) for a 2nd year Computer Science Student over Winter Break?

Winter Break is soon approaching and I feel like accomplishing something over it. I am a sophomore computer science student, and I was wondering what the hive mind might suggest to do with all this new time available! Any computer books, online lectures, sample projects (Im going to learn C# over break, maybe some open source projects that are friendly to noobs?) or whatever to help get an edge on the competition and have fun are welcome! Also included are any things you feel essential to learn, tech wise or not.

Right now I know C and Java, and a good level of python and use linux if that matters. I am taking functional programming languages and Algorithms next semester as well.

Ideally, my plan so far has just been to learn a new language or two, get experience coding in these languages (don't know what to code or how to find an open source project to really work on though) and get head start for next semester.

Whatever your thoughts/experiences please do tell! And happy holidays!
posted by Javed_Ahamed to computers & internet (15 comments total) 12 users marked this as a favorite
Do a problem a day on projecteuler.net in a new language of your choice.
posted by spatula at 4:21 PM on December 12, 2008


I think working on an open source project is always a good way to learn. One way to contribute without knowing much about a given language is to write unit tests for a project that doesn't have them. For a C# project you would probably use the NUnit framework to write them.

Writing tests isn't exactly fun, but it's good for learning because you have to read a lot of existing code, and the tests themselves are pretty easy to write. Also, if you haven't written tests before it's worth learning, because testing is important in the real world and you'll probably end up having to write them at some point.
posted by burnmp3s at 4:24 PM on December 12, 2008


Head First Design Patterns is a great read and should eventually make it to your reference list anyway. It will definitely give you a leg up on the competition if you read it sooner rather than later.

Definitely volunteer some time with an open source project. It always looks good on a resume.
posted by boba at 4:44 PM on December 12, 2008


You might enjoy playing around with 2D/3D graphics using the Java-ish Processing language.

Scheme is elegant and fun. You could try working your way through the first chapter of SICP.

Or maybe a little game programming with the Python library PyGame?

Why's (Poignant) Guide is a fun (cartoon) intro to Ruby. And afterward you can play with his Shoes framework or work through some of the Ruby Quizzes.
posted by stungeye at 5:04 PM on December 12, 2008 [1 favorite]


Start reading SICP, learn Scheme, and try writing your own language. That’ll definitely give you a head start on functional programming and algorithms.
posted by ijoshua at 5:05 PM on December 12, 2008


I'm a junior in CS and am finishing reading Why's guide (linked in stungeye's comment above). Planning on going home and spending a couple of weeks making a webapp in order to teach myself Rails. I haven't done it yet, so I can't really vouch for the experience, but I think it's a pretty good idea and recommend it heartily.
posted by ewingpatriarch at 5:35 PM on December 12, 2008


Thanks for the responses so far guys! On the subject of open source projects might anyone have an suggestions one where to start looking for one to contribute too, especially the ones who are known best for you know well novices like me?
posted by Javed_Ahamed at 6:19 PM on December 12, 2008


If you haven't read The Inmates are Running the Asylum, I'd recommend it.
posted by NoraReed at 8:10 PM on December 12, 2008


Grab a copy of Dewdney's New Turing Omnibus.

Each chapter has an interesting writeup of an aspect of computer science, written for the non-specialist, and sample code for you to play with.

It's quite entertaining and working through it should be rewarding and informative.
posted by i_am_joe's_spleen at 11:16 PM on December 12, 2008


To find an open source project to participate in, I'd suggest looking at projects that were a part of Google's "Summer of Code". Those projects all tend to be well organized, long lasting, and open to outsiders. From there, I'd start narrowing down the list based on what projects sound interesting and which involve languages you want to work in. Most projects will have web sites, mailing lists, and IRC channels that will allow you to get a feel for the project and its community. Post some information on your background and interests and you're likely to get someone who will point you to a worthwhile project.

If you enjoy the experience over winter break, keep in contact with the project in the spring and you'll have a good leg up in trying to get a position in next year's Google Summer of Code. You could then get $PAID$ to work on an open source project for the summer.
posted by xulu at 12:36 AM on December 13, 2008


Pick up an arduino.cc and a breadboard, or a similar kit, and build a robot?
posted by sebastienbailard at 2:55 AM on December 13, 2008


"Right now I know C and Java, and a good level of python and use linux if that matters. I am taking functional programming languages and Algorithms next semester as well."

Procedural, procedural, procedural. Learn some SQL, it's halfway to a functional language, and it'll get broaden your horizons. I once programmed all of an invoicing system (for a major government sponsored mortgage buying enterprise with the initials "FM") in SQL tables, views and a single stored procedure (very special circumstances).
posted by orthogonality at 4:34 AM on December 13, 2008


Project Euler and SICP both come very highly recommended.

You can do Project Euler in any language, it can be pretty fun, and it's a good way to learn algorithms: reading other solutions that work 1,000x faster than yours afterward is usually quite enlightening (as is seeing how people solve things idiomatically in C vs. Lua vs. Python vs. Haskell, etc.). PE is also very bite-sized, so to speak - I do a problem on my lunch break or as a warmup before weekend hacking sometimes, but if I don't get to the site for a week or two it isn't a big deal.

SICP (review) is available online in both HTML and texinfo (for Emacs), though once you really get going it will help to have the hardcover. A good understanding of the material in SICP will transcend all of the design patterns stuff, though reading it is definitely not something you can do in a weekend. (You might also find some reading notes helpful.) Even just the first chapter will have you well-prepared for a functional programming class next semester, though.

Another book similar in scope to SICP is Concepts, Techniques, and Models of Computer Programming (AKA "CTM"). Rather than focusing on teaching functional programming with Scheme, it explores the foundations, concepts, strengths, and weaknesses of several programming paradigms, from FP to OOP, relational, declarative, constraint-based, message-passing concurrency (as in Erlang), etc. It gets into quite a bit of deep material, but is one of the most readable CS books I've ever had. The things you learn from it will round out your understanding of programming in every language.

For something you could easily start and finish over Christmas break (alongside the others, even), check out The Little Schemer. It's a very quick read, but will give you a head start on the basic concepts from functional programming and Scheme. (You will probably find its style either cute or quite corny.)

If your FP class next semester is going to focus on Haskell, you might want to check out The Haskell School of Expression; if you're going to use ML, The Little MLer (same style as The Little Schemer, above) and/or chapter 2 of Developing Applications with Objective Caml (a French O'Reilly book, translation is free online). Other books above cover Scheme quite well.
posted by silentbicycle at 6:29 AM on December 13, 2008 [1 favorite]


Since you know "a good level of Python", you might also like the Python Challenge. It's fun and works well as a guided tour of the standard library.
posted by silentbicycle at 6:40 AM on December 13, 2008


I should mention that learning C# may not be conducive to participating in open source. C# has only a very small community, and there's quite a bit of friction with Linux and friends. My advice to you is to first make a list of all the open source software you use right now. Once you have that list, do research: see what ohloh says about the project, how many people participate on the mailing list / IRC / whatever, and check if any of them are asking for help. It's far easier to participate in a project that recognizes the need for help than one that resents offers. And it's far easier for you stay motivated if you use the software you write. At that point you'll have a better idea of the things you need to know to help out.

There is very little you can do for an existing project in under a month. But you can use a month of free time to get acquainted with the code base and pick up small tasks, and prepare for Google Summer of Code. If you know the community and the code, that's an in for whatever projects are selected.

I could name some specific projects that I know want help, but the point is to help you find something relevant to you. A one month or three month stint on a project you don't care about is valuable experience, but being a prolific developer on a project makes both the project and you more valuable.
posted by pwnguin at 1:54 PM on December 13, 2008


« Older We're going to be introducing ...   |   How do I deal with a problem d... Newer »
This thread is closed to new comments.