How do you personally optimize learning when you have five technical skills you need to build within 90 days? Assuming they'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?
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.
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.
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
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.
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 somewhere. I want to get them to the point where I can get a junior/mid Rails gig (almost) anywhere.
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.
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.
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 :)
A good way to learn all five is to write a full-stack web app. Your MVC framework will teach you OO-design and you can use Rails on the backend. I'd recommend Ember.js over Angular.js for its more traditional approach to MVC (read: Cocoa-esque), but I'm admittedly not an expert in either.
Absolutely on the same page with you on this after researching Angular some more over the past couple of weeks. I mentioned Angular because a couple of companies I'd like to work at use it.
I was thinking about trying React for views + Backbone for models/routing instead, but a poster here reminded me about Ember, so maybe I'll just go that route initially. Or Backbone on its own. Thanks!
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".
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.
>"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).
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.
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)
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.
Some stuff, like OO and TDD cant really be learned in few days.
What you can do is follow some gives about this, read books, go to class and program stuff, its something that you gain knowledge with projects under your belt and with some guidance.
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.