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.
One of the topics was "Learning, training and staying up to date as a developer".
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)
Feeling motivated
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
Being selective
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
Online courses
Traditional classroom training
Mentoring
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
Tools and resources:
Stackoverflow and Magento StackExchange
Trello board with blogs to read and topics to research
Online training (udemi, the teaching company, Mage2 TV)
Evernote
Alan Storm's Blog
Omnifocus
List of Magento resources github.com/aleron75/mageres
Quotes, guiding principles”
Don't let perfect get in the way of good enough
Accept we can't learn everything
Accept that others can help
Pulling at a blade of grass doesn't make it grow faster
Jack of all trades, master of one
Passing knowledge and wisdom makes one replaceable, but also promotable
Take the charge, look ahead, leave no one behind
Keeping learning fun and staying motivated:
Learning to pass it on
Taking a break, doing something else, keeping it fresh
Discipline, setting a strict deadline
Working towards getting mandatory credentials (i.e., required certifications)
Publicly announcing a deliverable, social pressure keeps you accountable
Competition
Checkboxes (i.e., completing lists)
Set goals, track progress, celebrate
Thanks to Sherrie Rohde and everyone else at Magento for organizing and hosting the DevExchange. It's a great format that I hope to see more often in future!
... View more