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.

What are the best skills to develop for a college graduate?? Should one spend hours/days trying to solve problems on codechef or topcoder or contribute code to open source organizations?

My personal experience says solving problems teaches you how to make optimal code and learn new programming techniques (which someone else has researched and made available) to solve problems, whereas contributing to open source teaches you how to organize code (so others can work on it), use coding conventions and make "real" use of what you have learnt so far, blah blah!!

Also another thing to note is that many companies are hiring today based on one's problem solving skills (Is this something I should worry about?)

P.S. I have done little of online problem solving and little of code contribution (via GSoC), but left confused what I should continue doing (as doing both simultaneously isn't easy). I am in final year of my CS degree and I want to make myself good enough before I get employed.

share|improve this question

closed as primarily opinion-based by Thomas Owens May 18 at 8:49

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.

What is the goal you want to achieve? –  user1249 Jun 14 '12 at 12:28
@ThorbjørnRavnAndersen I mentioned it in the last line (someone had edited that part, now rolled back :) –  nischayn22 Jun 14 '12 at 14:28
So your goal is to get better? Note that nobody expects newly graduates to know everything - you are expected however to be able to learn a lot more. I would personally focus on getting your final project out the door with good grades - this show future employers that you can actually ship. –  user1249 Jun 14 '12 at 15:15

4 Answers 4

up vote 10 down vote accepted

Well, it depends...

In my personal opinion, it is always better to get your hands dirty somewhere out in practical development instead of solving academic problems which may be difficult to apply somewhere directly.

There are people who can codegolf funny sorting algorithms in 10 characters, but fail at delivering a functional, usable product within time. I do not say, knowing how to sort something is useless - programmers who don't know how to (at least conceptually) implement a simple sorting algorithm are pretty useless, but that's stuff one should learn while studying CS. If one fails at basic concepts, one should train them. But if they are known...well, try to show employers that you are able of applying those concepts, that's what you learn in pet projects or open source software.

Just my humble opinion, but I would prefer problem solvers (read: Real world problem solvers) over academic overengineers.

Coding in open source projects (or whereever) is not only about coding itself, it's about everything around - know how to use Subversion, to create build scripts, set up an application, administrate an application server, communicate with databases, know how to work fast in your IDE of choice, teaming up with other devs and so on...

When you go this path, you will always stumble into problems which require clever, advanced coding techniques. If you stand in front of a problem and think "There must be a clever way..." - that's the moment you pull out all that fancy stuff you may have learnt at coding sites and solve the problem.

Long story short: Coding Problems are nothing worth without the possibility to use them somewhere, application development is nothing worth, if you have no way to improve yourself and do always the same if/for/helloworld-Stuff. It depends on your personal experience, but i would go with development experience first and do esoteric stuff if you are bored.

share|improve this answer
solving academic problems which may be impossible to apply somewhere is a wrong notion –  Shirish11 Jun 13 '12 at 7:40

That's a bit like asking whether eating or drinking is more important - both are important, only in different ways.

  • Solving coding problems, reading about new things, trying things out etc. help you get to an initial understanding of new technologies and approaches. This is important to get you started, and to broaden your horizon.
  • Working on "real" problems helps you apply the knowledge you have, and teaches you the "soft" aspects: What are the practical advantages/disadvantages of a solution? What solution best matches a given problem? What is the best tradeoff between code quality and shipping? - not to mention the social learning, working with others, communicating, planning etc.

My personal recommendation:

  • If you are completely new to a field, do some reading and problem solving to get you started.
  • As soon as you start to feel comfortable with the basics, dive into a real problem. This will help you test if you really understand what you learnt.

Usually, you will repeat this cycle many times - and learn a bit more each time :-).

share|improve this answer

I think it would be best to invest your time in pet projects and open source projects. Its much easier to learn if there is a real tangible problem to solve. Its also nice to have a few code examples to show to potential employers.

share|improve this answer

Employers will be looking (mainly) for two things: Enthusiasm and Knowlege. Contributing to open source projects shows enthusiasm, problem solving skills shows knowledge.

I'd say knowledge slightly edges it from enthusiasm, and it's possible to convey enthusiasm without contributing to open source projects, so if you're soon going to be doing interviews then problem solving's the way to go - you'll almost certainly be asked to solve some problems at interview.

Contributing to open source projects is good to have on your CV but doesn't necessarily mean you'll gain transferrable knowledge (you might just get to know 1 codebase very well though). Depends on the project of course - More fun than problem solving but I'd personally treat it as a hobby. (That said, collaboration and use of tools like SVN or Git is definitely a plus).

share|improve this answer

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