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.
Curious – where / how / what is your dev background? In a nutshell.
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.
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.
that is exactly my plan. i’m eager to see what i’ll get from codecademy and then supplement from there
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.
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.
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.
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.
Ruby isn’t arguably replacing Python.
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 photohttp://0xfe.blogspot.com/20…
that is cool.
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 http://www.avc.com/a_vc/201…
Care to give the pros for the Microsoft world over using Linux?
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.
Yeah right, Microsoft will be at the head of the pack, the same thing they have been saying for 10 years or more.
Hey John (and Fred). There’s an object for @fredwilson in Fluidinfo, and it reveals a Github repo that Fred has. See http://fluidinfo.com/about/… (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 🙂
Program or be programmed…. What about UX design, maybe photoshop too?
i am not particularly graphically inclined.
Use can use themes from http://themeforest.net 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).
I just tried to sign up but there was a bug. Is that the first lesson?
what was the bug?
The button turns to “Saving” and then just hangs. Nothing changes, no page reload.
is this still happening? we can’t reproduce it on our end.
Just tried again, this time it took 3 seconds but it did finalize, so it may just have been a temporary glitch under load.
should be fixed now. thanks!
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:http://cl.ly/0V0U0k3d360H2Y…However this morning my email-submission hangs on ‘Saving..’:http://cl.ly/1X2F3G031w1h2e…
A couple of clicks later and we are good to go.http://cl.ly/3X010Z0j1v3N0d…Excited!
Hi Fred,I tried to submit my email address last night but got this:http://cl.ly/0V0U0k3d360H2Y…However this morning my email-submission hangs on ‘Saving..’:http://cl.ly/1X2F3G031w1h2e…
A couple of clicks later and we are good to go.http://cl.ly/3X010Z0j1v3N0d…Excited!
Hi Richard – can you shoot us an email at [email protected]? I can take a look at whatever issue you’re having.
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.
Complementary or complimentary?
I always always always screw that up. At least I get then and than right these days.
There, they’re, their is easy to screw up.
accept for that damn except.
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.
I’ve decided to just choose one and always use it. Now I’ve got to figure out which one.
It’s a great crew who came together to support this
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.
Normal behaviour generates normal returns.
My mantra for 2012!!!
Maybe he wants to join the “Coding Soundtrack” or “Indie while you code” rooms on Turntable.fm
Finished a few lessons on the main site today – signed up for the email!
Yes, need to brush up those skills with the kids these days
Heads up – the auto-tweet after you sign up goes to a link (www.codeyear.com) that throws a 404 error. It follows.”My New Year’s resolution is to learn to code with Codecademy in 2012! Join me. codeyear.com #codeyear”While codeyear.com seems fine, http://www.codeyear.com throws a 404 and twitter seems to be appending www when you click on it!
Thanks for the heads up. Zach is in this thread so he will see this
fixed. thanks for the heads up, brad!
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.
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?
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.
it’s like reading and writing to me. everyone should know how to code.
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: https://www.google.com/sear…
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.
Fixing this, thanks Brad!
This is perfect. I was thinking about getting back into coding as a New Year’s resolution, as Roy Bahat has been up to: http://bit.ly/tCR2p9 but I didn’t really have a plan for it. I’m in.
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.
thanks, paul. we think that’s a good theory too 😉
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?
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!
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…
Cloud9 (c9.io) 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.
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.
do you mind outlining what stack you’re using? I’m always interested in this kinda thing.
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.
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.
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….
What is it you want to get out of learning in particular? What do you want to be able to do?
Not sure yet. I just prefer it to knitting when it comes to hobbies. When it works, its super relaxing..
Quite honestly I would start with a basic book on php, mysql, apache.Here’s an example of a book that is already in 4th Edition:http://www.amazon.com/PHP-M…Supplement that with info you find here:http://www.w3schools.com/ph…And here:http://www.tizag.com/phpT/http://www.freewebmasterhel…As well as other free info on the web.
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 http://engag.io
it will indeed! we’re starting with the basics but we’ll move on to more complicated topics.
Yay! But now I’m also getting a 404 error. Android FTW
‘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.
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 http://engag.io
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.
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.
Perfect timing. I wanted to take up coding for my business but also to help me understand my workfield.
Great stuff. I’m in!Love seeing VC tweeting resolutions.
Me too.I had just started coding (for the first time in years) again when I saw your post. Awesome idea.
Wow, their counter shows 997 signups in about two minutes!
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
i hope so!
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 engag.io is bulit on.Any suggestions – this is seemed like a good blog topic to post a question like this.
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.
excellent reply John
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.
great reply Avi
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 🙂
“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.
hi LE – as peter norvig said, learning to program takes a long time ( http://norvig.com/21-days.html ). we’re giving people the tools to get started and move beyond, but it’s up to them to take initiative as well.
It’d be great if codecademy.com 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.
i’d be more than happy to tell you more – email me at contact(at)codecademy(dot)com!
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.
thanks, ben – think we’re now able to handle the load.
Does this start at the very beginning or do you already need to know some basics?
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!
Thanks, Zach.This could be crazy.
Oh no, this could be awesome.I predict #HackRecruiting will be a Donna-led movement within the year.
Well crazy AND awesome. Thank you, Aaron. We’ll see what happens.#HackRecruiting…hmmm…I like that. You are inspiring me.
Donna – go there now – its awesome – YOU*WILL*LEARN*TO*CODE!
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.
“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.
“reinvention has become my personal watchword”right on!mantra for 2012
Go for it!
I like that you’re getting your hands dirty and sharpening some of those past skills
Awesome post Fred – just awesome – anyone can, and should learn to code!
I shared, thought others would like some solution to that yearly dilemma. Thanks 😉
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. 🙂
this is the beginning of a lot more content – thanks for bearing with us, kirk!
Absolutely Zach, just thought I was missing it. Looking forward to the new lessons. Best of luck to you and the team!
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?
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!
Sweet. Codecademy was where I was planning to achieve that goal anyway. 🙂
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)?
http://teamtreehouse.com/ have some great classes. They used to do http://futureofwebdesign.co… conferences & the founder – Ryan Carson (https://twitter.com/#!/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!
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 smashingmagazine.com Or else get a copy of the book “The Design of Everyday things” by Donald Norman.
This, from Stanford, should also be interesting to those wanting to start coding: http://cs101-class.org
Okay. Signed up.Let’s see how this goes! 🙂
I attempting the codeyear thing.
Double yay!:-)(let me know if you need help with anything)
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.
I will try at least …
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.
Thanks so much for this Fred, Paul, and Doug!
aws for hosting the server and git for code repository?
wow, that’s very useful!
thanks for the great tips here.
> 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!
Considering your high level system concept, you may appreciate this post by Nathan Marz. http://nathanmarz.com/blog/…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.
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 🙂
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!
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.
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!
“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.
Me too! I read about codeacademy yesterday, but couldn’t get to the codeyear.com 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! 🙂
thanks for joining us!
Me likey. Me likey alot.
Thanks Fred, USV and Zach…. will be signing up!
thanks, dave! let us know what you think.
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?
i haven’t even thought about that yeti guess it depends on how much i enjoy coding again
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. 😉
thanks, daniel 😉
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.
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.
good luck with the techstars application!
Thank You Zach! I look forward to using Code Year along side Codecademy.
@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 – http://bartaz.github.com/im…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 – http://railsberry.com/) in case you’re becoming a real PRO really soon!
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.
thanks, ben! hope you like the lessons.
@fredwilson:disqus Thanks for the link codeyear.com 🙂
thanks for checking it out!
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!
are you actively coding now or did you just sharpen your skills?
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.
good to hear it worked out for you. hoping we have many more testimonials like yours!
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. http://jankan.tumblr.com/po… Thanks to @codecademy:disqus
Hi Jankan – saw your post. Can you email me at contact(at)codecademy(dot)com? Loved the breakdown.
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?
today i believe
I’d not heard of pusher before. have you used it?
is that what you are using these days charlie?
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.
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?
Hi Kirill 🙂 Add David Pakman to the list.
my partner Albert still codes a lot
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.