MountainWest RubyConf 2016
Sharpening The Axe: Self-Teaching For Developers

Sharpening The Axe: Self-Teaching For Developers

by Aja Hammerly

In her talk titled "Sharpening The Axe: Self-Teaching For Developers," Aja Hammerly discusses strategies for continuous learning and self-improvement in the ever-evolving field of technology. She emphasizes the importance of maintaining a proactive approach to learning, especially as many developers may find themselves feeling stagnant in their careers after several years. The talk outlines various methods to enhance one’s knowledge and skills, providing practical advice for developers at any stage of their journey.

Key points discussed include:

- Understanding Career Stagnation: Aja describes her own career path and the "Ferret Point," a stage where she craves new challenges and experiences, emphasizing that long-term learning is crucial for career growth.

- Lifelong Learning: She stresses that knowledge obtained from formal education is often inadequate for sustaining a long career in tech. The necessity for ongoing education, especially in a field characterized by rapid change, is a major theme.

- Learning Resources: Aja reviews various resources such as MOOCs (Massive Open Online Courses) and study groups, discussing their pros and cons. She lists tips for maximizing online course participation and stresses the benefits of structured learning environments.

- Engagement with a Community: The creation and participation in study groups is encouraged as a way to build relationships and maintain accountability, providing an equal balance of fun and educational rigor.

- Books and Solo Learning: Aja shares her experience with books, recommending engaging titles that incorporate exercises, but also highlighting the challenges of self-directed learning without structure.

- Projects and Experiments: She proposes engaging in 'throwaway projects'—coding exercises that may not be completed—which are beneficial for skill development.

- Networking and Speaking: Aja points out the advantages of public speaking as a method for learning and expanding networks, emphasizing the importance of choosing topics that genuinely interest speakers.

- Setting Time for Learning: Establishing a routine for learning, such as dedicating time each day, is highlighted as essential for effective retention and growth.

- Mentorship: She concludes by discussing the value of mentorship, encouraging listeners to seek out mentors and clearly communicate their learning objectives.

In conclusion, Aja Hammerly's talk serves as a reminder for developers to stay curious and committed to lifelong learning. By utilizing a mix of structured courses, collaborative study, hands-on projects, and community engagement, developers can effectively combat career stagnation and enhance their skills. Her insights encourage a proactive approach that should lead to unexpected opportunities and personal growth in their professional journeys.

00:00:23.119 Up next we have Aja Hammerly, who is a three-time returning speaker. Thank you for showing up! Wow, I love everything she does. Every time I get to hear her speak, she has something valuable to offer. So she was absolutely a no-brainer for one of the very first speakers we invited. Thank you for coming, Aja! I'm really excited for this talk.
00:00:31.960 I especially wanted to pair James and Aja together because I think they will complement each other well.
00:00:39.559 This talk is titled "Sharpening the Axe." I really wanted to bring a real axe, but I anticipated issues with TSA if I did, so it’s better that I didn’t.
00:00:47.199 Hi, I'm Aja. I am on GitHub as thamer, I tweet at @thamerRB, and I blog at thamiser.com. The slides for this talk are already available on thamiser.com. I have a passion for dinosaurs, and I work for Google Cloud Platform as a Developer Advocate, which allows me to travel around the world to conferences and talk about exciting Google Cloud features. However, that’s not what this talk is about. This talk is about feelings. If you have questions about running Ruby on Google’s hardware, whether that’s VMs or our App Engine product, come find me during breaks. I’m also going to be at URUG tomorrow night, and we have a Slack channel if you’d prefer to communicate online.
00:01:19.280 Because I work for a large company, I need to mention that all the code in this talk is copyright Google and licensed under Apache V2—so says our legal department. A little bit about me: I started my career as a test engineer, then transitioned to a Software Development Engineer in Test, which is a title that seems to predominantly exist in the Pacific Northwest. I went back to being a test engineer, and later, I was a software developer—"Software Developer" was my official title.
00:01:47.799 Eventually, I began focusing on operations and release management before returning to a software development role, and now I’m a Developer Advocate. Why so many title changes? It’s what I call the "Ferret Point." You might call it the "Magpie Point" or some other name; feel free to decide.
00:02:06.560 What's the Ferret Point? I essentially reach a stage in my career at each job where I feel done—I crave something new, something exciting. Everything else appears more fascinating and interesting, and my curiosity drives me towards areas outside my current responsibilities. I’ve made life choices that make it easier for me to pivot when I need to. A significant choice was living in a tech city. I’m from Seattle, which has many tech jobs, and Salt Lake City is currently thriving with tech opportunities as well.
00:02:41.519 As a member of the Ruby community, I participate in Seattle.rb and attend conferences. This involvement helps me learn about job opportunities that exist elsewhere, and I’m always in a state of learning. That’s the focus of this talk. If you’re newer to the field, you might not have realized it yet, but if you’ve been in the industry for a while, you likely understand that the knowledge we gained from our training—whether it was college, a boot camp, or an apprenticeship—is insufficient to sustain us throughout our careers.
00:03:10.120 Tech is constantly changing. We had a compelling talk yesterday about the hype cycle in tech, emphasizing the necessity for change and lifelong learning, which is not just a buzzword but a fundamental aspect of our jobs. Whether you’re a developer, an operations professional, or a product manager, everyone in tech must continue learning because the landscape is ever-evolving. My curiosity about many different topics—some of them non-technical—has significantly aided my growth throughout my career. The rest of this talk will focus on what to learn and how to learn.
00:03:47.239 You should prioritize interesting subjects. I can’t focus and learn if I don’t find the material engaging. For me, that includes algorithms, machine learning, and new programming languages. You should also challenge yourself with difficult subjects. Confession time: I don’t know C. My name is Aja, and I’m a developer, and that’s okay! However, about 18 months ago, I focused on a book written in C to brush up on my skills.
00:04:06.599 I wanted to solidify my understanding of the underlying concepts because I aim to enhance my credibility with a diverse audience of developers. Working at Google, where many people possess in-depth knowledge about low-level systems, made me feel somewhat out of place due to my lack of C expertise. Nonetheless, I believe you should prioritize 'thinky' stuff, especially early in your career.
00:04:47.239 What I mean by 'thinky' stuff is that instead of focusing on specific skills or libraries, you should explore different programming paradigms, even if only briefly. Learn a bit about functional programming, object-oriented programming, declarative programming, and a variety of database designs, whether they be document stores, relational models, or object databases. Dabble in machine learning and algorithms, networking, and development methodologies.
00:05:20.720 The reason I suggest this approach is that especially early in your career, you're building a scaffold. You want enough foundational knowledge that when you encounter a relevant project, you can draw on what you've learned. This base knowledge will facilitate ongoing learning as your career progresses. Now, how do you actually make this happen? This is the crux of the talk.
00:06:03.720 There are numerous ways to learn. One popular method these days is through MOOCs, which I’ll summarize with the acronym OER—Open Educational Resources. This category includes platforms like Coursera, edX, Udemy, and various free courses from universities. Their formats can differ quite a bit based on the organization conducting the course.
00:06:45.720 Most include video lectures, reading assignments, homework, forums for interaction with teachers, teaching assistants, and other students, and online quizzes or tests. I’ve done about five of these courses, and one thing I’ve valued is their structured nature. It feels like being back in school, with deadlines and assignments to complete weekly. Knowing that help is accessible is also comforting. Furthermore, there’s a shared experience among the other participants, which helps alleviate feelings of inadequacy when you’re struggling.
00:07:31.679 However, there are cons to these courses. They can be quite expensive, depending on the offering. While I’ve only taken free ones, many charge significant fees. They can be time-consuming, too—typically, I devote four to eight hours per week to them. If you prefer self-directed learning, this structure might not be for you.
00:08:14.680 If you choose to try it out, here are some tips: First, read the syllabus thoroughly. Confirm that the course will fit your needs. Some classes have tests while others don’t, which caught me off guard during the first course I enrolled in that required a final exam. Secondly, be realistic about the time you have available. Coursera provides estimated weekly time commitments, but these vary from person to person.
00:08:56.560 Also, you should set aside a regular time to watch lectures or tackle projects. When taking these courses, I usually allocate a couple of hours on Saturday afternoons for focused study. One fantastic tip is if the course includes video lectures, speed them up. Watching at 1.5 or 2x speed is something I find effective for retention, and many people do as well. I also multitask while watching to maintain my concentration.
00:09:38.880 Lastly, avoid being a guinea pig. Take courses that have been previously run successfully or that are commissioned by established universities. My experience with a new course taught me that being the first is often a rough experience; sticking to those with several iterations tends to deliver better educational results. This is true in any learning context, including books or online courses.
00:10:19.360 One tremendous value I gained from my online courses was through the famous Stanford Machine Learning Course. I found great value in the conversations I've had at conferences with colleagues who took the same course, as it led to a shared lexicon and understanding of the basics.
00:10:48.959 Another valuable learning method is study groups. One of the best parts of study groups is their focus on relationships. The Seattle RB Chapter has been running study groups for several years now. At MountainWest RubyConf 2014, Ryan discussed the importance of study groups in his talk, "Nerd Party 3.1." I cherish the relationships I've built in these groups. By maintaining in-person accountability, those who know what I’m aiming for will notice if I slack off.
00:11:11.520 The downsides? You need to find nerdy friends to study with—something that not all of us may be fortunate enough to have. Also, it’s important to have a curriculum. Here are some additional tips: aim to meet weekly. As Ryan emphasized, having a regular meeting provides consistency. Also, incorporate homework; engaging with the material through practice is essential.
00:11:53.600 I have noticed that study groups with too many observers, who just sit silently in the corner, do not fare as well. It’s important to foster active participation, as people benefit from struggling with the material. I find that spending about three hours a week on homework strikes a good balance, allowing people to discuss the chapter and tackle accompanying problems before our next meeting.
00:12:30.240 We've found it effective to stretch learning over a week and a half, ensuring we retain information. Choose homework problems wisely; avoid those that are poorly written or do not make sense. A recent fun narrative from one of our study groups involved a gentleman named Javier, an excellent cook.
00:13:00.320 Whenever he forgot to complete his homework, he would bring delicious pork to our meetings, which he humorously called "Penance Pork." We enjoyed various barbecued dishes, which made our gatherings even more special.
00:13:44.520 Another key to successful study groups is to maintain a smaller size. We typically lose a quarter to a third of attendees through sign-ups, so we usually begin with about eight participants, ensuring five or six finish together. Larger groups allow people to hide in the crowd, where a smaller group encourages accountability.
00:14:24.360 Finally, celebrate your achievements once you complete a project or a book as a group. A picture of our Tiramisu celebration serves as a reminder; it was well-earned. For another celebration, we organized a picnic after completing another book.
00:15:00.160 If you are thinking, "This sounds great, but I’m an introvert and prefer a more solitary approach," consider games and puzzles. Websites like Project Euler, Exercism, and Rosalind offer small problem sets to solve independently. Rosalind specifically tailors many problems to bioinformatics, and while many errors exist there, it provides a unique way to apply your programming skills. For example, one challenge involves counting nucleotides in a DNA string, which primarily involves string manipulation and hashing.
00:15:41.760 I appreciate how Rosalind’s problems build upon one another, prompting you to refactor your code as you progress. I have drawn much of the parsing DNA functionality into a separate file that serves as a library for the rest of my solution. That’s a benefit of these types of small problem sites—they allow for incremental learning and breaking down challenges.
00:16:23.200 These challenges vary in difficulty and can aid in preparation for tech interviews where you will encounter similar questions. Many candidates freeze when faced with problems like reversing a linked list on a whiteboard. While I argue such a measure isn't the best way to evaluate coding abilities, practicing here can instill confidence and improve performance for those types of inquiries.
00:17:01.760 Except, there are downsides. Many of these sites require a deep background in computer science or mathematics, which might be a challenge for those of us with non-traditional backgrounds who haven’t focused on concepts like prime factorization. Nevertheless, Rosalind provides some guidance for applicable biology information, but it can be daunting at times to decipher questions.
00:17:35.680 You may feel these problems aren’t "real programming" tasks, but rather toy problems, which raises the question of how much you are learning without the challenges of an actual application. That said, these sites encourage the internalization of core concepts.
00:18:09.440 Regarding study group participation, we always emphasize the importance of active involvement. We found that creating incentives for competition or using coding challenges encourages more engagement, providing motivation for those who might otherwise shy away from taking part in discussions.
00:18:46.960 Books are also a good resource for self-directed learning. They provide flexibility, allowing you to learn at your own pace, which is beneficial for those with unpredictable schedules. The vast selection of programming books covers an extensive range of topics, and this volume can often be overwhelming.
00:19:12.880 However, books aren’t my preferred method for learning due to their lack of interactivity. I often struggle to assess my understanding of the material without a reliable schedule or external pressures to complete the reading. For instance, I’ve been stuck three-quarters of the way through one book on using Python for bioinformatics for nine months now.
00:19:43.040 If you opt for books, make sure to select those with engaging exercises and puzzles to complete. Copying and pasting code has no value; being able to demonstrate your understanding through practical application is essential. Additionally, being able to reference solutions on platforms like GitHub is beneficial. I enjoyed working through problems from Structure and Interpretation of Computer Programs, referring to answers found online to help overcome obstacles.
00:20:26.479 Many readers appreciate books with shorter chapters, as they can complete each section independently and feel a sense of achievement upon finishing a chapter. However, not every book is designed in this way. Structure and Interpretation of Computer Programs is several inches thick and comprises only five chapters, which can lead to extended periods of assessment without marked progress.
00:21:04.600 Here are some of my recommendations for books: The Elements of Computing Systems (also known as Nand to Tetris) is fantastic, particularly for those still trying to grasp architectures and operating systems within computer science. I also highly recommend The Little Schemer and its sequel, The Seasoned Schemer; both are wonderful resources for logic programming.
00:21:40.400 I’m also including The Pragmatic Programmer, even though it doesn’t include exercises since it provides invaluable insights into software development practices. Now, here’s a secret many speakers might share. A lot of speakers give talks to force themselves to learn new topics, including myself. I once gave a talk three years ago at Cascadia Ruby Conference called "The Taste of Prolog," having initially proposed the topic without knowing it would be included.
00:22:10.680 I used the time before the talk to dedicate myself to reading on Prolog, which drove my preparation. As a result, that talk has the highest number of YouTube views among my talks and even topped programming rankings on Reddit a year and a half ago. I share this not to boast but to illustrate that proposing a talk can drive you to become knowledgeable on a subject without being an expert beforehand.
00:22:55.840 The approach gives you the pressure of a deadline, ensuring that you must finish your preparation and share your insights with an audience. Presenting at conferences is a great way to expand your network. My talk at Cascadia RubyConf led directly to my transition from a startup job to a consultancy role based on the impressions I made.
00:23:29.280 Be aware that while stepping into a speaking role can be intimidating, embracing it offers the opportunity to learn a great deal and make valuable connections. However, keep in mind that you will face deadlines that you must meet, even if you lose interest in the topic. Always choose subjects you are interested in; avoid proposing areas that you do not want to delve into.
00:24:03.280 Or, you can keep it simple. I’ve noticed from reviewing proposals that many individuals attempt to cover too much content in a single presentation. For a half-hour talk, I suggest focusing on a 101 or 102-level topic that allows flexibility in your presentation material.
00:24:45.440 Finally, make sure to allocate ample time; aim for at least two to three months between acceptance of your proposal and delivering your talk. Having a rough plan for the resources you’ll use to prepare will facilitate your learning process.
00:25:22.440 Consider engaging in "throwaway projects." These are code projects that may never materialize outside of your personal expeditions. Every directory within my projects folder pertains to something I was once interested in, whether a side project or a learning challenge.
00:26:00.080 For example, I once attempted to create a Rails application designed to store recipes, inspired by the famous Bill Gates quote about the potential of computers in that domain. Admittedly, I struggled to design an effective data model for that app.
00:26:42.960 Earlier in my career, I spent five or six years focusing predominantly on blackbox testing instead of whitebox testing. During that time, I wrote an application using Webrick to simulate various HTTP error codes for testing integration with a payment service—though I’ve come to understand far better methods since then.
00:27:26.080 Currently, I am working on a new app that sees knitting patterns interpreted as a programming language. By leveraging Ryan Davis's graphics library, I aim to visualize how a pattern will appear once knitted.
00:28:05.840 As I work through these projects, I remind myself that failing to complete them is not a failure in itself. Each gives me valuable experience and skills that I didn’t possess before. I encourage you to carve out time in your life for learning outside of work, even if life seems too hectic.
00:28:50.080 Your company may offer learning opportunities, such as science fairs, hack weeks, or hackathons. If you work in an environment that provides these chances, seize them.
00:29:37.440 For instance, I worked with teams that set aside specific periods for employees to dedicate to developing new features or experimenting with technologies, often accompanied by friendly competitions. If your workplace doesn't currently have such opportunities, consider proposing them as team-building activities.
00:30:20.400 Some opportunities might involve role-switching or experimenting with different responsibilities within your organization. This presents avenues for exploration and personal growth.
00:30:55.440 For those working in agile environments, consider prototyping or spiking. This allows you to play with new libraries while solving existing pain points. When presenting new ideas to management, articulate that you are time-boxing your experimentation, and ensure that you won’t delve too deeply into these temporary codes.
00:31:35.600 Another way to learn is by contributing to development on internal applications, which often serve specific purposes within your organization. I crafted my first Rails application for test case management while still working in a testing-focused role, which ultimately helped propel my career forward.
00:32:10.440 Additionally, internal apps focused on testing facilitate learning opportunities. Beyond unit testing, internal applications can range from automated test account creation to content generation for demonstration and testing periods.
00:32:38.640 I transitioned from a Software Test Engineer to a Software Development Engineer by dedicating only two days to learn Perl, which I leveraged for load testing. A proactive approach to recognize and learn necessary programming skills can lead you toward desired career advancements.
00:33:26.880 Ideally, I also recommend dedicating a set time each workday solely to learning—perhaps half an hour to an hour. Structuring your day around these sessions aids retention and can yield significant benefits. I also recommend that you step away from your desk to engage in this focus time to maintain productivity in your regular duties.
00:34:10.880 For those concerned about how management may perceive this, demonstrate that your learning is directly linked to your current role. I’ve shared my learning goals within status reports at my current workplace, and it has become a common practice on my team.
00:35:03.679 Set a timer for your learning periods to indicate that you are using this time effectively—turning a smoke break into an opportunity for growth. Let’s all start today with a simple learning objective; perhaps aim to complete five Project Euler problems this week or discuss possible hack weeks with supervisors. Alternatively, consider purchasing a book and starting to learn from it.
00:36:01.440 Accountability can be powerful. Find a learning buddy; I thrive on shared goals. Depending on your preference, plan to meet weekly and discuss a chapter or find someone to check in on your progress regularly. Think of ways to turn learning into a friendly competition, rewarding the one who accomplishes the most towards their goal at the end of the month.
00:36:40.800 For those who desire a more personal journey and wish to maintain independence in their learning travels, many habit-tracking apps can facilitate this. I utilize a habit tracker with an RPG framework that keeps me motivated, ensuring I make time for both learning and mindfulness meditation.
00:37:18.160 Accept setbacks as a natural part of the process. Some weeks will be better than others; life events can interrupt even the best-laid plans, but don’t lose heart.Over time, the effort you put into learning will open doors and provide opportunities greater than you can anticipate. Thank you all, and I appreciate you having me at this conference—this is my fourth time attending, and I love it every time.
00:37:59.920 As for personal experiences, I have several mentors who have significantly influenced my journey—Aon Patterson and Ryan Davis are notable examples. At Google, I was assigned a mentor on my very first day, and he proved to be an invaluable resource.
00:38:23.960 Whenever I express desires for learning, he offers me five solid recommendations tailored to my interests. If you’re considering asking someone to mentor you, it’s advisable to articulate your expectations and what you hope the relationship will look like. This might entail having regular conversations to discuss your questions or sending specific inquiries via email.
00:38:59.680 To summarize, don't hesitate to approach potential mentors you admire. Finally, and that’s a wrap! Thank you!
00:39:12.880 all