10 Ways to Improve Your Programming Skills
1. Learn a new programming language
Learning a new programming language will develop new ways of thinking, especially if the new programming language uses paradigms that you are not familiar with. Many of the acquired ways of thinking can be applied to languages that you already know. Perhaps you will even love the new programming language for you so much that you will begin to use it for serious projects.
Among programming languages, an excellent cognitive effect and catching up experience are given by: Lisp (or Scheme ), Fort , PostScript or Factor ( stacked programming languages ), Haskell ( strongly typed , cleanfunctional language ) or OCaml ( object-oriented functional programming language ), Prolog ( logical programming ), Erlang (excellent parallel computing ).
2. Read a good, complicated book on programming
A lot of knowledge can be gleaned from books. Undoubtedly, practice is very important, but after reading at least one good, complex book on programming, you will not only test your thinking, but also, most likely, pump your skill in this matter.
Here is an example of such literature: The Art of Computer Programming (if you want to boil the brain), Structure and Interpretation of Computer Programs , A Discipline of Programming or the famous dragon book . On the advice of ArtemSmirnov : Concepts, Techniques', and Models of Computer Programming .
Of course, you can read simple books, but avoid literature such as "For Dummies", "... in 24 hours," "... in 3 weeks." Such books will not give you significant benefits in terms of improving programming skills.
3. Join an open source project
What are the benefits of participating in an open source project? Teamwork (a great thing, especially if you used to work only on your own), the ability to learn how to dig into someone else's code, understanding it (quite a difficult task).
Well-known (and not so) open source community: GitHub , Sourceforge , gitorious , BitBucket , Ohloh .
4. Solve programming puzzles
This is also a great way to improve programming skills, especially since finding a task for the evening is not a problem now. For example, math-oriented problems can be found on Project Euler , which is one of the most popular sites with programming puzzles. From myself I can advise The Python Challenge .
I also suggest that you try programming golf, where programmers try to solve the problem by making as few keystrokes as possible. This can teach you many of the isoteric and special features of the programming language, making the work more creative and fun. You can try yourself in this particular golf here .
Link from sl_bug : Timus Online Judge
Links from winger : acm.sgu.ru , codeforces.ru , topcoder.com
Link from black_bunny : acm.mipt.ru
Link from kane : spoj.pl
5. The program
Start making every new program “from scratch”. Design your entire architecture yourself and implement it. Repeat.
Programming is the best way to learn programming. You will learn from your mistakes, and at the end of the project you will get much more pleasure than reading a book. In addition, you will “beat your hand” and will be quicker to navigate those issues that you yourself figured out.
6. Read and learn code
Explore interesting codes, such as the Linux kernel (keep in mind this is very large code). A good operating system for training purposes is MINIX3 . You will be able to learn many new idioms of the language, as well as something else about the software architecture. Reading unfamiliar source code is a difficult but very useful job.
7. Hang on programming sites and forums, read blogs
By hanging on programming sites and forums, you will show yourself and learn from others. Also read blogs, preferably more often. I can advise Joel on Software (no longer publishes entries, but there is an archive in which you can find a lot of interesting things), Coding Horror and Lambda the Ultimate . From spmbt feed : Habrahabr , StackOverFlow
forum.sources.ru and forum.vingrad.ru - 2 large forums on various programming languages
8. Write about programming
Start your blog about programming, and write to it, even if for yourself. Browse sites like Q&A and try to give answers. So you can gain knowledge in a matter that you yourself might never have encountered. If you feel confident - write tutorials. If you write about programming, you should be up to date on the question to the maximum, use the appropriate terminology, be able to correctly answer the question posed on the topic. If you write on English-language sites - this is also a great opportunity to pump your knowledge of English.
9. Learn Low Level Programming
Learning about low-level programming is useful for a better understanding of machine performance. Read about C , maybe master assembler . Find out how the computer executes the program, and how the operating system works (at a high level, at least). If you want to know the serious things about low-level programming, then read books on computer organization, operating systems, embedded systems, driver development, etc.
hx0 tells you:
If you want to learn assembler and learn about building operating systems, consider the VictoriaOS source code , try writing some simple programs like echo for it.
SaveTheRbtz shared an interesting link:
I think it's worth mentioning MIT's OS:
+ wonderful pdfs are attached to it
10. Doesn't work? Do not chase for help right away! Think for yourself!
So, you have a problem in the code: it does not work, or it does not work as it should. You want to solve it as quickly as possible. What are you doing? Write directly to the forum, in QA, or just a friend. Now, never do that . It is better to spend time trying to fix the error yourself. Take paper, pencil and write down the scheme of the algorithm, check with the code. Didn’t work? Relax, go for a walk, refresh your brain, try to figure it out again. Are you already an hour or two (the time depends on the size of the problem) suffer with this piece of code? Beat Google in search of a solution? So be it, seek help. In any case, try to solve the problem with your brains. You will spend time, but add skills.
PS:In some points there are links to good books, blogs, sites. If you have something to supplement the link list (preferably Russian resources, books) - write to the PM, I will definitely add it.