I have created a “Resources” page. I’ll be adding everything I produce on that page. For now there is only this article I have written as an assignment. I also have a tagging plugin for jquery that I am planning to add. TagComplete needs a lot more work to be usable. I’ll write up a readme to briefly explain how to use it. It’s quite easy actually but I want to make it really usable: Include a js file, call a function when DOM is ready and nothing more, no cryptic config options, etc. It also has a Django widget that can be used without much effort. If you’d like to figure it out yourself, be my guest, the code is on github. Or you can poke me to write that readme.
Hello, I am Fırat.
I am a CS student from Turkey. I can't stop learning new things every day and rant about them!


Why I Like Python Community
My first “5 Reasons Why…” post. Yay!
All the production quality projects I have done were web applications. The two major projects I have worked on are pillinetwork + Sosyomat[1] and Markafoni[2]. Markafoni is written using Python and Django while the others were implemented using Ruby On Rails. I worked on every aspect from DB tuning to writing front end stuff in both projects. One thing I have to say is that, when I was working on pillinetwork I wasn’t an experienced programmer. If I was doing the same project from scratch today, I would probably do a lot of different things. I was faced with original problems (which I claimed to be part of the job I wanted to work at) but failed to come up with original solutions. I was unmotivated and very unproductive which didn’t help with thinking out of the box. I was trapped with generic solutions to then-original scaling problems. This was five years ago (I was an early adopter of RoR, back in 2005). A lot of things changed since back then. One significant change is the fact that I am a Computer Science student now. This guy changed the way I think about and imagine computer programming.
I still love Ruby and I use it in my work everyday. However, I recently started enjoying Python a lot more. I know it’s enough with the background and all but let me tell you one more thing before I go ahead and tell you why I love the Python community: I don’t like it when people talk about their favorite language, tool or technology as if it is the only thing in the universe of computation. From time to time I find myself discussing these issues with people who introduce themselves as Pythonists, Rubyists or <some programming language or tool>ists. I understand the idea of being an expert in a programming language but I don’t understand why people think that there is no alternative to what they use.
I know some self-proclaimed expert programmers who don’t know any terminology for abstracting common techniques which helps communicating ideas between programmers. New languages bring new paradigms and they enlighten us. A smart guy told me once: “Java is great because, simply, it helps people earn a living”. It may help you keep your job for now, but how long will it keep up? Anyway, back to my reasons:
1. PEPs
The quality of these documents are, as Mr. Spock would say, fascinating. Everything that goes into Python (and comes out of it) is critically and devoutly analyzed. This one for example: It discusses the reasons for migrating to a DVCS [3] from Subversion. I like the detail and work put into it. This article is a very good source for deciding which DVCS to pick for your project even if you are not a Python user. Maybe my recent, excessive exposure to academic papers are the reason I like these, but I think it’s because of how good everything is written. Being able to express your ideas (regarding programming) clearly is a good sign that they will work. These articles assure me that the future of Python is safe (we love that, right?) and all the theories that was put into an amazing language during the last 10 years (Correct me if I am wrong here but the first PEP is dated 2000) are there for me to study.
2. Django
I have never contributed anything solid to any open-source software. I use them in every part of my life: at work, at school and for personal things. I also join developer mailing lists to learn from the successful projects I am using. This one is incredible. I am amazed by the open-mindedness of the core developers. I was trying to come up with a proposal for contributing to Django at Google Summer of Code 2010. I didn’t get accepted because I have never sent an application. It was just the wrong time and I had other things to deal with. But I read every single application and responses from developers. The amount and quality of feedback, especially from Russel-Keith Magee, is absolutely brilliant. Alex Gaynor is one person whom I met on django-developers and envy the most. He is very young, talented and very active in the Python world. Following his blog and tweets, I realized that what I saw in django-developers is quite common in the entire Python community. After all, Django is Python.
3. Minimalism
The famous Zen of Python attracts me like the song of a siren. Especially this one:
There should be one-- and preferably only one --obvious way to do it.I believe that this results in clean, easy to read and easy to remember APIs and architectures. It feels a lot more elegant and precise and I love that. In Ruby for example, everything is an object and objects have utility methods that you call rather than kernel-space utility functions that accept objects. One popular example is the “len” function:
[].size == [].length == 0
In Python however, it is used as:
len([])Many argue that length is a property of an object and it should be a method of every “measurable” object. I like the Python approach better: Strip as much as possible away from the object and implement private methods that decide how the object responds to utility functions. Basically, you can do whatever you do in Ruby but it is a lot more structured and a bit more limited. But hey, less is more, right?
4. Precision
When you import things in Python, you can be as precise as you want. You can import specific identifiers/variables/functions (and only them, the ones that you didn’t declare will not be imported as long as you don’t “
import *“) from a file/module. Python developers love namespaces and they provide means to use them as efficiently as possible. In many languages such as PHP, Ruby or Java, when you include/require/import a file, everything in that file is imported to the calling environment. This might not be a problem at first but as the projects get bigger and bigger it starts to get back at you. I love the fact that when I am reading any Python code and wonder what a variable’s source is, it is very easy to track back since it is almost always clear where it is imported from.5. Maturity
Python has been around for about 19 years. It has been heavily deployed in massive production applications. The fact that it has been one of the top players for such a long time is a sign that the development process for Python is great. The Python developers keep adding amazing features and state of the art algorithm implementations to the CPython interpreter and they still keep it extremely manageable and clean. Python is one of those projects that you can learn a lot from, simply by studying the source code and reading the archives for discussions regarding the history of development.
If I could have a single wish granted, I probably wouldn’t want to go back to 1991 and join the development when Python was first released but it would definitely be a choice I’d consider.
[1] pillinetwork (including Sosyomat) has 296594 members as of writing this article.
[2] Markafoni is a private shopping site that ships over 1000 items per day.
[3] DVCS stands for Distributed Version Control System (DVCS on Wikipedia)