Learning To Code

Christina Cacioppo, who spent a few years with USV in our analyst program, spent the next two years after leaving USV teaching herself to code and making a bunch of products herself and with a few colleagues.

She recently wrote a post outlining her learnings from that experience. It’s good. For anyone who is teaching themselves to code or thinking about doing so, I highly recommend reading this.

#hacking education

Comments (Archived):

  1. Robert

    I think it’s great. I’m also trying to teach myself how to code (Ruby on Rails to quickly be able to prototype) and it can be very rewarding sometimes, but also frustrating. Having people share their experience is helpful and knowing that they did it and succeeded is motivating.

    1. Donna Brewington White

      Are you starting with Ruby on Rails? No other coding experience?

      1. Robert

        I know HTML, CSS. Then started with Ruby and now want to try RoR to learn how to build web apps.

    2. Elia Freedman

      Keep up the good work, Robert. I’ve been programming most of my life but constantly learn new languages. Ruby is a great early language because it allows you to focus on a thing or two and then move onto a thing or two more. Take the easy way out as often as you can, but write it down and come back to figuring it out better later.

      1. Robert

        Thanks for the encouraging advice, Elia! I’m still very much a beginner, but I enjoy it.

  2. Dave Pinsen

    Interesting. Curious what Kevin Marshall’s take is on her lessons.Christine didn’t take any programming courses while she was at Stanford? Seems like that would be a great place to learn.

    1. falicon

      I love and agree with almost all of her points.The only ones I personally differ on are:1. ORM (it does too much *magical* stuff if you are focused on learning; if, however you are focused on just getting something working then fine).2. Heroku (same basic argument as above really; and truth is whatever initial release environment you pick there is going to be a learning curve).3. Language of friends…I can see the argument here, but I also think it can lead you to being a little lazy (asking for too much help) and/or into picking up bad habits or mis-conceptions about stuff (I know my stuff is full of “you shouldn’t do it this way” things that would be *horrible* for someone trying to learn to see/use)Beyond those three nit-picky things, I would also probably add a couple more points from my own experience over the years:1. If it’s about learning, don’t start with a web app…start with basic tasks that can be done in self contained programs…the problem with web apps is that they involve more than just one bit of code (these days they include the code, HTML, CSS, Javascript, Database, and a Web server at the very least — that’s a lot to pick up from nothing even for the most basic of ideas/apps).2. Develop a process and a style. This will drastically cut down on having to write tests and how long it takes to *understand* things. What I’m talking about here is simply making sure your code is always in the same style (spacing, line breaks, etc) and that you come up with a consistent way/process for organizing your code (if statements, methods, classes, etc). Simply make sure the kitchen is nice and clean before you start cooking…3. Start with stand-alone programs…move into using a database as part two…and then slowly add the other bits as you get a better feel for how each piece fits. Before you know it, you’ll have a *really* good understanding of all the parts of a web (and/or mobile) app and you won’t be caught, surprised, or fooled by any *magic* that the various frameworks, libraries, and systems do to ‘help’ you these days.

      1. LE

        3. Language of friends…I can see the argument here, but I also think it can lead you to being a little lazy (asking for too much help) and/or into picking up bad habits or mis-conceptions about stuff (I know my stuff is full of “you shouldn’t do it this way” things that would be *horrible* for someone trying to learn to see/use)Agree 100% with the “lazy” and I think that’s a major issue. Also agree with the bad habits and all of that. You don’t even know enough to know that which is the problem. Because you are a newly hatched and anything dropped into your brain takes on a larger than life importance.Part of learning (to me) is putting in the time to “figure it out”. You have a particular problem, something that doesn’t work and you can sit for hours obsessed with finding the solution. (I’ve done 6 or 7 hours probably on small issues a total zone). But after you find the solution you know it cold and you have really helped yourself. I understand that many people don’t have that luxury. They can’t spend that time and still have their other entertainment pursuits going on. But they won’t learn as much that’s for sure.Of course I’m biased. As I mentioned previously and will repeat I’m not a programmer but I bought a Unix system in the mid 80’s, unpacked it, hooked up terminals, and with the 10 bound manuals it came with (you got printed manuals back then) and nobody to ask question of (at all, and I mean nobody) got it to do the things I needed it to do. And it was fun!I’m reminded of a very smart girl (radiologist) that I dated once that didn’t know that you could cook Salmon in the oven. (Imagine that how stupid is that?). Why? Because all she knew was someone told her (talk about bad habits) to microwave it!By trial and error I learned that “Salmon is done when it ooses the oils”. And learned that Chilean Sea Bass has wider lattitude than Salmon so it’s really hard to overcook it. (Salmon will dry out if overcooked..) That to me is something that can’t be duplicated by asking questions much better to experience it.

      2. ShanaC

        I actually agree with all of this. it makes understanding what is going on much easier.

    2. Christina Cacioppo

      I did, just not enough of them.

  3. Dave Pinsen

    By the way, what’s the typical path for a USV analyst alumnus/alumna? Charlie started his own VC firm, Gary started a coding school/incubator, Christine taught herself to code and build products, and there was a fellow who joined another VC firm, right? Did someone else end up getting hired by a USV portfolio company?

    1. fredwilson

      Yeah. Eric joined Foursquare

    2. jason wright

      How many agents are out there?

  4. jason wright

    read it. useful feedback.bought my first bitcoin this last week. now stored at coinbase, naturally. chat support is snappy. app works well.

  5. Donna Brewington White

    Great post by Christina. Thanks for sharing.On a much smaller scale… for the past few days I’ve been watching my 13 y.o. become enamored with coding. He’s just moving past drawing shapes, but he is pretty excited. He is also learning some important lessons like you can’t skip ahead and you have to be diligent.A couple of nights ago, he told me that his computer was becoming his pet — he picked up this idea somewhere along the way — another way of saying what I’ve heard around here so often, that coding puts you in control of the computer vs. the other way around.I tried to tell him that what he is learning to do is at the heart of what I’ve been talking about these past few years and a lot of the cool companies that I work with. Blank stare. For now he’s just having fun making the computer do stuff. We’ll get back to the bigger picture.Just last night, he asked if I’ve ever heard of HTML, CSS and JavaScript. I smiled.I feel as though I am watching something really important and cool happen.

    1. Vivek Kumar

      Being a pet is a great analogy. Have your 13 y.o blog on “how to train your pet Computer”.Christina: Overall love the post, it’s great to see the learnings as a list and even after 18 years I can relate to “brilliant one second and idiotic the next…”

      1. Donna Brewington White

        Well he did tell me tonight that he wants to start a website so I shared your idea with him. :)A whole new world is opening up to him.

  6. jason wright

    Sunday 7th December…

    1. JimHirshfield

      Infamy.

      1. jason wright

        today it would be called “12/7” i’m assuming

  7. awaldstein

    Link to James Clear post on Ira Glass is so smack on and my jolt to start my Sunday well. Thnx.

  8. Mike Zamansky

    Lots of good stuff there. Well worth a read.I love the acknowledgement “There’s no easy or quick way to learn most valuable things” and “don’t worry about models or abstractions….”Only a minor quibble on my part w/r to language not mattering but within the context of Christina’s experience it makes perfect sense.

    1. fredwilson

      Hi MikeShe sort of contradicted herself because she went on to suggest a “forward looking language”

      1. Mike Zamansky

        But I get the point and there are lots of good choices and even most of the bad ones are ok. I also appreciate the sentiment that it’s about learning not what you’ll be using down the road – hey, I start kids with scheme.My only quibble is that I’ve seen people give up due to a bad language choice and I’ve seen people really limit themselves when they go to far within a too highly opinionated language.

        1. falicon

          Every language is highly opinionated (except maybe Perl with the motto “There’s more than one way to do it”)…but highly opinionated is probably better in the learning stages.I think it’s more about the initial tasks/goals…if you pick something too ambitious at the start (a full blown game as a common example), it’s not the language that causes you to give up…it’s the lack of progress towards the goal.Some languages might help you get to specific goals a little quicker, but it doesn’t mean they’ll really help ‘hook’ you on programming…I really believe only the *right goal* can get you hooked…

          1. Mike Zamansky

            You’re right – all languages are opinionated to a point. Python less than Java, more than Perl. Haskell more than Clojure, etc. and your right that the language can guide you to a way of thinking.What I meant is that I’ve seen self taught people go to far down one rabbit hole and end up with a “when all you have is a hammer” mentality.

          2. falicon

            Fair point. +100

          3. LE

            .it’s the lack of progress towards the goal.That’s really the key point. Can you begin to produce something that gives you positive feedback toward something you want to achieve which then spurs you on and keeps you in the game? Are you getting reinforcement or at least intermittent reinforcement?I mean you are the sports coach guy but isn’t that what it’s about in sports? If you take a bunch of kids and put them up against NBA players and they never make a basket even the most determined will drop out, right?Perl, like shell programming, is one of those things that someone can start right from scratch and get reinforcement immediately on and produce useful things.Programmers perhaps by their asperger nature (if you “hang” around them) from my observation at least tend to be very “useless use of cat” esq. [1] where they take great pleasure in being ritually correct even to a fault. Obsessing over small details that don’t matter in a particular situation like a friend of mind who does photography and has poorly composed pictures but memorizes all the facts in the camera magazine reviews. Completely missing the point that his photos suck but his knowledge of the minutia is top notch.For example a guy that does some work for me has gotten upset when I do this:someprocess > /tmp/sometempfile.txtgzip /tmp/sometempfile.txtscp /tmp/sometempfile.txt someserversomewhere:/somedirectoryInstead saying that it should all be done with a pipe. I know that. But it works for me and diskspace and processing power is there (this isn’t the 1960’s) so who cares? Just get the job done.Like I don’t want to know 7 ways to do something I just want to put in my head one way and then move on to the next situation that I need to solve.My point being everyone with this is different. I’m not creating programs that shave milliseconds off a process for Google just something that works for me along with the 1000 other things I am responsible for.[1] http://www.smallo.ruhr.de/a

      2. MikeSchinkel

        And when she said “If someone tells you that using language X would be a better choice than language Y, ask him/her…” Speaking of, curious choice of Obj-C as forward looking. Does she dismiss Swift? (I’d ask her directly, but she has no commenting on her site.)

        1. Christina Cacioppo

          No, but the documentation and stackoverflow isn’t there for a beginner yet. Give it a year.

          1. Kirsten Lambertsen

            Such an important point. When I first started learning, there was no Stackoverflow. Imagine trying to self-teach w/o Stackoverflow.

          2. Andrew Kennedy

            yikes. that would make it so much harder to learn!

          3. Christina Cacioppo

            i remember complaining about googling things to Albert (Wenger), and he said “imagine what it was like before the internet!”i got quiet really quickly.

          4. Matt Zagaja

            I remember logging into irc.freenode.net and preying that whatever problem I had would be resolvable without too much hazing.

          5. MikeSchinkel

            Gotcha.One other thing I was disappointed with, and that’s saying to avoid PHP as not being forward looking. I know a lot of startups using PHP (and Facebook) and they don’t think it’s backward looking. That comment feels like it comes from a Ruby-on-Rails bias. PHP is far easier to get started with than Ruby because it will run practically anywhere, no Heroku configuration required.If I wanted someone to gain success experiences I’d recommend PHP first and have them tackle Ruby on Rails once they got comfortable with basic programming. JMTCW.

          6. LE

            PHP is far easier to get started with than Ruby because it will run practically anywhereAs in you can run it on your own local machine, right from the browser.Similar to how you can write simple HTML in a text editor and run it in your own browser. To me those types of building blocks are important. Putting on top of that (what I’ll call an “abstraction” and I don’t even know if that’s the correct term) is limiting since you don’t have the base knowledge.I just decided to learn java (because some of our software is written in java). The only thing I care about when starting is “hello world” and from that point I will build on my knowledge.

          7. MikeSchinkel

            As in you can run it on your own local machine, right from the browser.Not exactly. For a web app you need a web server like Apache running locally, and MAMP or WAMP are easy to set up for this. But once you have a local web server all you need to do is drop PHP files into the web root and then load them via URL in the browser.(You can also run PHP files on the command line, but I assume we are mostly talking about programming for the web.)Or if you have a $5/mon shared host you can use an editor that saves files via FTP and skip having a local Apache, but a person should only do this for learning and not for editing a real site! 🙂

          8. LE

            Not exactly.As in “learning” it or just starting out and getting a feel for it.you need a web server like Apache running locally, and MAMP or WAMP are easy to set up for thisExactly can all be done locally on a Mac under OSX. And using a service with dynamic dns you can even access it remotely if you want (although you aren’t going to be able to offer a service that way for sure.).Or if you have a $5/mon shared host you can use an editor that saves files via FTP and skip having a local Apache, but a person should only do this for learning and not for editing a real site! :)Right but we are talking about learning I think part of the problem is the things that are needed for a live site are way different than for learning. And for that matter who and how large the customers are for the “live” site matters as well.

          9. MikeSchinkel

            I think we were misunderstanding each other. When you said “right from the browser” I thought you meant “just like Javascript.” I now see what you meant. FWIW, I’ve been programming in PHP mostly full time for 5 years, on OSX (and 19 years with other languages before that.) I keep expecting to start another startup, but agencies keep throwing money at me and I keep failing not to catch it. 🙂

          10. Andrew Kennedy

            I agree with you. My first experiences were with PHP, but why no mention of javascript? PHP and javascript have A LOT in common, but php (at least for me) was harder to learn.

          11. LE

            PHP is server side javascript is client side.There are reasons for both but my feeling is that php has more utility in that if you are doing web software you are going to need to connect to a database so right there not having that tool is going to be a show stopper.

          12. Andrew Kennedy

            javascript also runs server side my friend. it’s a big thing nowadays, that’s what all the fuss is about.

          13. LE

            Insert the word “primarily” into what I said.Sure but the common usage is client side:JavaScript (/ˈdʒɑːvəˌskrɪpt/; JS) is a dynamic computer programming language.[5] It is most commonly used as part of web browsers, whose implementations allow client-side scripts to interact with the user, control the browser, communicate asynchronously, and alter the document content that is displayed.[5] It is also used in server-side network programming with frameworks such as Node.js, game development and the creation of desktop and mobile applications.By the way please define what you mean by “big thing nowadays” because I’m not seeing that as being the case.It’s a bit like saying nosql is a “big thing nowadays” “big with whom?” I can’t imagine that for anyone who is starting out they shouldn’t be using mysql as opposed to nosql. You know walk before you can run.As far as server side languages there is a shit load of things that you can pull up (and people resources as well) to help with php or even perl vs. javascript on the server.

          14. Andrew Kennedy

            I hear you. I mostly use CakePHP when programming with PHP. I haven’t used Laravel or any of the other php frameworks, but agree that PHP is highly documented, stable and can do anything AND you can do a “Hello World” with it on day 1. That’s what I like about it. It’s a touch heavy re: syntax, but it’s a great scripting language. A PHP programmer can learn other languages no prob.That said, my point is about new programmers and best practices for learning how to code. Instead of having to learn HTML, CSS, JS and ruby, python or php, they can just learn the aforementioned three and be building apps that way.In my opinion the DB structure matters much less than having a solid foundation ie understanding loops, if statements, get / post requests, string / variable manipulation, how to debug with the console, how to structure functions etc.Ok, now to answer the question you asked. Instead of me making the case let’s use this: http://redmonk.com/dberkhol…I am not saying that the above is spot on (there are some things I don’t agree with), but github is a pretty solid reference point re: data analysis and this data certainly supports my comment.That said, the ability to create dynamic SPA’s (single page applications) with javascript is a big deal. SPA’s are a different topic, but I mention it because in a mobile world you simply don’t want to wait for the page to reload….. javascript will win here and I think that’s where things are going.this thread is just barely scratching the surface.

          15. LE

            they can just learn the aforementioned three and be building apps that way.Look I am for sure biased in my thinking with this simply because anything that I would do would either be for myself (so whatever can be whacked together to solve the problem is fine as a generality) or would be targeted toward a business which pays money for something. And would get pissed if things didn’t work as had been promised. As such I know what I don’t know so I would never be the one to write the thing that a business uses that I collect money for. I also know enough to know all the things that can go wrong even when using people who should know better. [1]Here is an example, today on HN:http://homakov.blogspot.comhttps://news.ycombinator.co…I mean writing code and writing secure code that actually works when deployed is an art that takes a long long time to get good at. It’s impossible for me to believe that anyone who has been around long enough would disagree with that statement. There is just a metric boatload of things to consider so that things work right securely all the time. Now of course if you are doing something for yourself or writing something that you are giving or allowing people to use for free and the only way they can complain is by email (which you can ignore if you want) than of course it’s different. (Statement not directed at “you”).Yeah but it did say this:Language detection is based on lines of code, so a repository with a large amount of JavaScript template libraries (e.g. jQuery) copied into it will be detected as JavaScript rather than the language where most of the work is being done; and…not to mention other limiting factors such as:GitHub is a specific community that’s grown very quickly since it launched [writeup]. It was not initially reflective of open source as a whole but rather centered around the Ruby on Rails community;Agree here:In my opinion the DB structure matters much less than having a solid foundation ie understanding loops, if statements, get / post requests, string / variable manipulation, how to debug with the console, how to structure functions etc.Agree that a solid foundation is key especially how to debug and most importantly to solve problems.[1] Comcast installed a new modem today because of some issues that we are having at the office. I know enough to know that any surgery can create potential problems and in this case it did. They loaded a different network block onto the modem (not static but DHCP) which I quickly saw because I knew enough to check for that. They also blew out all the private port mappings (private, say 5788 -> 22 (ssh) for example) which I knew enough to see. The tech didn’t say anything “oh by the way you have to renter all your port mappings” he just went to replace the modem and was ready to leave. My point being the more you get into this stuff and you run into problems you learn from it and most importantly that knowledge can be applied in other unrelated situations “no surgery on network before leaving on a trip or you might be fucked if something wasn’t done correctly”.

          16. Andrew Kennedy

            “I mean writing code and writing secure code that actually works when deployed is an art that takes a long long time to get good at.”My opinion = the above will always be true for scaling.That said, by their very nature, modern frameworks offer consistency and reduce the complexities of maintenance/testing/security. I often use the metaphor of skiing (or golf). Remember when you needed to be able to hit a 3 iron (or avoid it and lay-up)? Technology has changed that. Remember when skiis were 200+ cms long? Enter parabolics. You get my drift.We are seeing this natural evolution with modern frameworks. They make it so that “athletes” can get up the curve pretty quickly.Just my 2 cents.I think you’ll find the theory / logic behind node.js to be very compelling. FWIW, Wallmart is exclusively built on node.js…

          17. FAKE GRIMLOCK

            EVERYONE USES IT != IS ACTUALLY GOOD IDEA.

      3. Christina Cacioppo

        “Skate to where the puck is going if you don’t have friends who already have pucks whizzing around the ring.”

    2. Kirsten Lambertsen

      Agree with you on language doesn’t matter. I’ve learned the hard painful way that it very much can. But not in the context of learning, as you say.

  9. pointsnfigures

    Can you learn to code by doing mobile first? Or do you have to learn a web based code and then learn mobile?

    1. Kirsten Lambertsen

      The main good reason to learn to program for the desktop first is that it’s easier and faster to get started and iterate.

    2. Elia Freedman

      You can but I can tell you from personal experience that learning on the web first is much easier. The layers of knowledge required to learn a mobile language first is very overwhelming as the SDKs are massive. You can’t just learn Java, you also have to learn many of the Android SDKs and overhead, for instance. Rails, JS, Python, Node, must simpler structures overall.(I should comment that I current write in iOS, Android, Rails and JavaScript.)

    3. falicon

      You can, but a lot of mobile apps right now are built as extensions or at least on top of web apps (i.e. talk to a web service in the background)…so it’s probably still easier to start at the web level for now.

    4. FAKE GRIMLOCK

      MOBILE ADD COMPLICATION.START WITH NOT MOBILE.

      1. pointsnfigures

        But, the future is mobile. If you program thinking web, it might not work very well on mobile.

        1. FAKE GRIMLOCK

          NO.PROGRAM IS PROGRAM. THAT PART SAME.MOBILE ADD DEVICE LIMITATIONS, TINY SCREENS, TOUCH INTERACTIONS, WEIRD VENDOR ISSUES.LEARN CORE BEFORE DISTRACTED BY OTHER STUFF.

          1. pointsnfigures

            Cool with that-but someday someone will figure out how to teach mobile only.

          2. FAKE GRIMLOCK

            THAT LIKE SAY TEACH MOTORCYCLE ENGINE ENGINEERING ONLY.

          3. Andrew Kennedy

            the grimlocks responses weren’t very unhelpful… that is something I really don’t like ie ‘smug’ programmers… anyways, this evening I was looking at the ionic framework, which is less than a year old. It’s basically a UI toolset that is built on top of Apache Cordova (known as phone gap to many, which converts web files into native apps).ionic/cordova isn’t a miracle product yet (there are some performance issues when files get larger), but it seems like we are seeing performance gains pretty consistently. That said, google has developed a JS front-end framework (known as AngularJS) that does some pretty special things to speed up performance via data binding. So tonight I was looking at how, AngularJS + Cordova + Ionic play together and it’s pretty neat. All of this is evolving web technology that can deliver apps in app stores.link here if you are interested in checking out ionic: http://ionicframework.com/

          4. Donald E. Foss

            Sage wisdom that applies to coding, problem solving and nearly the rest of life.

          5. FAKE GRIMLOCK

            MOST TRUE THINGS TRUE FOR EVERYTHING.

        2. Twain Twain

          Please see my comment above with the YouTube video of Nordstrom-eBay smart mirror and see also this Corning Glass video:* https://www.youtube.com/wat…The future of user interaction could be ANYWHERE WITH A GLASS SURFACE THAT CAN DELIVER AN INFORMATION MODULE. This takes it beyond the mobile vs Web argument.It’s true that, in previous years, programming with a Web-centric approach didn’t translate well into a native mobile experience. One of the key parts of the mobile vs Web difference is that gesture recognition (touch, pinch, slide etc.) exists in Objective-C for iOS, Java for Android and C++ for MS Kinect.The Web languages of PHP, Python and Ruby — although faster and more intuitive to script — are at a disadvantage for mobile in this respect. Yes, the developer could use something like RubyMotion to proxy what Objective-C can do but there’s a loss of transition smoothness that occurs. That’s why, as much as possible, companies prefer mobile apps to be in native language.Given the omni-channel nature of how companies now want their content to be delivered, the developer(s) who know the language(s) that can map and span mobile <=> web <=> smart TV <=> smart mirror <=> any surface by doing the leanest code…….Are rare.Developers can get OCD about only drilling down in one language, one platform (iOS vs Android), one framework and one library. Sometimes, that makes them terrific specialists and sometimes that limits their ability to solve problems laterally because they don’t have reference frames for how to pivot from one language, platform, framework, library to another.In finance terms, it’s the same as someone specializing in CDOs not being able to map over to Corporate Finance. The terms of contract are different.++++++++++++++In my own case, I initially prototyped my system in Objective-C for iOS because the touch gestures gave an interesting data set I thought I could do some neat Machine Learning with.However, quite quickly it occurred to me it would be much more innovative to make the system a Web+mobile hybrid whereby the user can be on any browser (Safari, Chrome, Firefox) and not just click with their mouse but ALSO GESTURE-TOUCH.The experience still feels “native” mobile but they’re actually on a Web browser.This means that there’s no need to code a separate app for:(1.) the Web browser (making sure it’s responsive and will adjust to all the quirks of Safari, Chrome and Firefox as well as different screen sizes): and then(2.) separate mobile apps for each one of Apple devices (iPhone, iPad), Google’s devices (Samsung Galaxy, Nexus, Asus Transformer etc), MS Surface and their different screen sizes.That would have been 10 different versions with 10 different stacks needing 10+ different developers (plus 5+ dedicated to either SQL, AWS, AppEngine databases etc) plus 10+ different designers and 5 Product Managers.In other words, a budget north of $3 million for people skills alone.Let me say that it’s entirely possible for a single developer-designer-PM to code a Web+mobile hybrid system that can also do Machine Learning (AI). And to file a patent for it.

  10. William Mougayar

    It’s interesting that Christina represents a new emerging segment of people who learn to code later, post-grad, and post-work.Really insightful post. Her thoughts are really clear and from the heart.

    1. Elia Freedman

      never too late to become a creator.

  11. Kirsten Lambertsen

    Good on her! It would be cool to know where she, herself, hung out with engineers. I’ll just prop Girl Develop It, right here 🙂

    1. Christina Cacioppo

      Hunch in nyc — but I’ll absolutely start suggesting GirlDevelopIt to others.

      1. Twain Twain

        Four years ago my friend and I sat with Matt Gattis and Harold Cooper to understand Hunch’s API at NYU’s hackathon. My “mad” idea was to do a Data Science mash-up that pulled data from Hunch, Chartbeat, Facebook, Yahoo BOSS and IMDB to make movie recommendations based on people’s tastes and social preferences.I thought the 20-Q&A process involved in Hunch training its AI engine was too laborious and wondered if it’d be possible to make a prediction algorithm from the API data.Unfortunately, the APIs then were wieldy, data sets were missing and the JSON files didn’t quite surface the entities we were hoping for.Several months later, Chris Dixon released a very interesting hack called “Forage”. By then Hunch’s API worked more smoothly.What did Forage do?It was a mashup pulling data from Hunch, FB and IMDB to do music and movies recommendations.——-My hackathon partner went on to join Yahoo! Meanwhile, I went on to code my own system which has a 2-step process to train the AI engine rather than Hunch’s 20-Q&A approach.

  12. kirklove

    I’ve got a techcrush on Christina. She rocks.

    1. fredwilson

      yes, she does

  13. Elia Freedman

    Her forward thinking comment is funny or instructive or something. Obj-C in but Java out. Java is the basis for Android, Obj-C for iOS so really both aren’t going anywhere and are “important” languages.Also funny that she left Javacript completely off the list. If I had to bet on which of the languages she mentions will be popular in 20 years, I’d only bet on JavaScript.

    1. falicon

      Agree.For what it’s worth, I wouldn’t recommend Obj-C or Java to anyone just starting out…both are worth learning, but *I* think too complex as a 1st language (you’ll have a lot of confusion, frustration, and drop off of students with either of these)

      1. LE

        and drop off of studentsYeah the “drop off” factor is huge in learning things. You need something that sucks you in that gives you positive reinforcement. And different people deal with adversity differently.

        1. Andrew Kennedy

          JQuery is the key in my opinion. It’s programming, but almost no learning curve if you know HTML & CSS. JQuery can be a ton of fun.

      2. Elia Freedman

        Agreed. For my money I’d start with JS. Don’t need any special tools (word processor and a browser). You can learn functional programming first and eventually move up to objects. The “stack” is quite simple, especially if you consider the basic setup with jQuery. And it is extremely practical in the modern era as it runs on every device, whether bundled into an app or runs in the device’s browser. Finally, tons of online resources.

    2. LE

      will be popular in 20 yearsOnce again whether it’s “popular” or not depends on what someone is trying to achieve. I remember when snowboarding first came out and you could tell someone’s age just from the fact that they were snowboarding instead of skiing. But you know people are still skiing now and (figuring I’d check my anecdotal thoughts) apparently snowboarding is “in serious decline”. I never tried it I was happy with skiing. Skiing had “secondary meaning for me” snowboarding did not.http://www.bostonglobe.com/…Christina also left off bash or shell programming and a host of Unix utilities and skills.My personal feeling from experience (of a long long time) is I think it’s very helpful to have an understanding of sysadmin things. It’s not that big of a deal to get a VPS running, patched and you have much more flexibility and control than with the layer of something like Heroku on top. And you will learn from doing that. I think it’s important to have that type of base understanding of how things work. (For that matter you don’t even need a VPS you can just use your own Mac running OSX even with a ephemeral IP if you are just starting out and then move on from there).

      1. Elia Freedman

        sysadmin is completely different than programming. This is the problem with programming the modern computer system. Too many parts. As a beginner, can’t overwhelm them with too many things. We are talking learning variable’s and assignment and loops! syadmin is a world beyond that.

        1. LE

          By sysadmin I don’t mean learn enough to be a sysadmin. Just know enough to know what goes on under the hood. Know the basic unix utilities and some shell programming.For example you have a bunch of log files that you need to be able to look at to see some errors. So you know enough to “grep” the files or use “more” or head, tail, tee redirection and so on. Further you know enough to whack together a shell script where you can choose from a menu the particular log file that you want to take a look at. (All to save the time of having to type in “cat /var/log/messages”.) Or you know enough to edit config files and know that you can use sed to change things in a file or find in a directory of files a particular thing that you are looking.Learning to be a sysadmin is a forever process I know that from experience.

        2. ShanaC

          this is true – and when you start learning you often feel very overwhelmed. I don’t know the way out

      2. Twain Twain

        Yes, shell programming is really important.It’s troubleshooting hundreds of command lines that tell you there’s no Fortran compiler in a particular distribution of Yosemite, for example, and then having to install it from scratch.Plus knowing how to hook up to Amazon EC2 via shell with imported-openssh key.

    3. Andrew Kennedy

      see my comment that I just left…. could be titled javascript….

    4. Andrew Kennedy

      +100

    5. Christina Cacioppo

      I don’t really mean to get into a language war, but fwiw: Android documentation still isn’t very good, and JavaScript has weird timing issues that I’ve seen be confusing to beginners (and have found confusing myself.) Node docs are also still pretty primitive, which is fine if you know what you’re doing and sooooo frustrating if you’re beginning.

      1. Andrew Kennedy

        it has nothing to do with a language war. that’s not it at all. I personally found learning MVC concepts to be pretty challenging even though I could run programs (following tutorials) in ruby, python etc. What I think javascript does a great job of is instilling the nature of object-oriented programming in a way this is tangible ie front end scripting. I think everyone should learn some JQuery as it’s easy to learn and makes beginners feel like they can really advance to become more fluent. Just one man’s opinion. It takes guts to learn how to code and to write a post about it so please don’t take this as anything other than a discussison. It’s def not a language war.

        1. Elia Freedman

          +100. I had programmed for years before I tried JavaScript. The is something more tangible about it that I haven’t totally been able to put my finger on. I think it is the immediacy. I make a change, refresh my browser and boom! it works or it doesn’t. No compile cycle, waiting for emulators, etc.

          1. Andrew Kennedy

            like you said, making the page dance. this video tutorial is 8 mins long: https://www.youtube.com/wat…you can do a lot with 8 minutes.

      2. fredwilson

        Now look what you’ve started 😉

        1. Elia Freedman

          This is quite civilized.

      3. Elia Freedman

        By timing I assume you mean the whole asynchronous communication piece? Yes, I can see how that would be very confusing. I was similarly confused by event driven programming when I first started. I wasn’t talking about backend technologies though. I was talking specifically as JS (jQuery) on the front end. Forget node. Make the browser dance and sing!

      4. Elia Freedman

        And what Andrew said: wasn’t meant as a language war at all. Just an observation based on knowing a bunch of languages. I write in JavaScript, Rails, Obj-C (iOS) and Java (Android) regularly and have no preferences. Just an observation as I try to put myself in beginners shoes, which I’ve kind of done continuously over the past few years.

      5. jason wright

        when did you write your first line of code?

        1. Christina Cacioppo

          actual first? high school, prob 2000 or so.

        2. JamesHRH

          This is a good one – I did Fortran @ PACI with Mr Fouchoux (spelling totally wrong). 1979?

          1. Andrew Kennedy

            before I was born. impressive. i took cs classes in college. visual basic. nothing much before that.

        3. Russell

          2013 on UVC portfolio company Codeacademy – their Ruby module, although I’ve skewed more to the front end now, with a heavy focus on vanilla javascript

  14. Dave W Baldwin

    In my region, the teaching of programming is nil. I had an idea that could (at lower cost) build an intro class, one for the younger set and one for older, that would start with utilizing commands that have been coded and move into starting to code. It is starting to snowball and we’re in the process of gaining grant money to purchase the robot to use.The umbrella to the course will be more focused on design because of its importance. Python will be the language they start and I’ll show what that would look like in C++ since that is the language 99% use with the FIRST leagues.End run (intro course) is to plan/build 3 projects and be ready to handle forward movement toward ML and NL. At the same time, a basic intro to the other languages and what their purpose/strength/weakness is will be part of course.I’ll probably be asking for advice.

  15. Brandon Burns

    “Cycling through projects can come off as dilettante-ish to others. Ignore them.”#hardtruth

  16. Twain Twain

    Christina’s self-initiative is terrific and, hopefully, she’ll become a female founder — if she isn’t already one. Who knows what a young woman with a design and economics background who interns at USV and taught herself to code will bring to the table as a founder!Only the other day there was a healthy debate about Design vs Production and where the value and cost is. Find someone like Christina who can design and produce code and understands that the investment value piece is important and……..that’s a potentially strong female founder right there.In SF, I met several young women around Christina’s age and with her design background who were enrolling onto all-female Ruby and Javascript classes. I asked them why they were diversifying their skills sets.Most replied that it’s because, as designers, they hand over their work and then the developers just “Change it too much, away from our original vision. This way what we design actually gets made.”Then at Angelhack I sat next to a team where a 24-year-old female design grad was almost reduced to tears by her male developer friends in an argument about whose idea the social app they were building was. She kept trying to remind them it was her design idea and the guys basically said to her, “No. We’ve changed a lot of it. What we’ve coded is completely different from what your design was. That wasn’t this.” In the end, she simply gave up and removed herself from their team. I found out later that they all lived in one of those startup houses in the Valley and had been together for many months, iterating the same social app at every hackathon.I felt for her.I thought back to how lucky I was around that age; the male engineers at the bank never once “tried to pull a fast one” (despite them being senior in rank and 10 years older) and e-Intelligence was built exactly to my specs.To everyone, I’d say learn how code works and how to code whatever your age is.We can be coders as pre-teens (as I was), dropouts, post-grads, mid-career, in retirement. As well as Christina’s example, we can be inspired by:* 94 year-old who passed his first-ever driving test (http://news.bbc.co.uk/1/hi/…* 97 year-old who passed his Masters in Law after getting his Bachelors in Laws when he was 91 (http://www.bbc.co.uk/news/w…No age has a monopoly on learning and succeeding in each small step of that learning.

  17. Twain Twain

    On Thursday, I posted this graphic onto Google+ as a comment about how I map languages (natural and programming).One of the major — if not THE major — issues in AI is about how and whether we can achieve Natural Language understanding. If we examine the syntax (whether it’s Python or Scala or Haskell) most of it follows mathematical logic and functional forms.It could be that a new high-level object-oriented language needs to be invented if the machines are to understand the meanings of what we type, communicate and share online.Also, it will need men & women, people of all major natural languages etc to figure out.And this is why everyone should learn how code works and learn how to code as much as possible.

    1. Dave W Baldwin

      I will be communicating with you. My end run to the Intro course I’m putting together will be the use of strings, doing so with talking robot allows theory being taught without it being hard core. Insofar as the rest of the languages it comes down to what the person wants to do and what would work best for that scenario. The hard part communicating with the younger set is if they learn something via Raspberry they think they know everything and you can’t get a ‘beginning-path-conclusion’ regarding what they’re talking about that’s understandable. [email protected]

      1. Twain Twain

        Funnily enough, a couple of days ago this guide on 10 cool things to make with Raspberry Pi was posted:* http://www.pcadvisor.co.uk/…It’s not obvious but Nordstrom-eBay’s smart mirror is something you can show the kids:* https://www.youtube.com/wat…On AVC thread, various comments were made about “forward-thinking languages” and whether to build for mobile or Web first.Maybe this video will re-orientate us differently about what programming languages matter in 2-5 years.Now…We could guess that in the future Apple might make an industrial-sized touchscreen and Swift will be the de facto language of that OR Google and Samsung’s TV arm might collaborate and make a giant smart mirror — in which case it would be Android OS with Python (Python is the preferred language to do fast Data Science, after all). The Nordstrom-eBay mirror is run with MS Kinect technology.Equally, we can ask ourselves, “What if the mirror is not native but pure browser?” In which case is it Javascript, PHP, Perl or other as-yet unknown language that’s needed?

        1. Dave W Baldwin

          Thanks. Working with a walking/talking robot will give the bang. It also is good where Python moving to C++ works best with the robot. Utilizing the fun will enable me to show how to storyboard something in a fashion that can be understood which will give a half shot of streaming code to do something that is entering an extended autonomous state over to pushing the time span.Then, later when (still speaking of kids entering High School) they want to do whatever mobile thing, I’m hoping they can see the picture more clear.As far as the 11-12 grader plus adult, I will be moving them into ML/NL more matching their math level and so on.

          1. Twain Twain

            That sounds like a great plan. My own code migration was from C++ to Python.I know the temptation is to “on-board” kids with the most accessible code that they can learn fast.However, I’d make the argument that, longer-term, it’s better to enable the more mathematically-able ones to do the harder code first because it gives them more of a solid foundation and springboard to learn the “easier” languages.

          2. Dave W Baldwin

            True. I’m starting with younger (grades 7-10) that would have a smattering of C++ that would be moved in to. Main thing will be a scripted skit followed by expansion of autonomy that will please the parents enough. The adult (grades 11-12 and college) would do an accelerated of the above (learn the platform) and push the Autonomy so I can do more than one area. There are interested people on the college level who are doing some pretty cool things that I know want to dive into NL while another bright 12th grader would probably want to dive ML and NL. He may be going to Stanford.But right now, I have to focus on the grant to get the bot and market the classes.

  18. Twain Twain

    This is the graphic on Stanford’s dschool which Christina attended. That provides a lot of context about why she felt it was important to take some time out to “walk in the shoes of the developers.”The dschool’s multi-displinary Liberal Arts-esque approach will likely stand her in good stead.Remember what Steve Jobs said in his ‘Lost Interview’ about how Comp Sci should be taught as a Liberal Art……….

    1. Matt Zagaja

      That’s really neat and as someone who has an inter-disciplinary degree from my undergrad I approve.

      1. Twain Twain

        :*), did you spot that Stanford school’s graphic is a representation of the benzene ring structure in chemistry? It’s the basis of all organic, dynamic and catalytic interactions in Nature.The intelligence in Nature isn’t linear, binary and discrete.That’s why the AI community needs to cross-pollinate with other disciplines (and get out of its narrow silo thinking in Maths, Computing and Quantum Information) if technologies are to be intelligent and serve global society.

  19. LE

    For anyone who is teaching themselves to code or thinking about doing so, I highly recommend reading this.Specifically “anyone”.I think when someone is learning to code, it’s important to keep in mind one of the things that Gotham Gal said yesterday relative to the topic being discussed “dream big”.Specifically something like “where do you want to be in X (time period)”. What do you hope to achieve and what is important to you specifically? You know I’m not looking to run a big corporation so my goal are not the same as Gotham Gal’s were. My dreams are different so my path must be different.I think Christina’s thoughts are applicable to someone in Christina’s position with her specific goals. I don’t think they can be generalized to be a good blueprint, direction or guidance for “anyone who is teaching themselves to code”. Not even close.This is actually a big problem with generalized posts about a particular subject being discussed on the internet. They tend to be focused and biased toward a particular person’s thoughts or so long that someone couldn’t possibly understand enough to pluck out what they need to make a decision. Either to little or to much. To much is better but that makes many assumptions as far as understanding and comprehension.If I had to do a mind dump about everything I know and have learned over the years about things that I know about, it would take an entire book or actually much longer than a book. And there is no way anyone would have the time to read that book. Otoh if I spoke to someone in person I could probably, in a few minutes, drill down to specific advice that is applicable only to them saving them the time of reading volumes of data.

  20. Andrew Kennedy

    I think this is great. That said, my post would be very very very different. I might go and write one up this week and share here as I think this is super important stuff.I taught myself to code and code all day, every day, now (full-stop).The most stable and forward looking language in my opinion is javascript (hands down).Javascript is event-based and the future of programming is event-based.Javascript is VERY approachable as a first scripting language and it’s also extremely powerful in both front-end frameworks (ie angular –>data binding / MV*) as well as on the back-end (Mongo, Express, Node). The MEAN stack is freaking awesome.The Node.js community is incredible (the N in MEAN above).It’s fantastic.

  21. Russell

    Great post Christina – thanks for putting your thoughts out there in the opinionated world of coding!I have kept my sales job but spent the past 14 months taking evening courses to learn coding. It is starting to click (slowly!). The most exciting thing for me has been to learn with other people. I find programmers much more sociable than non-programmers give them credit for.I’m most interested in JavaScript and APIs, and found it challenging to find JavaScript specific courses. For anyone in London I highly recommend the course I found at City University: http://www.city.ac.uk/courses/shor….

    1. MikeSchinkel

      Programmers are very sociable, if you are discussing programming with them. I know this because I am one. 🙂

      1. Russell

        Also, I would add one more point – The “Law of the Instrument” – when you have a hammer, everything looks like a nail. Which is why programmers tend to favour the languages they know best. But it is possible to build a house out of wood, stone, or hay bales if you know what you’re doing.http://en.wikipedia.org/wik…–www.linkedin.com/in/russellbc@rbc_nyc

  22. JamesHRH

    Having met Cristina, I can personally vouch for top 1% attitude.Her bullet points on creating things is, to me, the far more insightful portion of her post. I cannot remember how many times I have told my kids ‘the first time you do anything is the hardest, because, by definition, you will suck at it – even if you have some natural talent at whatever you try.”I also like to mention that the 2nd -7th or 8th try will suck too. But then it won’t and you will have learned one of life’s most valuable lessons.

    1. LE

      I have told my kids ‘the first time you do anything is the hardest, because, by definition, you will suck at itIn the beginning when you are learning anything new your brain doesn’t see things as chunks therefore even the simplest things are confusing. You have to process them a letter at a time and think to get anywhere. I think they call the turning point “the aha moment”.Part of this is always attitude.

  23. ShanaC

    The question for me is always what to build. I never know where to start

    1. Twain Twain

      Start where your heart is.It’s the best way not to over-think the build. If what you doodle onto a single sheet of paper makes you go, “Ooh, that’s funny / crazy / different etc” then start there.

      1. ShanaC

        We run into computationally complex problems if I go where my heart is. I mean, in that sense it is good that I make friends with math and comp sci phds, but it really doesn’t get me personally coding.I don’t actually need that much stuff on a day to day level. The closest I can think of is altering some other guy’s web scraper for a better seo tool. But even then, meh.

        1. Twain Twain

          What area in particular are SEO scrapers, KPIs and a whole bunch of Quantified Self apps really really poor at — if they do it at all?Measuring and understanding emotional engagement and what’s in the heart of users.Emotions can’t be inferred from number of clicks, duration on site, downloads and yet that inference happens all the time because there’s this amiss assumption that quantity = quality and the two are mutable.SEO scrapers reflect the frequency of keyword counts and link backs. They’re about popularity and statistics rather than personality and sense.So…right there is an example of going where our heart is which still opens up to computationally complex problems that stimulate our intellects.The machines can’t understand emotions accurately; that’s why sentiment analytics is poor.That area needs talented female developers like you much much more than in SEO scrapers, :*).

          1. ShanaC

            I don’t self describe as a developer. As for SEO scrapers, I can have a discussion with you, but I would never develop this alone (need encouraging friends even for a side project)And yes, quantity does not quality, but you can figure out ways of getting at quality, or quality esque things – but this again is complicated complicated stuff. Math speaking.

          2. Twain Twain

            The interface between the UX, data and bridging the gap between what the business people consider to be “intelligence” and what mathematicians-devs consider to be “intelligence” is one of the most interesting spaces and it’s where I focus.Yes, something simple and intuitive for the user can be complicated complicated stuff under-the-hood, code-wise and in terms of first principles maths.You asked how I got to be like this on another thread…..My degree’s in Maths and I went to Mgmt School so that enables me to map between the two different mindsets.

    2. LE

      Build something that will solve a problem that you have.

      1. ShanaC

        usually a) my problems require a coding toolset greater than I can do (high math -> coding involved. Eg: Transferring an older data science paper about when bloggers write articles into a content calendaring tool for SEO/PR purposes still requires figuring out how to make that alogorithm codably efficient, which is a level of skill above my basic CRUD apps) or b) I have pretty good tools already

    3. Vivek Kumar

      and my problem is that I start too many things, hoping to finish few soon…

  24. LE

    A bit late in the day but this post (from an Assistant Professor ofComputer Science at University of Rochester) just popped up on HN and is very relevant:http://pgbovine.net/program… Programmer: Hey, I hear you’re learning programming. Cool, what’reyou learning?Beginner: I’m starting with some basic PHP and HTML using TextMate onmy Mac.Programmer: Haha, psssh, PHP is so dumb. You should learn Ruby onRails, deploy on Heroku, and code in Vim. TextMate is for n00bs. Oh,then move onto some Node.js, that’s sweeeeet. non-blocking I/O w000000t.Beginner: uhhhhh, ok

  25. marko calvo-cruz

    This was really cool to read, and really good timing too. Earlier this week i decided to use some of my free time (starting with small time intervals) to learn how to code, I eventually want to work my way up to spending large amounts of time blocs every day learning, but my first priority is sustaining my interest on the subject. Right now I’m a Sophomore in college so I appreciate that I have an environment where I don’t have to make sacrifices to learn this skill (other than using that time to “hang out” with friends aka waste time).I’m also doing something similar to Christina’s changelog, it really helps, except mine is sort of like a public blog tracking my progress. I want to use it to (1) keep me accountable and (2) provide a footprints for a new person to follow if they would want to begin coding and (3) keep the useful online resources in 1 place.I’m new to commenting so i don’t know if I should be posting link here, but anyone interested can message me for a link.Thanks for this Fred.

    1. Andrew Kennedy

      it for sure isn’t rude to drop links. welcome to the comment section. it’s a great place to learn from smart people.

  26. Matt Zagaja

    Great advice, I have now added to her twitter follower count.

  27. estraschnov

    This learning code thing is very interesting. In the 70, 80, 90 and even 2000, we were building products so that computers learn how to speak our language. When I was 10 and started using MS-DOS, I can’t recall a movement saying “Learn the command line!” Instead, we were using Windows, MacOS, OS/2. That’s how computers were evolving, and that’s how everybody started using them.Why is it that today, we now tell people: “You remember this command line on MSDOS that you didn’t want to use? Well, you should actually learn something much more complicated. That’s the only way to understand technology, and to get a job!”. That sounds extremely backward to me. Someone needs to come up with a tool that is visual, and that replaces that command line/code.I don’t want to do too much auto-promotion but that what we do with Bubble (https://bubble.is). It’s a visual programming tool, whose goal is precisely to make that people don’t code any more.