For today, I decided to write a “softer” post about my learning process. (I did not abandon coding, but I slowed down a bit, because life (spending half a day in hospital is no fun) and because of preparation for the most important holiday of the year. I did tinker a bit, though – for instance, I switched from lines to paths, as promised. I also started working on horizontal layout, though it is a tad trickier than I thought. Expect a short post on that soon after Easter!) Quite a few other people decided to learn about Android, too, so it might make some sense to share some learning materials.
First of all, I didn’t actually buy any book. I guess I considered it a bit risky: books on CS aren’t cheap, especially English ones, and I’m really quite afraid of Polish translations (I know, that’s sad, but I once bought a Polish translation from one of the major publishers, and it wasn’t worth to save these few zlotys not buying the original… Lesson learned!).
I started with Android Programming Succintly by Ryan Hodson. It did exactly what it said on the tin: it was really short. It’s not the best exposition I can imagine, but overall I liked it. I read it twice, with about a year’s break in-between – the second time was after I dipped my toes in Android coding, and it was then when I saw many shortcomings of the book, but it’s still a good bang for the buck (and let me make it clear: it would be even if it weren’t free).
Later, I watched Marko Gargenta’s course on YouTube (now that I searched for a link, it turns out the guy is quite prolific. Here’s the one I watched.) It’s about 20 hours long (so it took me about three months’ worth of breakfasts to watch), and I personally divide it into two halves: the good one and the boring one. It’s probably my fault; during the latter half I didn’t pay attention very well. Also, I didn’t actually do anything (like, say, coding?) – I only watched it. It seems I forgot my student times, when I hated lectures with a passion, and skipped most of them. (Usually, the lecturer either talked too fast, and it was a waste of time for me – I had to mindlessly copy those funny little drawings (like Greek letters) from the blackboard to my notes and then decipher them at home anyway, or it was too slow, and I was bored to death – also a waste of time. A lose-lose situation.) All in all, Mr. Gargenta is a nice guy, and he knows a lot about Android, and he is a good teacher, but I almost always prefer written sources to video lectures (especially that they are greppable!). BTW, one exception is Abelson and Sussman’s SICP lecture, which I highly recommend (and by this I mean, you must watch it – at least, say, two thirds of the whole thing!).
Some time earlier, I downloaded a free (older) edition of Bruce Eckel’s Thinking in Java. A bit too verbose for me, but I’m coming back to it soon. Surprisingly, I didn’t like the official Java tutorials (Google’s Android tutorials are a bit better, though still not ideal) – I just use the official docs (of both Java and Android), and of course, googling programming questions more often than not leads me to StackOverflow.
And that’s it as far as the sources I use go. I didn’t read anything special on OOP – that stuff (I mean, the basic concepts) I learned at high school from those yellow books on Turbo Whatever, whose author will remain unnamed.
I’m now thinking that learning a new programming language is very similar to learning a new natural language. First, you have to practise a lot. Then, it may be a good idea to practise something (like, saying @Override
all the time, just because this is what the natives do) and only later learn what it means: sometimes it’s good to believe the teacher that this will be understood later, for now just do what I say. (I guess that this may spread the cognitive load over time instead of bombing with information at the very beginning, which may be a good thing. Note: the number of occurrences of the word “may” in this paragraph may mean that I hypothesize about something I’m very unsure of.)