What to learn

A computer science student that I have been mentoring asked me "I have strategically placed all of my classes on Tuesday / Thursday so I have time to do my own stuff. I've been wanting to learn something new and have been getting mixed responses. People are telling me I should be learning Angular / Node / Possibly React but I liked that polymer thing you showed me. Before I spend 100 hours learning / developing it, do you still recommend it?"

I showed him Polymer Components a few months ago while we were discussing a quick way to build his own portfolio site. Polymer Components was highlighted quite a lot at the Chrome Dev Summit and while I haven’t worked with it much myself, I added it to my long learning list.

Rather than giving him my own personal opinion, I decided to pose the question on Slack at work to get the opinion of the front-end development community. Here are the results.

If a college student asked you what they should spend their time learning, which would you select?

I asked if they answered "Other," what would they suggest? This spurred some interesting discussion and the following is a summary of the responses.

RC: Other: Object Oriented JavaScript

AS: I guess when I chose other, I meant that I would make sure they really have the fundamentals of JS down before jumping into a framework.

But then node for me would be the next step

JA: Frameworks come and go. i’d learn JavaScript, HTML, and CSS, as well as fundamentals of computer science.

JL: Learn the basics before going deep on a framework. If you get how the guts work, you'll be much faster to pick up a framework.

CM: My practiced answer is "Fundamentals and then frameworks" but the honest answer is it takes a long time to get to really fun results that way. Starting with angular, someone will have to unlearn some habits, but they'll get that spark of making something right away

in the beginning, I think it's better to promote that enthusiasm than it is to promote knowledge

AS: I can definitely agree with that to a certain extent, but I believe that if a student were to take that route, there are other frameworks out there that have a lighter touch on the overall production build and are easier to transition from basic JS to framework. For example, I think Vue is another framework to consider.

But I agree, keep poking the fire of passion than rather it burning out. As long as they're still aware that they'd be missing some fundamentals

CM: I just chose angular because I remember that "magic moment" of using angular 1 to do some pretty cool stuff with almost no code. But if you insert any well-documented framework that's what I believe

JL: I have mixed feelings about it. I do think getting rolling is super important, but I also think any project that follows the Underpants Gnome model in terms of understanding how things happen is a recipe for frustration.

DW: Depends … if the college student being interviewed for a job here I’d say JavaScript and Node … more specifically for our area the dominant framework used is Angular moving to Angular 2 .... but more generally probably JavaScript, Node and React

JL: So maybe use React to show some magic, but strongly emphasize understanding _how_ that magic happens — otherwise there's a big risk of ending up walled in by limitations that only exist in the framework, not in reality.

KG: i wouldn't spend too much time learning any 1 thing in college.. see what's out there and pick up a little knowledge about a lot of things before you choose a specialty

AS: I agree and think that makes a stronger case for learning the basics. You never know where you might end up

JA: Strong background in computer science. Take Programming Languages. Learn fundamental concepts that will apply throughout your career, not a single framework or even language that will come and go.

SR: I think I have this CS background, and I find myself using little of it (at least that’s my feeling), and instead I spend much of my time on configuration or layout aspects, which don’t involve dealing with algorithms. But this might be linked to my current role that is very design oriented (vs application logic).

CJ: other from me = Design sense, practice understanding and responding to user needs. It’s the thing that takes the longest to learn and the thing that for which it is hardest to substitute experience.

SR: I wish there had been that kind of topics when I studied, instead of x similar mathematics courses.

DA: Other: Absorb, mainline and know backwards the W3C specs on HTML5 and CSS3, as well as the EMCA 6 Javascript spec.

BR: Other -> debugging. It doesn't matter what framework/library/language you're using, if you can't observe its execution context it's next to impossible to understand how it works

RG: vanilla ES6, a good read through of this: https://github.com/getify/You-Dont-Know-JS

JB: What’s the purpose/expected outcome of telling a CS college student to learn vanilla JS? I would imagine they are still trying to figure out what kind of development career they want, whether front or back-end, game development, AI/ML, Data Science/Engineering, self-driving car engineering, etc.

You could tell them to learn the fundamentals, but it seems like you get really good candidates by helping people build the coolest stuff they can.</p>

JL: A strong foundation tends to build strong problem-solving skills. (Though I guess it could easily be argued that experience with a broad range of tools could also build strong problem-solving skills.)

Okay. Wait. Maybe I disagree with myself.</p>

JB: Isn’t building that foundation the purpose of the CS education in algorithms/data structures?

JL: NEW TAKE: I think developers should try to understand the _how_ behind their tools, and gain experience across a broad range of tools. So my issue is not with using frameworks; it's with using _one_ framework (e.g. the wave of "jQuery developers" who are back at zero since jQuery went out of style).

CS is abstract, and I think that's huge. I also think experience with practically solving problems using diverse toolsets (or approaches within a programming language) is important.

JB: Definitely agree :smile: it’s what makes college so much fun

DA: I think fundamentals and knowing first principles allows quick understanding, easy to learn new language vocabulary for known techniques and critical thinking. Plus everything for web eventually boils down to JS, CSS and HTML5.

If you don't completely like what the framework produces, you can change it with full understanding of what you are doing.

KG: Maybe people should just focus on what makes them happy. Learn more about what they like, less about what they don’t.

JB: I think what it boils down to for me is that you want to enable college students to ship outcomes. It gets you so excited when you do, and drives interest in that field. At that point, diving down into the weeds to figure out how things work feels like a no-brainer.

R: jQuery . . . out of style? crap

JB: haha, all about that `document.querySelector` It’s very refreshing to see EPHs use vanillaJS now for interview questions

JL: Okay. I concede. You're right on this one. I'm being a grumpy old man.

CD: I actually have no problem with FEDs coming in with jQuery heavy portfolios

You can always learn something new, it's more the thought process behind whatever they're building

And I know a lot of us learned javascript by learning an abstraction first (I learned $(el).click and wrapped my mind around that _long_ before `addEventListener` ever made sense to me)

DE: dumb question alert: isn't js by nature object-oriented?

RC: ha ha... I guess I could answer that since I mentioned OO JS.. yes JS is object oriented by nature.. but I remember my college times (7 years back) when I was thinking jQuery was JS and hence never knew OO concepts in JS like closures, prototypal (or prototypical) inheritance, etc... so I would emphasize college students to understand those concepts well to get a strong hold on JS.

DE: ah i see ! hmm, i wonder if it would be more helpful to learn an OO language like java before learning JS (for those foundations anyway). it didn’t happen by purpose but i learned java well before i started looking at JS

JC: sigh... i believe an OO background is important for understanding ENGINEERING code...

JS is not really OO... it has some OO qualities... but prior to ES6 is not OO and even with ES6, we are lacking quite a bit

but OO principals are good in general for thinking about how to organize and architect your code

jQuery is kind of the opposite of that

All in all, a lively discussion and I think is very reflective of the front-end development overall landscape. Here are some recommended learning resources: