I have been learning a new language lately, which has given me cause to consider the needs of a self directed learner:
- Textbooks. There’s a plethora of material from publishers such as O’Reilly, and Packt. There is also freely available material at sites such as MIT OpenCourseWare.
- Feedback. I struggle with feedback. The Stack Exchange network covers this, but not in every situation. I may discuss this further in another blog entry.
- Tutorials. No problems here; the internet is awash with tutorials on every conceivable subject.
- Practice. Now, practice…
I can’t put it any better than Dave Thomas on his Code Kata site:
How do you get to be a great musician? It helps to know the theory, and to understand the mechanics of your instrument. It helps to have talent. But ultimately, greatness comes from practicing; applying the theory over and over again, using feedback to get better every time.
A few sites provide code practice, some of them are less beginner-oriented than others though. I like the idea of writing coding exercises of my own someday. Until then, here are some links to sites I have found:
- Good article discussing all things code kata – Coding Horror.
- Code Kata – Problems on this site are more in-depth and considered. Probably more for intermediate level learners.
- Code Wars – A very interactive, ‘gamified’ site, with feedback. Requires login (can use your Github login if you have one). This site looks promising…
UPDATE! – I’ve now been using the CodeWars site for a while, and I like it. If you fancy signing yourself up, please consider using this link (it just means that I’ll get some extra ‘Honor’ points)
- Adrian Neumann’s collection – A list of problems. Suitable for beginners upwards. (Also provides a lot of the links I have here)
- John Dalbey’s collection – More listed problems. From beginner upwards. Also: His Computer Science course projects.
- Rosetta Code Tasks – Large list! With solutions too.
- Project Euler – Very popular site. More for advanced programmers – heavy on maths. To quote – “Project Euler exists to encourage, challenge, and develop the skills and enjoyment of anyone with an interest in the fascinating world of mathematics.”
- Code Abbey – Problems, and fun artwork. Requires login to submit solution, but problems can be viewed without.
- Sphere online judge – To quote – “SPOJ – Sphere Online Judge – is a problemset [sic] archive, online judge and contest hosting service accepting solutions in many languages.” Apparently there are over 20,000 coding problems to solve.
- 99 Lisp problems.
- 99 Haskell Problems.
It’s not code kata, but I feel I should mention it. A lot of people will be familiar with code golf. Basically the idea is to solve a coding problem making the source code file as small as possible, i.e. solving the problem in as few lines of code as you can. Stack Exchange has a site dedicated to code golf. It’s a good idea, and a lot of fun, but I think it is much more suited to experienced programmers. It’s always said that beginner programmers need to learn good habits like documenting their code, and using good design patterns etc. This does not seem to gel well with code golf. Also, a lot of the answers to code golf problems are written in esoteric programming languages that are not really designed for mainstream programming.
I include code golf here because the problems themselves may be of interest, even if their mode of solution should not be pursued by the beginner.
Vim Golf is another thing. From the quote at the start of this entry – “It helps to know the theory, and to understand the mechanics of your instrument.” All programmers should understand their tools. Whilst lots of Java programmers will use IDEs such as Netbeans, or Eclipse, some will prefer Vim (myself) or Emacs. Vim golf is a useful site for improving one’s knowledge and speed with this.
I hope you find this useful. Leave a comment and let me know what you think.