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:
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!