Professional Development Activities for Professional Developers
Software development is a profession that demands constant learning and improvement to maintain a competitive position in the industry. The landscape of our environment changes constantly with new languages, frameworks, libraries, devices, tooling, and technologies paraded out in an endless cacophony of buzzwords and three letter acronyms (TLAs). We are expected to stay relevant by being students of our profession and good stewards of the development community — our careers depend on it.
Most developers possess some level of autodidacticism; we are curious beings that like to figure things out. As such, it would seem like we are predisposed to continual learning, improving, and professional growth. While this motivation lives inside of most of us, it can be difficult to select high value learning time outside of playing with the latest shiny new object.
Over the course of my career I have discovered several activities that have had a high return on investment for my time. Some of these may seem painfully obvious while others may not resonate with your personality, but each of them has helped me along my path.
Read Tech Books and Blogs
Let's start by addressing the obvious, reading technical books and blogs. Staying relevant starts with continuing education in our core competencies. It is important to stay up to date on the technologies we use everyday, but it is equally important to learn new technologies, frameworks, libraries, and languages. I highly recommend Safari Books Online as a near endless supply of programming and IT reading material.
Seeking out technical reading materials that are not programming or IT related is also beneficial. I personally like to read books like Structures: Or Why Things Don't Fall Down and blogs like Randall Munroe's what if?. Learning more about math, physics, and other sciences can be fun and rewarding, but most of all it expands our minds and makes us better technologists.
Read non-tech books
The less obvious choice for reading are the non-technical options available to us. Reading history, fiction, biographies, satire, essays, and other genres of literature help develop soft skills, creative thinking, and expand our horizons. A good developer is also a good communicator and collaborator. Having a wide breadth of knowledge and being well read feeds our thirst for knowledge and is a very rewarding way to expand our world view.
If you have not read it before, The Pleasure of Finding Things Out by Richard Feynman is a great place to start. Sometimes I will randomly pick something from Amazon's 100 Books to Read in a Lifetime or one of the other top 100 lists for best books as curated by various sources. Bill Gates releases reviews of the books he reads and I find myself grabbing books from his recommendations all the time. In my opinion, every minute that is spent in a good book is time well invested.
Listen to podcasts/lectures/interviews
Like our reading selection, our audio time should be a mixture of vocational and recreational content. I highly recommend tuning in to podcasts and lectures from thought leaders in our industry, however, I would also encourage seeking out other interests and exploring new topics. I love to listen to Freakonomics Radio on my morning commute, and I always look forward to a new episode of Dan Carlin's Hardcore History. We spend a lot of time in our vehicles or other transportation, this is a great opportunity to passively learn something new.
Go to a Museum
Museums come in all flavors: history, art, design, science, just to name a few. These are magnificent places where we can view artifacts from ancient civilizations, beautiful works from artists old and new, dinosaur skeletons, and Tesla coils. Writing code is a creative endeavor and for many of us it is our primary artistic outlet, however, we spend very little time surrounded by art and antiquities. Inspiration can come in many forms, not just an elegant piece of code.
Participate in Meetups
Attending conferences is a great way to see presentations and lectures, however, most of us cannot attend conferences year round. Conferences are a great way to network, learn, share, and become inspired by the things that other people are doing. Most cities have micro-versions of these conferences every month in the form of meetups. Head over to meetup.com and search for some meetups in your area. You are almost sure to find amazing speakers and a community of people with similar interests. Notice I did not recommend just attending a meetup; it is very important to participate. Ask questions, meet new people, and volunteer to do a presentation. Most meetups welcome all skill levels and are a great place to become a member of the greater developer community. If you cannot find a meetup in your area, YouTube is a good resource to find speakers and great talks.
Teach Others to Code
Sharing our knowledge has two immediate advantages: we can help other people improve their skills (like others helped us), and it reinforces our grasp on the technology. Explaining complex ideas requires a deep understanding of the topic, the inner workings, use cases, and practical applications, to name a few. Inquisitive students can expose gaps in our knowledge, help us discover new ways of explaining things, and challenge us to be better. Almost nobody has become a successful programmer without others sharing their knowledge, it is how we all grow in this industry.
Volunteer your time
Custom software is expensive, and many non-profit organizations do not have the resources to have web, mobile, or internal applications built for them. Finding groups or organizations in the community that can benefit from our skills is usually pretty easy, and helping these groups can be very rewarding. This is a great way to share our craft, give back to our communities, and expand our networks. Using our powers for good is never a bad thing.
Seek out a Mentor
Whether you are a newbie or seasoned veteran in your trade, a mentor is an invaluable resource. I have found that the people that possess traits I admire are usually willing to share some of their time for a cup of coffee. Most people like to help others, share their experiences, and offer advice. If you do not regularly meet with a mentor, or several mentors, then I would advise you seek one out immediately. Mentors are here to challenge us, give us different perspectives, and let us learn from their wisdom and experience. I do not recommend blindly following the advise and counsel of mentors; use them as one of your many resources for exploring options and honing your skills.
Not every mentor needs to be a developer, and not every session needs to be about code. I like to meet with entrepreneurs, developers, designers, and other people that can help me be a better programmer, professional, and person.
Become a Mentor
No matter your level of expertise or experience, there is someone that can benefit from your knowledge. Like teaching others to code, offering your time to another person and sincerely attempting to help them is a great way to not only give back, but to grow as a person and a professional. I have found that becoming a mentor for others made me appreciate the time I spend with my mentors even more, and I only wish I had explored both finding and becoming a mentor sooner.
Build stuff (outside of your comfort zone)
Most of us create software for a living, and for many of us that means the thing that was once our hobby and creative outlet is now our full-time job. Leisure time is usually devoted to doing things much different from our work, allowing our minds to be free of the daily grind. The problem is most of us still love to code, so we spend our weekends maintaining side projects, contributing to open-source projects, or other programming activities that very much resemble our typical work day.
While these habits are rewarding and I am not advocating abandoning them, I find that projects outside of my comfort zone only help me become better at what I do, and reignites my passion to write great code. Write FizzBuzz in assembly, a web-server in C, or a sudoku solver in Prolog. For a few bucks a Raspberry Pi, Arduino, or other device in that price range opens the door to robotics, gaming systems, and almost endless possibilities. Many of these devices will run the languages you already know and have a huge community of followers.
A career as a professional software developer requires more than just keeping up with the latest technologies and updates to the tools we use everyday. Being a student of our profession is certainly important, but developing other skills and knowledge rewards both our personal and professional lives. Taking time to appreciate literature, participate in meetups, learn some history, and build a robot are all great ways to become better at what we do.