How many companies do you know where a new starter joins, is given access to a codebase and asked to go and work on it. Then, said programmer will sit and use the companies technologies for x number of years. Does this sound like your company? More worryingly, does this sound like you?
There are so many ways to improve your knowledge of technologies and processes used to create great software. If you are responsible for other developers (line managers/team leads/senior team members this means you), then you are failing if you are not passing this knowledge along too.
I spent the 10 minutes eating my lunch brainstorming and here’s my best suggestions at mechanisms to use (I’d love you to tell me the ones I’ve forgotten).
Pair programming
These aren’t numbered, or ordered, but this is without doubt the best and most effective I have ever come across. You’ll learn more pairing in a week than you’ll learn in two months working in isolation. Try it, and if you aren’t in a position to try it then try and improve your code review process as best you can. “Can we review this code face to face?” , “can you give me more feedback?” , “I know it’s got enough reviews to merge, but can you give me your feedback anyway?”. The answers to all those questions lead to you improving more as a developer
Ask people!
Ask for feedback from you line manager, team leader, experience team members, non experienced team members, the cleaner. Anyone! Ask people if they fancy a cup of tea and pick their brains while dipping a digestive. There is a wealth of knowledge in your teams head, take advantage
Hackathon
Run/attend a hackathon. Nothing teaches you more about coding then coding with different people (especially if they are vastly experienced). If you don’t have one to attend, set one up at your office. Failing that, reach out to me and you can come to one of ours!
Mob programming
See above. Just jump in a room, with multiple people and a laptop. You can read a little insight on this concept in my blog here
Create a shared “pet project”
I recently prepared for a hackthon by creating a “base” of a project which could be used by attendees. This was so people could use it to “hit the ground running” if they wanted to. This project isn’t a production thing, and therefore allows people to develop using the new technologies with the confidence they aren’t going to break a live system.
Use VS code live sharing
I have created non production pet projects, in different languages, and on interesting topics to encourage others to test remote pair programming technologies. We spent lunchtime sessions trialling VS code live sharing which was a much better way of pairing remotely as it was a much easier to handover code concepts or discuss potential code improvements as they occurred
Podcasts
I recently blogged about this being the best mechanism for learning. Podcasts are a way of making useless time (commuting etc) into your best personal development practice
Twitter etc
Follow industry leaders. Follow industry leaders you don’t agree with. Most importantly, follow Uncle Bob
Play with technologies that interest you at home
Hands up if you’ve watched 24 the TV show. Hands up if you watched every series? Oh wait this is a blog. Anyway, if you had your laptop infront of you while watching that’s 216 hours you could have spent learning. Yes you’d be distracted a little from both, but you’d still get enjoyment and progression in both. Find something fun as a pet project (I use football statistics) for extra motivation. It important for this (and the one below) to not burn out. We are so lucky do something we love which is such fun for a job so it’s not like it’s a painful way to spend an evening!
Play with technologies that interest you at work
We all get breaks, downtime when waiting for a server to come up and hopefully even personal development time. Failing any of those being an option, find personal development activities which can be used in upcoming stories and request that they get prioritised (and that you work on them). Sometimes this is as simple as asking to be on a team, story or project which is using technologies you want to learn. With that said, make sure you find time to relax too. More to come on that soon!
Interview people
Interviewing people is a great way to find out about interesting technologies process and even different ways of applying them. It also tests you knowledge and leads to conversations when you are debating tech and practices. This can start with getting involved in a passive manner interviewing for a new Intern, then for a new grad/apprentice, then for a new dev,l senior dev, your boss, the prime minister (ok to far). But you get the picture, getting involved is possible at almost any level, just ask!
Dev topic of the week
Introduce a meeting to your team (be the sheppard not the sheep) where you encourage people to talk about new technologies or ways of doing things that they have learned in the week. It could be something they’ve done at home, or on their stories but either way knowledge will start to flow around your company more. You’ll also find (like open source software) ideas will get picked up by other people and taken further so might have some massive benefits to the company in future too
Conferences
Quite expensive compared to the other options but a really good way to learn. The speakers are normally great so you learn not only about the topic they’re covering but other little snippets of information they happen to mention. You’ll also learn more from conversations with random people over coffee than you will from a week in your own office.
Meet ups
See above. The only difference being, if you can’t find one suitable then it’s easy to start your own. My little ‘agile friendly’ rendezvous with people from 4 different companies a few years ago was what helped me get a job with (IMO) the best XP practitioners in the country.
Volunteer
If you want experience in something and your current role isn’t giving you it then volunteer. Two of my roles and one of my promotions have been largely due to experiences I have gained in role volunteering. Just find a project that stretches you in an area you enjoy.
Teach others
The easiest way to become and expert in something is to teach it to other people. When was the last time you asked someone “would you like me to tell you about…”?
Mentors/Mentoring
Ask people to be your mentor. People generally are pretty good with helping out with stuff like this. Also repay the favour by doing it for someone else! Both are beneficial to your development
Remote training
This is the ‘go to’ for larger companies. Finding interactive courses can be great. Can this process be improved though? I think doing courses collectively (and celebrating this with pizza each time you meet to discuss it) definitely helped me complete Stanford Uni’s online machine learning course
External training
Again expensive, but sometimes really effective. Also really good if you can get your organisation to fund it for you. I think it’s worth doing if there are lots of people attempting to upskill in a specific area with training available, otherwise I’d try to use the other (mostly free) mechanisms listed
Offsite days
As external training can be expensive, often the knowledge you need is available from people internally. Even if it isn’t, you can often find tried and tested ways of training everyone on a specific area (such as (this game)[ http://www.watkinsdev.co.uk/devops/coaching/2016/07/12/dev-ops-introduction.html] for improving dev ops understanding). This type of activity is also really enjoyable, and can help spark other people’s desire for personal development
Automate everything
If you have a 30 minute task to do. Can you automate it. If you can, can you automate it using a new scripting language, or web scraping (cough) testing tool?
Retrospectives.
Attend them, but more importantly contribute in discussions. No one can say anything wrong in this ceremony and conversation that leads to ideas being challenged/discussed is a great way to learn. Sitting back and agreeing with everything isn’t
Send an email or Submit a paper
I wish I could remember which O’Reilly tech author said this in a recent podcast but “everyone has enough knowledge in them to write a book”. Theirs started by training someone via email and then formalising that content. Maybe I should submit this as a whitepaper to my local conference. Worst case scenario the feedback will be interesting for what to improve on next time!
Think outside the box
There are a million possibilities out there. Don’t rely on what your company has in place to allow you to develop. Don’t rely on the things you’ve tried already. For example, I wanted to learn more about line management, you don’t get afforded that opportunity normally as a new graduate, so I ran a Young Enterprise unit at a local school to get some experience in appraising, and training.