views:

65

answers:

5

Hey SO,

Let me preface my post by saying I've done a bit of searching, but so far I have not been able to find any posts that contain exactly what I'm looking for.

I'm a relatively recent college grad (BS in comp sci) and have been working at my first full time job out of college for the past few months. Right now I'm working in QA, but I might want to switch to development at some point in the future.

The thing I am having trouble with is trying to figure out where to focus my efforts so that I will see the maximum growth and productivity gain as a computer scientist. I own and have partially read many good books including Code Complete, The Pragmatic Programmer, Effective Java, etc. but I feel that as soon as I begin reading one book I come across another one online that I yearn to start reading.

As far as the specific skills I would like to improve heres a short list:

  • write simpler, more elegant code
  • more quickly comprehend code and projects written by others
  • more quickly and effectively debug issues I come across
  • increase my capacity to learn new concepts
  • become more familiar with and adhere to standard practices
    • QA, Java, general coding style, etc.

Things I have considered doing to improve my skills:

  • Reading books
  • Joining an open source project
  • Talking with more senior people at work in a mentor / mentee capacity
  • Taking extension classes at nearby universities
  • Getting certified in a particular language
  • Taking up a recreational side project in my spare time

I would love to hear about how you prioritize and follow through with your own learning goals, and also hear what you think about my ideas and which would be most effective for personal improvement.

Thanks!

+2  A: 

I suggest reading blogs like joelonsoftware, codinghorror and others. You didnt mention this and in case you dont read the blogs then its high time that you start it.

One advice i have for you if you want to switch to development do it ASAP because otherwise you will get stuck in QA. Not that QA is not worth it but if your real interest is programming then better now because its tough to move to development once you are 1 year experienced.

Probably you can mention what your ultimate aim in life is. People can consider that when they answer.

ckv
+3  A: 

Regardless of what you're getting paid to do, if you want to get better the best thing you can do is practice. I've found reading other people's code teaches quite a bit, and writing code yourself does it even better.

Get involved in an open source project, or even just knock out some personal projects yourself. Working with others on a open source effort has the benefit of getting feedback, potentially immediately, building up relationships with other developers that will benefit you down the line, and likely find some folks that are willing to help you develop a bit.

Your other ideas are all excellent as well. If you can find someone in your office to work with you, do it.

Finally, if you really want to see if you know something and how well, teach it. Offer to teach others, and take it upon yourself to explain to others, and you'll find the topics clarifying in your own mind. You'll need to do that to be able to explain things to other folks who see things differently than you.

heckj
+2  A: 

Some more things you can do:

Start your own project/join an existing one is a must. Without practicing a lot you will get nowhere. You may gain a lot of theoretical knowledge but you will not know what is the best solution/design/technology, whatever in a concrete situation. If you don't have a really favorite topic (and can't choose what to do) have a look at exercise collections (like Project Euler).

If you have the possibility ask the more experienced guys to have a look at your code/solutions. Also check how others solved the same problem.

Have a look at/learn different programming languages and play with them for a while. Try to select some with fundamental differences: imperative (like Java), functional (Haskell), mixed (Scala); statically typed (all of the previous ones), dynamically typed (Python), and so on. The biggest advantage of it is that it will broaden your perspective. Communities (or at least some people) around some languages may tend to think theirs is the only right way, but it's not necessary true. For different jobs different tools/languages might be more appropriate. Even if you stick to one language at the end you will have a large skill set and you can consider many different possibilities for the same problem. Studying frameworks, technologies can have a similar effect.
Solving the same problems (even if they are just the previously mentioned small exercises) in different languages can help you see the pros and cons of the language.

Reading blogs (as ckv suggested) can also help a lot, as you can learn a lot of small (in some cases major) tricks/practices.

One more book that I can highly recommend is Structure and Interpretation of Computer Programs. It shows you how to increase the level of abstraction in your code and how to fight too much complexity. It also shows how to attack the same problem with conceptually different solutions.

BTW I think all of your points are valid and beneficial, except for the certificate maybe. It can help you to get a better job easier, but I don't think the certificate itself will make you a better programmer (albeit the preparation for it will certainly improve some aspects of your skills).

Sandor Murakozi
+2  A: 
Norman Ramsey
+1  A: 

I don't think there are any shortcuts. You learn by doing, and particularly you learn through mistakes (as with anything). Reading all kinds of books is good, but reading more doesn't necessarily mean you're learning faster. I've noticed that I learn different things when I reread some of these books a few years later, based on the different experiences I've had.

I think the most important part is to always keep challenging yourself. Write code, and take on programming challenges that are right there at the edge of what you can do (or maybe a little bit beyond it). You need to do projects challenging enough that you make mistakes, because only by making mistakes do you actually learn how to do better next time. Combine that with some reading to keep up with new trends, techniques and technologies, and you'll do fine.

Joeri Sebrechts