Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm currently a graduate student in Computer Science. I've had a few jobs before coming back (doing some coding for the Army while in) and working in an Oracle shop. Both jobs could be done by monkeys with a semester of computer science. I want to be a great programmer. So, right now I'm back in school working on my master in computer science and I'm looking to do my thesis in data mining and natural language processing.

I have limited time and right now I'm using my free time to work through Structure and Interpretation of Computer Programs, Machine Learning, OpenGL SuperBible (to learn the basics of graphics) and Cormen's Intro to Algorithms during the break before Winter quarter starts. I'm writing most of the programming projects that go along with those books too.

Does this seem like a good use of my time, or should I cut my time in half on that and start trying to do bug fixes for some open source project (I've never done open source stuff and barely have the vaguest idea of how to get started)? If you recommend open source how should I go about getting started (really, step by step would be nice, I haven't done any so far because I literally don't know how to start) or if continue studying what should I focus on?

Thanks.

share|improve this question
    
"Both jobs could be done by monkeys with a semester of computer science." cough (most IT jobs) cough –  Kirk Broadhurst Nov 7 '11 at 1:03
add comment

3 Answers

up vote 4 down vote accepted

The most effective way I know of becoming a good programmer is by interacting with programmers better than you - learning from what they say and write (both code and prose), and getting them to comment on what you say and write. If you're lucky, your university environment will give you access to some of these people. You'll need to put extra effort in - your regular university work won't be enough.

Contributing to an existing open source project is certainly one approach here, but don't necessarily go out of your way to contribute just for this experience. Use an open source project (say, a library) to do something you want to do (say, implement a web application that shows off some algorithm or technique), and if you see the opportunity to improve it, try to do so. If it is too hard, ask on the mailing lists what approach would most likely work. On the whole, open source communities welcome new contributors, so don't worry about showing your lack of familiarity with the code base.

The Programming Reddit, HackerNews, or individual blogs are great places to interact with good programmers. Follow them for a while, reading posts and comments, and learn the rules of interaction. Then, start commenting - asking questions, or trying to answer them.

Another good way to get interaction is to document your progress towards implementing something, or announcing something when you're done. If you're interested in data mining, take a large set of data (say, the StackExchange Creative Commons dumps) and perform some sort of analysis on this. Document your goal, the tools you used, and maybe put the code into a github repository. Announce this on your blog, and post onto the above-mentioned locations for feedback.

Good luck, and keep asking questions.

share|improve this answer
    
Reading Stack Overflow helps a lot, too. –  Maxpm Dec 16 '10 at 23:10
add comment

Both are important. You learn a lot by reading other people's code and by having them review yours. But you also have to continue building your own design skills.

share|improve this answer
add comment

I think you're doing great at the moment. You have the right approach and attitude to learn a lot and fast, and to have a good retention of what you learn.

Learning CS is important, but not vital. I came from a very practical background where CS theory did not matter that much. But it does if you go into very specific fields. SO it depends what you aim at. You need a combination of a looooottttt of practice, at least some degree of theory, and a looooottttttt of interaction with other people. And not only good programmers. Working with bad programmers is also very educative.

Your next step is to start teaching. You'll learn even a lot doing that. Explaining things to people makes you realize what areas are still fuzzy for you, and what you need to work on until you can consider yourself an expert (if there's such a thing).

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.