
Advice to a college sophomore programmer - pchristensen
http://www.pchristensen.com/blog/articles/advice-to-a-college-sophomore-programmer/
======
hammerdr
I would advise that instead of reading SICP, you should just take the class:

[http://groups.csail.mit.edu/mac/classes/6.001/abelson-
sussma...](http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-
lectures/)

Similarly, using available online courses to get through the crunchier topics
(compilers, theory of computation, garbage collection, artificial
intelligence, etc.) have always been more beneficial to me than just straight
trying to read a book on my own.

~~~
kanak
Whatever you do, do the SICP exercises. You'll learn a lot (and discover that
you don't really know things you thought you did).

------
mhlakhani
I wish someone had given me this useful advice back when I was a sophomore..
oh wait, thanks! It's really good advice, IMHO.

With regards to the first point...

Most companies here (Pakistan) are in the web/mobile app development business
or developing CRUD apps for clients. While I don't necessarily think that's
bad, I'd prefer doing something more innovative or interesting, possibly AI,
data mining, or just something that's good on the social/humanitarian front.

What I'm wondering is, how can someone like me have a chance of getting an
internship at a place doing something really useful or innovative? Getting a
visa would be difficult for just an internship.

~~~
paulbaumgart
Yeah, the US visa system sucks. Maybe there are some countries in Europe that
are more sane about it? Otherwise, Google Summer of Code is probably a good
bet for doing something worthwhile without one.

~~~
mhlakhani
I think a company wouldn't want to go through the bother of issuing a visa
just for an intern.

The problem with GSoC is that it doesn't count as an internship for companies
that need one. Or meeting my university's requirement for an internship,
although that requirement could be fought against.

~~~
paulbaumgart
Try to avoid companies that would value a run-of-the-mill internship over a
highly productive GSoC. :)

On the subject of visas: I know that in the US, if you come on a student visa,
there are certain allowances for summer internships in technical fields. Your
local consulate should know the details.

~~~
mhlakhani
I don't have a student visa unfortunately. Time to build an open source
portfolio and get in line for GSoC... Any suggestions? I have a few small
useful scripts that I've written over the years but they're not of good
quality to release. Should I work on those or find some project to work on?

~~~
paulbaumgart
Here's a list of last summer's mentoring organizations:
[http://socghop.appspot.com/gsoc/program/accepted_orgs/google...](http://socghop.appspot.com/gsoc/program/accepted_orgs/google/gsoc2010)

I haven't done it myself, so I don't know if my advice is any good, but I'd
suggest picking one that interests you and getting started fixing bugs as soon
as possible. And when you have a chance, double-check that they intend to take
part this summer, too.

A friend of mine did GSoC a few summers ago. If you like, send me an email and
I'll put you in touch.

~~~
mhlakhani
Browsing through that list now... I'm not sure but I think someone from my uni
did GSoC last year, I'll try finding out about that first. Thanks anyway!

------
tomhallett
It's refreshing to see an article like this not contain points like "My CS
degree was pretty useless and everything I need for my job I learned on my
own"... While college isn't for everyone, much of the "developer approach"
that I use to learning a language (whether it be from the docs/blogs/book) are
skills I learned from my CS degree.

~~~
joelhaasnoot
CS degrees are just as useful as you make them! CS degrees require personal
learning and development, something that your classes try to get you to do. To
be a good developer requires going above and beyond what your class requires.
Take the challenges professors/teachers/lecturers give you. Think for
yourself: experiment, try stuff, read Hacker News and other RSS feeds, etc.
Education isn't about receiving, it's about learning. Dive into communities
related to technologies you're learning. Oh, do try to learn to work in
groups: it's invaluable experience. (Written as a senior in college)

------
agentultra
_Find a project. It doesn’t have to be something meaningful or important, just
do it! Write a scraper to find the nearest Starbucks to you. Make a group
management website for your study groups. Write software to control a LEGO
mindstorm robot. Just do something, post projects online, put code up on
GitHub, and write something about what you did, and put it on a blog. This
gives you a public record of interest in programming outside of work, which is
very, very appealing to employers and probably the number one thing in getting
to an interview. It will also give you practice writing and show you how you
improve over time._

In my experience, I don't think a single person who has interviewed me has
gone to the trouble of sifting through my commit histories and reviewed any of
my code. When I mention the open source projects I commit to, they usually
just nod and say, "that's cool." I don't think that it really helps all that
much tbh.

Unless you wrote a major project that many businesses rely on, don't hedge
your bets on your bug fixes and feature enhancements turning any heads.

------
spitfire
Get laid as much as possible.

------
onteria
Point 2 is somewhat of a difficult area on my opinion. When looking at
programming books, I usually have the following process in mind:

* How in depth are the official docs? If you're going to read a book on a language, you need a way to validate the book's contents. How else will you be able to tell the book is not leading you down the wrong learning path? This also gives you a chance to check on if the language is right for you.

* How old is the book? If the book is talking about the language 5 years ago, chances are syntax and ways structuring your program (object oriented features may have gotten better for example) have changed. Make sure you have the most up to date edition, and complement it with checking the API docs. Well written API docs will generally indicate if a way of doing something has changed, or will no longer be supported.

* Look at the author of the book, and see how close they are to the community of the programming language in question. Are they the creator? Contributor? Someone else?

* What is the book trying to achieve? Some great books expect you to have basic knowledge of the language, or some other specific concept (MVC for example). Make sure you know what you're getting into. Some books also act as "desk references" that could be potentially replaced by more up to date API docs on the language's website.

There's probably much more that can be added to the list, but I think these
provide a basic sanity check.

~~~
pchristensen
Great point, I added an edit to that effect.

How do you tell the good tech books from the bad? Ask someone who is good at
that technology. Too shy? O'Reilly and Pragmatic Programmer books are
generally good, and you can often get good recommendations by searching on
StackOverflow or SearchYC (<http://searchyc.com/rails+book>).

~~~
stonemetal
Amazon book reviews and never buy a book you haven't held in your hands, are
pretty much the two rules I follow. The idea is basically widen what books in
the field you have heard of through amazon, then get a hold of them some how(I
usually get an inter library loan for a few weeks) to check depth and writing
style. So far skipping step two has stuck me with books I didn't really
appreciate.

------
edw519
WHILE YOU'RE STILL IN COLLEGE TAKE ADVANTAGE OF ALL YOUR NON-PROGRAMMING
OPPORTUNITIES ESPECIALLY IN WRITING AND DESIGN HOW IRONIC THAT THIS ARTICLE IS
FROM A GROUPON PERSON AND GROUPON HAS SUCH CLEVER AND HUMOROUS WRITING AND
BEAUTIFUL DESIGN YET HIS BLOG LIKE THIS COMMENT IS PRACTICALLY UNREADABLE
BECAUSE OF YUCKY TYPEFACE AND BLOG SETUP DO WHAT OP SAYS BUT NOT WHAT HE DOES

~~~
pchristensen
How do you like it now? Better? (aside from the broken images for the RSS
logo)

~~~
edw519
Not really. Firefox on Windows XP. Needs:

    
    
      - smaller font (too much scrolling)
      - darker font (not enough contrast)
      - proportionally spaced font
      - left margin way too small
      - right margin doesn't need to be aligned
      - white space between bullets
    

Didn't mean to pick, it's just that this design is so different from the
Groupon emails I enjoy getting every day :-)

I also wanted to point out some of the best advice I ever got, that even for a
programmer, there's a lot more to life than programming, especially while
you're still in college and so much else is readily available. Once you're in
a cubicle, you won't have as many opportunities to learn other stuff.

[EDIT: I refreshed and it looks great now, all except the left margin. Wow, I
feel empowered. Thank you Peter and thank you Groupon.]

~~~
pchristensen
Try a hard refresh. I put in a completely different theme that has most of
those things. It sounds like you're still getting the old theme.

Besides, Groupon might as well close up shop if they had to rely on my design
sense :)

