> 1. Use just a simple editor like gedit, notepad+, or Textwrangler. NO vim! NO emacs!
> 2. Do not have them use git or other RCS tools. They're here to learn code, not git.
> 3. Make it work for Windows, OSX, and Linux if you can.
> 4. The install of your language should not involve tons of steps.
> 1. Your book should educate people, not indoctrinate them. If you find yourself talking constantly about how awesome your language is and how it will change their life, then you're not educating, you're just making another cult follower. Leave the decision of whether the language is good to the reader.
> 4. Lightly make fun of programmers and inoculate your student against religious wars over syntax, idioms, editors, tools, and anything else that gets in the way of them learning. Remember, you are writing this book for them, not your fellow coder friends.
This should be the mantra for everyone who writes a tutorial (which often land here on HN) or any other form of introduction into technologies. Way too often authors waste a huge chunk of their educational material on shoving their tools of choice down readers' throats. 'hey, you want to learn rails? ok, now buy a mac, install git, learn emacs, download my dotfiles...'.
TLDR: want to educate? be agnostic.
1. It's a structure problem, so you have to go back to organizing the concepts and how each chapter flows. Try changing the first lesson as a way to start rethinking this.
2. It's an audience problem, so you have to go figure out who the book is really for and then constantly try to write it for them. Try even changing who it's for and then see if that makes the book work for them.
This is good advice for Zed's LxTHW brand, because those books are geared toward learning one particular language at a time. But in some contexts having an integrated approach can be an advantage. Readers of the Ruby on Rails Tutorial often tell me that they didn't really "get" web development until they saw how Git, GitHub, Heroku, and Rails all fit together. That's because the goal of the book isn't to teach Rails; it's to teach web development with Rails. Unfortunately, this means that some readers are overwhelmed by all the detail (and I may someday make a product to better meet their needs), but for many readers seeing the whole picture is a revelation.
frankly speaking, whenever I drop into a tutorial and it begins with an introduction to github or vim, I leave the page. it's because it shows the author isn't focused on solving my problem which is I am not familiar with some specific technology, he prefers to advertise his favorite tools for some reason and lock me in his way of doing things. just show me what I'm looking for, I will figure out the rest myself if I need it.
You're missing the forest for the trees. While it's true that those particular technologies aren't necessary, professional-grade development does require version control, shareable repositories, and deployment. Git, GitHub, and Heroku are just the solutions I happen to use in the book.
Education's goal is to teach you something so that you can then go on without them, thus why they teach a wider range of topics within a subject.
Indoctrination's goal is to make you dependent on the educator, thus why they focus on only their version of the subject and squash differing opinions using propaganda tactics.
For example, you don't have to go back to your highschool math teacher to use Algebra or back to your grade school to read something. You are independent and may never set foot in your school ever again, but can still do these things.
If you teach someone that Python is the one true language and use propaganda to make them want to use it, then they'll be dependent on that language and the community in order to write code. Even simpler is if you only teach them git and github then you've indoctrinated them into always needing github to share code.
Bad kinds of education are like History classes that teach fairy tales like "George Washington never told a lie." These are indoctrination masquerading as education because they make the student dependent on the country for their identity.
The reason indoctrination like this is bad in programming though is because programming languages and tools die all the time, and when they do it destroys these people the indoctrinators have made dependent on the technologies. It also smacks of a con that's covering for shit technology that can't survive on its own merits.
Finally, finding a particular topic in the gray area between them does not disprove that there's a difference. Rational people don't think in binary, so this is a continuum where you could find some topics that require a bit of indoctrination, and some where it's the complete wrong approach. In my opinion, programming education only has indoctrination because that lets shitty technology hide behind propaganda.
Zed is specifically referring to this usage. You should never assume you are doing the Right Thing in programming, because you probably aren't, at best you're doing the "least wrong" thing for your situation.