I started reading the e-book a few days ago, and as I usually do with other books as well, I skipped the Preface, anxious to get to the core of the matter. But I was also curious to see how the application works and spent a lot of time going through the code, then running the app and clicking all the buttons before really knowing what they were supposed to do. This way I found a little bug and later a temporarily fix for it. Looking at the code, without reading the accompanying explanations from the book, allowed me to get an uninfluenced first impression: well structured (good hierarchy of packages), self explanatory variables, methods, classes, and packages names, helpful comments throughout the code.
I got a general idea of the responsibilities of the classes, and even though the code is pretty complex, I could identify the repeating behavioural patterns or the intended functionality.
I was glad that I found something not working as expected, because, in trying to find the bug, I got involved in the details of the code, which in turn, allowed me to better understand the logic behind some classes and methods and the relations/collaborations between them. I switched from a passive observer to an active investigator (err.. something like that)
Then, when I continued reading the book I was pleasantly surprised to find that each class discussed in the book was accompanied by a description of its responsibilities and collaborations! This way I could easily verify my understanding of the code. Im not done reading yet, but with every page in the book the haze keeps dispersing and the contours of the app are becoming increasingly clear. From what Ive seen so far in the book I like that the main focus is put on
a. the boundaries of the application , domain logic and views
b. the process of planning, architecting the app, the steps described
c. responsibilities and collaborations of a classes
Because of that it is an almost framework-independent approach, which is a really good thing, especially in the light of today's rapid changes in our world of software development or technology in general.
My initial intention was to share my opinions first after reading the entire book. But yesterday, when I wanted to continue reading it, instead of going to chapter 5, I started from the beginning, absent mindedly flipping through pages, and...well.. no one saw me, but Im sure that the huge surprise made me look utterly funny when I stumbled upon the mention under Collaborations!
First of all, I want to thank you, Cliff! I know it wasnt easy to decide who to put on that list or rather who to omit. I dont think that what I did or said in here could be considered as a contribution at all. There are others whove contributed more substantially to the framework or the community, so what I did was infinitesimally small in comparison with their work. Since yesterday Im having mixed feelings of joy and a kind of guilt at the same time, because I think I didnt really deserve to be mentioned.
So, to correct the situation let me put it in another light: in an open source project like this everyone is part of the project. Every single answer, every demo, example, shared code, and/or utility is a contribution to the project.
Even every question asked on a forum, even if it has been asked before zillions of times, is a valuable resource for learning, or for identifying the weakness of a project, or for seeing a large variety of use cases, or just for keeping your mind alert and fresh, in a state that Id like to call Beginners Mind (keeping oneself free from preconceived ideas, open to dialog).
In this light, mentioning someone like me as a contributor is a very considerate and compassionate gesture, and it is a proof of fairness. But I want to take it rather symbolic than personal, meaning that I represent all the others users who thought their contributions were insignificant. In fact it is a matter of interweaved efforts/actions/nodes where the single nodes can weigh more or less, but without them there wouldnt be a net.
In other words:
- an open source project is a collaboration of many minds, more or less great, more or less perceptible
- contributing to an open source project in any form or way is rewarding, the more so when you dont expect it or when your actions werent driven by it
- the process of learning goes two ways: from the advanced users to the beginners and back
I could continue with my interpretations about open source projects, but Im aware of the fact that such a discourse sounds a little pathetic ;-)
So, Id better go back to talking about the bugs, of course only if you want me to and if this forum is the right place for it. As I said I found a solution, not sure yet if it is the right one, because Im still in the process of understanding the code and its overall logic and maybe later Ill see another way to achieve the same. Let me know if you want to see it (its a gist on github)
Cheers,
Ondina