Learning
Table of Contents
- Introduction
- Learning strategies
- Learning techniques
- Watching video tutorials
- Experimentation and excercises
- Code reading
- Reading documentation, books and tutorials
- Internet research
- Asking questions
- Reading source code
- Attending workshops
- Creating excerpts
- E-Learning courses
- Participate in study groups
- Attend conferences and talks
- Mentoring
- Open source contributions
- Flash cards
- Boot camps
- University courses
- Coding competitions
- Hackathons
- Cognitive research
Introduction
Motivation
"Go faster" without "get better" is a foolhardy approach.
— Tim Ottinger (@tottinge) 6. Februar 2018
Get better, and let that take you faster naturally. pic.twitter.com/WFkIdIktcR
- GOTO 2014 • Staying Ahead of the Curve • Trisha Gee - YouTube
- The software ecosystem is changing all the time
Growth mindset
- The power of believing that you can improve | Carol Dweck, TEDxNorrkoping
- Hashtag #ImposterSyndrome auf Twitter
Lifelong learning
Sources of information
Tutorials
Blogs
Podcats
- Software Engineering Radio
- The 6 Figure Developer
- https://soundcloud.com/thoughtworks
- Software Engineering Daily
- List of FLOSS Weekly episodes - Wikipedia
- My Top Eight Must-Listen Developer Podcasts
- Top 7 podcasts of 2016 for business minded programmers - George Wilde
- My Top Eight Must-Listen Developer Podcasts | Ben Halpern
- Best IT Podcasts: 50 Informative (and Entertaining) Shows for IT Pros | VertitechIT
Books
Elearning
Videos
Magazines / Journals
Social Media
Learning strategies
Progressive advancement
Knowledge aqusition isn't a linear process. However, the difficulty of the learning activities should be adjusted to the current competency level in order to make it a pleasent experience.
Novice
The learning journey for any new skill starts in the "Novice" stage. This phase is all about understanding the context and doing the first baby steps.
Understand the tools philosophy Who created it? Why did it get started? What problems does it solve?
Explore ecosystem Who is using it? Where are the money flows? What sources of information are available? How does it compare to its alternatives?
Define learning goals What are the sub-skills and what are their interdependencies? What are you trying to achieve? What elements are out of scope?
Getting started Set up an environment where you can do experiments (e.g. by writing a "Hello, World!" program).
Beginner
In the next stage you need to get an understanding of the basics (e.g. conditionals, loops, and statements for programming languages).
Training course Request to attend a training course. If this this is not possible try find a good video tutorial.
Buy a book Get an overview over all available books. Select one with the criteria of the author having real-world experience and the didactic preparation of the subject and minimum number of pages while still covering 80% of the important topics. Skim the book to now what you don't know and then be able to read the relevant sections when they become relevant.
Playground project Before diving into an enterprise project, explore the technology with a non-trivial example project like a TODO app. Even better would be to create an internal productivity tool.
Intermediary
Now that you are familiar with the basics you can start to work on real-world projects. Be aware that learning at this stage requires relatively high effort.
Experiments With the help of the playground project created in the Beginner stage new sub-skills can be explored without the burden of the complexities of the production system.
Documentation Document snippets of lessons learned in an internal wiki or another knowledge management tool like Evernote. This will help to reduce cognitive load in during the recollection. Maybe some day it will also help someone else that they don't have to research and trial and error by themselves.
Reading Read the book selected in the previous stage cover to cover when there is some slack time.
Also consider the application of different reading techniques.
Advanced
After being able to get work done the skill should be mastered so that it can be applied effortlessly.
Teach others Teaching is one of the best learning techniques as you will notice what you do not know when you try to explain it.
This could be done by conducting internal training courses or mentoring colleques. Other forms of teaching might be writing blog posts or recording screencasts.
Discussion Analyse the pros and cons of the technology. Then attend conferences and meetups to discuss them.
Probably you'll find a cool new technology there and then you can start the process again.
Learning by teaching
- Create a screencast
- So you want to write a tech book…
- Why blog as a software developer? – Planet Arkency – Medium
- Jez Humble on Twitter: "@thoughtworks Learning how to facilitate learning for others has helped me immeasurably over the years. Thanks to @kraigparkinson who ran that program."
- Teaching programming: why it’s hard to get right, but incredibly rewarding
- ⚡Julia Evans⚡ on Twitter: "How to teach technical concepts with cartoons https://t.co/Gxi008jEAz"
- How Stories Change the Brain | Greater Good Magazine
- How to Prepare a Talk – Deconstruct
- Teaching kids how to code
- Ten quick tips for delivering programming lessons
On-the-job training
Whenever I have to look something up for troubleshooting, I go a little deeper or broader than strictly necessary.
— Jessica Kerr (@jessitron) 18. Juli 2017
- Debugging is a good opportunity to learn how the system works
- Accept challenges
- "learning at work" zine | Julia Evens
- Learning at Work | Blog post by Julia Evens
- How to be a junior software developer | ThoughtWorks
- The Practice is not the Performance: Why project-based learning fails | Path-Sensitive
- How CV-driven development shapes our industry | Swizec Teller
Dreyfus model of knowledge acquisition
- Dreyfus Model of Skill Acquisition | The original paper
- Understanding the Dreyfus model of skill acquisition to improve ultrasound training for obstetrics and gynaecology trainees
- Musician Explains the Concept of Harmony to Five People of Different Ages and Levels of Expertise
- The traits of a proficient programmer - O'Reilly Media
- Use the Dreyfus Model to Learn New Skills | College Info Geek
- The Dreyfus Model: Developer Events and Skill Categories » Adam.Kahtava.com / AdamDotCom
- The Step-by-Step Guide to Go From Novice to Expert in Any Skill
- Building experts using the Dreyfus Model | Liz Keogh, lunivore
Problem-based learning
Knowledge Management
Programming languages
Learning any programming language pic.twitter.com/k8VQjvGs9E
— CodeProject (@codeproject) 6. Dezember 2016
- What Is Programming Anyway?
- Teach Yourself Programming in Ten Years – Peter Norvig
- Episode 031 – Learning a New Programming Language | 6figuredev.com
- How To Become An iOS Developer | Thomas Hanning
- 25 Pitfalls When Learning to Program - Programming Zen
- Read code + write code
- Q&A With Nine Great Programmers
- Man cannot know everything, e.g. even the greatest C++ programmers don't know a 100% of the language
- What's in books suffices only for little programs. Creating big programs your learn only after working in a professional team.
- Try to understand basics concept as how the graphics card and processor works. Algorithms and data structures. Patterns.
- By learning from others the wheel doen't need to get re-invented again and again
Shu Ha Ri
Learning styles
Deliberate practice
Growth comes from pushing yourself outside of your comfort zone. It's not easy and generally not fun, and the rewards are immeasurable.
— Steve Kuo (@KataCulture) 28. August 2018
Others
"We learn...
— Hermanni Hyytiälä (@hemppah) May 24, 2019
10% of what we read
20% of what we hear
30% of what we see
50% of what we both hear and see
70% of what is discussed
80% of what we experience personally
95% of what we teach to someone else."
-William Glasser
- Stop reading technical books, read blogs | Dusan Odalovic - Homepage & Blog
- swyx Writing | Learn In Public
- The Learning Funnel - DEV Community
- 10 Models of Teaching + Learning
- Learning How to Learn: Powerful mental tools to help you master tough subjects | Coursera
- The First 20 Hours: How to Learn Anything . . . Fast! | Josh Kaufman
- 10 Steps to Learn Anything Quickly - Simple Programmer
- Soft Skills: The software developers life manual; Section 3. Learning | John Z. Sonmez
- Pragmatic Thinking and Learning
- Anders Ericsson: How to become an expert at anything - Business Insider Deutschland
Learning techniques
Watching video tutorials
Video tutorials are a good way to get started with a new technology. Having somebody describing the nomenclature and basic concepts can be easier than reading it up. Further, it helps if somebody is helping walking through the basic concepts.
- Björn Nölte ☕ auf Twitter: "Die #3-2-1-Methode für Lernvideos. #Unterrichtstipp #AppleClips https://t.co/B5kvq3SuYR"
- Arne Sorgenfrei auf Twitter: "Mein Erklärvideo zum Thema Schweredruck ist online #iviedu #BayernEdu #diggiHH #Physik #flippedclassroom https://t.co/jKyqlVcZof"
- 3 short screencasts (/proc, tcpdump, strace) - Julia Evans
- Trailhead | The fun way to learn Salesforce
Experimentation and excercises
- Try out snippets from tutorial
- Observe program with a debugger
- Modify things and observe results
- Create a spike (prototype) for new structures
- Katacoda - Interactive Learning Platform for Software Engineers
Reading documentation, books and tutorials
Just bought few more books from @pragprog. Now I need to catch up my reading speed with buying speed :/
— Marcin Biegała (@Biegal) 11. Juli 2017
- Skimming. Scanning. Intensive. Extensive. (howtolearn.com)
- https://www.mindtools.com/rdstratg.html
- Different Reading Techniques And When To Use Them | HowToLearn.com
- Developer Book Club | Henrik Warne's blog
- Infodeck – Martin Fowler
Internet research
Asking questions
- Internet search engines
- Colleques
- Online communities like StackOverflow, forums, and mailing lists
- How To Ask Questions The Smart Way
- "I often find that writing up the question makes it clear in my head, and the solution becomes obvious."
- "Please make sure to share what you’ve tried on GitHub, Gist, or, better yet, a fiddle before asking."
- "a balance between sharing too few and too many details."
- "Try to put yourself in the shoes of the person answering the question."
- Create a minimal representation of the problem, e.g. as a GitHub project.
- Short, Self Contained, Correct (Compilable), Example
Reading source code
- Open pull requests
- ⚡Julia Evans⚡ on Twitter: "Reading code is an important skill! Here are some tips. https://t.co/3b4NfIdHT9"
- Create models
- Code Reading: The Open Source Perspective | Diomidis Spinellis | safaribooksonline.com
Attending workshops
- Joshua Kerievsky on Twitter: "Why take a Real-World Workshop from @IndustrialLogic? @tottinge explains here: https://t.co/0Bs8WH2olP https://t.co/YDnz5XchJC"
- Programming Wisdom on Twitter: "Tutorials are a great resource for knowing what to attempt. Attempting it is when the learning happens. - promisified @promisified"
- Rich Rogers on Twitter: ""I never teach my pupils; I only attempt to provide the conditions in which they can learn." - Albert Einstein https://t.co/GoX9N9DNbX"
Creating excerpts
- Use mind maps
- perf-cheat-sheet.pdf
E-Learning courses
Participate in study groups
- A discussion of important technological subjects.
- Pools of Insight: A Pattern Language for Study Groups | Joshua Kerievsky
Attend conferences and talks
- Nicolai Parlog on Twitter: "Believe me, you'll want to see this! I'm live-coding for the first time - what could possibly go wrong? https://t.co/b3IPjszir9"
- Julia Evans on Twitter: "writing conference notes is time consuming (i think i've spent like 3 hours typing up notes) but i feel like it'll really help me remember"
- Gary Sieling on Twitter: "@ThePracticalDev I've been building a search engine for talks - https://t.co/tEPY3cjDot! #DevDiscuss"
Mentoring
- Mark Pearl on Twitter: "Intellectual humility is a core part of mentoring and being mentored"
- Chad Fowler on Twitter: "I would still be sitting in a cubicle working uncreatively on stuff I don’t care about in technologies I hate if not for @pragdave. Most of… https://t.co/rWWY6MPf37"
- One on One - AgileMentoring.com
- codereview stackoverflow
Open source contributions
Boot camps
University courses
Coding competitions
Hackathons
Cognitive research
Best learning cue:
— Oleksii Fedorov (@waterlink000) 11. Februar 2018
After two weeks I tend to remember:
- 10% of what I read
- 20% of what I hear
- 30% of what I see
- 50% of what I see and hear
- 70% of what I say
- 90% of what I say and do
— Edgar Dale “The Cone of Learning”