On Wednesday, as the final session of Imagine, Magento hosted a DevExchange. At round tables set up throughout a large conference room, developers discussed topics that were mostly collected in advance in the community forums.
If you are a developer, you are probably familiar with feeling overwhelmed by the number of books to read, videos of talks to watch, tools and frameworks and languages to try out, and conferences and meetups to attend. Based on the interest in the topic, it seems I'm not alone.
Thanks to all 15 participants, the experiences, ideas and thoughts we shared gave me insight and inspiration!
We started the discussion with a round of introductions and an opening question "What do I need to be able to learn?".
After that we shared thoughts and experiences based on other questions, like:
"What tools or resources have successfully helped me learn?"
"What quotes or rules do I go by when learning?"
"How can learning in a team be encouraged?"
"How do I stay motivated and keep learning fun for me?"
I've tried to sort everything that was said into sections. Some items fit into multiple sections. In such cases, I put the item into the section where it was mentioned. I haven't recorded who said what (apologies), so I just want to stress that credit for almost all of these thoughts does not belong to me.
Here are the insights and inspirations I gathered:
Supportive preconditions for learning:
Being rested (i.e., not tired)
Other people to bounce thoughts off
Focus (i.e., removing distractions)
Being surrounded by people who know
Discipline and a plan
Assuming to never be done
Tools and techniques that have helped learning:
Daily or weekly scheduled time to work on the list of things to learn
A debugger and some time
Traditional classroom training
Preparing a talk on a topic for a meetup, conference
Pair programming when the task is not mechanical
Two (n) hours a week dedicated to working on technical debt.
Building something real that is used
Learning a concept in a non-familiar context (e.g., learning about composition and dependency injection in Java instead of PHP)
Keeping the mind fresh by going out for a run
Buddy system: someone to trade knowledge with (e.g., frontend dev and backend dev teach each other their expertise)
Teaching or knowledge sharing:
How to facilitate learning in a team:
Juniors review code of seniors
n:n code review (all PRs are reviewed by everyone).
Delegating topics to learn and then having the person share with the others in the team
Company internal barcamps, deep dives, and book clubs
Instead of only using example based teaching, teach a structured approach to development such as covered in the book "how to design programs" (works for all learning styles, leaves no one behind)
Teaching 1 on 1 is harder than teaching 1 on 2 (different perspectives, competition)
Giving permission to make mistakes publicly
How to choose what to learn?
Select different layers of the stack (e.g., as a web developer, instead of learning more about PHP and JS, learn about design patterns, protocols, web servers, system level calls...)
Learning more high-level concepts and principles that apply across multiple frameworks or tools have a longer shelf life