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.

 

Dear Slack

Dear Slack,

You’re clearly making a ton of money so I’m sure nothing I say here will have any bearing on your goals. I know, I’m just some dude who writes books and doesn’t know anything about how real companies make money. You can totally take my feature request and laugh all day about how I don’t know anything about startups, valuations, or websites. That’s cool. Your loss. I’ll just work around this one tiny glaringly obvious feature that’d make me some money, and you gobs of money.

All I want is a checkbox when I create my “team” that reads:

“Members pay $_____ to join.”

What? Why would I want that? You see, I want to use Slack to teach people all over the world how to code. Right now I’m going to charge them myself and send them invites and deal with all the bullshit of membership. I’d rather just hang out in the Slack and answer questions and have them pay you so you pay me. I’m sure you have all the gear necessary to do this so I don’t need to. Just need the ability to invert who pays and it’s nearly perfect.

I promote it, I do the hard work of being in there, and you get to skim your $6.67 or however much the plan costs off the top of the signups. You give me a place to send them, and when my students join they punch in the required credit card and then they’re done. You then give me the difference and we’re good.

Easy right? You literally have every single feature I want to make this work. I just don’t want to deal with the bullshit of payments and invites and booting people who don’t pay and all that crap. You already do that. Me doing it is just stupid.

I have the clout and the skills. You have the platform. If anyone at Slack wants me to come down and talk to them about this I’d be glad to do it. There’s a few other features that could help in this kind of use case, but really this is all I need to get started.

Zed

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.

If It’s Flow, It’s Art

I can hear it now. “Ohhh lord Jeebus, not another programmer who thinks code is art.” Problem is, everyone who is an artist loves to play this hypocritical game where everything they do is art, even if it’s chicken strapped to their underwear. Yet, anyone else who’s not in the artist club can’t call anything they do art. They want to dance on the edge where they can sell any random pile of garbage to rich wealthy douchebags, but if you try to say that the C++ code you slaved over for a year is art then you’re wrong. Sorry nerd, you don’t have neck tattoos and heroin track marks so you can’t possibly be doing art.

I’m sorry but if an artist can strap poultry to her panties, pile garbage on the floor, or do literally nothing, then everything anybody does is art including my very finely crafted C code, the turd I squeezed out this morning, and my pastel paintings. Basically, if you want to call what you do art, then it’s art. If anyone tries to tell you it’s not, then they’re not artists. QED. Moving on now.

What I actually want to talk about though is not why code is art from an external perspective that requires the judgements of the tattoo class, but rather a view on what is art from the perspective of what it does to you when you do it. I hadn’t thought of this view of “what is art” until I started learning to paint. Painting and drawing had a very familiar sensation I’ve experienced while deep in the throes of programming, writing, dancing, or playing music. This intense feeling of concentration where time stops and everything in my body and mind works seamlessly as if my self doesn’t exist. Leaps of intuition, euphoria, and relaxation are all things that programmers, musicians, artists, and writers experience when they’re very deep in their craft. A sensation of flow is a common thread through all of them and most likely many more activities that require intense concentration in an altered state of brain activity.

In Gary Marcus’ book Guitar Zero he discusses how there is no special “music part” of your brain. Instead the research suggests that playing music involves your entire brain using many parts in cooperation, but that each part is doing a different thing than its normal function while you play. During its day job a part handles language, then when you play music it detects note intervals. Another part’s day job is tracking moving objects, then when you play music it handles timing. When you’re done playing music they switch back to their day jobs and you snap back to normal.

I believe that this same phenomenon happens with (but not limited to) programming, visual art, music, dancing, and writing. These are all activities that are fairly recent in human history, not innate natural things we do but require education, and all seem to require this same altered brain function. In addition to this, it’s possible that receivers of the output from these activities also experience the same sensations when they’re listening to music, viewing visual art, or reading.

This phenomenon could explain both the sensation of flow, and it could explain why people like doing these activities. It could be that flow is simply the ability to make the parts of your brain do something different for a little while. A kind of vacation for your hippocampus. That would also explain why it takes training, is tiring, and in many ways why it is difficult to recover from. Many programmers, artists, and musicians talk about the difficulty of interacting with others after an extended period of this altered brain function.

In addition to this, people may enjoy the sensation because it provides a similar altered consciousness that they’d get from drugs, alcohol, meditation, religious experiences, but with much less effort or negative results. Instead of having to sit quietly for hours praying or meditating you can do some art, read, write, or code. In Europe there was a tradition of art being used as a sort of meditation device for worshippers to visualize parts of the bible while they prayed, and it was thought that artists channeled God when they painted or sculpted. It could be the origins of this are in the phenomenon of flow. It would explain why art, music, and religion are so commonly combined.

I now believe that an activity is an art if it causes this feeling of flow and requires an altered brain function to do. Not what the output of this activity is, but what creating that output does to your brain. What makes coding an art is that it requires making your brain do something it’s not normally designed to do which then causes a sensation similar to meditation and requires effort but feels effortless.

I also have this vague idea that this could be a key to improving art education. Currently art education is about the outward result of the artist. Can they produce a painting that looks like a thing? Can they pile garbage on the floor? Can they play Jazz standards? Can they analyze an Algorithm? However, what if art, music, and programming education had the additional higher purpose of using that art to help students learn this skill of flow? That if the student is able to do this little mental trick then they’ll get much more enjoyment out of the activity than just what they produce. It would be a goal of mental health through teaching a practical skill. Although that sounds kind of crazy now that I write it.

Now I think that if what you do gives you flow, then it’s art. I could even go so far as to say that the best art causes this flow in others, and if you’ve ever seen someone play a video game or browse the internet for days on end, then you know programming beats everything in that department.

The Coming Code Bootcamp Destruction

For years I have been both for and against the rise of the “coding bootcamp” business. I’ve been for them because they aim to help people learn to code and try to keep costs low compared to a similar degree from a university. I’ve been against them because most just take my books, teach my material, then rip off students for $15k programs that don’t actually get anyone deployed. In one week I’ll be writing a post a day about these bootcamps and why they don’t work. I’ll expose a few of the bootcamps that are abusive, in the hopes that future students avoid them. This will be a tough week for many people, but I’ve reached a point where I feel this needs to be done.

I’ve been in a unique position to hear information from students because of my books and many of them email me or meet me to tell me stories about their schools, good and bad. I find that a lot of students are literally afraid to speak out against these schools for fear that their hard work will be for nothing because they will be associated with the school and not get hired. It’s sad that these students have to put up with abusive and exploitative treatment because their perceived alternative is to be unemployed.

This has kept me from commenting on these schools because I feel sorry for the students who would lose their livelihood because their chosen school happens to suck. But, the alternative is that I take the information I have on the schools and do nothing while they continue to rip people off and take advantage of them. Much of my criticism isn’t even that bad, but some of it is very very bad. One school is so full of abuse, sexual harassment, and exploitation that I have no idea how they’ve stayed in business this long. Another school is on the verge of collapse because of poor business practices and also has wild claims of its effectiveness. Many still continue to employ completely unqualified instructors and in some cases, instructors who can’t even code. Most make wild completely false claims of their effectiveness in order to attract students.

I’m going to do my best to separate the students from the schools. It’ll be difficult, but I want the students to know I will constantly hammer the message that if they can code it’s because they learned despite the school and that nobody can hold the school they attended against them.

However, that may not be enough, so before I begin my warpath I want to invite every bootcamp graduate or student who needs help finding work to email me at help@learncodethehardway.org. I can’t promise I can do much, but if I have connections to jobs or anyway to help you get work then I will. I’ll take responsibility for possibly ruining your job prospects and do what I can to get you work. You can also email me with your experiences or comments about bootcamps and what you think they do right and wrong.

Stay tuned. It’s going to get ugly.