learning to learn [makersquare 3rd cohort, 12/2/13]
Post on 14-Sep-2014
508 views
DESCRIPTION
Slides for my 12/2/13 talk at MakerSquare on effective learning strategies and workflows reflecting my experience as a front-end developer, aimed at other developers in particular.TRANSCRIPT
Learning to Learn
by @wayspurrchen
(For Developers)
or
How to Believe in Yourself, Develop Effective Learning Strategies, Find,
Categorize, and Prioritize Information, Develop Tool-Based Knowledge Pipelines,
Google Effectively, and Ultimately Stay Sane in a Rapidly-Evolving Industry While Maintaining a Healthy Work-Life Balance
(and a Bunch of Other Stuff)
Learning to learn?• We can always learn how to do new things or do old things better—including the
way we learn things
• Believing in your ability to learn and get smarter actually makes you better at learning and retaining information (entity vs incremental theory (Self-theories: Their Role in Motivation, Personality, and Development by Carol Dweck))
• Making your learning strategies more effective is like cheat codes to the rest of your life
• It’s learning all the way down
Your reasons for learning
• For the job you have• For the next job you’ll have• For your dream app• For your dream startup• For your dream automated house that has
slippers and a martini ready for you when you walk in the door
How do you learn to learn?
Knowledge / Wisdom Dichotomy
Knowledge is……knowing you should probably look into those “promise” things
…knowing that you shouldn’t edit on the live server via FTP…being able to say, “You really probably shouldn’t do that.”
Wisdom is……getting lost in callback hell callbacks to process a batch of asynchronous requests
…editing on the live server then accidentally uploading an old version of the website…being able to say, “Seriously, do not do that.”
http://www.smashingmagazine.com/2010/09/10/what-is-the-worst-design-or-programming-mistake-you-ve-ever-made/
How much knowledge there is on the Internet
• The internet (allegedly) carries ~1,826 petabytes per day[citation needed]
• Netflix uses 1 PB to store all their movies
• 1PB = 1024TB• 1PB = 1,048,576GB• 1PB = 1,533,917 ~700mb movies• 1PB = 268,435,456 ~4mb songs• 1PB = 1,125,900,000,000,000 1-
byte characters of text
Not all of it is useful. You don’t want to know all of it. How do you prioritize?
What you (might) need to know as a (front-end) developer
• CSS– cascade– inheritance– specification– box model– vendor-specific features
• X/HTML4/5• Some PHP• Browser idiosyncrasies• DOM structure• General browser
performance• Networking• Caching• Some sort of version control
system– The CLI/GUI to that VCS
• Some sort of version control system– The CLI/GUI to that VCS
• Communication skills• Professional representation
(for clients)• UX/UI/UE design knowledge• JavaScript
– MVC model– Prototypical inheritance– Aspect-oriented
programming– A thousand and one(+)
libraries• jQuery• AngularJS• Backbone• Modernizr…
• NodeJS• Social media API integration• DevTools familiarity• Command line/*nix
familiarity• Testing• Automation (grunt, minify,
etc.)• Documentation• Code readability• Team-based coding
experience• Error handling• Your (or your company’s)
preferred IDE• a lot more…
(My) Knowledge Workflow
Step OneExposure/Seeking
Step TwoOrganizing/Queuing
Step ThreeRetaining/Remembering
Knowledge Exposure/Seeking(for finding all that knowledge)
Gather your knowledgeAggregators and learning resources• http://www.codecademy.com/• http://www.coursera.org/• http://www.feedly.com/• http://www.khanacademy.org/• http://ocw.mit.edu/• http://www.stumbleupon.com/• http://www.twitter.com/• http://www.udemy.com/
Newsletters• http://html5weekly.com/• http://javascriptweekly.com/• http://nodeweekly.com/• http://rubyweekly.com/
• http://reddit.com/– http://www.reddit.com/r/browsers– http://www.reddit.com/r/coding– http://www.reddit.com/r/compsci– http://www.reddit.com/r/cscareerquestions– http://www.reddit.com/r/css– http://www.reddit.com/r/frontend (I run this one!)– http://www.reddit.com/r/html5– http://www.reddit.com/r/javascript– http://www.reddit.com/r/learnprogramming– http://www.reddit.com/r/jquery– http://www.reddit.com/r/ruby– http://www.reddit.com/r/rails– http://www.reddit.com/r/programming– http://www.reddit.com/r/startups– http://www.reddit.com/r/userexperience– http://www.reddit.com/r/web_design– http://www.reddit.com/r/webdev
Useful Sites (front-end)http://www.reddit.com/r/Frontend/wiki/index
Knowledge Organizing/Queuing(for stuff you want to actually read later)
Pocket is my favorite for this:http://getpocket.com/
(similar: Instapaper, Evernote Web Clipper)
Knowledge Retaining/Remembering(for those “I’ve swear I’ve read this somewhere…” moments)
And Kippt is my favorite for this:http://kippt.com/
Pocket tries to do Kippt’s job, but Kippt does it way better.(Similar: Evernote?)
Know your tools
• Know their ins and outs• Understand their strengths and weaknesses• Where possible, connect them (see IFTTT and
similar apps)• Supplement your knowledge consumption
pipeline with generative and tracking tools: Evernote, Bullet Journal
Learn Smart, Learn Hard:Setting Goals and Priorities
• Learning effectively also means learning what you need to learn.
• What is YOUR ultimate goal? (Think back to your reasons for learning in the first place)
• What do you need to know to fulfill your ultimate goal?• What do you not know that you need to know to fulfill
your goal?• What can you guess that you need to know to fulfill
your goal?• How many steps are in the way?
Pyramid of Knowledge
Awesome Slippers and Martini Robot House
Basic programming skill (JavaScript? Ruby? C++? ..Brainfuck?)
• What do you know?• Is it applicable to your
goal?• Where on the pyramid
can you put it?• What’s the next step
(both directions)?• What’s probably in the
middle?• What’s the hardest?• What’s the easiest?• Do you need to make a
new, simpler pyramid?
Pyramid of KnowledgeMore like:
Basic programming skill (JavaScript? Ruby? C++? ..Brainfuck?)
But that’s OK. If it were that easy, it wouldn’t be fun.
Awesome Slippers and Martini Robot House
Too much to learn, too little time: what first?
The short answer: “foundational skills”.
Similar to the bottom level of the pyramid (or the foundations of a house), foundational skills are what you build the rest of your skills on top of.
These are skills that will give you either
• A significant boost to the rest of your skills• Or improve your life for the rest of, or for a significant portion of your life
Learning effectively is an example of a foundational skill. (These are those “cheat codes” I mentioned.)
Foundational SkillsExamples of foundational skills:• Your favorite language, inside and out, if you plan to work in that language
for a long time• Programming paradigms and best practices• Negotiation and professional presentation• Empathy, listening, and communication skills• Effective learning• Mental and physical well-being (meditation, exercise, good nutrition, etc.)• Self-control and discipline
Foundational skills are skills that learning now will have an effect on all of your future productivity or output.
Knowledge Evaluation:How do I decide this is actually worth knowing?
Ask “connecting” questions:• Is this immediately and obviously useful to me?• If not, could I use it for anything in the future?• Is it possible that this is useful in ways that I can’t currently perceive?• What would I have to learn to understand whether or not this is relevant and useful?• If I follow this down a rabbit hole, does it seem like this will actually get me what I need?• Is it worth my time to follow that rabbit hole or should I approach it a different way?• If this is actually completely irrelevant to what I’m trying to do, is it interesting enough that I
want to learn about it anyway?• Should I discard this information or archive it?
Remember—knowledge has YAGNI (You Aren’t Gonna Need It), too!
Some tips on specific seeking (solving that really specific problem)
• Google “stackoverflow <keyword>” everything first• Go broad before narrow• Develop Google fu--keep in mind the kind of the people who
have come before you looking to solve the same problems (technical vs. non-technical wording)
• Search for the “expert” resources: there’s almost always an exact name for the type of thing you’re looking to learn about
Retaining and Relearning
There’s also a DRY in knowledge—but it’s DO repeat yourself!
• Multiple sources on the same topic often take different approaches and focus on different nuances
• Feel like you know something pat? Re-read just in case and strengthen your neural network
Learn by Teaching
“If you can't explain it simply, you don't understand it well enough.”- Albert Einstein
aka “The Mom Test”
• If you can describe Twitter’s RESTful API to your (assumedly non-technical) mom, then you probably understand how it works
• If she still doesn’t get it, it’s good practice for dealing with non-technical clients, upper management, etc.
• Programmers who can explain things quickly and concisely to non-programmers are very valuable
Seriously, Know Your Tools!aka the “ARE YOU A WIZARD” Test
If you can make your friends say that, you pass the test (bonus points if you impress coworkers). If you use tools often, learn their capacities and limitations, including their keyboard shortcuts.
And always keep an eye out for better, more efficient tools.
Don’t forget: learning is doing.
Ultimately, you can read as much as you want but you’ll never really learn unless you do the work.
With that in mind:• Do the work• Commit to completion (and version control!)• It’s OK to not finish something (so long as you figure out why
you didn’t finish it)• Break things and embrace mistakes (just not on the live
server)• Don’t hurt yourself—it’s a marathon, not a race