

Ask HN: How do you best learn multiple tech skills in a short timeframe? - franl

How do you personally optimize learning when you have five technical skills you need to build within 90 days? Assuming they&#x27;re relatively decoupled from one another, do you learn them in sequence one by one, or do you learn them simultaneously? How have you managed the process for yourself?
======
ACow_Adonis
This might be a problematic question, but how do you know there are 5 skills
specifically and how do they relate to the 90 day deadline?

I hate to sound like a programmer here, but having a project really helps out.
If you can throw yourself in the deep end, then you learn by necessity, and
each problem that comes up as you're going will hopefully tell you which part
to focus on next, because that's your immediate issue. You'll also learn the
parts you need, because the parts you need are the ones that come up with most
frequency in your real world problem.

If its an artificial constraint or situation (and 5 skills in 90 days all
decoupled from one another sounds like one, by which i mean a test or an
interview), then perhaps its time to think about some strategy. If you can
pick up the skills in several days each, they can't be that hard. If you know
you're not going to be able to do it, perhaps its time to prioritize. Weight
them relative to importance and focus on them each in proportion. Sometimes
when you've got 5 tasks, you can get by passing on 3 or 4 and accepting
absolute failure on the last one by skimming or ignoring it completely. This
depends on your situation.

Personally, I find i can't learn anything unless I focus on a topic for a long
period of time, then coming back and repeating it in shorter increments. Sort
of informally imitating spaced repetition: See
[https://en.wikipedia.org/wiki/Spaced_repetition](https://en.wikipedia.org/wiki/Spaced_repetition)

Personally though, it sounds like you're screwed. 5 topics with no cognitive
overlap is a nightmare. Your task is likely going to be to come up with a
strategy to make you proportionally less screwed rather than succeed at all 5.

But you are screwed :P

~~~
franl
Well, I don't know for sure, but they're the five things that seem most
important to me when it comes to landing a quality gig. Please correct me if
I'm wrong :)

They are TDD, OO-design, increase Rails mastery, refresh myself on algorithm
basics (sorts, processing data efficiently, etc), and learn the basics of a JS
MVC framework (leaning toward Angular). I'm not starting from zero in any of
them.

Also, I did a poor job of providing context/perspective, so I'll quickly add
some: My dev skills are at a point where I could get a junior Rails gig _some_
where. I want to get them to the point where I can get a junior/mid Rails gig
(almost) _any_ where.

The 90 days was just an arbitrary time constraint that I felt was short enough
to give me some urgency, but long enough to make significant progress.

Totally agreed on the "having a project" points you make, and on learning by
necessity. Both are a part of my plan. I love learning about programming in
general, but yesterday I found myself reading a Ruby book that was talking
about making external DSLs and I had to stop myself: "This is really cool, but
WTF does this matter to me right now?? Go read about TDD instead."

EDIT/ADD: Thanks for the reminder about spaced repetition btw.

~~~
ACow_Adonis
I'd love to be able to give you some more specific pointers, but alas I'm more
on the scientific/numeric/stats/data side of computing. I wouldn't know where
to begin with the web stuff :(

You should probably look to others for specifics in your case.

But what little advice i can give is try to turn it all into a project. Do a
quick read up on all the topics, then combine them into something tangible and
of worth to you.

Since I'm not a web guy, i'm probably talking half out of my arse here, so
feel free to dismiss. Think up a rails project, and try implementing the whole
thing via a TDD pattern. Test, produce a really basic first shot, re-factor,
repeat, etc. And what better place to learn about or implement some algorithm
basics than while profiling/refactoring code to make the whole thing as fast
as possible?! I learnt almost nothing from algorithm books or lectures, what
really made it all sink in was when I had problems that ran slowly, and I had
to make them better. Then suddenly the topic was relevant and I understood.
And of course, once you optimize everything, you tend to quickly run into the
hard lessons of good design, because nothing makes things fall apart and get
complex quickly more than optimizing everything, except maybe trying to
optimize everything with bad design.

Will you screw up? Sure! You'll be bitter and twisted, but the scars will be
of experience. That's what makes you learn. The screw ups are what you
remember, and when you hit a problem of your own making, suddenly you respect
the solutions presented in the text-book a lot more, even if you don't agree
with them or feel they're complex or constraining.

/editorial.

~~~
franl
Ahhh, man, awesome stuff. I totally relate to what you said about not learning
from books, but learning from when you actually experienced some of the
problems that were outlined in the books.

I went through similar learnings with running my own business. I had read a
bunch of stuff about entrepreneurship, etc., but it wasn't until I screwed up
for myself that the lessons really crystallized (and really internalized for
me).

Web programmer or not, your advice was very helpful, so thanks again :)

------
RollAHardSix
I would say you're screwed.

Here's some advice, focus on the 30% of each of the 5 area's you need the most
to do something with. The rest is just noise right now.

Usually my personal process is to spend 70% of my time on one area in
particular, picking up the others as I need to learn new information for what
I'm working on at the time. But that doesn't seem to be an option for you so
well, good luck.

~~~
franl
Haha, I appreciate the frankness (seriously). Great tips, thank you!

Btw, I'm not trying to become an expert in five things in 90 days. I just want
to get comfortable enough in each that I can confidently tell prospective
employers/partners "I'm not an expert in X, but I can productively use/do it."

Your 70% approach is the sort of thing I'd like to adopt as a long term
learning process.

------
phantom_oracle
>"In order of importance: 1. TDD 2. OO-design 3. Increase Rails mastery 4.
Algorithm basics (refresher on different sorts, etc.) 5. Learn the basics of
one JS MVC framework (leaning toward Angular)."

1-4 are all related. You can learn them all by building something (as someone
has mentioned). The problem with saying "learn by building" is how? Nobody
ever explains how.

This is how: Learn from whatever resource you learn best (like a cookbook-
style tutorial, or a textbook or a video) and then take that knowledge and
apply it to the bigger project. If you have your own "how", then go with that.

As for 5, avoid the JS-frameworks for now. Dabble with them, but be flexible
enough to try more than 1 out. They're all pretty much in their "hipster"
lifespan, so wait until the hipsters move on and then consider picking up one
of those frameworks (unless you are a hipster yourself).

~~~
franl
Haha, no framework hipster here. I feel like people force the use of JS
frameworks on projects that don't really need them.

So along the lines of what you said, dabble with a few, and when you recognize
a project that could benefit from one, dig in.

Thanks for the "how"!

------
thenomad
Personally I'd say that your timeframe is very doable at least to a journeyman
level of skill, given the 5 things are related.

As for how to do it? I'd recommend starting a SaaS business. Pick something -
something where you can generate leads reasonably easily, so you don't end up
learning marketing, and where you aren't going to need to spend loads of
money, so you don't end up learning finance - and set a launch date 50 days
from now. Then start designing.

Your project probably won't be tremendously successful - although you might
make some passive income, and there's always the chance of an accidental
massive success - but you'll learn a hell of a lot, you'll have real-world
problems to solve and real-world users to pacify, and IMO "I've built a
business on these technologies" plays better on a CV than "I've made some
webapps for my own use".

~~~
franl
Wow, after the feedback on this thread and a few conversations with other
developers this week, I started thinking this exactly. Great timing, thank
you!

I'm not sure what's kept me from going down this path already though, as this
isn't the first time the idea has popped into my mind.

------
josephschmoe
Honestly, the answer is people. Spend time talking to people who have these
skills. IRCs are a decent option, but if you can actually work with people
it's way better.

~~~
franl
Great point! I just recently started programming with a senior dev for a few
days per week, and it's been really helpful so far.

------
dm2
What are the 5 technical skills?

~~~
franl
In order of importance: 1\. TDD 2\. OO-design 3\. Increase Rails mastery 4\.
Algorithm basics (refresher on different sorts, etc.) 5\. Learn the basics of
one JS MVC framework (leaning toward Angular).

(I'm not starting from zero in these things - I've had exposure to all of
them)

~~~
dm2
One thing you could try would be to set aside a day of each week to focus on
learning as much as you can about one of the topics each day. Then set aside
any other free-time to create a couple simple project ideas and then by the
3rd week start creating the projects / apps / demos. If you think you could do
one of them better by going a different direction then take the time to start-
over.

There are plenty of guides and tutorials for each of the subjects you listed,
just start with searching each and making a master document of everything you
learn that you can review. Use bulleted lists, they're helpful.

Good luck!

~~~
franl
Great tips, thanks! I'm going to try that approach for the next 30 days: Set
aside a day per topic, mixed with a couple of simple project ideas.

