Close

Killing Magic

I’m sitting with a friend who is an accomplished musician.  Record deals, multiple albums, and you’ve probably heard her songs on a TV show or commercial or two. She tells me that she doesn’t want to teach music because she’s afraid it would lose its magic.  There’s a mystical mystery about how she makes music and she’s afraid she’ll ruin that special quality if she has to figure out how she does it.  It won’t flow the same.

My response was something that I’ve believed my whole life:  “Magic just hides something’s true beauty.  It’s a con.  A trick that makes you love the magic rather than the real thing.  Once you actually learn how it really works, sure, the magic goes away, but then you get to fall in love with the beauty of the real thing. Real things are always simpler and more beautiful than the magic hiding them.”

Or something like that.  I probably actually sounded a lot less cool than that, but that was the idea.  I’ve found that magic just obfuscates and blurs what I’m really seeing.  Whether that magic is an accident of my perception of reality–or an actual sleight of hand by someone else–doesn’t matter.  What does matter is once I strip the magic away, and find the real simple principles hidden by the wizard, I see the real thing is better.

Of course sometimes I strip the magic away and find that the real thing is an ugly turd hiding in a golden box.  A lot of programming languages and technology are like this.  There’s all this bluster and flourish pushing a magical view of their benefits.  Then I dig a little and this magic simply hides a terrible design, poor implementation, and random warts.  It seems everyone in technology aspires to nothing more than creating enough of a code mannequin to hold up an invisible emperor’s gown.

One of the reasons people resent my opinions on technology is I have an ability to crush their fantastical magical views of technology.  It’s hard to be an Apple fan when there’s a guy pointing out that they frequently allow developers to invade their customer’s privacy, stole wages from employees, and make shitty  hardware that crashes and reboots if you don’t log in fast enough.  You can’t be enamored with Python if someone points out that its APIs are constantly asymmetrical and that Python 3 has a shitty UTF-8 strings implementation.

My mission in life has been to illuminate magic to expose the ugliness or beauty it hides because I believe magic enslaves people to others.  With magic you can convince them of almost anything, and even change the magic and they’ll keep following the wizard’s edicts.  Stripping the magic away gives people the freedom to choose what their reality will be, rather than rely on someone else to define it for them.

A key element of this mission is education.  I proved with my books that there really is no magic to learning to code.  The people who could do it weren’t special geniuses. Almost anyone could learn to do it given enough time and the right learning material.  Once it was clear that programmers aren’t special, it freed others from the magical aura surrounding programming and opened the practice up to a much wider range of people.

Education then becomes the practice of breaking magic to expose reality.  I study a topic and figure out how people are really doing it.  I find all the tricks they use, strip away the things that are just bluster and showmanship, find the lies they use to puff up their personas, and then teach the simplest real version of the topic.  This then opens the topic to a much wider range of people who can now enjoy it and improve their own lives.

Many times the practitioners aren’t purposefully trying to hide what they do because they don’t even know how they do it.  Most practitioners simply cargo cult a set of random practices they’re sure are the secret sauce.  Usually these secret practices are nothing more than extraneous rituals getting in the way of the real task at hand.  This educational acetone sometimes embarrasses these practitioners since nobody wants to be seen as believing in pointless rituals and magic.  That’s fine, but really they should be happy to find another path to what they love.  One that’s not full of obfuscation and rituals that only serve to enslave them to a limited palette of skills.

 

Learn More Python Rough Draft Up

My move to Miami has pushed out the deadlines for most of my books by a month, so May is when the majority of the content for Learn Python 3 The Hard Way will drop in May.  I’m done with the editing round with my publisher so the PDF will drop later today.  I’m also toying with doing an ePub but I swear if one person using a janky Linux ePub reader complains about the meta-data being wrong before telling the project to fix their meta-data I’ll pull it down.  Life is too short to convince angry Linux ePub developers to fix their code.

I’m also going to try my future book writing process starting today.  I’ve wanted to incorporate chat into my book publishing process but haven’t really found a chat I liked.  The Gitter chat seems like it’d work pretty well so I’m going to try that on the rough draft of the Learn More Python The Hard Way book.  You just have to go to https://gitter.im/lcthw/more-python-help  from the top of the book and you’ll be able to chat with me and everyone else.

If this works out then future books will be released this way:

  1. I hack on the idea until I’ve got a rough draft going.
  2. I post the rough draft, and put a room for the book into the LCTHW Gitter.
  3. I’ll hang out in there while I work on the book, answer questions, and change the rough draft based on feedback.

My goal is to get earlier feedback from people on how my exercises work and also give people free access to early releases.

 

Help Wordnik Add One Million Words

I’m going to tell you about a secret weapon I’ve been using for years in my writing, song writing, and naming of things: Wordnik. I’ve used Wordnik to change up wording and come up with creative phrasing, browse words for interesting ones, and to follow ideas and explore concepts. What I do is start at a word I’m interested in or think might work for a concept, and then I follow all the various related words and this expands into even more conceptual ideas. What I like about Wordnik is the collaborative nature of it and how it seems to be a “modern OED”, being more of a description of how English is rather than a proscription of how it should be.

Wordnik acts as a kind of inspiration engine for me because it has so many relational features. From one word, such as allocate, I can see all of this:

  •  The definition from several sources.
  • Examples of the usage in the popular press.
  • Currently known etymologies, which is very important to me since I like using old weird words like “octothorpe” to mess with people.
  • Related words in every form you can think of, which is essential when you’re doing creative writing or naming something.
  • Images related to the word, which I’ve used in exploring painting ideas.
  • Hear official and user created pronunciations of the word.

So if you’re wondering how in the hell I come up with such awesome names for my projects, cram complex ideas into a tweet, and turn the phrase, then Wordnik is my main word tool.

One thing I do, almost every day, is something called object writing, and I use Wordnik’s “I always feel lucky” button to do that. I just roll over to there, click the button, and work for 10 minutes on that word. Today’s word is entropy and I’ll do a 10 minute piece of writing that explores all of my senses through that word, but Wordnik makes this even better because if I don’t like that word I use the Relate feature to find another word, or sometimes I’ll setup an extra level of difficulty where I use two related words.

If you want to improve your writing then start doing this every day. It takes 10 minutes and will dramatically change your writing.

One Million Words

Wordnik right now is trying to do an ambitious dictionary project where they want to add one million missing words to their online dictionary. The philosophy of Wordnik is to make the dictionary a description of what’s being used, not a proscription of what should be valid English. Uptight weirdos will yell at you that “Ain’t is not a word!” Well, those uptight assholes are wrong. English is a language that steals words from every language it touches and makes it easy to invent new ones.

With that in mind, Wordnik has spawned a Kickstart to add a million missing words to their online, free, collaborative, and easy to use dictionary. If you love words like I do, then this is a great project to back. I mean, you probably backed a stupid watch that will do everything your phone does and probably fail to even talk to your phone. You’ve probably backed a bunch of really crappy comic books, oh and let’s not forget that really terrible card game you never play. And let’s face it, some of you have put money into Wikipedia just so the deletionists can continue to make sure that the only knowledge left is of wealthy assholes, politicians, and Linux distros.

I mean come on, you gave money to Wikipedia, the organization that thinks I, a three time published author is not notable enough to have a page, but gives GNewSense Linux a fucking page. A total of 3 people probably used that distro, and you donated money to keep that pointless piece of information around.

Wordnik is way better. Help them help everyone catalog all of English by clicking this link.

Admitting Defeat On K&R in LCTHW

I have lost. I am giving up after years of trying to figure out how I can get the message out that the way C has been written since its invention is flawed. Originally I had a section of my book called Deconstructing K&R C. The purpose of the section is to teach people to never assume that their code is correct, or that the code of anyone, no matter how famous, is free of defects. This doesn’t seem to be a revolutionary idea, and to me is just part of how you analyze code for defects and get better at making your own work solid.

Over the years, this one piece of writing has tanked the book and received more criticism and more insults than any other thing I’ve written. Not only that, but the criticisms of this part of the book end up being along the lines of, “You’re right, but you’re wrong that their code is bad.” I cannot fathom how a group of people who are supposedly so intelligent and geared toward rational thought can hold in their head the idea that I can be wrong, and also right at the same time. I’ve had to battle pedants on ##c IRC channels, email chains, comments, and in every case they come up with minor tiny weird little pedantic jabs that require ever more logical modifications to my prose to convince them.

The interesting data point is that before I wrote that part of the book I received positive comments about the book. It was a work in progress so I felt it’d need to be improved for sure. I even setup a bounty at one point to get people to help with that. Sadly, once they were blinded by their own hero worship the tone changed dramatically. I became actually hated. For doing nothing more than trying to teach people how to use an error prone shitty language like C safely. Something I’m pretty good at.

It didn’t matter that most of these detractors admitted to me that they don’t code C anymore, that they don’t teach it, and that they just memorized the standard so they could “help” people. It didn’t matter that I was entirely open to trying to fix things and even offered to pay people bounties to help fix it. It didn’t matter that this could get more people to love C and help others get into programming. All that mattered was I “insulted” their heroes and that means everything I said is permanently broken, never to be deemed worthy ever again.

Frankly, this is the deep dark ugly evil side of programming culture. They talk all day long of how, “We’re all in this together” but if you don’t bow to the great altar of their vast knowledge and beg them for permission to question what they believe you are suddenly the enemy. Programmers consistently go out of their way to set themselves up in positions of power that require others to pay homage to their brilliant ability to memorize standards or know obscure trivia, and will do their very best to destroy anyone who dares question that.

It’s disgusting, and there’s nothing I can do about it. I cannot help old programmers. They are all doomed. Destined to have all the knowledge they accumulated through standards memorization evaporate at the next turn of the worm. They have no interest in questioning the way things are and potentially improving things, or helping teach their craft to others unless that education involves a metric ton of ass kissing to make them feel good. Old programmers are just screwed.

I can’t do anything about their current power over younger new programmers. I can’t prevent the slander by incompetent people who haven’t worked as professional C coders…ever. And I’d rather make the book useful for people who can learn C and how to make it solid than fight a bunch of closed minded conservatives who’s only joy in life is feeling like they know more about a pedantic pathetically small topic like C undefined behavior.

With that in mind, I’m removing the K&R C part of the book and I finally have my new theme. I’ve wanted to rewrite the book but couldn’t figure out how to do it. I was held in limbo because I was personally too attached to something I felt was important, but that I couldn’t advance forward. I now realize this was wrong because it prevented me from teaching many new programmers important skills unrelated to C. Skills in rigor, code analysis, defects, security flaws, and how to learn any programming language.

Now I know that I will make the book a course in writing the best secure C code possible and breaking C code as a way to learn both C and also rigorous programming. I will fill it with pandering to the pedants saying that my humble book is merely a gateway to C and that all should go read K&R C and worship at the feet of the great golden codes held within. I will make it clear that my version of C is limited and odd on purpose because it makes my code safe. I will be sure to mention all of the pedantic things that every pedant demands about NULL pointers on a PDP-11 computer from the 1960s.

And then I will also tell people to never write another C program again. It won’t be obvious. It won’t be outright, but my goal will be to move people right off C onto other languages that are doing it better. Go, Rust, and Swift, come to mind as recent entrants that can handle the majority of tasks that C does now, so I will push people there. I will tell them that their skills at finding defects, and rigorous analysis of C code will pay massive dividends in every language and make learning any other language possible.

But C? C’s dead. It’s the language for old programmers who want to debate section A.6.2 paragraph 4 of the undefined behavior of pointers. Good riddance. I’m going to go learn Go.

UPDATE: I’m going to learn Go, Rust, and Swift. Holy crap. Stop being so religious about who learns what. I learn languages now to teach them to people, not because I plan on using them for anything. Don’t listen to me as a barometer of what’s cool now. Peace.