Ask HN: How do you decide what to learn next?

128 points by vijayr ↗ HN
Let's say you have very limited time to learn and that you are not doing much learning in your day job. How do you decide what to learn? What is your process for picking up topics to learn (other than "this is interesting")?

103 comments

[ 3.7 ms ] story [ 172 ms ] thread
Generally I look at the stuff I do day to day and then honestly critique myself for where I'm weakest and then learn from that.

Since I'm the only dev and I have to do back end and front end I realised that I was weakest on the front end (particularly JavaScript) so I made a concerted effort to learn JavaScript properly since apart from picking it up organically for years I'd never really studied it.

The funny part (to me at least) is that while I'm never going to like JavaScript I dislike it a lot less than I used to once I understood the underlying structure better.

What resources are you using to learn JavaScript? Any advice for people just starting on this path?
https://github.com/getify/You-Dont-Know-JS and the associated videos where excellent.

Javascript: The Good Parts (though this is a bit full on if you are really just getting started).

Reading the source of popular libraries as well in a good IDE so you can jump around and get to where stuff is defined/created.

Don't underestimate "this is interesting". Couple it with a goal (like building a personal site, doing some home automation, building a NAS) and make sure you take notes (if not a blog). You'll learn heaps in no time.
> Don't underestimate "this is interesting".

That's pretty much me. Someone will say something, or I will see something somewhere and a little bit of looking it up to find out what was being talked about might pique some interest and off we go.

This doesn't work at all for me. Something seems interesting to me (and my problem is, a lot of things interest me) and I start reading up on it, somewhere along the way there is something else that is referenced, which also seems interesting, so I read up on that...and so on. Pretty soon I've deviated far from where I started.

Interestingly, this doesn't happen in my day job :(

Also known as the "cool-new-framework rabbit hole" or also the more common "Wikipedia rabbit hole".
Other than that: 'This is useful' ;)

I believe something can be useful when I need to know it or when it is a good basis for other more applied topics.

I'm someone who has decided not to learn new language or framework that comes my way.

If there is something that can speed up my workflow, I learn it. If it improves my applications speed without much time to implement / learn then I work on that.

For new shiny Javascript libraries I really have held back to see what the winner will be; backbone used to be the go-to lib, ember (tried to learn but it changed a lot in the early days), angular (decided not to invest any time into it).

There are 24 hours in a day, don't try and learn everything, just try and be productive with the tools you have and the ones that will get the job done for you.

My time these days are spent learning Nepalese, React and trying to build a business in Nepal....keeps me busy.

What made you decide to learn React and not any other framework you mentioned?
I use "This is interesting" to give it about three or four days. After the "this is interesting" stage, things that fall into the "this might be useful" bucket get a couple of weeks. Then it is either getting used, or it is getting put on the back burner indefinitely.
I keep a list of things that interest me with sublists about interesting observations I make about each item on the list (I use workflowy for this task - no affiliation). The observations can be anything from ideas, to blog posts, books, online courses or articles about the subject.

When I want to learn something new I pick an item from the list and work on it (usually some idea I came up with). My preliminary research efforts often help me realise an idea or it gives me a chance to compare two different learning sources. I also try to create something using what I learned. Through craft I feel like I draw more from the learning experience. The outcome can also be that I need to find better references or that I simply want to learn something else.

The most difficult thing is getting started. I find it useful to be systematic about it by explicitly devoting time to it. Once you have a system in place you like it eventually becomes a habit. Also note that it is helpful to break tasks into small subtasks. Having a feeling of accomplishment leads to a more positive experience of the learning process which further leads to increased learning drive.

Note that my process is not much more sophisticated than "this is interesting". However, instead of acting on some hunch in the moment I act on observations which I gather over time.

I pick a project I want to complete or a cause I want to contribute to. Then I look at the smallest step I can take to work toward that (learn the basis of a new language, protocol). Then I iterate (learn a framework, tool). Then I try to close a bug or release the project to the wild. This usually leads to comments on a PR or someone opening bugs with the project, and then I have to learn something new to fix it.

I think it's much easier to learn things when you have a goal because you have to learn tiny nuggets of knowledge that are useful. I find learning something without the context of how to apply it to the real world is very difficult, so I generally don't just go out and learn things (tech-wise) without a legitimate usage in mind.

Thanks for asking, I have been struggling with the same problem for some time ow.
Usually if something is interesting it's because you're thinking about it in the context of a problem that you need to solve. Basically, it's interesting because you see the potential value.

That generally is what drives what I learn. I'm about to start getting deep into BPM2 and Activiti because it looks like it will solve an organizational problem that I'm currently observing, just as an example. Otherwise it's not really connected to anything I would be doing otherwise (although there are a few potential use cases if I understand the system the way I think I do).

Usually I'm pursuing something. Along the way as I gain experience and encounter difficulties I put my head up and look for solutions. I don't always find what I'm looking for but it gives me hunches. When those hunches collide I get ideas and from there it becomes pretty clear what I know and what I need to learn in order to progress.

I'm presently learning predicate calculus and formal specifications of software systems. I came to it by hunches: software engineering should be more like engineering because companies like Yahoo! Japan are building earthquake notification systems on OSS infrastructure and the keynotes at Blackhat suggested it was a requisite for this industry to move forward. It turns out the math is beautiful and it helps me design better software and I'm only just getting started.

It has also added new things to my list of things to learn such as the refinement calculus as well as alternative modelling systems like Event-B.

Have you list of good resources for these math topics?
I should do better, because I've been random in deciding what to learn But some combination of: found good teaching materials, people I'm in contact with are learning it, and this could pay off big.
I learn things by setting a purpose. Eg: For a web project, I need to learn new programming technologies.

I have a very sensitive mind. I can't concentrate on multiple projects at the same time. For example: If I'm working in a day job, I can't work on a side project efficiently, I can't concentrate on both my office work and side projects. If I do, My employer could easily figure that I'm churning out.

So, If I want to work on a project.. I'll make sufficient money then I quit my job and spend next coming months fully-fledged on my project.

When in doubt, learn more math.
I read 2 college textbooks on linear algebra, abstract algebra last year and managed to finish most of the exercise questions.

It was never useful to me and I remember zero content from either of those now.

Take that knowledge in linear algebra and put it to use by learning how machine learning algorithms work.
Not really interested in machine learning.
Which textbooks?
Gilbert Strang - linear algebra

A First Course in Abstract Algebra - rotman

Any suggestions for statistical analysis? I'd be like confidently do math, rather than just do math.
This also converges with my comment about giving more priority to learning things that will help me learn even more things and faster in the future.
I'm not really convinced if its even possible for me to learn something that I'm not interested in.

[edit] By learn, I don't mean simple regurgitation of the facts or some superficial thing, I'm talking about extended study and efforts.

Read. And I don't just mean books (although they are a great place to start). Read technical blogs, read documentation, read other people's code. Seek out challenging reads that seem overly ambitious and use them to find out what your unknown-unknowns are, then use that knowledge to steer your learning.
^ This year I bought the subscription to Safari Books Online (https://www.safaribooksonline.com), which offers unlimited access to many books (every O'Reilly book) and some video courses.

Though it's not cheap, I think it's the best investment I've made in my own professional development.

Just to add to this, pick up an Amazon Kindle. There's almost no-where you can't read when your entire library fits in a pocket or a rucksack. I've been travelling for most of this year and my kindle comes second to only my laptop on the list of essentials.
I actually haven't bought one yet because I was under the impression code rendering was still less than ideal (e.g., lines wrapping to fit the Kindle screen where they shouldn't in code). Is that still an issue?
Yes, this is an issue on the Kindle device, but reading textbooks in the Kindle app on the iPad is gamechanging. The speed with which you make highlights, leave notes, and bookmark is great for learning. I can then access the book from my computer for quick reference and/or convert my booknotes to Anki flashcards.

This being said, I also own a Kindle Paperwhite and use it at least an hour a day for reading non-technical books. I can't recommend that device enough.

Would you recommend people who already own a tablet (iPad, Galaxy, Fire, etc) to get a dedicated device to reading?
I have both a tablet and a kindle paperwhite. I like using the tablet for technical references which are commonly in PDF format. For everything else I use the Paperwhite. The backlight is much easier on the eyes, especially when reading in bed.
Mostly what I anticipate I will need for the job. For my own pleasure I choose tools whose proponents talk with a reasonable voice. I dismiss any technonology when I see people that:

* Says that the rest of the world is doing it wrong and they will fix the situation with this "change of paradigm".

* Presents their products as a "social movement" that's "challenging the industry as we know it".

* Promises 10x productivity.

* In general, bases their success on attacking others. Specially if they say things like "everybody knows exceptions are like cancer".

* Uses grandilocuent names to call a two thousand lines library.

* The resulting code looks like gibberish. The most likely a child can understand it, the better. It it's directed at the elite programmers, bad.

* Doesn't put enough care on tooling.

Edit: OK, it's a very negative answer, but it's effective. It quickly discards 99% of shiny new things.

Is Haskell bad on your book?
"My book" doesn't tell what's bad, but things like how the community surrounding a tool is. You can't expect a problem will be solved if it's not even acknoledged.

Also let me insist that these are heuristics I apply to what I use for my own consumption, usually to create private tools that will make my life easier, or just to learn something satisfying.

That said, I bet you know Haskell better than me. The fact you singled it out asking about it makes me suspicious it shows at least one of the red flags :-)

If that's right, I don't care how good it is.

Actually I don't know Haskell beyond the most basic examples. I singled it out because it was one of the cases where "Promises 10x productivity" may be, well, the least outlandish. But it does come at the cost of "change of paradigm".

For me C# is at least twice as productive as Objective-C, so I suspect there more where that came from. I'm on the lookout for another 2x boost. But the farther down that road you go, the more isolated you become. It's a bit of a balancing act between individual productivity and being able to hire and work in groups, or to find help. Perhaps

Intersection of what looks like fun, that I can be good at, and good career or money-wise.
I look forward in time and try to imagine myself knowing/doing something new. Whatever pops in my head us what I go for. Always live in the future and build towards it.
Sometimes I just browse StackShare for what's trending or if there's a more highly rated competing tool for something I use regularly.

http://stackshare.io

Something I've always wanted is "a Netflix queue for tech I want to learn"

Ideal features would include:

- a regular review of the things you've listed to see if they're still relevant and to help you prioritize

- a way to see what's trending amongst everything you've listed (ex. I have three front end web frameworks on my list but React is collectively popular, so perhaps I should start there)

- it could notify you if a new (good) book / blog post is published on a topic you're interested in

- you could compare with your friends to see if someone you know has learned it recently or to sit down and hack together

- it could share a common list of subtasks across users -- for example, starting with Django Rest Framework might consist of: (1) doing the python tutorial + (2) doing the Django tutorial + (3) doing the DRF tutorial

someone please do this!
Why don't you do it?
well I want this and I don't do it because I'm already deep in doing other stuff (I bet the parent comment has the same reason). And even if I wasn't doing the stuff I already am doing I have a backlog of stuff, some of which would be highly innovative, that I am not doing that I should find the time to dust off and begin working on again. Asking someone to do something is really just saying - I'm too busy, if someone with the requisite skill is looking for something to do please consider this an upvote!
I can relate.

In the case of this project, I'd pushed it off because I thought others wouldn't be too interested. Nothing like a little HN community validation :)

Wow, I'm quite surprised by the response (+26 upvotes). I anticipated this was a super niche thing.

I think I will build it :)

I want this for everything. Music to listen to, books to read, guitar skills to learn next, etc
Why wouldn't multiple TODO lists work for you? Just a UI/UX issue or is there any reason?
I think that having an application specifically tailored for a use case has more potential for rich experience and integration with the content.
I do currently have multiple todo lists, but the experience of going through all of them can be kinda tedious. I'd be curious to try something more intuitive, if it existed.
I made a chrome extension called Will Listen Later that partially addresses the problems of music junkie drowning in I listened soundcloud and YouTube links.
That looks pretty neat.

I actually wanted the same thing but for Spotify. I settled on making two "_To Listen" playlists: one for singles, one for albums. After I listen, then I delete from that playlist.

Writing that out makes it sound as somewhat awkward as it is, especially (quickly) on mobile.

Have been making an app that vaguely does this, integrating with a lot of media APIs to let you save whatever to check out later. Refocusing it around making it a "read it later queue" for these things sounds like it would be a good idea.
Treehouse pretty much hits those points. They have a library of videos and tutorials across a variety of topics. This content is organized intro tracks, which are tailored collections from the library so you can track your progress of learning a specific discipline. Some of these tracks share the same subtasks.

There is a public ranking system for users based on points. You receive points for watching videos, completing quizzes, and doing code challenges. It's pretty meaningless, but these points are categorized based on what type of track they were earned from, so you can see what people are most recently learning.

They don't tailor their notifications to specific niches. You always get a Netflix like notification whenever they upload new content. Their feed doesn't have the option to sort by what's trending/popular either. It's a relatively expensive service and is criticized for being pretty dumbed-down in how they deliver learning material, but I think it can be useful.

Treehouse is great, especially for learning the basics across a variety of disciplines. I hadn't heard of their pointing system, and I'll have to explore that. I'm also a fan of what Stack Overflow did with points & badges.

What I'm envisioning is something agnostic of any particular learning platform or the content you choose to learn from, at least to start.

Thank you for the insight.

https://www.metacademy.org provides plans for learning certain technical topics.
The way they've structured the learning paths with prerequisites, etc is neat. It also seems there's quite a bit of advanced material here. Thanks for sharing.
I try and learn things bottom-up. I don't know if that's a good way or not, but that's how I've always done it. It has seemed pretty natural to me to sort of explode things into pieces and pick it up small bits at a time, gradually composing all of the knowledge that I need to be able to complete the thing I'm working on/learning about.

Is there a better way?

You need to pick something you can sink your teeth into but unfortunately that doesn't satisfy your first requirement (limited amounts of time). Learning things of value normally takes time and lots of dedication.
I am doing a series called 52-technologies-in-2016 https://github.com/shekhargulati/52-technologies-in-2016 where in I learn a new technology, build a small app, and blog about it every week. I maintain an Evernote where I write down all the interesting topics or projects I find. I go through the list and randomly pick any topic that excites me that day and then work over the weekend to publish something. This helps me keep in continuous learning loop.
This is a great idea! Thanks!
Sounds cool, how much time do you spend every week?
It depends from 5 hours to 15 hours depending on the topic. On Saturday I learn a topic by reading documentation or watching videos tutorials by their creators(if I can find) or if I have a book then I read first few chapters. Sunday, I start with building something and then documenting the process in the blog by end of Sunday.