JavaScript Jabber

JavaScript Jabber is a weekly discussion about JavaScript, front-end development, community, careers, and frameworks.

Subscribe

Get episodes automatically

030

030 JSJ Learning & Teaching JavaScript with Noel Rappin


Panel

Discussion

00:52 – Works in training and talent development for Groupon 00:56 – Author of Rails Test Prescriptions and upcoming Master Space and Time with JavaScript 01:21 – Writing a book about JavaScript 02:33 – Focus of the book

  • Part 1: Jasmine and jQuery and the JavaScript Object Model
  • Part 2: Extended examples of jQuery
  • Part 3: Backbone
  • Part 4: Ember

03:46 – Self-published authors 05:15 – Approaches and mindsets to learning JavaScript 06:04 – “Gotchas!” and bad features in Javascript 09:17 – Modeling JavaScript for beginners 11:23 – (AJ joins the podcast) 11:42 – Resources/Classes for learning JavaScript

13:54 – Hiring people with JavaScript experience at Groupon 15:12 – Training workshops 17:00 – Getting new hires up to speed quickly

  • Pairing
  • Mentoring
  • Lectures
  • Workshops

21:38 – Book Learning

  • You can learn at your own pace
  • But it’s hard to ask questions to a book

22:51 – How Noel gained expertise in JavaScript 24:38 – Code reading and learning to program a language 26:18 – Teaching people JavaScript as their very first language 31:55 – Classroom layout 33:42 – Online training

40:00 – Finding a mentor

Picks

This episode is sponsored by

comments powered by Disqus

TRANSCRIPT

NOEL: I’m trying to figure out where the chat is in this stupid Skype interface.

JAMISON: Just imagine the worst place it could possibly be and that’s where it is.

[This episode is sponsored by ComponentOne, makers of Wijmo. If you need stunning UI elements or awesome graphs and charts, then go to wijmo.com and check them out.]

[Hosting and bandwidth provided by The Blue Box Group. Check them out at bluebox.net]

CHUCK: Hey everybody and welcome to Episode 30 of the JavaScript Jabber show! This week on our panel we have, Jamison Dance.

JAMISON: Hey guys!

CHUCK: I’m Charles Max Wood from devchat.tv and this week, we have a special guest and that’s Noel Rappin!

NOEL: Hey everybody!

CHUCK: For the people who don’t know who you are, you want to introduce yourself, Noel?

NOEL:  Sure. I currently work in training and talent development for Groupon. And I am the author of previously “Rails Test Prescriptions” and currently a self-published book called “Master Time and Space with JavaScript”, which you can get at noelrappin.com. I need to spell that out, right? N-o-e-l-r-a-p-p-i-n.com

CHUCK: So I’m little curious, before we get into the topic which is learning and teaching JavaScript, how did you get into writing a book about JavaScript? What’s your background there?

NOEL: You know, it actually relates to teaching and learning JavaScript. I think, I was like… a lot of long time web devs. I spent my first round as a web consultant in around, turn of the century 2000’s. I spent time trying to talk clients out of JavaScript stuff because it was such a pain in the neck. And I kind of got away from it for awhile and came back a couple of years ago to realize that basically, everything had changed and they were actually usable tools now.

And last summer, I was working with a… at that time, Obtiva apprentice and he wanted to learn JavaScript. He was already an okay programmer, just didn’t have much of a JavaScript. But he was a good programmer; he has not much of a JavaScript background. And I genuinely didn’t know what to give to him, where to point him. The books that where there, seemed to either be really focused on a specific tool like jQuery or they were like the good parts book which is the kind of thing that’s most valuable once you kind of already know stuff. And there wasn’t really a book that walks through explaining what was unique about JavaScript in the way that I wanted to explain it to him so I kind decided to write one.

CHUCK: Yeah that makes sense. So what’s the focus of your book then?

NOEL:  Well the focus, the first part, it’s in several parts. And the first part is focused on Jasmine and jQuery and the JavaScript object model. And the kinds of things that you can do with functions and objects in JavaScript that are different from the way they work in other languages. I mean, coming from more immediately, more from Ruby background. So, some of it is specifically the kinds of things that Ruby programmers have trouble with when they come to JavaScript. But you know, there’s a lot there that’s not based on that. And so, a lot of it, all the examples are test driven with Jasmine. And so then the first part talks about the jQuery, mostly. The second part is some extended examples of jQuery. There’s like a ratings star widget and a couple of other slightly more extended examples. Part three; which should be available for sale by the time this posts is about Backbone. And part four which should probably come out by the end of the year. It’s going to be about Ember.

CHUCK: Well cool! Awesome! Well before we get going too much further, I do have kind of a funny story. And that was that when my Virtual Assistant, she tweeted on my Twitter account that we were looking for guests for the JavaScript show and you replied and said “Well, what about self-published authors?” And so, she came back to me and said, “Well what do you think about self-published authors?”And I replied and I said, “Well it depends on who it is.” And then I was looking at Twitter later on and saw it was you. And so I had to email her back again and go, “Well if it’s Noel then it’s fine,” because I already knew you. But it was kind of a funny thing for me because it was like, “Oh well, she didn’t say it was Noel because I would’ve just said fine.”

NOEL: Yeah. Self-published author has a what, a lack of cache?

CHUCK: It depends on the book. The quality of the book, and the topic, the elements, the audience and so…

NOEL: There’s actually been a lot of decent for various degrees of descent good self-published books and specifically the Backbone space there are couple that came out in the last year or so.

CHUCK: Yeah. I have to agree with that. But at the same time, I want some discretion, some screening to go on before I just let whoever come on the show.

NOEL: [laughs]

CHUCK: Anyway, so let’s talk about teaching and learning JavaScript. You do the training, or your primary responsibility is training at Groupon right?

NOEL: Yeah. That’s right.

CHUCK: And you’re training the developers, so new folks come in?

NOEL: Yeah. So, part of our new hire skills training and ongoing skills training.

CHUCK: Right. So let’s talk about learning first. Is there a certain approach or mindset that you have to have in order to effectively learn JavaScript?

JAMISON: It kind of depends on whether you are talking about people learning to program with JavaScript or people who already know how to program with JavaScript. I’m kind of interested in the difference between those two as well.

NOEL: Yeah, I think that learning to program in your first language has similar issues, to some extent, whatever language you start with. There are certain basic concepts that you have to get across, no matter what the language is. Specifically, learning JavaScript coming from another language when you’re already skilled, that involves understanding the things that are specific to JavaScript. And in the case of JavaScript, not obvious. If you come from another object oriented language, JavaScript looks like it’s going to behave the same way as those languages do, but it doesn’t.

CHUCK:  Right.

JAMISON: So do you want to talk about some of the things that are the biggest “gotchas”?

NOEL: Well, talking about people that come to JavaScript from other dynamic object oriented languages, it seems like the expectation, the object model is, it tends to bite people at some point. They expect the things that kind of look like classes and normal JavaScript syntax to kind of behave like classes; and then they don’t. And I also think that functions scope and variable scope works unusually in JavaScript compared to other languages. And I think that’s also the kind of thing that really bites people. I think that even people coming from super dynamic languages like Ruby or Python are not used to messing around with functions the way that good JavaScript style now asks you to mess around with functions.

JAMISON: So, I remember when I first learned JavaScript, all the things that were different about JavaScript were stupid and wrong. Like, I would declare a variable and be like, “Why is it not in scope?”  when I think it’s going to be in scope. “This is stupid”. Like, you notice that tendency with people when don’t understand things, they’re like wrong, not the people themselves are wrong?

NOEL: So, you’re saying that was your beginner mindset? Your introductory mindset, you were assuming just because they didn’t behave the way you expected, it was wrong?

JAMISON: Yeah. I was mad at it for being a different language than Ruby.

CHUCK: [laughs]

NOEL: Well let’s stipulate that there are a couple of features of JavaScript that are basically just wrong.

JAMISON: [laughs] That’s true.

NOEL: But yeah, I think there’s a tendency. Do you think that there’s a tendency that, when you learn your second programming language, (this goes away the more programming languages you learn, I think), when you learn your 2nd programming language, you’re constantly comparing it against your baseline. And the things that aren’t on your baseline are either stupid or brilliant at some case. So yeah, JavaScript compounds that, by having a couple of things that are probably objectively wrong.

But some of the things that you can do with functions in JavaScript are really neat. And if they’re not things even Ruby programmers typically do. And getting into a mindset where you can see that, is part of becoming effective with it. And one the things that when I came back to JavaScript, I was not prepared for; when I stopped doing JavaScript, we’re still in the era of 3-line onClick handlers and no tools. And to come back and suddenly see functions that invoke themselves and calling functions and using functions as arguments all over the place is really common style was kind of jarring. And then that’s the kind of thing, coming from other languages, I think that’s part of the mindset that you need to get yourself into.

JAMISON: So, you mentioned something that kind of peaked my interest. When you talked about how there are things that you can do in JavaScript once you understand it well that are just really beautiful that maybe, if you were a beginner still on the language, you can still accomplish the same functionality but it will just be in a much different way. If there’s a different way of thinking that you approach problems with, when you use JavaScript for a long time, what do you do to develop that in people? Is it just time using the language?

NOEL: I think that there are —- to that and I think this is a general case; you can’t sort of “inject” experience into somebody. You can show them good experience, you can put them in a situation where they will fail if they don’t look at things the right way. You can put them in a situation where they have people who know what they are doing and are modeling a good way to do things. All of those thing sort of help but, people have to discover that for themselves. And there are a couple of roots to that. One of which, some people will be able to see a short example on a blog post and be able to put it into practice. And some people, that’s just not how they learn that kind of experience. They actually need to fail and they actually need to see the bad code first and then see the good code in order to be able to do it. One of the things that makes learning in general really complicated subject is it’s almost so hard to generalize one person’s experience to a general case.

JAMISON: I think I’m definitely in the second group. I have to fail something like 5 times before I really pick it up. Everything that I’m interested in and deeply involved in, I’ve bounced off of several times.

CHUCK: Well I think that’s natural, in the sense that you start out with assumptions that are along the same lines of what you’re familiar with. And then you wind up finding all the edges. And that’s where your failures come in. And you’re like “Okay, this assumption was wrong.” And so you run up against that and you realize “Okay, this works in a different way.” And then you move along and you find the edges of where JavaScript is really powerful, or something that it doesn’t do well, or doesn’t do the way that you thought it would and so you hit that edge and you fail again. But, at the same time you’re moving closer because you’re hitting the walls and figuring out where the, you know, whatever it is your trying to find is in this dark room.

NOEL: Yes.

JAMISON: That’s a beautiful picture.

CHUCK: Yeah. Did you just have AJ join us?

AJ: Yeah, I’m here.

CHUCK: Okay.

NOEL: Hi.

JAMISON: Hey AJ.

AJ: Coming at you live from the desktoposphere of Utah …

CHUCK: [laughs] Alright.

NOEL: Hi. I’m Noel.

JAMISON: [laughs]

CHUCK: So, are there any terrific resources or classes or anything like that you would recommend? I mean, other than your book, obviously, that people can go to learn more about this?

JAMISON: I’m just going to say Chuck totally teed you up right there.

NOEL: I already did that.

AJ: Sell, sell, sell.

NOEL: Yes. I would recommend my own book. I think it to some extent, depends on what specifically you are looking for. There’s actually just a Reddit. Somebody asked this on Reddit, and on Reddit JavaScript. I think that if you’ve already failed at writing enough JavaScript, then I think you’re at a place where the good parts book will help you. But, I also got a lot out of the JavaScript Patterns book. When I first looked at it, the Stoyan Stefanov JavaScript Patterns Book, and there was both sort of general guides, good practice. I think that they assumed a certain level of experience with the language already. Like I said at the beginning, I kind of struggled with what a good advanced beginner introduction is to JavaScript.

CHUCK: Right.

JAMISON: One that I have seen recommended to people is Eloquent JavaScript. It’s a free one. You can also buy the hardcopy if you want. That one’s alright.

NOEL: Yeah, that’s something I’ll look at. There’s actually a book in beta that I read in part, that might actually be fully release, it’s called Maintainable JavaScript. It’s an O’Reilly. And it seems like, (I’m probably going to get this wrong; which is because I haven’t read the whole thing) but it seems like an attempt to sort of synthesize a lot of the areas of JavaScript coding guidelines. Because I think, another thing that makes JavaScript kind of tricky is such a desperate community that is trying to do so many different things. And so many different people therefore, have so many different kind of valid style that it could be hard to sort of figure out where to start. And this seems to be an attempt to try and synthesize that, which I thought was interesting.

CHUCK: Awesome. I’m a little curious. So Groupon, are you folks typically hiring people with JavaScript expertise or are you finding people that have expertise in other things like Ruby or Rails and then training them on how to use JavaScript?

NOEL:  We do both. JavaScript is not the main focus of our training, although we do offer a JavaScript workshop that we run every couple of months. So, we have people who come in with JavaScript experience. We also have people who are moving to a more of a front-end development and we also have people who want to start working on some of the frameworks that we work. We have both Ember and Backbone in production or internal code, so that’s a lot of different things to learn if you’re coming at it for the first time.

CHUCK: Right. And so most people have expertise on some other language and then pick up the java script stuff.

NOEL: Yeah. Like I said, we have both. We definitely have people who come in from more of the front end side that have JavaScript already. And then sometimes, they move and want more of the back-end stuff. And we do a little bit of Node stuff too.

CHUCK: So, as a trainer, how do you approach that?

NOEL: Well, a challenge in that, when you’re running like  a 1-day kind of workshop and you have people that are at various degrees of incoming ability, it’s a little bit like juggling a tennis ball and bowling ball at the same time. It just increases the degree of difficulty. We have very… I don’t know that I would say that I’m never completely satisfied with the things you put out. We’re always trying to do a little bit better. We have a very intense one day Jasmine-jQuery-Backbone, mostly Jasmine-Backbone course that assumes a certain level … it assumes you already kind of know or can figure out like the basics syntax. We talk a little bit about how to test stuff with Jasmine and we talk a little bit about the quirks of the object model, the prototype model, using functions as objects, that kind of things, using functions to simulate module’s scope. So, the stuff that’s sort of specific to JavaScript that you wouldn’t necessarily assume coming from other languages.

JAMISON: And that’s the thing that happens once every few months? That’s not what every new hires go through?

NOEL: Well, every new hire, no because a lot of our hires don’t need JavaScript. We don’t do anything for every new hire. Oh, I shouldn’t say that. But we don’t do a specific skill training for every new hire.

CHUCK: Right.

JAMISON: So, I’m going to see if I can pick your brain about this a little bit. I mean Groupon is a gigantic company with a huge engineering department. Let’s say hypothetically, you worked at a small company that was still hiring new people.

NOEL: What’s hypothetic?

JAMISON: A very hypothetical, but not at all hypothetical. Anyways, at what point, because we don’t have the resources to devote to a full-time training person, right?  So, how do you find the balance between getting people up-to-speed quickly but if you take away an engineer, that’s like an 8th of your engineering team taken away to train this person.

NOEL: So, I’m all in favor of moving this conversation out ways where I could conceivably get myself in trouble, so hypotheticals are fantastic.

JAMISON: Okay.

NOEL: So, I was at, Obtiva a smaller consulting company before Groupon and typically, the mechanism there was a lot of mentoring and pairing. It’s sort of Obtiva like to have people like to have, at all kinds of various skill and experience levels, working together whenever possible. And one of the reasons for that was so that relative experts and relative novices would pair and not to be transferred that way as part of practice. And that would be really effective if your senior people buy into it.

JAMISON: So hypothetically, new hires would pair around with other people in different areas that they’re not as experienced in?

NOEL: I think that’s a good idea in general. If you’re bringing in new hires, and you got a small team and you want the new hire to learn as quickly as possible, I think having them to sort of pair around is a really good way to do that. And I think that that also tends to sort of get them a tour into the tools that people are using and the styles that people are using and allows them to contribute without having the pressure of having to learn everything by themselves immediately. It can be hard to put into practice I think, because in that place aren’t necessarily set-up for pairing like that, but to me, that’s exactly what I would do.

CHUCK: Yeah. I’m actually working on a remote team and we are pairing on pretty much everything. And it actually worked out pretty well. So, I have more expertise in both JavaScript and Ruby than several of the other guys on the team. So, when I’m pairing with somebody, a lot of times, I can kind of guide things while they code. And the guy that I’ve been pairing with for the last few days, he’s excited both because he gets to write the code and because he gets to learn more about the JavaScript that we’ve been writing  because we’ve been working primarily in JavaScript. And at the same time that he can learn some of the tricks and tools that I use to get the job done. So, it pays off in a lot of ways to do that. And you can kind of get focused on the skill sets that people need to solve the problems that you’re after. And by doing that, then people not only gain experience and gain knowledge, but they’re gaining specific experience and knowledge that relates to what you’re after.

NOEL: Alright, it’s a way to focus that. It’s a very agile kind of approach. It’s Agile because …. but it’s also agile because it tends to be just in time and focus on what you’re trying to do.

CHUCK: Yep. So then what’s the advantage of doing like a day or two’s worth the training over doing a day or two’s worth of pair programming?

NOEL: Well if you feel like you know, lecture and workshop, well lecture and workshop are a little bit different here, but lecture is notoriously good at covering a lot of ground very, very quickly. It’s notoriously bad at in depth learning. I think that the advantage of a short-training class is that, it gives you a chance to explicitly cover a lot of foundation stuff that had only intermittently come up if you’re on task. Like an on task is really good for “This is the framework we use, this is the style we use, this is the problem were trying solve now”. But a workshop is really good at, “Hey, this is how a JavaScript object works and we’re just going to cover that for a couple of hours”.

CHUCK: So, basically what I was saying is that, you know, if you sit down and do training, then you’re giving them a baseline that they can work from as far as just knowledge. And then, as opposed to in practice, you’re only going to be confronted by certain things at certain points and understanding some of the underlying concepts is going to enable you to do that much more, once you connect the dots through experience.

NOEL: Yeah, and it also allows you to kind of assume a certain level of knowledge on the part of your team.

CHUCK: Yeah, and that makes a lot of sense. What about book learning? I mean, you wrote a book.

AJ: Book learning’. You know how it’s pronounced?

NOEL: Learnin’. Book-learnin’. Yeah.

AJ: That being edu-macation.

CHUCK: So, I’m wondering when you wrote this book specifically to address some of the things that people have a hard time with in JavaScript. Is there more or less value in learning from a book as opposed to sitting through training or pair programming or does it just depend on the person that’s trying to learn?

NOEL: I think to some extent, depends on the person. Books have a couple of facts relative to learning.  Like a book, you can handle it and take your own pace. And if the book has examples and they are good, which is hard to do, then you can take them at your own pace and you’re not tied to keeping up with the guy who is talking at the front of the room. That said, it’s hard to ask questions directly to a book. You know it’s kind of a trade-off. My experience is that some people really do click with books and particularly some books I guess, and some people really have trouble with that mode.

CHUCK: So, one other question that I have for you is it sounds as you’ve gotten into JavaScript a little more recently than maybe Ruby or some of these other programming languages. Did you actually sit through a lecture or training or did you kind of pick things up on your own? How did you gain expertise in JavaScript?

NOEL: So when I came back into doing JavaScript… again, JavaScript was something that I had messed with. Almost from the beginning to like a 3-line script level. When I started going back to it and started using the really good JavaScript programs, I was lucky enough at the time to have a couple of really expert JavaScript programmers around. So, seeing the code that they produced, and first of all trying to puzzle it out and second of all being able to ask was really valuable. And at that point, I had enough information to kind of boot strap my way through the book and the JavaScript patterns book. And even the definitive guide, which is overwhelming for anything other than reference, has really good description in some places of exactly what’s going on in the language. And it’s not something that I would necessarily throw at a novice because it’s very heavy. But it’s really the explanation exactly of what the language is doing at certain spots. It’s pretty detailed if you’re ready for that kind of thing. So that was most of what I did and try to replicate the code that I was seeing in the projects that I was doing. So I was actually, to some extent, putting myself into practice. At the same time, I was also working with experts and I was augmenting that with trying to learn it on my own. Especially, so that I can explain it to the people who are even more junior than I was at the time.

CHUCK: Right. I kind of like that approach too, where you basically said that you were reading code, talking to the people who wrote the code and then also writing code. Does code reading really play a huge role in learning to program a language?

NOEL: Well, if you have the, I think that one of the things that’s tricky about that is finding an example of the code level that’s really good to read into. It’s hard to jump in to looking at the framework code or a lot of the open source codes that are available; that I should say, that the open source code that’s available tends to be really heavy on frameworks and libraries and not quite as heavy on the kinds of tasks that most developers are using the frameworks and libraries for. And then, you get into looking at even blog posts and examples, things like that, and they tend to be a little bit simplistic. Just for the reasons it’s hard to write an example that’s not a little bit over simplified from the real world.

But, if you can find a code base or if you have a code base that has a really good piece of JavaScript attached to it that’s it’s a helpful way to learn stuff. Specially , one of the great advantage is that JavaScript has now, which I would not have said several years ago, the developer tool kits in the browser, if you’re doing browser stuff, really make it possible to play with the stuff in the way that in X number of years ago, which is really a real challenge. And one of the advantages that JavaScript has, I think as a first language is that, if you’re doing browser stuff, the ability to play the stuff and see what you’re doing immediately is really powerful.

CHUCK: Yeah. That makes sense.  Do you guys have any questions for Noel before I keep steaming on the head? [laughs]

JAMISON: I kind of asked about it earlier, but what do you think about teaching people JavaScript as their very first language? I thought about this a lot because it’s the most widely installed programing environment right ,just in the web browser. But it seems like some of the quirks might be a little bit tough for people to wrap their heads around with their first learning. So, I don’t know. How do you think that trade off works? Is it better just to use a language that maybe is a little more straightforward or how do you think that works together?

NOEL: So, I think it has a strong case for it now. And that’s not something that I think I would’ve said a few years ago. I think the fact that it is really easy, it’s in the browser so that you don’t really need to go through complicated install features. And as a novice, you wouldn’t really care too much about the browser quirks. I think that’s really powerful. Like I said, the ability to teach it a novice in such a way that they can actually see what they’re doing,  see the changes that they’re making even if you just started into the console and start to put something on the page, and start moving it around. That’s very, very powerful. I think the quirks, I don’t know. That argument would bother me more if I could think of a language that would be a first time program language that which didn’t have crazy quirks like…

JAMISON: Yeah I guess if it’s your 1st language, then you don’t know that they’re quirks. They’re just how things work.

NOEL: Well, I don’t know. I still think I’d recommend Ruby to somebody.

CHUCK: It really depends right? It depends on where they want to go with the programming. I mean, if they’re interested in just general, programming then yeah Ruby or Python or one of these. But if they want to just do the deep dark low-level programming then you may teach them C. Even though C is a little bit more challenging to completely understand.

AJ: My argument would be that it’s a lot easier if you’ve got some structure and then you learn to take something that has no structure out and make a structure out of it. So, you get like a model to build from.

NOEL: Yes. I think that, if you’re looking for exceptionally clean programming language for the first programming language, I would actually probably pick Python. I also don’t think it makes much a difference as we kind of think it does, in terms of what’s hard and what’s easy to teach. At least this sort of group of dynamic kind of scripting languages I think, are all reasonably similar in terms of how hard or easy they are for a novice to pick up. I think that one of the advantages, the JavaScript has advantages and disadvantages, one of JavaScript’ big disadvantages here is there are things that novices are going to do which that are just really, really, really bad ideas. In a way that Ruby tends to protect novices from doing really, really bad things casually. I kind of had this but I didn’t want to mention this:  One of the ways in which I learned,  these JavaScript style was through CoffeeScript. And the JavaScript that CoffeeScript puts out, I don’t know that I’d recommend that in general. I’m not sure that I would go to CoffeeScript as a first language instead of JavaScript. Although I might, in the right circumstance. Looking at particularly what CoffeeScript calls a class, and comparing it to the JavaScript, that it puts out was really helpful for me in understanding exactly how that kind of scope and stuff works in JavaScript.

CHUCK: Yeah. So, you said you might, under the right circumstances, choose CoffeeScript as a first language. Can you think of what those circumstances would be?

NOEL: The circumstances would be you are coming to a team whose using CoffeScript. There’s an immediate upside in that it protects you from some of those things that JavaScript… really the case for it against CoffeScript generally applies even more for to the case, like I said, is a language you will learn before you will learn JavaScript. On the plus side, it prevents you from doing some really, really not helpful things. And on the downside, you have that extra layer of complexity where the stuff you’re writing isn’t exactly what the browser is evaluating. I think for a novice, that might be a rough challenge to try and debug. But I suspect the time that fairly shortly, that’s going to be much less of an issue. The developer tools will catch up. But I think eventually CoffeeScript, like any sort of abstraction eventually will leak its underlying… I think at some point you’re going to need to really understand what’s going at  JavaScript for CoffeeScript to really work out for you. But, you can go pretty far away before getting there. CoffeeScript is a little bit cleaner to present to a novice. I don’t have a lot of experience with teaching CoffeeScript directly, so I’m not completely sure how people like to do it.

JAMISON: I have never seen someone just learn CoffeScript without learning JavaScript. But most of the people that actually learned CoffeeScript after knowing JavaScript all seem to, at least in my small sample, seem to prefer it. I was hoping it’s the kind of thing with C and assembly, where I hear, I wasn’t even probably alive back then but, when C first came out, lots of people kind of — it as hiding the Assembly code, hiding what was really going on under the hood.

NOEL: Right. You don’t need to know what’s going on under the hood to get your job done.

JAMISON: Yeah. So I wonder if the same kind of thing will happen where right now, yes, you pretty much need to know JavaScript if you’re going to do any serious programming in CoffeeScript but maybe the tooling will get good enough that it won’t even matter.

CHUCK: What kind of a set up do you have because I’m assuming your doing in person training? What kind of a set-up do you have to do that?

NOEL:  Like our physical set-up in the building?

CHUCK: Yes. Like, what is your classroom lay-out?

NOEL: The main office here right now has two rooms that we use for developer training. They’re not dedicated to developer training; they’re just training-style rooms that we sometimes get a chance to use.

CHUCK:  Are they that kind of conference rooms then or they’re actually training rooms?

NOEL: …they look like training rooms. There have rows and there are big screens at the front and one case, also big screens that turn to the back that duplicate them and rows and chairs and things like that. Sometimes I would actually prefer, for smaller groups, more of a conference room style layout because I think that encourages people to interact more. But no, our actual physical layout is sort of what you would think of as being a training room. Its several rows of tables all looking up at screens at the front.

CHUCK: Uh-huh. And so you just hook your laptop to a projector?

NOEL: Yup.

CHUCK: and do the training there?

NOEL: Yeah. I have some course; basically a slide deck with some examples that I’ve developed.  It’s a presentation punctuated by hands on exercises. That’s how we do it right now. I’m not going to defend that as being the best of all possible.

CHUCK: If you could change any part of that, what would you change then?

JAMISON: Waterslides.

NOEL: Waterslides would be awesome. I always wind up wishing that I was more adept at balancing the lecture with the hands on stuff.  I almost always walk out feeling like I’ve done one of the other too much.

CHUCK: Right. I think that’s one of those things that probably takes practice though. Have you done any online training?

NOEL: Like me leading online training or…?

CHUCK: Yeah, leading online training.

NOEL: I have not. Although I suspect it’s on my future.

CHUCK: [laughs] Do you have any guesses to how you would approach that? Assuming you have a tool like go to a meeting or something that will allow you to share a screen and you can talk into a microphone and it’ll get transmitted to the…

NOEL: Actually I’m starting to think about that to start it. To be able to better hit distributed sites. I don’t know. I think that, one of the things that I do like about the workshop is at least the ability or the activity for people to just ask questions. And you don’t want to like go to meeting stuff can quickly turn into when we broadcast. And one of the things that I think that I would probably do is not try to do everything in one shot and to break it up into smaller pieces and have people do exercises on their own in between them rather than try to do a 6-hour single shot. I think that you’re testing human endurance for like a 6-hour web meeting. So, that’s one way that I would change the structure a little bit.

CHUCK: Yeah. I can see that it’d be kind of hard to be strapped to your chair for 6-hours. The only problem I see there and it’s kind of what you said as far as the difference bet the in-person training and the online training is, that you can walk around and see what people are doing and provide feedback and help them out. There really isn’t a terrific online system for that, that allows you to kind of get a view into where they’re at and where they’re struggling because you can’t virtually wander through your room or lecture.

NOEL: Right. And you can’t really share screens. There isn’t really a set up to share screens with all that many people. I’m not necessarily sure that they would be effective. I mean it’s not actually something that I have to dig up but it’s something that I started to think about in terms of potentially leveraging existing tools. That’s one thing that I’m thinking about.

CHUCK: Right. That makes sense. I guess you can always have them commit code to GitHub or something. At least you have that much of visibility into how far they have gotten and where they have their struggles.

NOEL: Yes.

JAMISON: I want to talk about the Khan Academy computer science thing. Have you guys played with that? I mean its JavaScript but it’s more aimed on beginning programmers. It’s just a bunch of really interactive visual tutorials where the things you’re programming have some visual effects on the screen that’s really immediate. So, there’s lots of feedback for your coding and what it actually does

NOEL: Yeah. I haven’t played with that but it’s actually definitely on my list of things to look up.

CHUCK: Can you put a link to that? Oh, there you go. We’ll give the link on the show notes.

JAMISON: Yeah. It’s pretty amazing.

AJ: So what about “Code Academy”? Any thoughts on that one? I’ve heard some good things.

CHUCK: Aren’t they out on Chicago near you?

NOEL: The Chicago is not called that anymore.

CHUCK: Oh. So what are your thoughts on the kind of “Code academy” or online code school or in person code school arrangement?

NOEL: Chicago one is an in person school and I don’t know much about the San Francisco code… AJ put a link up for the one that I’m not from. So there’s a limit to how much I’m willing to say about things that… I just don’t know. [laughs]

CHUCK: It makes sense to me. I don’t know if that appeals to everybody. So, some people I think would really benefit from something like that, where they’re trying to make a career change whether it’d be to a different language or maybe a different area of expertise altogether, you know, from accounting to programming or something. if it’s worth it for them to go and  sit through a course for however long 3 weeks, 6 weeks , 8 weeks, whatever, however long they go. That kind of thing that makes sense to me in the sense that, you kind of get this knowledge dumped all at once. I worry a little bit about people’s experience, but like you said Noel, I don’t have a lot of experience with them, so I don’t know exactly how effective they are.

NOEL: … calls itself the starter league; has a mix of course where normal course and it’s been a while since I’ve seen what their actual courses are. And they also pair people up with mentors which are people in the community locally, that the students can be with and show their code to and get some feedback on their ideas. So, that that can be a pretty powerful model.  I think that there’s a limit to how much experience you can give somebody in that timeframe. I think it’s the mix of having sort of a traditional classroom with mentors that are available to help you out can be pretty powerful.

JAMISON: I was just going to ask, I feel like we’ve driven the conversation in lots of different areas but, is there anything you wanted to talk about your stuff or about learning JavaScript in general?

NOEL: I’ve covered a lot of stuff that I was hoping to get through. I think that learning JavaScript has a lot of the same challenges of learning any new programming languages plus the individual. I think that the thing that frustrates people about how JavaScript, those quirks are kind of a challenge for new programmers to understand it because otherwise they will write code that has bugs, that are you know, you can code in JavaScript that has very, very subtle bugs based on the internals of the language that are hard to figure out. And hopefully, whether it’d be through a book, an expert or a screen caster blog post or something like that, hopefully you can find a way to write yourself among those problems.

CHUCK: Yep. Yeah that makes sense. Alright. Well, one more question. And this is along the line with something you brought up a minute ago where you were talking about the start-up league or Starter league or whatever it is and you said that they pair people up with mentors? Is there a good way to find a mentor that you can work with? Most of the mentors have been people that I’ve actually been a co-worker to. Are there other good ways of finding folks that kind of get you on the right path?

NOEL: If you’re just sitting around looking for a mentor, it kind of depends on where you are. Like in Chicago, there are a lot of user groups in Chicago. And if you were relatively a novice, one of the pieces of advice that I can give to these novice developers is to go these meetings that have topics that you might be interested in and talk to people and try to find people who might be interested in helping you out. My experience is that, a lot, but certainly not all, but a lot of expert programmers tend to be pretty happy to share their expertise with people who are just coming up. I don’t think that’s universal, but I think a lot of people are. And that’s one way to find them if you’re not in an area that has that, then I think you need to try and find and I think the next thing to do is to look online and try and find online groups where experts or where people of some expertise just hang-out and see if you can get somebody, ask nicely, see if you can get somebody to look at something you’re doing and give you some feedback.

JAMISON: I think one of the keys too is demonstrating some kind of proactivity and interest so. If you’re hanging out in the IRC channel a lot and you’re asking good questions or you are asking questions on the mailing list, that’s a good way to show that you’re interested and motivated to learn. But, if you just find someone that you don’t know and have never interacted with, and just email them and say, “Hey, do you want to spend hours of your time helping me even, though we’ve never talked?”  But they might still say yes, if they’re really nice but that’s a huge gamble for them.

NOEL: Yeah. I think you’d have a sense of proportion about what you’re actually asking people to do. Randomly emailing people you don’t know is not reliable to be the most effective way, but if you find an online community that shares your interest and you can start contributing to that community, then the other members on that community are going to be interested in, presumably interested in helping you out. But again, it starts from finding the community and being a part of that whether it’s online or not.

CHUCK:  Yeah. I think another good approach that’s similar to this is, start writing your code and then ask questions that are related to the code that you’re writing. And that way, you can give them both context and a good way of reaching out and giving you a finite answer because its, “Well, I’m trying to do this and when I write this code, it does this”.  And then people know where to guide you and how to help you fill in the gaps in your knowledge.

AJ: I would add, to try and be in a group that is smaller because you’re more likely to get more help there. Like if you’re go into the go community, you’ll probably find more people that are skilled, and enthusiastic and willing to help, than if you go into one of the larger communities, where… it seems like as a community  grows it makes it hard and people become more jerks and their like “Oh, you’re an amateur?  You don’t know this? You don’t know the basics? What an idiot.”

NOEL: I think that depends on the community that you’re in, but I think that again, it’s worth trying to be In a place where you can observe and try and get a sense of who’s going to be receptive to you or not. I’m just going to say that if your question’s focused enough, Stack Overflow is a good place to help by definition; people who are helping you there are volunteering and are interested in helping people out. But you need a pretty focused question to have that be fruitful.

CHUCK:  Yeah. All right. Well, I think that we are at the end of our time, Jamison, what are your picks?

JAMISON: Alright. So, as per tradition, I have one music pick and a couple of other picks. My music pick is an album called “Shrines” by Purity Ring; it’s just beautiful, female vocals and pop stuff. It’s amazing. It’s pretty great. That’s been one of my soundtracks for the past week.

My other pick is an essay by Bret Victor. He’s the guy who had that amazing presentation about inventing on principle and just general all around brilliant thinker about teaching and communicating information. And it’s called Learnable Programming”. It’s kind of a reaction to the Khan Academy Computer Science Teaching UI, but it just goes on to his ideas on how you make teaching programming easy for beginners. But the best way to communicate all of the knowledge that’s wrapped up in that kind of program, it’s really long and it has beautiful illustrations and visualizations and it’s a work of art in its presentation and in the content it contains. So, it’s great.

And then my last pick is another really long one called “Mob Software” by this guy named Richard Gabriel. He wrote that worst is better essay and he’s kind of famous. It’s about how good software comes out over lots of people doing lots of different things that they all find interesting, not about central command and control like higher people organizations. So, been doing a lot of thinking about deep thoughts. Those are my picks.

CHUCK: Awesome. AJ, what are your picks?

AJ: Okay. So, first off I would pick Monoprice because I love them. They have really nice thick cables for cheap and I was trying to hook-up my projector to my Wii and it’s like 35 feet across the room and I was just using that super cheap RCA cables and picture is kind of fuzzy. And today, the cable I ordered came in so I’m gonna go home and try it tonight and see if pictures  are coming a lot clearer and I expect it will. But I love that for the price of cheap cable at Best Buy, you can get like excellent super monster size cable at Monoprice.

Also, I think I picked this before. I’m picking it again. Zreo which, I guess that’s how you might say it. It’s Z-R-E-O, Zelda Reorchestrated. I just love listening to music. Particularly the Wind Waker soundtrack they’ve put together.

CHUCK: Awesome. Alright. So I’m going to put in a few picks here. The first pick I have, I was using the Tweetbot beta for Mac OS, and my Mac OS was acting up on me. It turns out it was actually a power saving setting and the fact that the solid-state drive that I have Mac OS installed on, if you put it to sleep, it will not wake up again unless you reboot the computer. It took me a while to figure that out and I reinstalled the OS and I lost Tweetbot but I’ve been using the official Twitter app. and I really like it it’s a lot like Tweetbot. There are a few things that I like about Tweetbot better but for the most part, I’ve been pretty happy with the way this works. The official Twitter app for Mac OS is a pick.

And another pick, I’m not sure if we picked it on the show or not, I’m pretty sure not, but I’m just gonna pick it anyway, there’s an application out there for Mac it’s called “Fluid” and what fluid does is it basically encapsulates a webpage into an application. And so, you get an application .f file your applications folder and then you can run whatever you want. So I have like Google Calendar running in one. I’ve had a few other things running in it. The only downside is like, one of the things that I do with my email actually uses a Chrome plugin and so, for my email I actually have to use Chrome. So I can’t use fluid, or Mail plane or anything like that. But other than that, it’s been really, really nice. If you have a website that you visit a lot, you can just pull up and you want it in your own apps so that you can launch it from launch bar or whatever and that’s a good way to go. Noel, do you have some picks for us?

NOEL: A couple. I have a technical pick, and a couple of not. One topic here, I wanted to mention Justin Searls’tryjasmine.com. Try Jasmine is just an in-browser editor that lets you try Jasmine off CoffeeScript or JavaScript and it’s got some nice features to just let you try out some of Jasmine specs and some source against it and run the specs in your browser. That’s from Justin Searls a test double. Justin also has a GitHub page, S-E-A-R-L-S, with a lot of really good Jasmine tools. He maintains Jasmine given tool which is similar to Jim Weirich’s rspec-given. And he also has a couple of Jasmine fixture and a couple of other really nice Jasmine test tools. So, worth checking out.

Well, so I’ll talk about a book pick, I was trying to think of a good book pick for this. I want to mention Charles Stross’ Laundry Series as being a series of books that tends to appeal to programmers. The main character is kind of an IT computer Hacker. And the book is a fantasy series about sort of Lovecraftian horrors, mixed with computer science.

JAMISON: Oh my gosh! I think this book was written for me.

CHUCK: [laughs]

NOEL: Many people have that reaction. So yeah, they start talking about in this universe’s various kinds of computations are actually how you summon demons. The first book, I think that has a reference to the suppressed 4th Knuth book, with all of the demon-summoning.

JAMISON: [laughs] It’s awesome.

NOEL: Yeah, it’s pretty awesome. And let’s see, one other thing that I wanted to bring up, a musical pick, sort of little off beat musical pick, it’s a band called “The Lisps” and an album called “Futurity”, which is actually a soundtrack to a musical that is sort of a steam-punk. I guess I’d have to describe it as a steam-punk computer musical. The main character is a civil war veteran who meets up with Ada Lovelace lovelies to build a steam-powered mechanical brain. And the music has certain… I don’t know, I like their music. It’s kind of indie, a little roots-ish. It’s songs about artificial intelligence. So, how can you go wrong with that?

CHUCK: Awesome. I have some family members whose intelligence must be artificial. But, anyway…

JAMISON: [laughs] Hope they’re not listening.

CHUCK: They never do.

AJ: [laughs] Because you are too kind Chuck.

CHUCK: Yeah. Anyway, awesome. Sounds good. Well let’s wrap this show up. Thanks for coming Noel.

NOEL: Before I go, I just want to direct everyone to my book which is Master Space and Time with JavaScript, which you can get at noelrappin.com/mstwjs. And books 1 and 2 are available now. And Book 3, hopefully by the time this posts, otherwise very shortly thereafter.

CHUCK: Awesome. I don’t think we have any announcements, so we’ll just call it a podcast and we’ll catch you all next week.

x