Don’t Learn How To Code, Learn How To Make Things

There’s a lot of chatter and hype around normals learning how to code. I’m fully in support of the hype because I (like many others) believe that understanding how machines work is an increasingly important skill in a world where human relations are increasingly dependent on networked applications.

As a result of that hype, if you sit down with an MBA interested in technology — with due apologies to MBAs for using them as the ultimate barometric gauge of hype — they will tell you that they are learning how to code. The typical evidence provided at this point in the conversation is an account at Codecademy (and all credit to the awesome team at Codecademy for this being the case).

Here’s how it goes: Before you even get started you’ve decided that you don’t want to be an engineer. You convince yourself that you provide enough value as “the business gal/guy,” and that you just need to know enough to call bullshit on the engineers. You, after all, know how to raise capital. You sign up for Codecademy. You spend 3 months deciding between Python and Ruby, because you heard Django was more powerful or something but Rails had better community support or something. You in fact have no idea what that means. You maybe do a tutorial or two. Oh wait, I should be learning Node.js. It’s the future. Then… hey what’s that shiny thing over there?

I’m allowing myself to move into snark:overdrive because I’m being self-deprecating. Yes, I, like many other business dudes and dudettes before me, have fallen into the abyss of half-assery.

Here’s how you manage to crawl out of it. Stop trying to learn how to code. Stop it right this instant. Doesn’t that feel nice? You didn’t really like it anyway, did you? Because it’s not really that fun. Syntax errors, terminal commands, servers, consoles, frameworks, libraries, gems, classes, models, views, controllers, fml.

You know what is fun? Making things. Turning a spark of creative insight into a thing that you can show people — a thing that people can use and from which they can derive some iota of pleasure or utility. Start with a simple website. Basic HTML and CSS. No product is too small. In fact, the opposite is true. If you don’t know how to build the first version of your product in a weekend — a usable working version, don’t try to build it. Programming is a means to an end, not an end in itself. You should be trying to do as little of it as possible to make the thing that you want.

Use tutorials like this one for Rails and this one for Python to introduce you to new concepts (and read this post while you’re at it), but as soon as it starts to feel like work, stop what you’re doing and use that newly-gleaned knowledge to build something cool.

Here are some other tools that I recommend:
Google

As you build, you will actually begin to find that programming can in fact be fun! You’ll struggle for hours to solve a problem and literally clap out loud when you find a solution. Then when you realize that that single solution enables a whole set of user-facing features, you’ll pee yourself a little with joy (or because you’re so engrossed that you just couldn’t bring yourself to go to the bathroom. Go to the bathroom guys, that’s gross). The moment I discovered caching? zomg. The moment I discovered, while building an application, what MVC actually meant? Fuggetaboutit.

Here are some things I built in the last few months:

VinylStore.me
A personalized vinyl store based on your data from Rdio and Last.fm

TumblrMonkey
See what your friends are liking on Tumblr

LastGreatThing
We asked 20 people in 20 days about the last great thing they saw on the Internet (made w/ @jvanslem).

Twordsie
A word cloud generator for your most frequently tweeted words (made w/ @alexmr).

Name10ThingsThatArentSkrilex
What the name says…

Kittygif
No description needed.

Fuckitship.it
i.e. the alternative title for this post.

This isn’t rocket science. The only thing getting in the way is your commitment to programming as an end in itself, and your ambitions to build the next great social network for pets or nothing at all. Start small, make things, and then when you’re done, make some more things.

  • Pandabrand

    Quick note, I tried Vinylstore and the authorization for Rdio fails.

    • http://www.jakelevine.me jakelevine

      bleh. rdio api is glitchy. working now. sorry!

      • Lucid

        You really need to crawl out of that abyss of half-assery ;)

  • http://www.facebook.com/markhall123 Mark Hall

    Thanks Jake for a great post. I have to (quietly) admit that I fell directly into this trap, down to the point where I verbally said a few of the ridiculous statements that you humorously snarked. It took me a while to learn to just build it, by more natural means. Coming to terms with my non-technical reality took a while. And since doing so, I’ve been far more productive. (A small piece of me still wishes I would have stuck with it though)

  • http://twitter.com/coreycrossfield Corey Crossfield

    Great piece. Though I am a developer who got their MBA. So I don’t fall in this trap. 

  • Guhrish

    Thanks for the awesome article! I’ve been wanting to learn to code and have done a few tutorials, but it gets overwhelming. I’ve been wanting to make a cool project with Raspberry Pi that I found. I think I might just do that. Then I’ll find something else to make!

  • brandonparsons

    haha – “some other tools I recommend.  Google”

  • http://twitter.com/diymanik James McNab

    It’s funny you’re writing this, I actually started building my own learning webapp to help me learn how to code. Thanks for letting me know Im on the right track.

  • Andreas Klintberg

    Loved this post! I love creating things and i’ve tried multiple times to learn to code, learn electronics and learn eg. NLP. The only time i’ve succeeded (aka not quit half way through) is when i was building something and not only learning for the sake of learning.

  • http://spencerfry.com/ Spencer Fry

    You learn to code to learn to make things. :)

  • http://twitter.com/BytesAddict Rafael Ordaz

    Hi,

    What’s your setup and workflow? Where do you keep your database, code during development  ?

  • piatekm

    Great post, had a good time reading it. Thanks!

  • http://twitter.com/JessiDarko Jessica Darko

    By all means, if you’re a business type, do try making things.  As an engineer, I have nothing but derision for everyone in the startup ecosystem that over-estimates their value– from venture capitalists to “biz guys” who think they can “call bullshit on engineers”.

    Here’s a clue– I’m an engineer with deep experience across a dozen languages and platforms, and if some engineer walked in pitching a stack made up completely of technologies I did not like (from past experience) I STILL wouldn’t call bullshit on him– I’d hear him out, and then ask him probing questions. 

    Real engineers realize that engineers are not identical cogs (At least not the ones worth a damn.) 

    It seems to me for every real startup with real engineer,s there are 10-20 BS startups with guys who think they are going to outsource their product, or hire low end Jr. Engineers to write it for cheap and that nothing but the application of VC money is necessary…. and maybe they do make out great when the company is aquihired for $10-$20M…. because those JR engineers have appreciated in value. 

    Which gets me– if you’re part of such a company, why be acquihired if you’re not getting a big cut of the payout?  I mean, if I’ve got a measly %1, and facebook buys the company and dipshit blond dude from harvard is making $5M for spreading bullshit for 4 years, there’s no way facebook is going to be getting me signing any kind of a serious golden handcuffs clause. (not that someone with my level of experience would want to work at a joke of a place like facebook anyway.) 

    But JR engineers have to know their worth. 

    Anyway. Way too many startups run by non-technical biz types getting funding from non-technical biz type VCs who are beyond clueless.  IF you’re best buddy isn’t an engineer, whose gonna be splitting equally with you and maybe a third perso, don’t start a company until you’re best buddies with a guy like that.

    • http://www.codingninja.co.uk/ Zen Master

      agree 100% with Jessica on this, software engineering should really be left to software engineers. There are enough cowboy builders in the eco-system as is. This industry is in big mess.

    • triplesec_ice

      tell us more about how facebook’s a joke of a place to work at! I thought at the very least they’ve put together some serious systems, so there may be something i’m missing

    • kingdango

      Good points except for the bit about blond dude from Harvard. I have also encountered non-blonde “business” types AND “engineers” from Harvard who are also clueless… so please temper your business blond bashing. :)

  • Jordan Hughes

    Awesome post!

    But can you please turn justification off for mobile (everywhere). Those rivers are killer…

  • http://twitter.com/josephrobison Joseph Robison

    I agree to this method a lot and this is how I’ve learned so far. My only problem I get stuck with that comes up periodically is when I’m building out a wordpress site for a client, and they ask for a specific customization and I have to go dig into the code or hack a plugin, I really wish I had a deep knowledge of PHP, rather than a piecemeal wordpress-centric knowledge of it. So now I’m back to square one trying to learn ALL of basic-intermediate PHP to prevent this.

    The problem is when a client wants a customization in two days and I have to go research it for 5 hours and realize there’s so much more to know. Have you found yourself in this situation? Thanks!

  • penland365

    I love you for this post and want you inside me ( no homo )

  • Rony

    what a crap load of advice. dont learn how to code and learn to markup and CSS ! It wouild be better to not do any such stuff at all.

  • http://www.thepetedesign.com/ Pete R.

    Agree. I don’t always find coding fun but damn the result when it is out there for people to use is just an awesome feeling. I can say that “I made that myself” proudly. :)

  • http://twitter.com/learnstreet LearnStreet

    Great post! ~Joanne from LearnStreet

  • Timothydmoody

    I think the best option is the middle ground of learn by doing.

    That’s what I do and it’s quite effective. You learn literally only what you need to know. Surprisingly that has taken me pretty far into algorithms, caching techniques, ajax, api’s, and utilizing and implementing framework methodologies. 

    I could not imagine picking up a book and trying to ‘learn to code’ that’s like trying to learn how to ‘learn to live’. Where do you even begin? What are the parameters for success? and constraints?

    //tirade

  • Gabriel Wishart

    What is the purpose of labelling people as “normals”. This is very elitist and disgusting.

  • http://twitter.com/libovness Jonathan Libov

    Great post. Similar in spirit to something I posted a few days ago: http://whoo.ps/2013/03/11/learn-to-code-or-dont. Indeed it seems fruitless to learn to code just to learn to code (as @codinghorror:twitter has argued)

  • Alessandro Nisticò

    Is because of people who don’t learn how to code, but just make things that security is a big problem and SQL injection is still the major security hole!!!!!
    I would give a different advice: Don’t learn how to code, become a software engineer.

    • Ciwan Kurd

      @google-e192e255bc9aeb330e443a488f9c3da5:disqus How does one become a software engineer? That’s my aim. :(

  • Skoky.

    To learn anything new is always fun. I have moved to programming when I was 30. Before I was working in the completely different area (physics – science), but I realized it is not what I want to do rest of my life. Thus I started to do technical support for some business applications for enterprise and after 2 years I started to do Java myself – now after approx 6 years in various Java projects, I have already quite good technology stack and experience with real java web applications for enterprise/mid-size customers. I needed to pick up many other technologies on the way (html,css,js,sql etc.). I want to say from my experience – it is never late to start anything you like. And what really matters is only if you do love/like what you are doing.  I do agree with you that to learn stuff is simply to start to do it  (I must admit that I got this luxury to work on real business apps since beginning and I got great people around me , who helped me to improve learning curve at the begining).

  • Gofoocoo

    Don’t go to a university. Go to a multinational enterprise, get a min salary learn there and make us all happy. The users will cry but the CEO will surely be very happy by the self taught programmer that delivers crap things to the end users with minimal cost!

  • elzee

    As someone with a CS degree, who would place myself somewhere in the middle of this debate, I think that the author of the post completely misses the point of the ‘building’ that is touted as so much more important than the coding itself. Obviously, nobody starts out as a coding wizard, but if you are going to attempt to build something, that is the whole point: to get reallllllly good at what you are doing, so that you can build the best possible thing you can. I think that to downplay the value of the coding knowledge that you gained while building all of the sites you mention in your post, you are doing yourself and the industry at large a disservice.

    • http://twitter.com/HipHopScores HipHopScoreboard.com

      But someone more talented than you might LOVE your idea and start helping you build it. And then all of a sudden the thing you tried to build exists, maybe?

      • elzee

        I don’t understand. What bearing does this have over the attitude with which either of you should approach the coding aspect of the project?

  • Graham

    I give the same advice to new grads looking to start a career in software development. Want to learn something? Find an interesting idea and go build it. Learn what you need, as you need it. Let features or needs drive learning. Same goes if you want a job. A link to a website you built, your published mobile app or active github repository tells more about your abilities than any degree/class/training.

    • bcardan

      absolutely.

  • http://twitter.com/HipHopScores HipHopScoreboard.com

    http://www.hiphopscoreboard.com/

    Built with Wix and Wuffoo…

  • Craig

    programming should be left to programmers…

    I seem to recall the book title – ” The Inmates are Running the Asylum” – didn’t that refer to programmers, and our failure in making useful things?

    The real world requires us to make products that are useful – and you know how hard it is for programmers to relate to the real world.

    Isn’t this really about different types of people trying to relate to each other? As they must, to build a great usable product.

  • Onami2012

    Perhaps the author intends to say – let your desire to make things drive your willingness to learn how to code?

    • Dahlia

      Exactly. So many misunderstood the post or let their mind-tapes run over on other place thast I was considering a summary for perspective. You did it well. Kudos.

      • Dahlia

        Oops, needs correction/rewrite: … Or let their mental tapes (that run on reactively) flow onto this page regardless of relevance that I was considering summarizing the essay, just to help readers with clarity. You did it well.

        Excuse, nexus 7 text entry is ‘difficult at best’.

    • kingdango

      The author is saying that “coding” is not what is needed. Inspiration primarily, and a bit of know-how (secondarily), is what is missing and needs attention. So learn only the minimum of coding to get you to a place of inspiration (or to fulfill it)… then, eventually you’ll hit a point where you need to make something that you don’t know how to make… thus you learn the next level of detail in coding (or whatever is needed)… Ad infinitum

  • Kevin

    It’s funny, I am an MBA who is learning to code through Codeacademy. I’m doing it because it interests me, I’ve got an idea for an app I want to develop and I enjoy the challenge of bringing it all together. I love the advice to build small things repeatedly; that’s the only way to get good at it. I have mad respect for software engineers and hope to work with great ones when I have the funds to do so on some future app.

  • http://twitter.com/martindownton Martin Downton

    “Programming is a means to an end” I’ve been saying this for some time, so refreshing to see this expressed by someone else. I try to be the best programmer I can but to me it’s about increasing conversions for my clients and making things people will use and enjoy.

  • Ege

    No offense but ‘learn how to make things’ should be the least title for this blog post. There are 5-6 products listed, and from the looks of it, they are all lightweight no-use products. Instead, why not focus on some big project and stick with it for 1-2 years – that’s what I’d call ‘making things’

  • Bigyan

    Great Post. I am kind of sort of in the same predicament. Knowing the basics definitely helps have better control in your projects. With some intro level college courses in C++ and Java, I always thought a few tutorials would help me get up to speed. But there is just so much information out there. Like Jake suggests, the best thing to do is to start building things.

    I don’t think a basic level will really help “call bull shit on engineers”. If anything, one might end up suffering from “little knowledge is dangerous” syndrome. That can be very detrimental to the team and the project as a whole. Now, the advantage of knowing the basics, is that it helps you relate to the team better. So, you are not just some “biz guy”, but a team member, and leader who understands their language.

  • Olivier_NY

    Learn to make things – Yes! But then there is so much work to do in any given startup venture then just coding. Coding is important and business skills are important too. Then making things is the most important of all. But that involves actually going to the market and selling the “beautiful” thing to somebody … or maybe finding people with a problem in the first place and then … (long story). By the way I am marketer and I learn how to code (just for fun).

  • Caitlin Arndt

    If you’re working with coders in a non-coding capacity, learning to code is not so much about practical, real-world application of that skill, as much as it’s about understanding how coding works. (Though it’s nice to be able to code things for yourself too!) Where I work we regularly have coders and non-coders planning projects collaboratively and the whole process is a lot more successful when the non-coders know how code works. It opens up lines of communication with the engineers/coders and helps in managing your own expectations as a non-coder. Way too often that lack of knowledge among the non-coders of my colleagues leads to unreasonable expectations and causes roadblocks.

    That was a long-winded way of saying that this post is a perfect starting point for non-coders that want to be more effective collaborators!

  • http://twitter.com/daviddrummadude David

    Good reminder. I think I’ve stressed way to much about the coding itself rather than trying to focus on the desired result.

  • Eelco

    Good advice if you want to learn how coding roughly works, not how to be a great coder (because that you won’t learn without laying a solid basis).

    Also good about this is that you will probably need to dip into learning how to model an application domain and speak with it (probably through SQL). That’s a skill that’s lacking across the industry by ‘business people’ and in fact I’d argue many engineers.

  • http://www.thepetedesign.com/ Pete R.

    I can still remember the feeling of great joy when I built my first startup. I can proudly said to any one that I singlehandedly built it.
    There are some ups and downs while programming, but nothing beats the feeling after you’ve finally built it.

  • aleknaui

    Exactly my thoughts. Many times I wanted to learn PHP and Javascript, but dropped it soon. A couple of years later I got a job in web development, and by doing my job I finally learned. Now, when I want to learn something, I think up a project and learn on-the-go, I even read a lot of manuals and stuff, but since I have a goal, I don’t drop it.

  • http://www.yepi250.com/ yepi

    haha – Google

  • UD

    What if you are not an MBA / Biz Whiz…..or a programmer….where do u fit then? What if you are a Electrical and Power engineer who has worked in management ….knows enough of data structures/computer architecture/algorithms for it to become a barrier to picking up programming from a “clean slate” state…I feel like i know everything and nothing :( Dammit

  • Anthony Del Rosario

    Love this post.

  • Rafael Knuth

    Great blog post! I agree with you that you need to focus on building things rather than learning to code. That’s absolutely right. You need to invest a significant amount of time up front though in order to gain a very basic understanding what HTML is , what Python / Ruby are and what frameworks are and what they are good for. How to use cloud services to deploy your app or website, even the simplest one. You need to understand the very basic dev & admin vocabulary and being able to translate that into something that a regular human being is able to understand. I documented my learning jounrey pretty accurately, and it took me ~ 380 hours until I started seeing the big picture and until I eventually was able to compile small pieces of knowledge and build simple things with a weekend or so: “Oooh, this is how I can build a simple HTML page. If I don’t want it to look ugly as fuck, I can use Bootstrap. Ooooh, I can reuse code from other sites if I want to tweak it a bit, I know how to modify my CSS and this is how to deploy it in a public cloud. Aaah, this is how I can write a simple Python/Django app if I want to add some functionality to my website. This is how I can integrate PayPal into my website … that’s how I can use a 3rd party API .. ” etc. etc. Having spent 380 hrs on learning and understanding the basics, I was ultimately able to build a beautiful, simple website within less than 2 days that instantly earned me 990 USD. That’s certainly not a stelar return on investment, but a solid first step and the potential return from my next project is significantly higher. Yet, without that initial investment of a few hundred hours I wouln’t be able to get anywhere. Some folks might be smarter than I am, they might get things faster than I did, but that’s how long it took me. IMHO if someone wants to learn to code, you need to be a bit patient, deal with frustration & doubt (“I am too stupid for that!”) until you ultimately start building small, simple things. There is no instant gratification from day one being a novice to coding, like with everything else in life.

  • bibelo

    I completely agree with this article. Ive got a friend who learns how to make leather things. He started w very little things like purses and wallets and levels up to new techniques.