My New Year's Resolution: Start Coding Again

It's that time of year for a new year's resolution. I've been thinking about mine all day. And then I learned about Code Year, a service built by our portfolio company Codecademy that helps you learn to code in 2012.

Here's how it works. You give Code Year your email address and they send you a new interactive coding lesson every week.

So my new year's resolution is to get back my long lost coding skills. I've signed up for the weekly email and plan to do them every week. You might want to join me. If so, go here and get started.

#hacking education#Web/Tech

Comments (Archived):

  1. John Minnihan

    Curious – where / how / what is your dev background?  In a nutshell.

    1. fredwilson

      i learned to code in high school in the mid 70s on the mainframes at the west point computer center where my dad was a professor. a friend and I built some rudimentary video games in high school. i earned tuition credits at MIT by writing code for the dept of ocean engineering laboratory. when i got out of MIT, i worked for two years writing code to simulate a navy ship that was being designed by the company i worked for. then i went to business school where i taught computers to other MBAs. my last coding job was building a PC client/server system that automated my mother in law’s business. when i finished that job around 1988, i hung up my cleats.

      1. John Minnihan

        Got it, thnx.I’ll suggest Ruby (Rails if you want general purpose web app skills), jQuery and node.js, then a solid handle on HTML5/CSS3.  Almost nothing else (if you don’t already know it) is relevant.I still use Perl almost every day, but if I were learning a scripting lang today, I’d go Ruby, then Python.edit – to be clear, I do know ruby and am sorta competent w/ python. But if I have to crank something out, I always fall back on perl, which I’ve used since ’96.

        1. fredwilson

          that is exactly my plan. i’m eager to see what i’ll get from codecademy and then supplement from there

        2. tedstockwell

          Nothing else is relevant?  It depends on what problems you want to solve, then pick the right tool for the job.There’s plenty of interesting hacking to be done that has nothing to do with the web.

          1. John Minnihan

            Re-read my comment.   The qualifier ‘…unless you already know it’ is key.If you’re starting from zero, the list I suggest provides a solid foundation for immediate productive web-based development.And yes, if you want hack stats, learn R. Or if you want to do esoteric stuff, take a look at haskell (or go retro w/ perl, hey). And so on etc.

          2. Ed Freyfogle

            HI John,perl’s not retro, it’s thriving and healthier than ever. Witness start-ups like DuckDuckGo (one of USV’s recent investments).We just upgraded to 5.14.2 this weekend on our site (a consumer internet servive with millions of users).By all means explore other languages, each has its place, but please no untruths about the thing of beauty that is perl. Ta.

          3. John Minnihan

            I could have sworn I learned not to get into lang flame wars years ago…Perl *is* retro – no untruth there.  ime, young engineers don’t know it well enough, if at all, to use it for anything beyond one-off scripts.  Python replaced it long ago, and ruby is [arguably] doing the same to python.And as I said, I’ve used perl almost daily since ’96 – created systems that have managed over a billion LOC.  Perl’s been very good to me – no disparagement, just ack’ing the obvious.

          4. Ben Atkin

            Ruby isn’t arguably replacing Python.

      2. Al

        Lots of good reasons to know how to code or at least alter other’s code these days.  APIs to our day to day applications and all sorts of tools create so much room for creativity.for example, I’ve been having fun with this example today (using R) to create an artistic palette from any photo…

        1. fredwilson

          that is cool.

      3. sigmaalgebra

        Yes, early in my career my good background in computing got me pushed to teach computing at Georgetown University.Your ‘programming’ knowledge remains solid and essentially up to date. The golden age of programming languages was in the 1970s, and not much has changed since then. Basically it’s still control structures if-then-else and do-while, data structures arrays, structures, trees, and class instances, divide and conquer via functions and subroutines, and communications via class instance serialization and TCP/IP sockets.Facilities for exceptional condition handling and parallelism, especially with when these two are combined, mostly remain crude in practice.The memory management and ‘garbage collection’ going back to Lisp are now common and important, e.g., in Microsoft’s leading languages based on their ‘common language runtime’ (CLR).With processors with many cores well on the way, programming languages and object libraries are moving to more in parallelism, and, then, we will need progress on ‘transactions’ on class instances in main memory with automatic deadlock detection and resolution (as in IBM’s Resource Object Data Manager).With main memory prices down to $2.50 per GB and 64 bit addressing so common, doing much more just in main memory is a ‘mega-trend’! Some old applied math techniques that needed a lot of main memory and processor cycles may be growing in popularity.You may not have seen relational database and the standard structured query language (SQL). Of course now there are also various ‘no-SQL’ options.Maybe most of the rest of what is important today you might not have seen are just various class libraries (e.g., .NET, which is enormous) and APIs. There is no end to the APIs, and they can be poorly documented, unstable, and rapidly changing.Other topics crucial for production are computer and network systems management and administration; important topics for computers and/or networks include installation, configuration, monitoring, backup, recovery, security, performance, and reliability.There are pros/cons for the Microsoft/Linux worlds.For programming in the Microsoft world, consider

        1. LE

          Care to give the pros for the Microsoft world over using Linux?

          1. sigmaalgebra

            I used to try to be a ‘programmer’ and ‘learn’ all the visible tools. Now I’m trying to be the founder of a company that uses computing, software, the Internet, and some applied math to make $.So, for me now, computing is just a tool. Moreover, for my business, by far the more important tool is the math: The math has some novelty, creativity, originality, and special, high power and provides a special business advantage; given the math, the computing is all just routine. Yes, don’t worry: The math is buried deep inside my server side software, and the users will never be aware of it. The users just want good results, and I happen to know that the crucial key to my results is the math, but the users won’t know this (as far as I can tell, no one in venture capital will know this either, even if I tell them!).I’ve spent a LOT of time learning about Microsoft’s software; e.g., I read or skimmed through about a cubic foot of books. I found, downloaded, indexed, and abstracted about 3000 Web pages of documentation just from Microsoft’s MSDN Web site about Visual Basic .NET, SQL Server, .NET, etc., and that was a LOT of time and effort. The effort has good results: For what’s in those 3000 pages, I can find stuff quickly, better than via just Google, and those pages are good guides to more. At crucial points, my source code has tree names on my file system (in a way that is independent of drive letters!) of crucial Web pages from the 3000. And I’ve done the same for some hundreds of Web pages not from Microsoft.Indeed, this time for ‘learning’ has been much greater than the time for ‘using’: Microsoft has so much done already, by a house building analogy, so many ‘modular pieces’, that mostly the work is just using the Microsoft ‘components’. So, the using is fast given the learning. So most of the time has been for learning. Of course this means my second .NET effort should go much faster! E.g., there is a job interviewing programming exercise in C to take a string and eliminate all the duplicate characters. With .NET that’s just one line, a routine use of the .NET class for strings!Due to such time allocations, now I am no longer trying to learn all I can about Microsoft’s software but to minimize how much of such material I learn! That is, curious for a programmer, I’m trying to minimize how much I learn instead of maximize it!Moreover, with only 3000 Web pages plus some hundreds more, I actually do not have anything like comprehensive knowledge of Microsoft’s software tools. Just .NET is enormous; I don’t know nearly all of it; and there is much more than just .NET.It does appear that I do get understanding of the tools I need as I need them and do not overlook a lot. E.g., so far I have not written even a single line of JavaScript because ASP.NET writes what I need for me, which actually so far isn’t very much. I could write some JavaScript and get a ‘flashier’ user interface, but I want to keep the user interface SIMPLE. So, so far I’m not missing much setting aside JavaScript.So, for my claim that there are pros/cons, I know enough to support this claim.But for an answer to your question about the “Microsoft side”, I don’t know the Microsoft side well enough to do well supporting it, and I know much less, too little, about the Linux side to do well comparing with it.Here’s what I will do: I will give a list of the main considerations that got me to go with Microsoft. This list has to be heavily personal, can’t be comprehensive or expert, and may not be compelling. Then I hope others will do the same or better for the Linux side. My list has seven parts:(1) Microsoft is an especially wealthy corporation.They have, what, $40 billion or so in cash? And that’s after some years ago they passed out some such amount to their stockholders? So, for now they can afford to document, support, fix, and continue to develop their products. For the future, they will be around for a long time, even if Bill just keeps helping Melinda save the world and doesn’t return to work!And Microsoft is strong in some related ways: Gates is a bright guy; he built a relatively bright company; and he is still COB.For the Linux world, there’re a lot of ‘open source’ volunteer effort and a list of high end users who, in a car analogy, take the whole thing apart down to the spot welds and even break some of those and put it all back together with some of their own “special modifications” (to quote from Han Solo!). Still, outside of those few high-end users, the Linux world doesn’t have the Microsoft pile or flow of cash to drive the work to the future.My still little company can’t afford the time to attack Linux like, say, Google or IBM does and, thus, net, wants to stand on the results of that Microsoft strength (I’m not a Microsoft fanboy or groupie and do not want to admire Microsoft — I just want the results of Microsoft’s strength for my business).(2) Documentation.My view is that generally more important than the code is the documentation. This isn’t just an intuitive guess; I have a lot of reasons for this view I will omit here to save space.Experience shows that writing good documentation is TOUGH. So far Microsoft is working VERY hard to have good documentation. In some major ways, their work is quite good. In some other major ways, their work needs improvement.Clearly Microsoft’s efforts in documentation are VERY EXPENSIVE (to quote from the movie “Pretty Woman”!).I’m VERY reluctant to depend on documentation backed by a lot less in effort and cash. I want better documentation and REALLY don’t want to put up with worse.(3) The Common Language Runtime (CLR), etc.Programming languages have been the source of quasi-religious debates with yelling and screaming for decades. But I noticed, for computing so far (I will omit Haskell for 1000 core processors, the dreams of functional programming) not a lot has changed in programming languages for decades.But Microsoft did look at the existing programming languages, especially C/C++, likely wrote many millions of lines of code in C++, apparently did a big upchuck, and did something not necessarily new in computer science but quite good in practical computing: Microsoft conceived of their ‘managed code’ and wrote their ‘common language runtime’ (CLR). That, their CLR, seems to be the core of their work in ‘programming languages’, which is a curious point since the CLR is not really a programming language!But the Microsoft .NET languages for their managed code all stand on the CLR and, really, are not much more than syntactic sugar on top of the CLR. There are some big advantages, say, in ‘interoperability’, here. IBM tried to do some such with their ‘systems applications architecture’ (SAA), and in my opinion just, in especially erudite language, blew it. So, that Microsoft made the CLR and .NET work well, which they do, is GOOD WORK and IMPRESSIVE (to borrow from Darth Vader!).So, likely the two leading .NET languages are Visual Basic .NET (VB) and C#. Okay. So far my path to the CLR is via VB, and I’m just thrilled with it — plenty of good documentation, easy to read syntax, easy to understand semantics, fast compiler with good error messages, surprisingly small EXE files, so far no evidence of any bugs at all, easy access to the .NET classes, plenty of functionality. I understand that C# has some more; I will write some C# if I need some of what it has that VB does not; and then, due to how the CLR works, my VB and C# code will be able to ‘inter-operate’.When I have to hire developers, VB will be an easy start for them. I’m sure that VB can handle quite well 99 44/100% of the software my company needs to be successful. So, VB it is.Right: From Ninja, rock star developers, VB gets “no respect” (to quote Dangerfield). I don’t want their respect: I want a business with $ in the bank. Besides, the Ninjas, etc. have essentially no knowledge of what’s most important in the computing of my business, the applied math. Did I mention, given the math, the rest of my software is routine? And the software for the math I’ve written and will continue to ‘own’, that is, modify as needed.When I go to hire developers, a Math SAT over 700 will be “impressive”; knowledge of C++, less so; if they actually like C++, then I will wonder how they were bright enough to get their SAT score! I will be glad to teach them VB.But in this work on managed code and the CLR, Microsoft omitted C/C++. GOOD! I don’t blame them. In effect Microsoft said that C/C++ are beyond saving. I solidly agree. NO WAY will I try to base my business on C/C++, and the main reason is just what Microsoft saw — for computing for building a serious business, these languages are from terribly inefficient for the developers down to beyond saving.Why? C is too darned simple. It was designed to run on, what, a computer with 8 KB of main memory when now main memory goes for $2.50/GB? For serious work, memory management is just CRUCIAL, a big, HUGE issue, yet one has to dig to find how the C malloc/free do memory management.For their ‘managed code’ and CLR, Microsoft borrowed back to Lisp and implemented full ‘memory management’ complete with reference counts and moving data for memory ‘compactification’. When my business has software that should run for months with no problems, that memory management will help me sleep at night. “Look, Ma, no memory leaks!”. There are also some nice implications for how strings are handled; e.g., string assignment moves no string data but just a pointer. Net, there is nearly no need ever to free memory, and I rarely do. In particular, it’s tough to have a memory leak. The CLR memory management works great and should help me put $ in the bank.For a personal note, since I did a lot with PL/I, to me going from PL/I down to C is, in elementary data types, elementary data type conversions, data structures, control structures, scope of names, memory management, exceptional condition handling, macro support, debugging facilities, and task management, like getting a Ph.D. and then starting over in kindergarten.The C++ definition is just a pre-processor to C. At the time, with Ratfor, etc., Bell Labs was big on pre-processors. The ‘class’ constructs of C++ are a formalization of what C (and Fortran and PL/I) programmers had long been doing anyway and, thus, not so special.But in the finer details, both the syntax and the semantics of Stroustrup’s pre-processor are obscure: When code is written that way, only the programmer and God understand it, and six months later only God. For one programmer reading the code of another, that takes help from God.Note: C started a popular theme — deliberate obscurity. E.g.,j = ++i++;But there are many more such examples. C++ made this theme worse. VB totally avoids this nonsense which to me makes VB a great ‘asset’ in my business leading to money in the bank for me.In particular, for serious business computing, the C++ memory management is continually walking within six inches of disaster. If my business did much with C++, then it would be awash in memory leaks or we would spend far too much time and effort working with, maybe writing our own, memory management tools. Bummer. I don’t want my company to die with the epitaph “It did really well reinventing several old wheels”. I can’t make money mud wrestling with the C++ memory management disaster.A broad lesson in serious business computing is that writing solid code in C++, while possible, is nearly always too difficult in practice.In particular, on Linux, I don’t know what compiled language I would use.(4) Free Support.I’ve found some quite good, free support from Microsoft. The key is just to ask a good question! Generally, for a good question, there are ways to get expert Microsoft people to provide a good answer. How? Just post on relevant Microsoft fora.Twice I was so frustrated with issues in system administration of SQL Server that I was evaporating and depositing myself one Ångstrom thick on the ceiling. Eventually apparently the head guy in SQL Server documentation answered my questions. He did well; problem solved.My net take: Try to avoid the fine details of ‘roles’, etc. Realize that the people in computer science and especially the ones in documentation never took a good theorem proving course in abstract algebra and, thus, don’t really understand how to describe ‘mappings’, so when they say “mapping” try to guess what they really mean — usually works okay. Also, use SQL Server Management Studio (SSMS) mostly just for read-only browsing. Notice that nearly all the serious discussions of SQL Server usage on the Internet are directly in terms of just T-SQL text without mention of SSMS. For any important SQL Server operations, write T-SQL text, document it well, and run it either as ADO.NET or via the utility program SQLCMD.EXE.This support I’ve gotten from Microsoft has been from some people with some expertise that ranged from quite good up to the best. I don’t know where I’d get such support for Linux.Yes, no doubt there are many fora where Linux developers, some good, some not, answer questions. Same for Microsoft.But in the Linux world, I’d have a tough time getting free support from people as good as I’ve gotten at times from Microsoft.(5) Paid Support.Once some years ago I looked into getting the best paid support from Microsoft. The cost was about $60 K a year. So, the cost was less than one full time person.So, for a long list of obscure technical questions each of which a small company will ask once but no more than a few times, it is much cheaper and better for that company to have the best Microsoft paid support than to have such expertise in-house. Good.I don’t know just where I’d get such support for Linux.(6) Big users.Microsoft has some big users, some of the biggest in business. I don’t know just what computing Key Bank, Citi, GM, GE, and the rest of the Fortune 500 are betting their businesses on, but I have to suspect that Microsoft’s products play a major role.I do have a list of some major Web sites that are basically .NET shops; if .NET works for them, then it should work for me at least for my being quite successful. Good to know.I’ve seen some very impressive big business computing by Microsoft using Microsoft’s products; hopefully someday my company will be able to make use of the same. What Microsoft has running very well now would support my business to a grand success, and to me that is very good to know.Part of how big business computing works is set in concrete: The customer gets an Account Executive (AE) from the vendor, and this AE makes sure ‘stuff works’. If some of the AE’s people have to work all night and hop on a plane at dawn and fly to the customer, it works. The vendor does whatever it takes — installation and configuration via walk-thrus or just hands-on, hot fixes, special code, analyzing instrumentation output, dump reading — to make the vendor’s products work.If my business is successful, then I will want that level of ‘support’ from my vendors — Microsoft, Cisco, HP, my HVAC vendor, maybe even my floor wax vendor.There’s more to this big user model: If my server farm is going funny in the head three times a day for no apparent reason and my Web server front end is Microsoft’s Internet Information Server (IIS), my Web pages are ASP.NET in VB, my database is SQL Server, and my operating system is Windows Server, then there’s no ‘finger pointing’ and the Microsoft AE has to have his people make it work.Cheap? No. Worth it? Yes. Do it for less in-house? No. Should my business be able to afford it? Yes.I don’t know just where I’d get such support in the Linux world.(7) The future.Computing continues to change in processors, motherboard architecture, mass storage, communications, maybe even in low level device physics.We are in line to see 1000 cores on a processor working together effectively, main memories of several terabytes, mass storage with latency and data transfer rates much the same as main memory, 100GbE, and more.These changes will require continued high quality work in ROM BIOS, device drivers, virtual machines, operating systems, middleware, languages, libraries, documentation, and much more.For such work for the future, I am sure Microsoft will be at the head of the pack, and I can’t conclude the same for Linux.Okay Linux guys: Ready, fire, aim!

          2. Mark Essel

            Fun read for a recovering ex windows, ex mathematician, wannabe web hacker like myself (8-10 hours a day is still dominated by windows platform and algorithms/physics based modeling). Sounds like your company will consist of mathematicians protecting the math from computer scientists ;).I see a completely different landscape than one dominated by Windows. Like IBM Msft will surely be around for some time to come doing quite well, but they won’t be necessary.There are a dozen languages as friendly as VB (moreso!) which can satisfy your memory management interests. The compaction you and other businesses will need won’t come from RAM management alone, but a combination of RAM and file systems and distributed networks (resource management, the system solution). There are pub/sub tools like Redis which are developed primarily for the Linux platform, even official Microsoft created Windows ports have been rejected!I can’t fault your priorities: documentation and focus on minimizing required technical research but I have had much better experience with open source documentation, and code readability than with Microsoft libraries. A strong technologist will help you explore alternative methods of implementing your product vision.Nowadays the bottleneck is almost never in an innermost loop on a single core, it’s moving and sifting though large volumes of data. Nonblocking operations and access are vital to system designs which flourish and scale.

          3. vruz

            Yeah right, Microsoft will be at the head of the pack, the same thing they have been saying for 10 years or more.

    2. terrycojones

      Hey John (and Fred). There’s an object for @fredwilson in Fluidinfo, and it reveals a Github repo that Fred has.  See… (the Github link appears on the left). You’ll also see plenty of other stuff if you click around. Log in (top right) to add your own tags & values to Fred 🙂

  2. Brad Lindenberg

    Program or be programmed…. What about UX design, maybe photoshop too?

    1. fredwilson

      i am not particularly graphically inclined.

      1. LE

        Use can use themes from or many similar sites which can be integrated into practically any site. For graphics you should have a working knowledge and be able to modify a graphic.  You definitely don’t need to know photoshop but you should know how to size a graphic, overlay text, do layers, merge two graphics things like that. Create thumbnails etc.There are many free programs for windows and mac that you can use. (I’m only familiar with mac versions though and you use windows).

  3. Richard Burton

    I just tried to sign up but there was a bug. Is that the first lesson?

    1. fredwilson

      what was the bug?

      1. Peter Van Dijck

        The button turns to “Saving” and then just hangs. Nothing changes, no page reload.

        1. Zach, Codecademy Co-Founder

          is this still happening?  we can’t reproduce it on our end.

          1. Peter Van Dijck

            Just tried again, this time it took 3 seconds but it did finalize, so it may just have been a temporary glitch under load.

          2. Zach, Codecademy Co-Founder

            should be fixed now.  thanks!

          3. Richard Burton

            Hi Zach,As I mentioned to Fred above this is what is happening on my end. I tried to submit my email address last night but got this:…However this morning my email-submission hangs on ‘Saving..’:

    2. Zach, Codecademy Co-Founder

      Hi Richard – can you shoot us an email at [email protected]?  I can take a look at whatever issue you’re having.

  4. issackelly

    JavaScript was my first introduction to real programming concepts. I love what codeacademy is doing, and reminds me of htmlgoodies of the 90s, but with all the awesomeness of the last several (HOLY CRAP 10+) years

  5. Nathan Hangen

    Love the idea, but wish the page had more detail on language, requirements, etc. Still javascript?

  6. bfeld

    Psyched to see this roll out. It’s super complimentary to the “Software School” concept I’m working on with a bunch of folks in Boulder. Plus, the sponsors (YC, TechStars, Hack NY, and Girl Develop It) are awesome.

    1. Dave Pinsen

      Complementary or complimentary? 

      1. bfeld

        I always always always screw that up. At least I get then and than right these days.

        1. Dave Pinsen

          There, they’re, their is easy to screw up. 

          1. bfeld

            accept for that damn except.

        2. Mark Essel

          You can count on Dave to wear his editor hat no matter what other hat he’s wearing. My brain mangled those as well if it’s any consolation.

          1. bfeld

            I’ve decided to just choose one and always use it. Now I’ve got to figure out which one.

    2. fredwilson

      It’s a great crew who came together to support this

  7. William Mougayar


    1. fredwilson

      Why not?

      1. William Mougayar

        Let me guess:- you want to write an Android App & never have an iPhone equivalent – you want to feel the way startups feel programming til the wee hours- you want to be featured in the Codecademy commercial- you want to see how it has changed since 1988Seriously, I was wondering what the motivation or goal was.

        1. JamesHRH

          Normal behaviour generates normal returns.

          1. fredwilson

            My mantra for 2012!!!

        2. Donna Brewington White

          Maybe he wants to join the “Coding Soundtrack” or “Indie while you code” rooms on

  8. Nicholas Bagg

    Finished a few lessons on the main site today – signed up for the email!

  9. Bala

    Yes, need to brush up those skills with the kids these days

  10. bfeld

    Heads up – the auto-tweet after you sign up goes to a link ( that throws a 404 error. It follows.”My New Year’s resolution is to learn to code with Codecademy in 2012!  Join me. #codeyear”While seems fine, throws a 404 and twitter seems to be appending www when you click on it!

    1. fredwilson

      Thanks for the heads up. Zach is in this thread so he will see this

    2. Zach, Codecademy Co-Founder

      fixed.  thanks for the heads up, brad!

  11. matthughes

    Code Year is just what I need…I’ve been using Codecamey intermittently for the past couple months but haven’t nailed down a consistent routine. 

  12. Dave Pinsen


  13. Ed Freyfogle

    Hi FredI applaud your desire to continue learning. Enjoy diving back into coding (I write this as an MBA company founder who still codes). There’s an immense satisfaction to knowing how it works.Nevertheless, I wonder if too much emphasis isn’t put on coding. The reality is the barriers to entry on coding are getting lower and lower as the tools get simpler and simpler (APIs, jquery, etc) and the knowledge is better shared (Hacker News, stackoverflow, etc). Things that seemed like magic a few years ago are now standard.Especially in the age of rapid cloning, increasingly I see the barriers to success being non-technical factors. Thoughts?

    1. Chris Stocking

      I think Ed makes a good point about the barriers to entry in coding getting lower and lower and the tools becoming simpler and simpler. But, I wonder if he doesn’t draw the wrong conclusion from this observation. There might be some truth to observing this and concluding that coding skills have lost some of their value, but that doesn’t say much about the disadvantage that not knowing to code might put you at. I see this comment and think that basic coding skills will be the job market equivalent of Excel by 2020: everyone will be expected to know it.

    2. fredwilson

      it’s like reading and writing to me. everyone should know how to code.

      1. André DeMarre

        Like reading and writing… That’s interesting. I’m curious to know if there have been successful efforts to teach trivial coding to children. Perhaps concurrently with mathematics around the pre-algebra level? It seems like there might be a way to use one to teach the other.Some cursory searching reveals some interesting happenings:…

    3. André DeMarre

      Modern frameworks and platforms provide valuable abstractions that lower the barrier to entry for developing and deploying professional applications. I think the history of computer science and the information industry could probably be explained in such terms. Over time, we gain an understanding of which abstractions are useful, and these get adopted as primitives with which the next generation of innovations will be built. Consequently, modern technology development becomes more accessible while the lower levels become more specialized.FWIW, I think we’re still in an awkward phase with the abstractions modern frameworks present for internet development. It’s great that development is accessible to more than ever before, but a dangerous trend I am noticing now is an imbalanced focus on what’s happening in application code, with little regard for what applications do in terms of communications protocols. I see this with web dev job applicants whom I ask simple questions whose answers can only be expressed in terms of the HTTP protocol. Far too many interviewees have a very hard time thinking in such terms and the best they can do is tell me what class/library/module they would use in their favorite framework. This wouldn’t be a problem if their frameworks’ abstractions were complete and shielded userland from dangerous decisions, but they don’t; not yet.As we move ahead, it’ll get easier and easier to produce quality applications as we come up with useful abstractions, but I think everyone should know how to do basic coding, all the more so if you work in the technology industry in any capacity.

  14. Zach, Codecademy Co-Founder

    Fixing this, thanks Brad!

  15. Greg Clayman

    This is perfect.  I was thinking about getting back into coding as a New Year’s resolution, as Roy Bahat has been up to: but I didn’t really have a plan for it.  I’m in.

  16. Paul Sanwald

    very cool, fred. I’m a programmer and I went through part of the JS tutorial on codeacademy and the site is very, very well done. I’ve recommended it to friends who are interested in learning a bit more about coding. it also contributes to my theory that IDEs will be replaced by in-browser equivalents (this is obviously happening already).I get a lot of satisfaction out of coding and building stuff and I hope you find the same.

    1. Zach, Codecademy Co-Founder

      thanks, paul.  we think that’s a good theory too 😉

      1. AgeOfSophizm

        Zach, recently started taking (python) classes with MIT Open Courseware and Kahn Academy.  Any particular reason I should be inclined to utilize Codecademy over the other sources?  

        1. Zach, Codecademy Co-Founder

          yep – our tutorials are totally interactive and fun.  OCW and khan academy are great resources as well, but we all vary in how we teach.  give us a shot and you’ll see what i’m talking about!

          1. joeagliozzo

            Zach, I like CodeAcademy(I am a pretty complete coding novice, a lawyer no less!) and have done 77 exercises (581 score, 6 achievements) – but I do find that when I get stuck on one of your exercises the hint is not enough to figure out why I can’t “make it work”.  Maybe a companion forum or something would be useful for users like me!My other suggestion for CodeAcademy is to have a “complete” web app series of lessons that would let you build an entire sample app from scratch, including creating the environment within CodeAcademy, simulate uploading files to the server, programming, etc.  That would be awesome to get the entire process under your fingers…

    2. Mark Essel

      Cloud9 ( and Ace are really sharp. I wish I could use them at work. Well I’ve used Ace but there’s not a handy local file system watch like TextMate or Eclipse. And developing code on remote systems is a no no in my company for security/IP reasons.

  17. Paul Sanwald

    random thought: I re-acquainted myself with functional programming last year by going through the book “the little schemer” and coding along with it. The code academy platform would be perfect for going through this, as the book is written in a socratic manner. The book itself was amazing, and actually contains a derivation of the y-combinator (it’s not just an incubator, you know).I think the site could have a lot of value even for really experienced programmers looking to diversify.

  18. Paul Sanwald

    do you mind outlining what stack you’re using? I’m always interested in this kinda thing.

  19. Paul Sanwald

    john, I don’t think python or ruby are going to replace perl for one-liner awesomeness anytime soon. I switched from perl to python years ago for most things, but I still use perl command line one liners nearly every day, and long may perl live.

    1. John Minnihan

      exactly my point.  If you have perl to fall back on, you do.  It is literally the swiss army knife of development.But if you *don’t* already know it from having learned it OTJ or at uni, you’ll default to using the lang that you *did* learn.  Chicken + egg.

  20. ShanaC

    Before I sign up, will this get past the basics and into basic algorithmic construction and stuff like how to use recursion effectively?I find a lot of these online learn to code sites only get you so far. Then I get very frustrated because I feel like I can’t do anything practical….

    1. LE

      What is it you want to get out of learning in particular?  What do you want to be able to do? 

      1. ShanaC

        Not sure yet. I just prefer it to knitting when it comes to hobbies. When it works, its super relaxing..

          1. ShanaC

            I’m actually halfway through rails tutorial, and I have had more than one of those “I code really well scary dude” types tell me I need to challenge myself more to progress.The long long term goal is to make good art this way. We shall see- posted via

        1. andyidsinga

          what Le said ..w3schools is quite a cool site with a little online editor for playing around with maybe you write a little web app that calculates the amount of yarn needed to knit a scarf or hat 🙂

    2. Zach, Codecademy Co-Founder

      it will indeed!  we’re starting with the basics but we’ll move on to more complicated topics.

      1. ShanaC

        Yay! But now I’m also getting a 404 error. Android FTW

    3. sigmaalgebra

      ‘Recursion’ has a role in part of computer science and ‘computability’ — I’m no expert.Otherwise ‘recursion’ is heavily taught as a key idea in programming.  At the conceptual level, it’s okay.  For actually writing the code, mostly it’s avoided because each ‘level’ of recursion usually involves a lot of overhead in call/return of a function.E.g., an example of ‘recursion’ is the algorithm for quicksort, but usually quicksort is programmed just as a loop.  Similarly for the ‘sift’ operation in heap sort.  For details on quicksort and heap sort see, of course,Donald E. Knuth, ‘The Art of Computer Programming, Volume 3, Sorting and Searching’, ISBN 0-201-03803-X, Addison-Wesley, Reading, Massachusetts.or some more recent, comparable text. 

      1. ShanaC

        Oddly, I’m having a ton of trouble understanding how to build my own quicksort. I think I need more math for this….- posted via

        1. sigmaalgebra

          Here’s quicksort:You are given some positive integer n and an array x with components (locations) x(1), x(2), …, x(n) and want to arrange the values in ascending order.So this is a problem in ‘sorting’. For this problem, of course, the relation less than (<) needs to hold for the ‘data type’ of the components. So the usual data types are numbers and strings, but generalizations are common.The big points about quicksort are that (1) on average for given data suitably ‘random’ the execution time grows like n*ln(n) and (2) the storage used is only the given data plus some storage proportional to ln(n).There is another sorting algorithm, heap sort, that runs in time proportional to n*ln(n) for any input and uses additional storage of a size proportional to a small constant.Thus, heap sort achieves the Gleason bound for the fastest possible sorting by comparing pairs; that’s A. Gleason, long at Harvard and a solver of one of Hilbert’s problems.But on average in practice, quicksort is a little faster than heap sort.Also for simple implementations, when n is large, quicksort does better than heap sort on the issue of ‘locality of reference’ in virtual memory. For less simple implementations, it is possible to modify heap sort also to do well with locality of reference.Also, heap sort is based on the ‘heap data structure’ which can be said to be an ‘implicit binary tree’ and which has other good applications.But, on to how quicksort works:The usual first step is to find the median of x(1), x(n/2), and x(n). Call the median y.Then you start at the two ends, at x(1) and x(n).If x(1) > y and x(n) <= y, then swap x(1) and x(n). Now consider x(2) and x(n -1) and do the same. Continue with such pairs until have ‘partitioned’ all of x into two parts with all the components in the first part <= y and all the components in the second part > y.Then of the two partitions, store the end points of the longer partition and continue with the shorter partition.When done with a partition, get the partitions last stored and continue.This is a fast, intuitive explanation, and some good code needs to pay more attention to some details (left as an exercise for the reader!).There is more on quicksort, heap sort, the Gleason bound, and more on sorting in:Donald E. Knuth, ‘The Art of Computer Programming, Volume 3, Sorting and Searching’, ISBN 0-201-03803-X, Addison-Wesley, Reading, Massachusetts.

    4. LE

      At the level you are at you don’t have to even think about recursion. You could go for years doing useful stuff and not even know that recursion existed.

  21. Dennis Buizert

    Perfect timing. I wanted to take up coding for my business but also to help me understand my workfield.

  22. JimHirshfield

    Great stuff. I’m in!Love seeing VC tweeting resolutions.

  23. Peter Van Dijck

    Me too.I had just started coding (for the first time in years) again when I saw your post. Awesome idea.

  24. Peter Van Dijck

    Wow, their counter shows 997 signups in about two minutes!

  25. Brandon Marker

    I have always wanted to learn (my brother is a PhD who works on improving the efficiency of supercomputers????). Perhaps by the end of the year he will actually talk to me about what he does because I have some tiny understanding of something technical haha

    1. Zach, Codecademy Co-Founder

      i hope so!

  26. John Revay

    I saw Charlie’s comment about full-stack java script…..Can some of the community members provide me w/ some feed back – I am a cfo/vp type – not a hack by any means.Simple question – I am thinking about building (or having built) a prototype of a social networking  concept that I have spent time thinking about/defining.My good friend who is acting as my CTO is suggesting that we build the protype using DotNetNuke or DNN.  DNN is an open source CMS based on Microsoft .NET technology using C#. DNN is extensible and customized through the use of skins, modules, data providers, language packs and templates.  Not exactly the modern web tech stack that Fred framed in a thread w/ William M while discussing the platform that is bulit on.Any suggestions – this is seemed like a good blog topic to post a question like this.

    1. John Minnihan

      Like almost anything where there are many options – it depends.  If it really is *just* a prototype (they never are), then use whatever you know best that gets to MVP most quickly.  Factors I’d consider:- Langs / stacks you already know.  If none, no worries.  If one or two, you shld consider how quickly you can get to a MVP w/ that/those as opposed to learning something new.  Speed matters if you’re trying to get folks excited + show progress.- Framework(s).  Using a framework can make building out your architecture easier than from scratch, unless you’re doing something really, really unique + there’s simply nothing avail.  If you’re designing in an MVC model, an MVC framework is a no brainer.- Future dev hires.  Skills are all over the board for practicing engineers, but young guns (think interns, new grads) tend to have academic knowledge of lots but practical exp. w/ just a few langs + dev tools.  ymmv, obv, but if you plan to hire soon, you have to think abt whether your stack will attract or repel engineers.  Kinda silly, but a reality.

      1. fredwilson

        excellent reply John

    2. Avi Deitcher

      If it is just a mock-up, then it doesn’t matter. But if it is a prototype, these things have a tendency to take on a life of their own. The prototype often turns into the pre-alpha, then the alpha, then the beta, and before you know it, that “cheap prototype” ends up being the foundation for your product.You don’t need to design and architect it perfectly, by any stretch – think Eric Ries’ minimum viable product – but technology selection is really important.I have no religious stake in this one way or the other, but as a business decision I would not build a prototype on MS technology at this stage for 2 key reasons:1) Lock-in – MS products run on MS products, which will tie you into using an entire MS stack forever, or at least until you get the resources to move off of it. If you decide you want to be on MS, you can always do that with Node or Ruby or PHP or Java or whatever code platform makes you happy, but not the other way around.2) Talent – the best people working in the best startups, for the most part, are working in open-source languages and platforms – Linux/BSD, and RoR/PHP/Java/Node/Python – and want to work on them. Why limit yourself to the smaller talent pool?Follow your nose. Nearly every hot Internet company, small or large, is working on open platforms, why buck the trend without a very clear advantage in doing so?As for CTO, if s/he has experience in Internet space – as a coder, engineer, exec, whatever – then great. But if their experience is just academic or inside corporate IT, have them learn the Internet, fast. Stuff is built very differently out in the Net than inside corporations.

      1. fredwilson

        great reply Avi

  27. Jonathan Whistman

    Great idea.  The quick sign-ups must have caused an issue though. I keep getting error messages when registering an account.  Same with my friends.  Or maybe that’s my first lesson 🙂

  28. LE

    “Sign up on Code Year to get a new interactive programming lesson sent to you each week and you’ll be building apps and web sites before you know it.”I signed up because I am skeptical about the progress you can make with 1 lesson per week.  From my experience learning to program is something you would have to devote several days per week to at least 1 to 2 hours per day.  Not to mention time spent figuring out why something isn’t working correctly. 

    1. Zach, Codecademy Co-Founder

      hi LE – as peter norvig said, learning to program takes a long time ( ).  we’re giving people the tools to get started and move beyond, but it’s up to them to take initiative as well.

  29. Guest

    It’d be great if had more infos about how it works, etc… From clicking through the site, it’s unclear if lessons will all be free or if it’s going to be paying lessons at some point.I see they have a call for contributors, but without understanding the biz model, it’d be hard for me to engage there. I wouldn’t mind spending my time benefiting the community, but I’d have to understand the model first.

    1. Zach, Codecademy Co-Founder

      i’d be more than happy to tell you more – email me at contact(at)codecademy(dot)com!

  30. Ben Watson

    Hmmm, I signed up, got past the ‘saving’ button and ended up on “Share your resolution ..” page but the Tweet and Facebook buttons did not appear below the box (though if I hover over the area it shows something is there to be click but no icons are visible). Using Windows 7 Pro SP1 and IE 8.0.7601 which is a pretty standard enterprise configuration.

    1. Zach, Codecademy Co-Founder

      thanks, ben – think we’re now able to handle the load.

  31. Donna Brewington White

    Does this start at the very beginning or do you already need to know some basics?

    1. Zach, Codecademy Co-Founder

      hi donna – we are starting with the very basics.  feel free to shoot us an email if you ever get confused and we’re here to help!

      1. Donna Brewington White

        Thanks, Zach.This could be crazy.

        1. Aaron Klein

          Oh no, this could be awesome.I predict #HackRecruiting will be a Donna-led movement within the year.

          1. Donna Brewington White

            Well crazy AND awesome. Thank you, Aaron. We’ll see what happens.#HackRecruiting…hmmm…I like that. You are inspiring me.

    2. andyidsinga

      Donna – go there now – its awesome – YOU*WILL*LEARN*TO*CODE!

      1. Donna Brewington White

        Thank you, Andy. I really appreciate the encouragement. I did sign up. Now to find the time to actually do it. Two years ago I would never have imagined that I would even be THINKING of doing this, but, then, reinvention has become my personal watchword.

        1. Mark Essel

          “Now to find the time to actually do it” That’s the painful catch with everything. Good luck, at the very least if you work through a few tutorials/exercises you won’t be intimidated by seeing some code.

        2. panterosa,

          “reinvention has become my personal watchword”right on!mantra for 2012

          1. Donna Brewington White

            Go for it!

  32. Seth Gold

    I like that you’re getting your hands dirty and sharpening some of those past skills

  33. andyidsinga

    Awesome post Fred – just awesome – anyone can, and should learn to code!

  34. U. Foley

    I shared, thought others would like some solution to that yearly dilemma. Thanks 😉 

  35. Karl Nixon

    My New Year’s resolution is simple: To appreciate the things that I have right now because not everybody has them. And of course, not to procrastinate. 🙂

  36. kirklove

    Am I missing something or do they still just have those three javascript courses on their site? They were great, but there hasn’t been any new content/lessons in a long time. Unless I’m missing something?I signed up for the weekly emails.

    1. Zach, Codecademy Co-Founder

      this is the beginning of a lot more content – thanks for bearing with us, kirk!

      1. kirklove

        Absolutely Zach, just thought I was missing it. Looking forward to the new lessons. Best of luck to you and the team!

  37. Aaron Klein

    Way cool. I remember writing my first code as a 12 year old kid with BASIC…and the wonder of what you can do with electrons hasn’t changed since.One of my 2012 goals is refreshing my coding skills up to the latest standards. I understand the theory and architecture behind it all, but it’s amazing how fast it changes.I signed up…but I’m hoping to do that a lot faster than a year, so we’ll see how it works. I wonder if you can skip ahead?

    1. Zach, Codecademy Co-Founder

      hey aaron – you can indeed.  we’ll be publishing the same content on our site and there’ll be a lot more content on codecademy than will be contained in code year.  thanks for joining us!

      1. Aaron Klein

        Sweet. Codecademy was where I was planning to achieve that goal anyway. 🙂

  38. Rayhan Rafiq Omar

    Does anybody know of a similar push to increase the base standard of design skills (which I think is just as important as coding knowledge)?

    1. fredwilson


    2. Ela Madej have some great classes. They used to do… conferences & the founder – Ryan Carson  (!/ryan… is a great guy. I am sure it’s worth trying (+ we use them and I know they have great customer service). Good luck!

    3. panterosa,

      Unfortunately, IMHO, design skills are nurtured and innate, vs coding which is a specific skill, like learning French, or subtraction.I work in design and art, and for me worst thing is to have skill ready design unready match make things. Easier to have inverse.Hang out with designer, go to art school for course. But deal with people who have an eye for things. If not, hire talent.


      I haven’t come across such sites like codeyear but focused on “Design”. But you can refer to sites like Or else get a copy of the book “The Design of Everyday things” by Donald Norman.

  39. Rayhan Rafiq Omar

    This, from Stanford, should also be interesting to those wanting to start coding:

  40. Rohan

    Okay. Signed up.Let’s see how this goes! 🙂

  41. vruz


    1. burningfp

      I attempting the codeyear thing.

      1. vruz

        Double yay!:-)(let me know if you need help with anything)

        1. burningfp

          Thanks!I probably will.I do scripting for the CGI software I use, and play with the HTML on my Tumblr theme, so I am hoping some knowledge will bleed over.HNY, BTW.

  42. Alexander Grosse

    I will try at least …

  43. Avi Deitcher

    Kudos to you, Fred. I have always believed that top execs and board members (and investors) – and especially consultants – must know some of the day-to-day nitty-gritty of what goes on in a firm to really get it. The VCs with whom I have interacted for whom I have the least respect have always been those who “just” get the money, don’t have any real hands-on operational experience with their field.

  44. The Scott Anderson

    Thanks so much for this Fred, Paul, and Doug!

  45. Mark Essel

    My two cents based on what I’ve learned in the past 2-3 years.Making time for really digging in to programming is rough. I get a few hours a week to experiment and explore, and many modern languages, tools, libraries and stacks can take years to master. That’s basically one tutorial, a couple chapters, or good blog post to read and work through a week.You can become basically proficient part time in a year (ask “where’s the bathroom” when travelling abroad), but if you focus on a specific element you’ll likely get more out of it.A focused goal would be to learn enough to get a web server up on a low cost/free hosting service (which shouldn’t take long), and leverage a couple of popular APIs (authentication can be a pain but once past it you’re home clear). Your inclination towards javascript (node.js and mongodb) is a solid one. Even client side javascripting can get your feet wet, and is as deep an area as you want it to be.It’s well worth getting familiar with the basics of a version control tool (git!). Just a few commands can allow you quickly compare code, merge and move it around. And there’s no better place than github to share, fork and collaborate.You may also want to speak with folks who are learning to code (even the pros are continually learning), and Meetup may be a good avenue for finding hacker meetings. Pair programming with someone more advanced in what you’re working to learn is awesome if you can arrange it. They can rapidly discuss what takes months of reading and years of expertise to figure out.Once you can kick up a server you’ve got a canvas and a brush, just go paint :D.Coding when you’re not thinking at your clearest is dangerous, you’ll lose more time than you spend. Creating those clear thinking uninterrupted pockets of time is essential.Coding is a conversation between your desire and any number of APIs. Great documentation is a sign of great (and reliable) tools.There’s a story to go with each of these one liners, maybe that’ll be my next blog series “practical coding tips”.

    1. fredwilson

      aws for hosting the server and git for code repository?

      1. Mark Essel

        Git, absolutely (although I’ve used and appreciate svn and mercurial on different projects).AWS may be more than what you need in year one. It allows all kinds of options, but relies on you to be knowledgable on how to deploy. Maybe a packaged hosting service would be better dependent on your choice of framework. Joyent, Duostack, Nodester are good for node.jsheroku for ruby (and now node.js)google app engine is handy for python and java serversFor client side (static) code github is fantastic. has some examples of little hacks (not all complete) that I’ve worked on.Here’s a straight forward “hello world” level one that uses jquery and coffeescript:…There are few visual ones that look cool are simple hacks that I grabbed form javascript which I modified and ported to CoffeeScript while learning.http://victusfate.github.cohttp://victusfate.github.co…if you’ve got webGL enabled this one was a quick 10 min hack for Michelle’s birthday…Single page apps is what I want to get stronger at in 2012.Paolo Fragomeni does a good job explaining what they are here…Henrik Joreteg of &Yet gave a talk…This post shares some concepts that are a little out of my grasp today,…The idea with single page apps is that your views are automatically updated of state changes in models, and can change the state of your model through client interaction.As an alternative approach, I like the design of couchDB which brings data to the edges, and enables the user to experience instantaneous interaction. The challenge is synchronizing those changes and resolving conflicts across many nodes.

        1. fredwilson


        2. Ela Madej

          wow, that’s very useful!

    2. Zach, Codecademy Co-Founder

      thanks for the great tips here.

    3. sigmaalgebra

      > I see a completely different landscape than one dominated by Windows.  Like IBM Msft will surely be around for some time to come doing quite well, but they won’t be necessary.”Completely different”?  Hmm …!> There are a dozen languages as friendly as VB (moreso!) which can satisfy your memory management interests.Visual Basic .NET is just syntactic sugar on the CLR and, thus, not essential.  But I also want to stay with .NET, Windows Server, SQL Server, and Microsoft system management at least for a while!> even official Microsoft created Windows ports have been rejected!You mean that Redis won’t run on Windows?> But maybe a strong technologist will help you explore alternative methods of implementing your product vision.So far, except for the core math, it’s all supposed to be routine.  I’m not intending to be some take off across the Pacific on a wing and a prayer dare devil act here.> Nowadays the bottleneck is almost never in an innermost loop on a single core, it’s moving and sifting though large volumes of data.Yes.  Put pretentiously, the larger architectural issues dominate also just in performance.  I just dreamed up that phrasing; where can I apply for a ribbon?> Nonblocking operations and access are vital to system designs which flourish and scale.Yes.  For scaling, cases of blocking are a bummer since might have to do some careful analysis to obtain needed performance.Gee, in an ant hill, where is the central, blocking scheduling function?  You mean it’s possible to do an ant hill with non blocking?  Amazing!For my server farm, I have an ‘architecture’ diagram, sketched with Microsoft’s PhotoDraw, on one page.So there is a box for Web Servers.  Likely with the right Cisco box in front there can be desirable Web ‘session affinity’ which can get rid of the need for a central, high performance ‘repository’, commonly a key-value store, e.g., Redis, for ‘session data’.  However, a 64 core server with 8 TB of main memory should be able to handle session data for one heck of a large collection of logically ‘connected’ users!  Sure, some fairly simple basic performance numbers should be able to say how many simultaneous users with sessions persisting for how long!So, with session affinity handled via Cisco or with something like Redis, could have lots of parallel Web servers and, thus, lots of performance and reliability.Of course would need an Ethernet LAN between this Cisco box and the Web Servers.  Cisco has some impressive LAN switches, and apparently can have more than one!  Gee, go big-time and have a Clos network of big Cisco switches!  I doubt that anyone has needed that so far.Each Web server communicates with SQL Server for some simple things like user login that should not be a bottleneck.  With good session affinity, could partition the SQL Server data across as many SQL Server instances as needed for desired performance.  And for reliability, each SQL Server instance could have a fail-over instance.With slowly changing data, there’s a cute trick to get a lot of performance and reliability out of something like SQL Server:  Have a little instance for new data and a big instance for old data.  The data in the little one is on-line read-write; that in the big one is read-only; and the data in the little one, if present, takes precedence over any corresponding data in the big one.  As the data in the little one gets big, move it to the big one.The little one, then, sure, can be all in main memory and, thus, blazingly fast.The big one can have its data partitioned across as many instances as desired for performance and redundant instances for reliability.  And since the data in the big one is read-only, solid state disks would be of interest.  Also with read-only get a case of non-blocking.Essentially all my data is suitable for this little trick.Of course, a little, actual engineering should be done before an actual deployment!The SQL Server instances also accumulate some data.  Then there is a batch job run, say, once a day, to ‘crunch’ that accumulated data and put it into some different SQL Server tables.  Then for production, the crunched data is sent to some servers and kept read-only in virtual memory with good locality of reference.  With read-only again get a case of non-blocking.  So, via partitioning and redundancy, can get all the performance and reliability might want!The math runs in some of these servers.  For the results for the users, the Web Servers ask these other servers.To ‘ask’, have a class, allocate an instance, stuff in the data want to send, ‘serialize’ the class to a byte array, use TCP/IP to open a socket to the other server, send the byte array, and wait for the response.  If the response times out, then write a message to the log file and show the poor user an error page.  Else continue with the work.  Simple.With the math done, it’s all simple, just dirt simple.  It’s a lot like a strip mine — a very simple operation done on a large scale.One of the questions will be how much main memory per processor core; while I have some estimates, I will need some more timings to say more accurately.Yes, the performance, and reliability, of the Web site will depend mostly on these ‘architectural’ considerations and not execution time in inner most loops on a single core.So much for architectural hand waving! 

      1. Mark Essel

        Considering your high level system concept, you may appreciate this post by Nathan Marz.…Sticking with what you know is a good mantra while working past the technical challenges and getting to the market test phase. Are your hypothesis right or wrong, which way do you need to shift? Good hunting my algebra inclined friend.

        1. sigmaalgebra

          For my present project, what the user sees is just a Web site, a relatively simple Web site, where HTML, CSS, and ASP.NET are be fine as the tools.  I just want the Web site to do what I have in mind and get a successful business and, thus, feel no obligation to make use of every software tool can hear about on Hacker News.To me the billions of Web browsers out there, the Internet, and HTML, CSS, and ASP.NET are fantastic ‘tech’ opportunities capable of more than I need, and I don’t want to neglect them; I just need a piano and a violin played reasonably well and not the whole NY Philharmonic.If this project fails, then maybe in my next project I’ll want a flashier user interface and then will dig into JavaScript, JQUERY, JSON, AJAX, having a ‘single page’, etc.There is a big, in my mind, HUGE advantage to staying with just HTML, CSS, and ASP.NET:  With just these tools, a billion users can use any of a trillion Web pages and mine right away without having the screen jumping around and doing tricky, unexpected, confusing things that take some days of experience to fathom.I saw and kept a copy of the article on the CAP theorem on 10/14/2011!Yes, the CAP theorem is cute.Yes, I’m keeping essentially all my data in SQL Server for whatever benefits I get, e.g., in backup and recovery of the on-line database, but I am making only light use of SQL Server and making only trivial use of the full functionality of relational database.  E.g., I have no joins and no stored procedures.  The main partitioning scheme can be based just on user IDs, e.g., A-K in partition 1, L-T in partition 2, etc.  Then each operation affects only one partition.The main database manipulation happens only in batch, reads some on-line tables, and writes some tables to which it has exclusive access.  There is no need for any locking at all.  I could safely turn off the log file.  Actually the tables written need not be in the same database or even in the same executing instance of SQL Server.  The batch operation is ‘idempotent’:  I can run it a second time in case anything goes wrong or not.  “Look, Ma, no log file needed!”For the real hard, production data manipulation work of my Web site, to be more sure I won’t have a performance problem, SQL Server is not involved at all.  So, given the tables written by the batch operation, say, once a day they are read and the data in them written to some really simple sequential files that are read, say, once a day, by some of the servers doing the heavy production data manipulation.  In those servers, the data is read-only just in virtual memory and, thus, far from the considerations of the CAP theorem!While the CAP theorem is cute, the use of relational database in my project is so simple that I should still be able to get “consistency, availability, and partition-tolerance” for the operations I need with the partitioning I have.Or, the CAP theorem says that I can’t carry a 100 pound sack and also jump over a five foot fence.  Okay.  But in my business, when I’m carrying the 100 pounds, I don’t need to jump at all!Yes, years ago I read Ullman’s book on database over about two weeks while eating dinners in the Mt. Kisco, NY Diner.For the Redis disk backing and pro/sub, they are cute and a small part of the functionality of the IBM Resource Object Data Manager (RODM) which I helped design.  In part I was reading Ullman’s book to get smart on relational database.  But I also met with Mike Blasgen (maybe the father of IBM’s work on relational database) who confirmed that, yes, database needs to be more ‘active’ which RODM is.RODM is an ‘active, object-oriented, main memory repository’.  The ‘active’ part is that when something happens to an instance of a class, say, some property has its value changed, then a method of that class can execute.  The object hierarchy is, say, like a file system hierarchy, ‘fully dynamic’, that is, can grow and shrink during production work.RODM can use multiple processors.  It supports full transactional integrity complete with a monotone locking protocol and deadlock detection and automatic resolution with roll-back and roll-forward.  So, Redis on steroids?Curiously RODM makes use of ‘cross-memory’ where a ‘thread’ started in one address space can be executing in another address space.  Cute.I was the guy who had to tell IBM’s DB2 group that their work wouldn’t do our work, that RODM could be 1000 times faster than DB2!The intended use of RODM was as a ‘data broker’ in system management between, in the sense of the ISO CMIS/P, many ‘managed systems’ and ‘managing systems’.  In particular, there could be enough locking, etc. so that the managing systems could peacefully coexist all seeing the same managed systems.  The managing systems were to be running some AI which we had already developed and shipped.  We did the AI with GM and MET LIFE and gave a paper at the AAAI IAAI conference at Stanford.  The high point was I got to meet one of my favorite authors, H. Royden!In particular, for pro/sub, via RODM typically a managing system would subscribe to, say, SNMP streams from various managed systems.Uh, it’s been more than a few weeks since I typed my first line of software!It’s possible for one person to envision a new business and be a founder, applied mathematician, server farm architect, designer of simple user interfaces, DBA for simple database usage, .NET developer, ad targeting mathematician, and seller of targeted Web site banner ads, while buying parts on Tiger Direct and plugging together servers!Back to it!Still waiting for someone to write about the pros of Linux versus Windows! 

          1. chhhris

            I wonder if, when I’m finished with Code Year, I will be able to understand this post and his earlier one? As a former English major, I find this fascinating… and incomprehensible 🙂

          2. sigmaalgebra

            Sorry:  Maybe Mark and I should have taken our discussion ‘off-line’.  Yet, there can be some value in AVC readers seeing a little of the technical ‘magic’ that supports the intended financial gains via information technology!So far there is very little in the software part of computing that needs to be difficult.  Undefined terms and acronyms are necessarily obscure but rarely correspond to any basic difficulty.  There’s no need for a college education to understand this stuff!Maybe here I should explain two of the words I used responding to Mark:”Non-blocking”:When your wife takes the one car your family has for girl’s night out, you are ‘blocked’ from driving to a convenience store for Swiss Chocolate Almond ice cream (beer, picking up Chinese carry-out, a Montrachet or Chambertin 1961, etc.).If your family had two cars, then the two of you could proceed without being ‘blocked’.  Then your two separate activities would be ‘non-blocking’.With only one car, your activities are not ‘non-blocking’.  So, with only one car, your activity of feasting has to wait.A Web site with millions of users arriving each day has a lot of ‘activities’ going on at once.  If there is too much ‘blocking’ of pairs of activities, then there will be too much ‘waiting’ of activities, and the Web site can slow down.  Bummer.So, in designing, that is, considering ‘Web server farm architecture’ of, the Web site, it would help the performance of the site to have all the (pairs of) separate activities ‘non-blocking’.And, how to have non-blocking is much as for the family — have two cars or, in the Web site, have more computers able to do some of the needed work in ‘parallel’.”Session Affinity”:When you walk up to the perfume counter at Macy’s to get a birthday present for your wife (or just to get yourself out of the family doghouse for some transgression of delicate distaff sensitivities), and some cute, sweet, petite, drop dead gorgeous, blond, young thing devotes all her attention to helping you find the perfect perfume, you will have a continuing conversation with a lot of back and forth.  Yes, perfume IS expensive!Well, mostly we want a Web site ‘user experience’ (UX) to be much the same.  Lots a luck in that!At any rate, we want the Web UX to be like a continuing conversation with a lot of back and forth.  Alas, for that UX, the basic way the Web works does not cooperate!In simple terms, without more effort, the Web site sends data to your computer and then forgets about you.  It’s like the clerk at the perfume counter gave you a perfume sample and then forgot about you and disappeared to help another customer.But at the perfume counter, you want to continue the conversation with the same one clerk; that is, you want ‘affinity’ with that clerk.  So, at a Web site, you want ‘session affinity’ so that the Web computer continues to ‘know who you are’ as you interact with the site.  E.g., if you have typed in your user ID, then you want the site to remember this, at least for a while, and not ask you to do that typing again.Here’s how session affinity can work:  You connect to the Web site, and one of the maybe 1000 computers at the site gets your connection, develops the Web page to send you, and then sends it.  Buried in that page is a tag, maybeb0494147-35c4-4a37-83d6-219f2891fed7unique in all the world for all time.When you click on that page, you send some data back to the Web site, and the tag goes back with that data.  The computer receiving what you sent looks at the tag and looks up the data for your ‘session’, say, your user ID, what perfume brands you have sampled so far, what you said your price range was, what you said your wife’s name was, what flowers your wife likes, etc.  So the computer looks up your ‘session data’.  For this lookup, it uses the tagb0494147-35c4-4a37-83d6-219f2891fed7as a ‘key’ and gets back the session data as the corresponding ‘value’.  So the computer uses a ‘key-value’ store, maybe software such as Redis, MongoDB, SQL Server, etc.If there is only one key-value store for the whole Web site of 1000 computers, then the key-value store may cause ‘blocks’ and waiting.  Bummer.So, how large might a single key-value store have to be?  Suppose the site is getting 10,000 connections a second, has 3000 bytes of session data per connection, and wants to keep the session data current for 30 minutes.  Then the key-value data store should have room for at least10,000 * 30 * 60 * 3000 = 54,000,000,000or 54 GB.  Not trivial!  Also the 10,000 connections a second at one key-value store can be a challenge!So, to be ‘non-blocking’, have a key-value store for each computer and have ‘session affinity’ so that for your session you are always using the same computer.To implement session-affinity, that is, to get your input back to the right computer, Cisco has a box they can sell that, used in the Internet communications for the Web site, can help.Simple! 

          3. Mark Essel

            I’ll be bookmarking RODM, thanks for the tip.TMTOWTDI :D. Hopefully somewhere down the road I’ll get to see a nice presentation you give on your architecture and how you designed it to avoid any hot areas/collisions. That would be fun.Just remember no matter how many jobs you can do, you can’t simultaneously do all of them equally well. You are a bottleneck.

          4. sigmaalgebra

            You got me thinking:Sure, consider a server farm.  Call it a network with nodes and links.  In the nodes are some queues for work.So, it’s old ‘queuing theory’ generalized to ‘network queuing theory’.  Moreover, likely should consider blocking of various kinds.The first-cut way to evaluate capacity is to find where the bottlenecks are and see what their ‘throughput’ is.Somewhere I have some old software for doing simulations of relatively general network queuing problems.So, yes, there can be “hot areas/collisions”!The architecture I have so far is simple:  There can be a lot of parallelism and redundancy.  So, generally, there isn’t really supposed to be any ‘blocking’ anything like, say, database locking.  For bottlenecks, the general idea is, for each bottleneck that is restricting the needed capacity of the site, add capacity at the bottleneck via parallelism.For my project, for a first-cut farm architecture early on, all this seems okay.Of course, as I go live, I will start small.  If users like my site (fingers crossed while knocking on wood) and usage grows, then I will get some good data on execution times at various ‘nodes’.With those times, just with a little back of the envelope arithmetic, I should be able to do a simple, first-cut but okay design of the next step in capacity.With such usage growth (still knocking on wood), my checkbook and horizon will both expand.  Then there can be some technical questions that are interesting and likely worth the business addressing:E.g., suppose there is a bottleneck at one computer and one way to alleviate it is to install a second computer and for that work have two ‘workers’ in parallel instead of just one.  Okay.  Then likely capacity will increase and the next bottleneck will be somewhere else.But there is a design issue larger than just that one server that was the bottleneck:  E.g., after the second computer, suddenly have two computers running at 50% capacity!  Hmm ….  So, the larger issue is, could there be a way to change the partitioning and parallelism all across the farm to get more capacity for less total computing?  Here we would expect low utilization such as 50% to be less common.So, this is a problem of network design optimization!  Right:  Some simple versions would likely be NP-complete, which is curious but, as usual, not necessarily very important in practice since nearly optimal solutions may be readily available and plenty close enough to optimality!Right:  The business might spend more money trying to save a few computers than the savings are worth!  Besides, as the capacity rises, and we have, say, 9 computers at a bottleneck running 100% busy and install one more computer, then we have 10 computers running 90% busy and 10% ‘headroom’ instead of 50% for capacity for more growth.  That is, as the server farm capacity grows, the simple way of increasing capacity one bottleneck at a time has lower and lower percent of wasted capacity after each step in growth.  So, the NP-complete problem would be of interest only for a small farm where the issue is only a few computers actually not of interest!But, there are two more problems possibly more important:First, there will be queues of work waiting to be done.  Even early on there will be such queues.  So what are these queues?  That is, where are they?  When we find them, we would like to monitor how many units of work are waiting in the queues and the waiting time in the queues.Well the first-cut answer is easy:  The first queues are in the TCP/IP stack for the socket communications!  Commonly one port can have up to 100 connection requests waiting (the API, at least in .NET, permits adjusting that number).So, there are some queues in the farm right away.  GOOD!  In a car analogy, our car design automatically has some springs in the suspension and good for smoothing bumps in the road!A related issue is:  Suppose user demand is 101% of capacity.  Then slowly the queue lengths grow arbitrarily large until the queues are full and the ports refuse anymore connection requests?NOPE!  There is a cute point:  A user clicks and sends their postback data which starts waiting in queues in the farm.  BUT, really the user can’t send another request until they get back the farm’s response from the last request!  So, if the farm is slow, then that slowness also slows down the user and reduces the rate at which traffic comes to the farm!  This is a very old point in interactive system capacity planning, but some people have overlooked it!Second, when the farm really is short of capacity, what then?  That is, we want some ‘graceful’ behavior at the ‘capacity boundary’.  ‘Ungraceful’ behavior in cases of too much demand or a failure of some kind in the farm is too common and to be avoided!So, as the farm grows, one design objective is graceful behavior at the capacity boundary!Yes, I, too, have bottlenecks! 

    4. John Sharp

      “Great documentation is a sign of great (and reliable) tools” – amen, brother.  It’s also a sign that you’re willing to share and not hold your code (and customers) hostage to evolution of the code by others.

  46. Scott Barnett

    Me too!  I read about codeacademy yesterday, but couldn’t get to the site (I was able to get there today) – but I did go to codeacademy yesterday and start taking the first lesson.  I am absolutely joining you.  I haven’t coded regularly in about 15 years, we will see what size bicycle that turns out to be! 🙂

    1. Zach, Codecademy Co-Founder

      thanks for joining us!

  47. Jon Michael Miles

    Me likey. Me likey alot.

  48. Dave W Baldwin

    Thanks Fred, USV and Zach…. will be signing up!

    1. Zach, Codecademy Co-Founder

      thanks, dave!  let us know what you think.

  49. obscurelyfamous

    I’ve been suggesting Codecademy to non-technical folks who want/need to understand more about what software engineers do. Our recruiter, Fariba, has been working through some Codecademy lessons — it’s the best way to grasp concepts and terminology that’s only helpful in a product/engineering-driven web startup.So… Fred, are we going to see a full stack web app from you soon?

    1. fredwilson

      i haven’t even thought about that yeti guess it depends on how much i enjoy coding again

      1. obscurelyfamous

        You’ll like it. I enjoy coding but mostly as a means to the end of building something that people can see. That’s the best part.Then you can go send it around Hacker News and ask if VCs would invest in it. 😉

    2. Zach, Codecademy Co-Founder

      thanks, daniel 😉

  50. Woody Lewis

    I took the Cloudera Hadoop Certified Developer course at the beginning of December and passed the exam. Despite my long career as a pre-Web digital media programmer and Web services architect, I find myself constantly learning, as everyone does today. Now, I’m on a crash course to brush up on my B-school statistics, learn the R language, brush up on Java, grok machine learning, etc. Do as much as you can, whenever you can, because it stimulates the brain and demystifies some of the noise. I recommend it, and you can’t go wrong with AWS.

  51. Eunice Apia

    I’m in! I will sign up for the weekly coding classes. Now that I know basic Dreamweaver,I’m eager to see what I can create. My New Years Resolution is to be more ambitious and driven.  I am currently workimg on my Techstars appilcation. 

    1. Zach, Codecademy Co-Founder

      good luck with the techstars application!

      1. Eunice Apia

        Thank You Zach! I look forward to using Code Year along side Codecademy.

  52. Ela Madej

    @fredwilson:disqus Already tweeted that at you but this is SO COOL you shouldn’t miss it 😉 I remember your post about prezi – check this out if you’re becoming a real hacker soon, this is way better & I just ran into it today: Impress your audience with impress.js –…Also, if you want to learn Ruby/Rails – remember you have a free ticket to the European Rails conference (there will be node.js too!). I happen to be the main organizer in my spare time! Although I predict this might be highly unlikely to… we do have the best lineup of all European Rails events ever  (check speakers – in case you’re becoming a real PRO really soon!

  53. Ben Apple

    This is great! I like the idea of a structured weekly lesson to keep me on task. Ive played around with programming a little with things like codeacademy, but I just end up getting stuck and not really sure how to progress.I think the weekly push for resolutions is cool too. Id love to see it applied to other things as well- fitness and health, languages, history, math, science.

    1. Zach, Codecademy Co-Founder

      thanks, ben!  hope you like the lessons.


    @fredwilson:disqus  Thanks for the link 🙂 

    1. Zach, Codecademy Co-Founder

      thanks for checking it out!

  55. John Sharp

    Fred, this was my resolution in 2008 – it was the best one I can remember making.  The available SDKs, libraries and APIs (including some you’ve brought into existence) are simply awesome.  Good luck!

    1. fredwilson

      are you actively coding now or did you just sharpen your skills?

      1. John Sharp

        Fred, I went all-in.  I decided to take time off and commit two years to relearning the arts with the aim of getting close to the Gladwellian Goal of 10,000 hours.  Two years on, I couldn’t be happier.  I feel current again, in control of my milestones, and like I know what is going on – which is a good feeling. I’m also consuming a lot of the data that is available and some of the output based on that is starting to have a glimmer of value – so I might even see a financial ROI on those two years, in addition to the enjoyment.  🙂  Zach, I love Codeacademy.  Kudos to you and Fred for making it happen.

    2. Zach, Codecademy Co-Founder

      good to hear it worked out for you.  hoping we have many more testimonials like yours!

  56. jankan

    It is fantastic to see so many people learning to code.  I am a developer myself.  I did some text mining to see who (occupation) is learning to code. Surprised to see VCs and Journalists lead the pack.  I have plotted a chart based on occupation and gender.  You can see it here.…  Thanks to @codecademy:disqus 

    1. fredwilson

      Early adopters

    2. Zach, Codecademy Co-Founder

      Hi Jankan – saw your post.  Can you email me at contact(at)codecademy(dot)com?  Loved the breakdown.

  57. Michaela Barnes

    Your New Year’s resolution seemed like a good one, so I thought I’d join you and brush up on some skills I started to learn, but fell by the wayside, over 4 decades ago (never too old to learn?). I signed up, but haven’t gotten anything. Do you know when they plan to start sending the lessons?

    1. fredwilson

      today i believe

  58. John Minnihan

    I’d not heard of pusher before.  have you used it?

  59. fredwilson

    is that what you are using these days charlie?

  60. Mark Essel

    Haven’t tried phonegap, it’s nice to see such JavaScript breadth.Good luck with the port, I did something similar but from Rails to Sinatra (mostly to learn) and it was a great weekend.I haven’t quite gotten myself to think about modules with their own versions of dependencies (as different node packages tend to). It’s versatile but takes additional mental bookkeeping to keep track of what’s in which package.

  61. John Minnihan

    thnx, I’ll check it out.  I’m abt 6 months into using node (and the fantastic dnode) for some socket stuff + am interested in how others are approaching high volume use cases.

  62. John Minnihan

    iirc, I looked at it at the same time as dnode + chose dnode.  Superficially, it looks like it attacks the same problems.worth another look?

  63. terrycojones

    Hi Kirill 🙂 Add David Pakman to the list.

  64. fredwilson

    my partner Albert still codes a lot

  65. Avi Deitcher

    Charlie, just saw that the tag next to your name is “instigator”; love it!I have been using Node a lot in the last year or so, ever since Ryan’s address at jsconf. Love the async style. The irony is that I pay my bills doing business operations consulting; go figure.I agree, there are many highly talented devs who do .Net because “that is what pays the bills.” But those are bills in corporate-land, and even there I am starting to see movement (mostly grass-roots) towards RoR and especially Node.But if this is social, and is in the dynamic Internet space, then working with Internet talent and access to that pool is key. You can and will find  .Net talent, but if you want to move in the Internet with appropriate speed and scale, then you need access to the talent pool and tech that can move that way and wants to. That means open stacks. MHO anyways.