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
Tweet

More Decks by Tracy Hinds

Other Decks in Programming

Transcript

  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:

    View Slide

  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)

    View Slide

  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

    View Slide

  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.

    View Slide

  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

    View Slide

  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.

    View Slide

  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.

    View Slide

  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

    View Slide

  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.

    View Slide

  10. From USERS TO CONtRIButers
    OSS Repos/Working Groups/Projects Contributed To

    https:/github.com/node.js
    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.

    View Slide

  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.

    View Slide

  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/

    View Slide