For a while I have been thinking about learning a dynamic programming language. These are the best days to be a young fella with time on hand. Computing power has become cheap and you no longer have to target one or two OSes from giant monopolies. Heck even Macs are cheaper. And right out the box these machines (Macs) come with everything installed for creating awesome software solutions. If not, whatever you need is just a repository away on GitHub.
My passion is Healthcare IT. I am always on the lookout for good EMRs and Hospital Management Systems that may be implemented for use in 3rd World countries. Once you bring in the restriction of cost, you are pretty much cornered into looking for systems built using free open source solutions. And, most of these are developed in software ecosystems I have not extensively worked in. When I discovered OpenMRS, I was thrilled by the features it offered and, the fact that it was actively being developed and used in African countries was even more reason to gravitate toward it. But. There’s always a but. OpenMRS is built in Java. Although I am not planning on monkeying with the code daily, it helps to be able to roll up your sleeves and just start debugging. The entire ecosystem did not feel like home. The Java ecosystem has matured so much its just wasn’t inviting. Don’t get me wrong. All of this is based on pure gut. I have nothing against Java. But I don’t like it that Oracle now owns Java. Then I discovered GnuHealth. An open source Hospital Management System developed in Python.
Ruby is very popular. It’s a dynamic language. Has matured enough for CodingHorror to pick it up for his next big thing called Discourse. I have the Ruby pickaxe book. My friend Lucid coder raves about it too. But I still wasn’t sure because there are not EMRs or HIS built on Ruby.
That brings me back to Python. I have been paying a little attention to Python but never seriously. It was time. Having settled on that, next up was to figure out where to begin. Google search threw up several resources. Mainly pointing to Learn Python the Hard Way. This might be the best way to master Python but it certainly will take a while to complete. Then I signed up for Codeacademy. This is good but a little elementary and slow paced for my needs.
I realized that my needs are different from the needs of someone wanting to learn a new programming language. Most tutorials target novices. People who have no programming background. But I want to learn how to develop software solutions with a new programming language. Although getting a good grip on fundamentals is paramount, I don’t need to start at learning what variables are, what for loops are or what ifs are. If you do not have a programming background Codeacademy works great.
As if on cue, the awesome folks at CodeMonk released PythonMonk. I have been “following” the maturity of RubyMonk, although I had not spent time experiencing it. It was like everything was aligning in the heavens. My discovery of GnuHealth. Deciding Python is what I want to learn and the release of PythonMonk.
I signed up and completed the lessons and problems in 2 days.
If I have to sum up the experience of PythonMonk in one phrase, “Mind Blowing” is what I would use.
And here is why.
The lessons are simple with just enough concepts targeting both novices and experienced programmers. People with no background can comprehend the concepts but there is enough intrigue for experienced programmers to relate to learned concepts. The problems presented at the end of each concept build upon what has been learned but don’t let you blindly bang out code. You have to stop and think, no matter how simple the problem is. This, in my opinion, is the biggest differentiation of PythonMonk compared with other tutorials. Anand has done an extremely awesome (I know I cant stop gushing) job putting together these lessons. Monk suits perfectly. Most tutorials present problems which can be completed using only the concepts presented earlier. You can waltz through them. Not here. Not on PythonMonk.
The last problem of sorting a list by file name extensions is interesting. This problem is what led to my epiphany. The solution is pretty simple. However, it cannot be completed purely by picking up the concepts presented. You have to venture beyond, on your own, learn a bit more and then solve it. The solution needs an extra concept that is not directly presented in any of the lessons. But if you are the curious type, then you would have learned it on your own building upon the lessons presented and arrived at the simple solution. This is the power of PythonMonk.
I haven’t become a Python expert after completing the lessons on PythonMonk but, these lessons have filled me with enough intrigue and passion to continue my education and have armed me with enough concepts to dig further.
Hats off to you guys at CodeMonk. Thanks for PythonMonk and keep up the awesomeness.