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
I'm not sure if I should downvote you because your post is really annoying me, or if I should upvote you for the self-referential murdering of style...
- 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.]
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.
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.
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.
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.
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.
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?
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.
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!
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.
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)
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.
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.
It depends on the topic of the book, of course, but some of the best computer science books I've read were written in the 70s and 80s (SICP, Dragon Book, etc.). The C programming language, one of the most popular languages in use today, has not changed much since the 80s.
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).
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.