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 think this may just be one of the most frequently asked questions by a novice (like me) on this site. Please pardon me for that. My question is I wish to get better at solving the harder problems of competitive programming which almost always are very tough dynamic programming formulations, dynamic data-structure manipulations and hard combinatorial object manipulations. How should I go about training myself to not only gain confidence but also gain an expertise in these areas. Yes, I know the obvious answer is practise! But, I'd want to know say books or materials that I should look up to before hitting a programming site like say spoj, hackerrank, codechef, codeforces and the like.

share|improve this question

closed as off-topic by BЈовић, Philipp, user61852, ratchet freak, Kilian Foth Sep 9 '14 at 8:37

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – Philipp, user61852, ratchet freak, Kilian Foth
If this question can be reworded to fit the rules in the help center, please edit the question.

1  
Study relevant free software; read algorithmic books and papers; contribute by improving these free software. –  Basile Starynkevitch Sep 9 '14 at 8:18
    
@BasileStarynkevitch: With a bit more effort that would make a fine answer ;) –  back2dos Sep 9 '14 at 8:20
5  
When you think that this is a frequently asked question, why didn't you use the search bar in the upper right corner to see what people usually respond to it? –  Philipp Sep 9 '14 at 8:33
    

1 Answer 1

up vote 4 down vote accepted

Read some good algorithmic books (e.g. Knuth the art of computer programming). Learn several container algorithms techniques (hash tables, trees & balanced trees, linked lists, vectors, ...).

Study some free software (hint: installing and using Linux is useful). Look on SourceForge and GitHub to find some of them.

Learn several programming languages (including academic ones, like Scheme with SICP, and/or Ocaml and/or Prolog and/or Haskell and/or Agda, etc...). Study the underlying (compiler and interpreter) techniques. Read Queinnec's Lisp In Small Pieces and Scott's Programming Language Pragmatics

Contribute to some free software. In principle, it is dead simple (but requires a lot of time and effort). Choose some free software that you like, study its source code, ask questions about it on the developers' mailing list, maybe contribute to its wiki, propose a small patch, and get it accepted. Then repeat. Once you've done the effort to dive into the code, it is mostly a social issue (which might not be easy).

If you don't know how to chose a free software to contribute to, I have a (biased) suggestion : write some MELT extension of GCC to help existing free software, for example, code some coding rules in MELT for Gtk. Contact me for more, since I am the main implementor of MELT...

Wikipedia has a lot of interesting material: call stack, continuation, syscall, garbage collection, B-tree, etc etc etc etc...

If possible, also study Computer Science at some university.

share|improve this answer
    
thank you :).. I'm taking up CS courses. I know decent enough haskell. Contributing to open source software I do not know how to do that, I wish to, though! I'm reading Data Structures from Peter Brass. Art of Computer Programming, I've heard of, I want to read it. :) –  Ramit Sep 9 '14 at 18:27
    
Don't be shy in contributing to free software. Chose some software that you like (perhaps a medium sized project with a community of a few dozen of developers and less than a few hundred thousand lines of source code) study deeply its implementation. –  Basile Starynkevitch Sep 9 '14 at 18:38

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