Lately for a few different reasons I have been working on learning python. A few years ago I spent some time going over the basics and wrote a few scripts but I never spent much time with it. This time around I have spent more time with it, especially learning the ins and out of Tkinter, which is the standard GUI library for python. First I wanted to give my general impression of python.
To give an analogy I will compare different programming languages to different types of people. Programming in C is like dealing with a very intelligent, but casual, math professor who is in every way a normal person except that he constantly keeps having you solve some of the weirdest and most esoteric problems anyone can find, and you can't help but wonder how this applies to the real world. Programming in C++ is the same way except the math professor is the chair of the department, and he wrote the book. Of course this means that FORTRAN is that elderly professor in the department that has been teaching since before the current set of associate professors were born.
Programming in Matlab is like having a very intelligent roommate that can fix just about any electronic device, except he can't cook pasta without ruining it. In other words, he is great at his one thing, beyond that, go and find someone else.
Programming in python is like dealing with a Chinese online gamer with ADD.
I think that Chinese is an apt way of describing python. Just as with Chinese where there are thousands of "basic" characters in the language that can be modified and combined in unique ways to give new or additional meanings to the language. In python it is not uncommon to come across a statement like this: "With this function there are 140 different modes that can be used." (I actually read that in some online documentation.)
Just as with Chinese, in python there are thousands of "basic" commands, or even just hundreds of "standard" libraries, and all of these can be combined and/or modified by many different modes and functions that can produce very unique results. There are so many different options that I would estimate that it would take about a year to become proficient in the "basics" of python. The reason why I said that python is like a Chinese gamer with ADD is because even though the documentation for python is very extensive, it always seems incomplete. While learning python I have come across a number of online databases that seem very promising at first, but ultimately end with something like "To be updated later!" (Contrast that with the API for C++ in Windows which has every single option and command documented three times across three different sites in excruciating detail, and those are just the sites maintained by Microsoft. Granted that C++ has been around longer and the Windows API is used more, but still...) If I don't run into the "to be updated later" problem then it is almost always, "There are 140 different modes for this function, and we will talk about the 7 most common ones, and don't even think about learning about the other 133 other potentially useful modes for this function, of which you will most likely really want to use 10 or 12 of them, but we won't talk about all the useful stuff here because nothing can ever be complete in any documentation for python. MWAHAHAHAHAHA!!!"
So if python is like Chinese, then C is like learning English. There are at most 100 useful characters in the English language, but from all those simple characters we can build the full range of literary thought. It just takes more characters to build an equivalent thought. For example, I wrote a simple GUI in C++ that even unfinished was several thousand lines long, spread over 5 different files. I wrote the equivalent GUI in python and it took 100 lines and one file. Even though my python script was shorter and more visually pleasing, programming in C++ felt like I was creating something epic, personal and with infinite variety. Programming in python felt like dealing with an annoying Chinese gamer who couldn't hold a coherent conversation.
In the future I definitely plan on using python for somethings, because despite the ADD aspect, it is very useful. It is good at doing in simple front end stuff that people have to deal with frequently, but don't need to get into the blood and guts of it. For everything else I prefer C or C++, and Matlab for all my data processing. I intend to use python to quickly and seamlessly integrate many different C programs and associated output, but not for any other high end stuff that requires real programming. Using python for anything else would drive me nuts.
Python does have a slightly different flow to it than most other programming languages, and it takes some getting used to, but once the quirks are learned it gets better.