Learn Python 3 the Hard Way
blog.learncodethehardway.com
blog.learncodethehardway.com
He writes condescending articles that confuse and mislead newcomers to the language. From his redaction:
> In the previous version I trolled people by pointing out that, if what the Python project says is true and it would have been "impossible" to support Python 2, then they broke it and Python 3 is not turing complete. Obviously Python 3 is turing complete, but Python project members frequently claim something this basic is "impossible" soooooooooooo alright. I even had a note after the gag saying it was a gag, but everyone is too stupid to read that note even when they do elaborate responses to my writing.
Check out the past HN discussion on his article, "The Case Against Python 3": https://news.ycombinator.com/item?id=13019819
The book apparently said that Python 3 sucks, that people shouldn't learn it, and that "if someone tells you to use Python 3, tell them you'll use it when all their code is in Python 3", which is just absurd. It was very harmful, because Python 3 is definitely where the community is, and 2's days are numbered.
That part may have been true back when it was written, but it's definitely not true today, and all it does is fan the flames of discord.
It's all good. We all agree to program with Python 3 and educate beginners on Python 3.
Just forget the past and move on - Zed is on the Python 3 boat now and that's all that matters.
Indeed it makes a great deal of sense to not just end the conflict but go the other way - the Python community should simply ignore the past and do everything it can to welcome and include and bring Zed into the Python 3 community, to the extent that he wants that.
I've recommended LPTHW to several new programmers, including one who I think bought the videos and really liked it.
Nonetheless, his strange dislike for python3 and continuing this flame war is not helping anyone, least of all Zed.
I'm amazed that people still don't read Zed Shaw objectively in 2017. Zed is not a friend of any community except his own, including appeals to violence, and he has repeatedly shown that. I think it's extremely important to keep in mind the person being dealt with here and his history, because he absolutely does create toxic drama within communities (including in this thread, right now).
[0]: http://harmful.cat-v.org/software/ruby/rails/is-a-ghetto
Maybe Zed burns himself over Python3. Maybe not. It doesn't really matter because he's gonna keep doing what he does, both good and bad. He's as human as the rest of us.
Definitely not. https://zedshaw.com/2016/11/24/the-end-of-coder-influence/
And even this one, when Zed Shaw is talking peace and bridge building, he still echoes the position that Python core developers are of low character. His retelling of history is ungenerous. How do you extend an olive branch like that?
Amazing, what an achievement!
> Before my books there was this general belief in computing that only “special” people could learn to code, and that it was pointless to teach anyone who didn’t start when they were 12. ... Before I wrote Learn Python The Hard Way programming education books either patronizingly assumed you were a child, or assumed you’d already been programming for years.
Hmm, I don't think this book was as revolutionary as described, but that doesn't take anything away from how good Learn Python the Hard Way is.
> Then I recently found out that members of the Python Software Foundation (PSF) have been actively trying to have my book removed from other books and websites. I received several chats logs from trusted associates that show PSF members contacting authors and demanding that they stop referencing my books. Believe it or not, it’s because I said Python 3’s strings suck or that Python 3 sucks. I’m not kidding. They are so petty that they are actively trying to destroy the one book that is potentially helping the most people become Python programmers simply because…I don’t like how they implemented Python 3.
WWWWHHHHAAAATTTT???!! If this is true, the Python Software Foundation should be ashamed.
I hope you carry on with Python!
That is, programs from general purpose programming languages can be re-written in any other Turing complete language. Not to be confused with the Zed Shaw "joke" that a programming language is not Turing complete if its interpreter does not run source code written in another Turing complete language, completely unmodified.
It's true and seriously misleading.
He's edited it a lot since (and even toned down its title), but the blog post he wrote against Python 3 was a FUD-filled incoherent piece.
You can absolutely expect members of the Python community to be disappointed. A lot of those members are people who learned from Shaw and to see him write a piece like that is heartbreaking.
The people on /r/Python who called for the removal of links to his resources (because yeah, it's not the PSF actively seeking out websites, it's the websites' members wanting him gone), those people were not "out for vengeance", they were not willing to link to material which actively campaigned against where the community was moving to.
He may be trying to position himself as one, but Zed Shaw was not a voice of reason who would point out the Python 3 flaws which nobody else dared criticize. Plenty of others criticized Python 3. Zed was actually trying to harm the move to it.
Congrats on the book, and I'm glad he changed his mind, but I have no sympathy to his complaints there.
PS: This is what happened to processing durations when I upgraded our Hearthstone log parsing pipeline from Python 2.7 to Python 3.6 after Amazon finally made the latter available on AWS Lambda: https://twitter.com/Adys/status/878985322436206592
Not that the release date has much to do with the benchmark, mind you...
This is exactly right, Jerome. I remember Armin being quite vocal against Python 3, but Zed was actively harmful, telling people to stay with 2 even though it was abundantly clear that 2 would not be supported by anyone any more.
With Zed can come... drama. At least that's the way it used to be. I would take what he says with a grain of salt.
[1] On a subject that I could reasonably be called an expert on. No, I will not elaborate for reasons of pseudonymity. Take that for what it's worth.
[2] As if we even had objective criteria for judging language design at this point in time.
To be honest, I am a bit surprised that he adapted the book to Python 3 if he is so strongly against it.
[0]: https://web.archive.org/web/20161123042252/https://learnpyth...
[1]: https://eev.ee/blog/2016/11/23/a-rebuttal-for-python-3/
A cynic would think that his criticism was an elaborate marketing ploy to drive up sales of the eventual Python 3 edition of the book which he had planned all along...
Something worth knowing about the PSF is that there are multiple groups to which this term might (correctly or incorrectly) be applied by someone who wasn't familiar with its workings.
Most importantly, literally anyone on earth can become a "member" (in the technical bylaws-of-the-foundation sense) for free by filling out an online form.
The question here is whether someone who is legally authorized to represent and act on behalf of the PSF did something in their capacity as a representative/official of the PSF. Which really is something only the Board of Directors, or someone they designate, can do. The records of the Board's meetings and actions are public:
https://www.python.org/psf/records/board/
So if you want to verify this claim it ought to be easy to find in there.
(disclaimer: I am a Fellow of the PSF, which is a sort of permanent voting member, but not board membership. I am on the Board of Directors of the Django Software Foundation, though, so I have some experience with how actions can be misinterpreted or misrepresented...)
I attended pycon a couple of years ago and was still new to python. I had (tried to) read "Learn Python the Hard Way" as well. I attended many of the "newbie to python" tutorials while at the conference and many of them had this book as a suggested read. I promptly informed the tutorial leaders how the latest version instructed people to never install python 3 and spoke ill of it as if ignored, python3 would just go away (note the tutorial classes where all in python 3). Most people seemed shocked by this but they all removed the recommendation for the book.
Flame me all you, but I was trying to jump ship from Perl (which (un)fortunately didn't really work as years later I still make most of my money from Perl stacks). And the last thing I wanted to jump from was one language that had a giant rift in the community (perl5/perl6) to a "newer" "better" community that had the same rift in it as well. Thankfully people seemed to come to their senses over the last couple of years and have started to throw out their python 2 code.
He played an insignificant parts compared to the large incompetence shown by the team that decided Python's 3 feature set and handled the transition.
In general, whoever decided that such few features (in the initial versions) and such lacklustre fixes should be enough to make people adopt an incompatible version of the language.
They still did it better than the Perl people, so there's that.
It's Python 3.3 where migration started being a serious matter of discussion, and 3.4 added more 2.7 syntax backports to help the transition. And the community did follow on that. 3.3 and 3.4 are where many 2.x libraries added Python 3 compatibility.
Calling the Python core devs incompetent for something where instances of prior art can be counted on the digits of one hand that may have lost a few fingers is a bit rich.
Zed Shaw educates ALOT of beginners about Python. Everyone should be both glad and supportive that his education is now in the Python 3 world.
Time for everyone to leave the angst of Python 2 behind.
I can no longer think of any prominent industry figure who stands openly against Python 3. With no well known industry figures standing openly against Python 3, I think the long and painful transition can now be said to be complete. Finished. Certainly much Python 2 code still exists but conceptually Python 2 is now legacy.
Thanks to Zed for his work on the Python 3 book.
Beginners do not care about Python versions. They're trying to figure out why their string won't print, running into bugs like: 'I'm printing a string' and being _stumped_. These people are not going to be contributing to Python3 migration, they're just not there yet.
And if people are running production grade applications are listening to Zed? Well, good luck to 'em.
That entirely depends on the quality of the instruction.
Last time this came around, he was willfully misrepresenting the difference between "str" and "bytes" specifically to gripe about how used to python 2's broken implementation he was. That's not helping.
Opinions are opinions. This isn't about opinions; it's about behavior.
AFAICT, this is not only not all that true (teaching adults to code, and the belief that they could be successful, was not a novel when LPTHW was introduced, though some people certainly thought the way Shaw describes; I mean, schools have been taking people without programming backgrounds as CS majors forever, and there have been adult-targeted self-learning introductory resources, books and otherwise, for programming continuously since the 1980s, probably earlier), but LPTHW has not been associated with any substantial change in general attitudes on this point. While it wasn't then and isn't now then general attitude, people still—and AFAICT in roughly similar proportions—buy into the idea of the “from childhood” coder being inherently superior.
However, I generally prefer learning concepts first, with practical application later, so it could have just been a personal preference.
Now who's being petty? Sounds like you are retconning in a story about exclusively-commercial-book-titles-bring-maximum-community-benefit.
O'Reilly and other publishers have offered paper editions of freely-distributable books.
And God forbid anybody calls the Python 2 to 3 transition (which took 7 years and is still underway -- not even 50% done) for the actual mess it has been.
Doesn't seem that bad to me. Py3k was released and folks waited for the hobbyists to iron out the quirks. A few years later the libraries started supporting it. A few years later the forward-thinking companies have started switching. That's a normal software upgrade timeline. Heck, the other day I found out a new client is still running Windows 97.
> At that point the decision became much clearer. If I charge for my Python books I can help even more people and also give people real jobs working for me.
He doesn't want to "send" any more people into the community, so he now charges for his books.
What exactly is the connection there? How does charging for the books change anything? Does he assume charging for them sends less people to the community than before? If that's his goal, why doesn't he stop publishing his books completely?
Also I really like his abrasive opinion writing style. It's very effective at getting people talking even if it is rather crude.
But seeing Zed's acerbity applied to a non-technical narrative makes it all just seems petty and toxic. I'm not going to wait for this to "play out" as some suggest. He's embedding this anti-establishment dribble into an introductory learning text, as he did for the first and I'm fed up of meeting developers who parrot his flawed feelings on the inadequacies of Python 3.
He says he's helped 12 million people with LPTHWv2... but in this day and age, taking a idealistic stand against Python 3 makes you a worse developer and would certainly count against you I were interviewing you. Professionally speaking, there's just too much to be had from Python 3.5+ to avoid it.
I won't recommend LPTHW again.
Just my two cents.
I was going to say that they're free (or pay what you want), but that's apparently no longer the case (or won't be as of tomorrow). I support the author in this decision, but I guess you have 12 hours to skim the book and see if it's worthwhile and then buy it if you like what you see.
Looks like Effective Python should be next on my reading list!
(Yes, it might well be possible to coerce Microsoft Word into emitting plain text. The book does not assume its readers know that.)
From what I recall, the author is very opinionated in that he does things one way and expects readers to follow along exactly. The readership is at a level where this is a good thing: If you introduce options, people who know absolutely nothing get paralyzed by them, because they have no basis for making those kinds of decisions yet. It would be better if they flipped a coin, most likely, but most people seem reluctant to do that, because utter beginners are irrationally afraid of damaging things.
So the author has made all the decisions for them, and can get them to the point where they know enough to disagree.
https://zedshaw.com/2015/06/16/early-vs-beginning-coders/
Quotes:
> When I was working on Learn Python The Hard Way I was frustrated by how often I’d have to explain that the book is for a total beginner.
[snip]
> What I propose is we have beginning coders and early coders. I got this idea from a painting teacher who kept referring to students who had never painted as “beginners”, but those who had painted for about one class as “early”. The reasoning is that you need a way to differentiate people who don’t know a damn thing vs. people who know the basics but just simply suck at them. Teaching a beginner is very different from teaching someone who’s already been doing it for a bit and just needs more training.
> For example, a beginning coder doesn’t know how to type the | (pipe) character. They don’t even know it’s called a “pipe”. I’m not joking about this. Professionals actually don’t believe me when I tell them this, but it’s true. Beginners have zero experience so simple things like making a text file, opening terminal, and even the idea that you can type words at a computer and it will do stuff, are simply unknown to them. To teach a beginner effectively requires this level of information slowly fed to them in reasonable chunks.
Then I started with Python 3 and was relieved to find named .format() parameters and bytes (vs. str). This is just an example - Python 3 is a very positive evolution.
(and yes, I read the arguments of the other (mistaken :)) group who advocates Python 2)
Just own it. That said, I wish you had given more notice than a day.
Because Zed Shaw often writes things that are both (deliberately, AFAICT) inflammatory and about something which has a large interested community.