For anyone interested in possibly writing an intro book (or some such material) in the future, here are a beginners thoughts on what makes this a good read:
(1) Heavy use of code examples, with accompanying explanations. For myself, at least, I learn a lot through examples, and seeing so many examples of functioning code was very beneficial. The explanations are easy to grasp, without dumbing the material down.
Moroever, the examples are integrated with the flow of the material presented (so never arbitrary) and many build on each other as the chapters progress.
(2) Functions are presented before lists.
(3) He takes time to provide clear, precise, and deep definitions and explanations of the concepts. There is a near-philosophical exactness (like the exactness of analytical philosophy) in the descriptions.
(4) Formatting and organization. There was never a time where I felt lost as to where I was, where I was going, or where prior material was. Skim the book yourself to see the myriad ways it formats and presents the material to make study easy on the reader.
(5) The number of exercises/problems at the end of each chapter.
Quick sidebar: if you're looking for an intermediate/advanced-level book with a similar style of pedagogy, I can't recommend highly enough The Python Cookbook by David Beazley. There are recipes in that book that I'm quite honestly unsure how I would function without. And to the credit of the author, every code example functions as a complete, minimal, working example: paste it into a live python3.8 REPL session and it "just works" (which is contrary to what you might expect of a book published in 2013). Also, it's one of a few books that has a puckish, hackery-sort of mentality and doesn't shy away from hot-button topics like metaprogramming, tampering with the GIL, mining program runtime data from previous stackframes, etc.
While it might not make the most sense for a beginner still learning the fundamentals to be taught lists before functions it's generally advantageous for introductory language books to focus on what the language excels at. But of course this is a fundamentals book and not every book needs to be general purpose!
Some examples of where this holds true: The Rust Programming Language introduces ownership concepts, a difficult topic even outside of Rust, immediately after the chapter on fundamental concepts like the data types, functions, and control flow. It could be argued that such a concept needs to be introduced early to understand the language more, although you see similar things with OOP being emphasised very early on in Java on the tutorials on the Sun/Oracle website. Any introduction to Perl will be very string processing heavy, and Ruby introductions, like Python, will introduce lists/splicing very early on. It's easier to appreciate as you pick up more languages.
1. Was Python your first programming language? / Was this book your first attempt at learning programming?
2. Why do you feel that presenting functions before lists was beneficial for you?
(2) This is not an easy question to answer, because it includes a lot of speculation, but I'll try. For me, at least, it was important to understand - in some rough sense - the nature of the concepts. Obviously, there is plenty more to the nature of the following basic concepts than what I provide, but here's the way I was perceiving the concepts:
Variables - being able to name and rename data (or code) and use different things you've named
Conditionals - run code under certain conditions
Loops - run the same code multiple times under certain conditions
Functions - reuse the same code at different points in time
Lists/Arrays - save code (or data) to later be used and/or manipulated
Looking back on this textbook, as well as the other material I read where lists/arrays were presented very early, I just think it was more natural to think about code reuse before thinking about storing stuff for use and manipulation.
Just my two cents.
Personally, I'd be inclined to teach basic types and control flow, e.g. loops and conditions, before teaching how to structure code so that you can start with something long and repetitive and understand the benefit of utilising functions. Having said that, both are fairly basic concepts so I don't think you'd lose much either way.
You're not kidding! Lists aren't until page 339 (of 654).
For years, I've read books and blogs as well as watched videos and learned some things, but, working through challenges is more motivating and forces me to produce. I rely on the same resources (books, blogs, videos), but through the lens of, "how can I accomplish X ?"
Not sure you will have a similar experience, but it works for me.
Not only did they plagiarize your work, but they did a really poor job of it too. The print is full of formatting issues. The code blocks are not properly indented, which is not only poor style but also broken given that python is white-space sensitive. And bizarrely enough the letter "q" is continuously in bold throughout the whole book. You can easily verify this from the pictures by the reviewers. I don't actually own a copy of the book myself.
To make matters worse (or better?), they only decided to include the first four chapters, ending at "Conditional Execution". Yes, the plagiarized book claims to be a guide "from beginner to expert", yet it didn't reach the chapters on loops and functions!
If you read the reviews, you'll quickly notice that it's full of fake five-star reviews with very vague sentences, some of which don't even make sense. You'll also (now) see a lot of real one-star review, which means that quite a number of people have fallen for this scam.
Surprisingly, one of the fake reviewers even got in Amazon's top 100 reviewer list. Check the profile of "Kip Krenz" , who is currently at rank #53. Somehow he managed to review two to four books on a near daily basis for maybe a year or more, mostly five-stars (the rest are four-stars) and full of generic sentences. The books reviewed are most likely "fake" as well. They often fall under one of the following: a beginner book, a self-help book, a cookbook, a trading book, or a book on one of the latest fads.
This book is unfortunately just one of the many fake books (not the jazzy kind) that have proliferated on Amazon. If you look at the other recommendations, you'll probably find another one of these books (Python seems to be one of those profitable topics).
A common technique used by these books is to put themselves under some niche category in order to get a high rank. For example, this book categorized itself under "Microsoft C & C++ Windows Programming" , and is currently at #9 there (it used to be #1, but thankfully the real reviews probably dragged it down). For a more peculiar example of this, take a look at what's #1 under "Windows XP Guides" .
Sorry for going on a tangent with such a long wall of text. I spent a night "investigating" this whole thing a few weeks ago, and after seeing this post, thought that it would be best to spread awareness of the issue here.
In the book's front matter I grant permission for anyone to use the book freely and to make as many copies as they like as long as the original copyright notice remains intact. It started out as my small way of helping my students who are facing escalating higher education costs. Over the years, I've received feedback from other instructors at both the university and high school level who appreciate having this option available for their students.
It might be worth calling up Amazon customer service. They are usually very helpful and might be able to route you to the correct person.
It's perplexing why someone would copy only the first 4 chapters --- and do it poorly --- but I suppose it's enough to sell; maybe they're not as rational as me, since if I were to plagiarize and sell books, a search/replace of the author's name would've been sufficient. No doubt whoever is doing this is expending more effort for an inferior product.
Perhaps I went through the wrong door, but runestone heaving me straight into probability mathematics and other seemingly saturated problems seemed an unwelcoming intro. I perceived it as a pretty juicy carrot on a long, heavy stick and bailed out.