Upgrade to Pro — share decks privately, control downloads, hide ads and more …

There Are No Mistakes, Only Lessons: Learning in Node.js

There Are No Mistakes, Only Lessons: Learning in Node.js

Learning to code is, in itself, becoming a new common language. It is becoming essential across all sectors of the economy and a strong skill for those seeking advancement. An improvement in education is an investment to the future of Node.js.

Last winter, the Node.js Foundation expanded its annual user survey to encompass and unravel who and how programmers are learning Node.js and using it alongside other languages. In this talk, we’ll explore the Node.js user, a global landscape attempting to learn Node.js despite English not being their spoken language of choice. We will explore the quality work across mediums that is available despite your experience level, and how there’s no single answer for learning Node.js.

Tracy Hinds

April 12, 2017

More Decks by Tracy Hinds

Other Decks in Programming


  1. Learning There are no mistakes, only lessons Education Community Manager

    Tracy Hinds Node.js Foundation Hi, I’m Tracy. Education Community Manager at the Node.js Foundation. Diplomat, baker, rock climber, web engineer, motorcyclist. I’ve worn many hats. I have been a conference organizer, a baker by trade, an addictions program coordinator, and a restaurant manager(this is not the exhaustive list). I love learning, whether it is via code or researching intersections of my interests, I really dig nerding out on what it means to learn. How each person must approach it. To learn for fun, for improvement, to career transition, to get hired, to get promoted, or found a company. It’s peaked my interest for a long time, so it’s been a pleasure for me to address this head on in my work. This report presents selected findings from the 2017 Node.js User Survey. The study was conducted online from November 30, 2016 to January 16, 2017 via a self-administered survey. Learning to code is, in itself, becoming a new common language. Programming in one form or another is essential across all sectors of the economy and a strong skill for those seeking advancement. Programming ability provides upwards mobility like few other opportunities. We’re seeing see far less graduates with computer science degrees. No university degree at all, a liberal arts background, codeschools, self-paced learning–When we are looking at improving learning Node.js, it’s a beautiful variety of people segmented by different learning styles, geographical and cultural differences, and socioeconomic status. Last winter, the Node.js Foundation expanded its annual user survey to encompass and unravel who is and how programmers are learning Node.js. We’ll explore the Node.js user, a global landscape attempting to learn Node.js even when English not being their spoken language of choice. Let’s explore the quality work across mediums that is available despite our experience levels, and how there’s no single answer for learning Node.js. A few notes:
  2. Who? Job Title (top mentions) Frontend Engineer 13% Tech Lead

    12% Senior Backend Engineer 12% Backend Engineer 11% Senior Frontend Engineer 8% Architect 8% Hobbyist Programmer 7% Company Size (# employees) 1 13% 2-99 48% 100+ 39% Median # 54.2 Formal Education < College Degree 26% College Degree+ 51% Grad Degree + 21% Race White 71% Asian 20% Other(combined) 9% Prof. Development Experience < 5 years 46% 5- <10 years 23% 10+ years 31% Median 5.8 yrs Respondent Age < 25 25-34 35+ 28% 50% 22% Median age: 30.6 Who is learning Node.js? US China India Germany UK 6% 6% 6% 8% 31% Country of Residence The typical Node.js user resides in the US, is age 31, college educated and has around 6 years of professional development experience(note that doesn’t mean Node.js experience). Users span a range of job titles, with Front-end and Back-end Engineers most common. More than half work in organizations with fewer than 100 employees. This is the little nugget to keep in mind: the typical Node.js coder has been using Node.js for just over 2 years. Users spend about half of their professional time using Node.js – mostly for developing web apps. Keep this in mind as sort of the status quo of the Node.js developer, but we have enough representation in groups outside of this pretty stereotypical developer persona that a segmented approach is needed to address all the differences, which often run deep. we speak different languages (NOT A METAPHOR)
  3. 49% 51% Native Language Non-Native Language Ninety-five percent of our

    users learned Node.js in English. But to 45% of our users, that’s their non-native language. Think about that for a moment–nearly half of our users have had to learn a programming platform and also know another spoken language to get there. Users take advantage of many different resources for learning, so providing a broad mix of tools that accommodate multiple languages where feasible, is and will be important. Documentation, free online course,s and tutorial videos are among the most valued educational resources. I’m getting ahead of myself a little. We’ll dive into that a little further through. AND, Why do we learn node.js? Fullstack fun: "Write once, use in client and server!” “PHP was making me very sad.” “Needed a platform for quickly developing webapps at low cost that would present data from our data warehouse” It’s JS on a server, baby! For fun! Being able to just write JS. Event driven paradigm is great. “Diversity of Node.js(packages) years ago–I was impressed. There was a package for everything–From controlling robotics to helper packages like lodash and async.js” I already knew JS. "I already had some experience with JavaScript and I wanted to learn more with minimum time consumption.” Big fan of async programming and socket.io Work made me. So, there’s funny reasons people will give, or rather sort of unfun reasons that people try to find humor in: “PHP was making me very sad.”(also, this is a quote, not me knocking php) Work made me. But then there’s also the really useful reasons which I’ve heard time and time again: I looked at the “Diversity of Node.js(packages) years ago–I was impressed. There was a package for everything–From controlling robotics to helper packages like lodash and async.js” “We needed a platform for quickly developing webapps at low cost that would present data from our data warehouse.” Might sounds familiar? Or “I already knew JavaScript. I already had some experience with JavaScript and I wanted to learn more with minimum time consumption.” Just getting to write JS. The event driven
  4. How are we learning? Docs + Stackoverflow === <3 Yeah,

    I know. I think this is one of the reasons people constantly ask for more structured resources. It’s the 1-2 combo punch, I suppose. StackOverfow is really useful, but doesn’t necessarily teach best practices that have been adopted by people leading in Node.js code culture. I don’t see a lot of our working group contributors answering questions in Stackoverflow. However, I am super grateful for the people who are patiently in there answering questions, because they are doing a whole heck of a lot of it. This also isn’t a great exposure to the node.js community, because as far as I can tell, we aren’t that present there. Poor behavior can’t really be held accountable for if we don’t know that it happened, especially when it occurs outside of the places we commune. Maybe we should be showing that a little more love? Informal Coding Education
 33% 3% 5% 5% 10% 35% Online course (no instr.) NodeSchool Tutoring Node.js meetup workshop Multiple sources (misc) None/no answer Especially among… •Using <2 yrs 44% •Non-US 38% Especially among… •China 16% Less common among… •Using <2 yrs 3% As for docs, when I say docs this isn’t just Node.js API docs. A lot of comments given on the best docs were those of ecosystem packages--that many of our especially prolific authors had good documentation and made it really easy to learn from the changes they were seeing in GitHub as these packages evolved.
  5. Overall Experience Learning Node.js* 45% 51% 4% JavaScript General Node.js

    programming ES2016 and beyond Asynchronous programming Node.js for front-end engineering Managing Node.js in production Node.js and security 15% 22% 40% 44% 59% 69% 84% Difficult
 (rating 1-3) Neutral (rating 4-7) Easy 
 (rating 8-10) 26% 18% 7% 5% 3% 2% 1% Availability^ Quality^^ 22% 25% 37% 41% 58% 60% 70% 20% 15% 7% 6% 4% 2% 2% Poor
 (rating 1-3) Excellent
 (rating 8-10) Poor
 (rating 1-3) Excellent
 (rating 8-10) Resources Rely On Most When Learning
 A New Language/ Framework/Runtime Env.
 (Top Mentions) ⬢ Documentation 70% ⬢ StackOverflow 60% ⬢ Free online courses 44% ⬢ Tutorial videos 41% ⬢ Publications 34%
 (e.g., books, ebooks, mags) *Scale = 1 (extremely difficult) to 10 (extremely easy) ^^ Scale = 1 (poor) to 10 (excellent) ^ Scale = 1 (poor – e.g., impossible to find/access ) to 10 (excellent – e.g., easy to find/access) Availability/Quality of Learning Resources What’s it like learning Node.js? Overall, we know that more than half of our users don’t think learning Node.js is easy. The quality and availability of resources we use to learn is also challenged. And that feedback comes from a wide range of backgrounds and experience levels. Remember that our average user has been programming for pay for 6 years. Behind Stackoverflow the our docs, Tutorials and online courses such as CodeSchool, egghead.io, Udemy, You Don’t Know JS, CodeAcademy, Coursera, PluralSight, and other massive open online courses were the main informal education source. However, there was an exception to learning styles in one region overall--one on one Tutoring is more widely used in China than elsewhere and is the overwhelming primary learning tool. Let’s take a look at a few of the other resources that our wide range of users approached Node.js with Community: • NodeSchool--a series of workshops built to be walked through in-person with mentors and peers cheering them on. These cover a wide range of topics and have been community- collaborated software effort far before other projects had this breadth and depth. • NodeBots-- is a monthly/yearly workshop for hardware and javascript enthusiasts of all skill levels to play with NodeJS and robots. This group has been huge in encouraging more people to look at IoT and Node.js. This has also been a gateway for people to try Node.js and carry it over into their main work. • Node.js Meetup or workshop(these are all over)--there are new meetups popping up daily. They tend to be a set of talks from your local Node.js devs, and a super way to find folks to regularly throw questions to about what your working on. Check them out in your town. • NodeGirls and NodeTogether--NodeGirls currently operating in London and multiple cities in Australia, these events prioritize underrespresented groups in learning Node.js. NodeTogether was a series of workshops that circled the globe last year teaching how to get a web app up with Node.js in a day while covering web concepts, making no assumption LMGTFY And then you get into more of the general internet help. • Google/YouTube(let me google that for you so lots of blogs) • CNode.js.org(the Chinese Node.js community that is visually similar to reddit but is all conversations about Node.js code and events with 700,000 active users) It’s a sight to behold(no pun intended). If you don’t read Chinese, browser translaters are pretty great now and it’s really neat to interact there. I do recommend translating anything you write to Chinese to get more responses. • And awesome tools like Exercism.io
  6. Codeschools--there’s a number of fullstack javascript schools now. Grace Hopper

    Academy, FullStack Academy, Code Fellows, and HackReactor to name a few. But this brings up another point--most universities are not teaching Node.js, especially not in the US. I’m trying to find them now, and encourage more instructors to adopt it. (shout out “let me know if you aaare”, email please” BOOK learnin’ If you’re a classic book learner: Books! • HTTP – the Definitive Guide • HTTP Developer’s Handbook • Node Cookbook • Node Up and Running • Node.js in Action • Node.js the Right Way • You Don’t Know JS • JavaScript: the Good Parts • Streams Handbook A little disclaimer: Some books have dated themselves a bit with how fast Node.js has been changing, and others are keeping quite up to date. So this is a disclaimer that what I’m telling you is how people learned Nodejs PRIOR. Also, if you’ll notice, these are almost exclusively all in English. *cough cough* Trial & Error One Node.js coder survey remarked: "One of the biggest learning tools for me has been writing a ton of horrible, non-performant javascript that crashed and burned. The more bad code I write, the more I learn what not to do…” Another part of that experience is debugging tools we’re consuming(ex: Local development under Webpack) but not necessarily contributing back to...yet. One anecdote was that a person learned a ton through subscribing to the Node.js issue tracker. (lurking, reading through expertise and code). I thought that being able to observe folks open sourcing on this scale was a really incredible insight for people to learn. I’d love to encourage more people to do that.
  7. Have a little help from our friends MENTORING Mentors. Knowingly

    or unknowingly, inspire and keep people in the language. Working alongside people who were contributing to the language and happy to share their knowledge has been really powerful for a number of people writing Node.js. It can be intimidating to ask this of people, but it’s worth pushing through that. My mentor pushed what I thought I’d even be interested in areas of Node.js by his infectious excitement about developments of the project. No coder is an island? The one that always makes me giggle is people declaring they are self-taught.(throw a little shade. This isn’t a thing. People at least read the source and that’s standing on the shoulders of giants) It takes whole communities to build a Node.js programmer, even if that community lives in the ether of the internet or a far off server. US/
 CA China Other
 APAC EMEA Lat Amer Documentation 37% 36% 38% 36% 39% Free online courses 33 25 38 29 37 Tutorial videos 26 18 37 25 39 Conferences 16 16 19 16 19 Case studies 13 15 23 17 22 Meet-up coding events 17 17 14 13 23 Meet-up talk events 14 14 16 11 22 Technical podcasts 16 14 11 11 21 Conference talk videos 12 8 17 11 10 Technical webinars 10 9 15 12 23 None/no answer 27 44 25 30 21 Resources Would Like More Of By Region It’s important to point out, again, that where one hangs their hat in the world makes a difference in interest for learning. There is considerable interest in a range of resources among Latin American users. Chinese users do not care so much about a wide range of resources, but are more concerned about the availability and quality of learning tools.
  8. Barriers to learning Node.js And now we visit the Land

    of Issues with Learning Node.js. While not necessarily broken, relatively few users describe the process of learning Node.js as ‘easy’. Access and quality of resources is an issue in some topic areas, especially including managing Node.js for production and security. Users in China, new users and those in smaller companies are among the most likely to complain about accessibility and/or quality of learning resources. Please keep in mind these are opinions shared, not my own experience necessarily. “Tools I’m used to from programming in other languages” …OR THAT I’VE BEEN TOLD WOULD BE HELPFUL “Tools I’m used to from programming in other languages, or that I’ve been told would be helpful” No real IDE when I started learning. The IDEs that support JavaScript now are far better than years back--I was not a fan when I started writing Node.js but the plugins now have created a level of support difficult to ignore. This is especially useful for those who have transitioned from other languages that had excellent IDEs. No real debuggers(at the time). Yeah, it can be really difficult to debug code without a decent debugger. Who’d a thought? Discovery and quality of resources--help a new Node.jser out! Hard to find resources—just ended using stack overflow. Some of the API Docs are very substandard. I felt this pain when I first started. They just weren’t entry-level docs. If JS alone was a prereq, it’d be fine, but a lot of assumptions had been written into the docs about programming constructs you would have been exposed to in other languages. Difficult to find good examples of production ready node apps/services
  9. • Silly shock face picture here Maybe JavaScript is the

    problem? Good part is Node.js–bad part is JavaScript Event-driven programming breaks some brains. Very different style of programming for some coming from other languages. "Javascript allows you to do all kinds of weird stuff and tricks and hacks which do not help beginners who usually need more structure” —Adri.van.houd Learning JS isn’t easy—Node.js is sort of caught up in that.(scope and async programming especially) Or maybe it really is Node.js “The learning curve is really shallow and then super steep. Since you are building things from the ground up, there are times when you aren't quite sure how to get from point A to B. And there are times when I have solved a problem only to find out there was already a solution(the curse of discovery). I built my own load balancer in Node.js before I found out there was built in functionality for that... On the flip side there isn't anything I have wanted to do that hasn't been possible.” Keeping up with the changing trends in node community(callbacks, promises, streams, observables). Flamewars in the community can sometimes catch bystanders in the crossfire when they just want to learn and have working code. Waxing poetic Or maybe a lot of our Node.js coders, only writing Node.js for about 50% of their day job, have to context switch. Not everyone gets the pure JS fullstack luxury. “I use it along side other languages, so I can get rusty at it pretty quickly.” Lastly, a number of people wrote Time as a big barrier. (people waxing poetic for the eternal struggle of FOMO and our fast-paced ecosystem) The struggle is real.
  10. From USERS TO CONtRIButers OSS Repos/Working Groups/Projects Contributed To

    Npm Express Gulp Async Request 3% 3% 4% 6% 7% 10% Most widely mentioned. . . • …nodejs/nodejs.org 3% • …nodejs/LTS 1% • …nodejs/http2 1% • …nodejs/node-gyp 1% • …nodejs/v8 1% 71% 
 did not check anything pic of code+ learn Speaking of trying to keep up with all of that, what if you also want to get pull requests accepted? Learning isn’t just for beginners. We’re paid to learn every day. We have to improve to push our work forward. What if you need a fix in Node.js itself? Learning to contribute! This is a work in progress for us as a project Node.js Users have not typically contributed to open source networks in the past, and there is a reluctance to get involved – in large part because of lack of time or experience, but also because of feeling ‘intimidated’ or not knowing how to. Even if interest in providing technical contributions is limited, there does seem to be some potential for wanting a mentoring program and volunteering – particularly among some subgroups such as longer term users. This is where community can really shine. Code + Learn, NodeToDo and community organizers running how to OSS nights. This is really powerful because it can accelerate your learning, provide you unknowing mentors, and help with retaining folks because they feel a sense of Let’s do better • Opportunities exist for improving the Node.js learning experience: • Overall, just 45% of users say Node was easy to learn (rating top 3 on 10 point scale); most are neutral. • While the availability and quality of resources for learning JavaScript are adequate, resources around managing node in production and security are greatly lacking. The low positives - and high negatives – on for these areas are a concern. • Node.js for front-end engineering and Asynchronous programming are also weak spots with fewer than half given top ratings for availability and quality.
  11. Resources Would Like More Of 8% 8% 8% 12% 12%

    13% 14% 15% 16% 17% 27% 32% 37% Documentation Free online courses Tutorial videos Conferences Case studies Meet-up coding events Meet-up talk events Technical podcasts Conference talk videos Technical webinars Enterprise tooling Workshops (indep of conf) Paid online courses Especially among… •Web App devel 32% •Using <2 yrs 30% Especially among… •Big data devel 48% Especially among… •Big data devel 24% •Managers 21% Especially among… •Enterprise focused 17% •Managers 15% Especially among… •Enterprise focused 13% •Managers 13% •Big data devel 13% • Discovery is such an eternal curse for the Node.js community. It’s incredibly difficult for newcomers when they know what they don’t know, but they don’t know where to go to get help in that quest. • The main resources users rely on when learning a new language are documentation and StackOverflow. Having more contributors answering questions on nodejs/help, in IRC, and on SO is an awesome way to learn how to mentor and ensure our community is adopting best practices. We can set coders up for success. • A VM having the full toolstack with an IDE • Videos • An official getting started guide for Node.js development --in easily findable places on our official mediums(such as nodejs.org) • Collection of simple examples for various use cases and how someone might fall into bad practices(callbacks is a great one here). Best practices, security specific examples. • Address community problems(not all problems are technical, moderation, consideration around deprecation) lEt’s review! What we’ve taught everyone-LET’S REVIEW • Node.js is not widely seen as ‘easy’ to learn – perhaps in part because so many have learned it in their non-native language. • While resources for JavaScript and General Node.js programming seem to be adequate, other areas are lacking – particularly for managing Node.js in production, and issues related to Security. • Multiple learning tools will be critical – to accommodate different preferences based on region, job or area of focus. • Users rely on many different learning resources, but documentation, free online courses & tutorial videos top the wish list for further development How you can accelerate your learning: Go to events. People are the answer. Local ones are free. Collab summits and code and learn, NodeToDo, nodeschool. These are awesome. If you get the opportunity, come to conferences. There are scholarships and travel assistance often Sooooo all you have to do to learn Node.js is to run through a number of tutorials, be patient spelunking through StackOverflow and our docs, speak English, maybe attend a code school, read lots of books, write even more non-peformant crash & burn code, and work your way to coding and architecting bigging and bigger Node.js projects. Simple!(this isn’t okay) Help is needed. YOU CAN HELP. One of the most enjoyable parts of working in education for Node.js is the space it’s created for more people to help contribute. Lots of new-to-engaging-in- the-community people with great ideas and time to help. If you program, project manage, design, teach, write–there’s things that you could do. Check out github.com/nodejs/education to file issues on what you’d like to see, and brownie points if you can help make that happen.
  12. Tell me and I forget. Teach me and I remember.

    Involve me and I learn. – Benjamin Franklin HUGE THANKS Thank all of these people for their input Greg Wallace-Nodejs survey Adri van houdt Todd Kennedy Paul Johnson People icons by Rockicon Backgrounds generated by https://qrohlf.com/trianglify-generator/