I really wonder why no one mentions the official Python tutorial (http://docs.python.org/tutorial/). That is by far, the most concise and easiest to understand Python tutorial I have ever come across. For those who run after multiple sources and 400 pages books, give the official tutorial a read. You will not even feel at looking at another Python introductory book again. I speak from personal experience and based on the feedback from the people I recommended this -- they simply love it. As talk is cheap, don't listen to me and go ahead and give it the first few pages a read. You won't regret it.
This was true for me too, it was just called 'Learn Python In One Afternoon' and it was true.
There is need for other short begginer tutorials, simply because we are all different, but for majority of people official tutorial will really be the best place to start.
With the tutorial, you just need to read till Chapter 9 as the continuing chapters handle the stdlib which serves more of a reference once you know the language. Point being, you start writing Python with the official tutorial much earlier as compared to any introductory book because the tutorial teaches you what you _just_ what you need to know.
I find it telling that even though the entire article focuses on outlining a way to spend ~1 week to learn 'core python,' the only two comments so far focus on his choice of Python over Ruby, which is ~2-3 sentences in the entire article (and said in a very 'this is my opinion, ymmv' way).
Stop debating whether Ruby or Python is better and learn both. They're both great languages and they're super similar, so once you've used an in-depth technique like the one outlined in the article to learn one, you can learn the other super easily in a lot less time.
If you know both, you can make an informed decision and choose the right tool. Even if you're using Django to write your webapp, you'll be able to use Chef for configuration management. If you're about to embark on writing a new project, you can choose the language that has the most mature libraries for your problem domain.
You also won't have to rely on all of the apparently subjective things people say in comment threads about which language is better when choosing one.
While you're at stop saying how bad C/C++/Java/Scheme/PHP/javascript/haskell/C#/Cobol and learn those too (ok, maybe not Cobol).
Remember a few years ago when everyone was all hating on javascript? Now, all of sudden it's the awesome lingua franca of programmers and the language hasn't changed a bit. The perception changed because some smart people learned its strengths and wrote good libraries and runtimes based on those.
I think that Ruby vs Python is the most useless debate ever. They're similar enough in design and capabilities as to not matter which one picks, so arguing about it is moot. Just pick one and go with it, and if you want to learn another, try a lisp.
Great write-up, and nice to see another's experiences. Obviously these are all just tips and don't all have to be followed, so I do want to point out that I disagree with the idea of paying for an instructor–at least initially.
One of the nice things about the open-source community and having a great ecosystem around <insert language> is that you can hop on IRC (http://www.python.org/community/irc/) or find your way to the mailing lists and there will be at least a few very smart people overjoyed to help you learn–as long as you put in the initial effort, try the problem yourself first, and then ask for help (and be willing to listen to their advice).
Then, if you go through all of that and try really, really hard, be patient, ask for help, and still find yourself lost, maybe seeking an instructor is a good idea. I'm just saying to beginners that I wouldn't jump to that right away.
Overall, nice writeup, and thanks Mark for sharing your experiences and being willing to push your own boundaries and learn more! Yay for not falling into the abyss of managerial stagnation!
I took the UW course that Brian Dorsey taught, the professor helping the author out. He's a fantastic professor, the Think Python textbook is phenomenal, and I'm sure he'll do fine.
It's interesting what he said about choosing Python over Ruby. I made the same choice this past week. My friends and I are trying to start creating a web service off an idea we had months ago and while they were all talked into learning RoR, watching them struggle to even install Rails on their machines as well as horror stories about Ruby's constant version updates made me choose to learn Python instead. Zed Shaw's famous rant/article played a role in my decision too, and this article seems to support what Zed said a couple years ago about the community being "arrogant" and difficult.
(Now my friends and I are learning separate languages and planning to work on the same product, and I'm actually curious how/if this will resolve itself...)
The problem with Python community is, when comparing Python with Ruby, Pythonistas give almost no objective reasons to prefer Python but give many highly subjective (provoking) opinions, like the following:
1. Zen of Python. (since Ruby doesn't adhere to it, it's bad)
2. Python community is less arrogant compared to Ruby community. (painting millions of Ruby programmers with the same brush based on an IRC chat they had)
3. Google loves Python. (is that even a reason?)
4. Zed Shaw said so-and-so against Ruby/Rails which I want to believe/agree. (fan mentality)
Ruby and Python are very very close. When I initially chose Python to me it was a like a choice between chocolate ice cream and raspberry---one can't really critique something so subjective.
However as time has passed by and I have become competent at Python, I see some clear wins for Python where Ruby lags:
1. Machine Learning with PyML, et al. Python has some of the best tools for scientific programming by far.
2. Two order of magnitude improvements for numeric code using either:
- NumPy
- Cython
- PyPy
3. I prefer Cython to integrate C/C++ code to using any form of FFI.
Yes, the cultures are different but that rarely affects beginners.
Here are the reasons I recommend Python over Ruby:
* Python is easier to learn (not much syntax)
* Easier to read (explicit vs implicit)
* Has a bigger ecosystem (more packages/libraries)
* Taught at universities so it's easier to find good programmers to help
* More research/resources going into to its development (e.g. PyPy)
* Used by more websites/companies so its easier to find jobs
As a relative newb, who got his first real experience with AS3 (flash games), I've put some serious thought into this issue. I've seen that job chart come up a number of times, and it's true that python is bigger now. But clicking on relative gives a startlingly opposite picture:
For now, since I've gotten a programming job (yay!) at an iOS shop, I've gotta work on Obj. C. But when the time comes to really get good at a higher level language, it's hard to say which way I'll go.
I've also noticed that python listings on Indeed.com are often optional automation skills for sysadmin or build coordinator jobs rather than pure programming. These are valid jobs but hardly comparable to the dev jobs listed for other languages e.g. "Ruby Developer".
I tell people to learn both, and I fucking hate Ruby. It's the way of the industry right now that if you want to easily get a job, you know Ruby and Python. I also think Ruby is slowly going away and Python is taking its place, but we could debate that forever and a day.