 I'm Clint Finley with Silicon Angle. We're here live on theCUBE at Node Summit in San Francisco. This is the first Node Summit. It's dedicated to the new development platform, Node.js, which uses JavaScript as a server-side programming language. I'm joined today by Tim Caswell. He's the community manager at Cloud9 IDE. And before that, he was involved with porting Node.js to WebOS, HP's mobile operating system. And he's been involved with Node, the Node community since the earliest days. He also runs a website called How to Node, which has various tutorials on Node.js. And he's really active at Cloud9 and evangelizing Node and helping people learn about Node. Tim, we just start off with you talking a little bit about what attracted you to Node in the first place and why you got so excited about it. Okay, so at the time I was working in just a PHP web development job. We had to support IE6 and old version of PHP. And as a developer, that was rather painful to me. So in my free time, I'd go home and just experiment with new technologies. And V8 had just come out and I thought it was a cool technology for JavaScript. So I was looking for someone doing V8 on the server. And I looked right on Google and I found this project called V8CGI and there were a few others. And basically they were all trying to take the same model that Python and Ruby does and do it in JavaScript on the server. And I'm like, it's not very interesting. And they were kind of buggy and they weren't really supported. And then I came across Ryan's website, Node.js.org. And there he had this radically different event model where it's non-blocking IO just like the browser has. And I'm like, no, that's something different. That's something cool. And so I started using it and it actually worked more or less. I mean, back in this day, Node's API changed almost daily. But it was really fun. And so I just got hooked on it. I started writing modules for it because it didn't have anything. I needed a database and at the time I was using Postgres. So I implemented the Postgres protocol in JavaScript so Node could talk to the database. And just went from there over the years. I've just been using it ever since. So one of the things you've built was how to Node, which runs on your own blogging engine that you wrote in Node.js, is that right? And you've open sourced that. That's on GitHub. And it uses Git as its backend or as its database. Correct. So how to Node is just, basically it takes a Git repo and there's an article, there's a folder called articles, there's a folder called authors and they're written and marked down. It assumes a certain structure. And then whenever a web request comes in, it will figure out which SHA, because you can put the Git SHA on the URL and so you can read an article at any version of history and it'll render as HTML. So it's actually not that different from how GitHub itself works when you're just browsing a project except it's rendered like a blog. And then the comments and everything else is just used in external service and so the Node engine is just rendering HTML. And what's the name of that platform? So that's the wheat engine. Wheat engine. Is anyone else using that yet? Yeah, it's been used. I've seen about five or six different blogs use it. I recognize it because they usually they don't change my CSS style. And I'm like, I recognize that theme. And I never meant for wheat to be a program for other people to use. I just open sourced it because I figured, well it might be useful to someone. And then I'll help people use it. Now that seems to be a pretty common story with Node.js stuff. Right. So the main thing I really wanted to talk to you about though is what your advice is for developers who want to learn Node.js because as we just talked earlier with Michael Rogers and New New Jobs from the Node firm which you're also involved in. And there's this big shortage of Node talent. So how can people who want to learn Node get up to speed? So if you want to learn Node, I think a very good place to start is you need to understand what Node is good for and what Node is not good for. A lot of people come to know with misconceptions about what it's used for. And it's just not good. And over the years, the one thing that I've discovered is that people new to Node often don't know JavaScript as well as they thought they did. In the browser, like the other experienced developers who've done front end development, maybe for years and years and they're really good at it. But in the browser, there is very little actual asynchronous work. You have a mouse event and you react to that. You have a key press event, you react to that. You may go do some Ajax, give it a call back and get the results, but that's it. In the browser, you don't want to make an Ajax and then depending on that do another Ajax and then just have like 10 nested Ajax calls because the performance would be terrible because the latency in each of those calls can be like 500 milliseconds. So in the browser, there's very little of this nested asynchronous function pattern. And so people don't learn how to do that in JavaScript as well. And then they come to Node and they discover that, well, before there was FSread file, to open a file, you had to first do FSopen, give it a callback, that would give you the file descriptor. And then you had to call FSread, give it an offset, give it the file descriptor, give it a buffer. And it was like one to one with the C API. And you'd have like this little recursive loop here and these nested callbacks here and it was like a hundred lines of code just to read a file. And people have a really hard time understanding the JavaScript that does that to be able to use the Node API. So I would highly recommend having a firm understanding of closures and callbacks, the run to completion model, the way that single threaded event loops work because the Node API itself is actually pretty simple. It's a very small API. It's very to the point and it's easy to understand. That's not usually the hard issue. And then once your team has a good firm understanding of these parts of JavaScript, you can get a lot further. How well do you need to know JavaScript before you start learning Node? I mean, you can start learning right away. It's just- Without any previous JavaScript experience? Right, like I've taught a lot of people who have come to JavaScript because of Node and sometimes they're easier to teach because they don't have preconceived notions. Luckily Node's JavaScript model isn't that different from the browser, so it's not too bad. What resources would you point people to get started? So there's good books on JavaScript. I have a lot of JavaScript articles on how to Node. I like Marion's book, The Big Yellow One, Eloquent JavaScript. It teaches ECMAScript 3, which is the older JavaScript, but it teaches the cores and the principles. That's a really good one for people who don't know JavaScript at all. I love that book. The online version of it has the interactive tutorials, and it covers computer science in general and not just JavaScript, so it introduces a lot of concepts. So somebody who's an absolute beginner, that's a really good place to start. My favorite part of that book is actually in the intro. He has this paragraph that talks about what is programming, and I thought it was the code. He says the art of programming is taming complexity, and this is extra true when you're dealing with the Node program because of the asynchronous nature of having callback continuations everywhere. Your biggest problem in scaling a Node program is not performance. Your biggest problem is keeping your code complexity sane and bug free, and that really is the art of programming, and I'm glad that he teaches that. It's not just a, here's the syntax of JavaScript. This is what a function does. So we have to take a break here pretty soon. So it's howgenode.com, is your website? Howgenode.org. Howgenode.org and cloud9.com. And the cloud9 one is nodebits.org. Nodebits.org. Okay, well, thanks a lot for your time. Thank you.