I am a novice programmer. I have started programming since 2-3 months. Currently, I am learning C. I would request some suggestions on how to program, how can i solve problems better, where can i solve them. On a whole, I am asking for some tips on how to excel in programming. It would be better if you suggest some books and websites. Looking forward to your answers.
This is a broad and open ended question.
- Select your weapon in this case : The programming language.
Usually C/C++ works fine.
- Understand the basic concepts of programming very well before you start in competitions or online judges. Usually concepts such as pointers, strings, integer arithmetic is rudimentary to an excellent programmer.
- Once you feel competent, comfortable coding basic problems such as fibonacci series move on to DS.
- DS or Data Structures are the most important tools of an excellent programmer. Love it learn it use it. Main topics are Lists, Trees, Graphs and Hash tables.
- After DS, you should focus on algorithms. They will infuse ou with new ideas and also you will learn about many advanced applications that are always required at programming. Again main topics are sorting, searching, dynamic programming and running time analysis. Basic understanding of random algorithms also helps.
- Now you are ready. Start solving code chef problems. Start with “Easy”, work up to “Hard”. Tackle atleast one problem every day.
- After you feel comfortable coding in Code Chef Practice problems you can try participating in Cook Off, Long Contests etc.
Other resources :
Books on C/C++
- Programming in C - Kernighan Ritchie
- How to Program in C++ - Deitel
- C++ The Complete Reference - Herbert Schildt
Books on DS
- Data Structures and Algorithms - Horowitz, Sahani and Anderson Freed
- Data Structures and Algorithms in C - Mark Allen Weiss
Books on Algo
- Introductions to Algorithms - Cormen (This is the holy grail of all algo books)
- Algorithms in a nut shell - Heineman, Police and Selkow
Codechef, SPOJ(Sphere Online Judge), Google CodeJam, Facebook Puzzles
Personally i think to excel in programming one needs to improve ones analytical and problem-solving skills.
Now it all depends on what target you set yourself , generally below are the things I follow
- To improve programming ,one needs to solve practice problems a lot , Codechef has a plethora of practice problems of different difficulty level.
- Udacity.com ,coursera.org , Mit OCW— they have courses going on and coming up on Compsc and programming you can pick choose to study from there , point is, in the process of studying you will learn new techniques of programming
- Last, but not least , a teacher at school had told me , learn one programming language completely , this would make you comfortable in programming in any language later on (syntax is the easy part)
Once you learn the Theory, don’t do a lot of practice - u will get bored, instead regularly participate in Topcoder SRM, codeforces round and sometimes on codechef as well, but u can ignore codechef.
Never Give Up. As you are new to programming and when you try the challenge Problems (Long and Short Contest), You will not be able to solve problems in beginning.This particular stage is very Important and all than maters is learning.
Dont Miss Editorials . After the contest ends make sure you read the editorials and understand every answer (And all possible methods of solving it)
Implement yourself . Instead of looking onto Solution given there, after you read the concept try and answer all the questions you missed out.
Not just answering, Perfection Maters . Try to optimize your solutions as much as possible.
Patience is must.
And about resources, Codechef has more than enough problems for practice. While for learning , This place will very soon be awesome New Q&A Style Discussion Forum @codechef will help you a lot.
After you understand what the basic concept is. Google Helps you a lot
- Basic Mathematics,Graph Theory,Number Theory,Dynamic Programming,Linear Programming(Pro Level) are important topics to cover.
I advice you to start with BASIC. BASIC is just simple and you can finish it in a few weeks or atmost in a month. Then go for C and you will wonder how high your confidence has developed in programming.So keep going! I wish you all success.
This question has been marked as community wiki. For more info please read http://discuss.codechef.com/questions/44/what-is-a-community-wiki
I disagree. Practicing a lot is very important, perhaps the most important part. When you are bored of practicing just take a break for a few days and come back.
whats the point "practicing alot " and then “taking a break of FEW days”, actually if someone participates in these contests regularly and solves the unsolved after the contest is enough.
Time constrained programming is more important.
and then u die.
I would say Linear Programming is not that important for prog competitions. But +1 for a nice answer