Kimberly D. Barnes

Becoming a Mid...

Becoming a Mid...

by Kimberly D. Barnes and Kinsey Ann Durham

The video presented at RubyConf 2016 titled "Becoming a Mid" features speakers Kimberly D. Barnes and Kinsey Ann Durham discussing the journey from junior to mid-level developer from their respective perspectives. They focus on providing actionable insights for developers at all levels, especially juniors seeking to grow in their careers.

Key Points Discussed:

- Introduction to Becoming a Mid-Level Developer:

- The speakers share their backgrounds, with Kinsey representing the junior perspective and Kim lending her experienced viewpoint.

  • Technical Learning:

    • Teaching others is highlighted as a powerful means of solidifying one’s own learning.
    • Engaging in side projects or open source contributions is essential for practice and growth.
    • Applying the Pomodoro Technique can help manage work sessions and prevent burnout.
    • Continuous learning of new languages, alongside mastering core concepts, is crucial for technical proficiency.
  • Domain Knowledge:

    • Gaining a thorough understanding of the applications, customers, and company helps improve both coding and problem-solving.
    • Asking questions is encouraged to deepen knowledge and foster a collaborative environment.
  • Mentoring Relationships:

    • Effective mentoring requires patience and attentiveness, with a focus on communication and empathy.
    • Both juniors and seniors can learn from each other, and effective mentoring involves challenging mentees while encouraging them to recognize their strengths.
  • Soft Skills for Developers:

    • Time management and emotional intelligence are vital for success.
    • The importance of networking and building connections within the industry is emphasized.
    • Handling the challenges of multitasking and retaining a growth mindset is encouraged.
  • Concluding Thoughts:

    • The speakers underscore the significance of setting actionable growth goals, seeking mentorship, and remaining open to learning and feedback.

The session wraps up with a call for juniors to recognize the value they bring, while seniors are reminded to be open to learning from their less experienced peers, creating an inclusive learning environment.

00:00:14.530 Hello, everyone! I'm Kinsey Ann Durham, and this is my colleague, Kim, who will introduce herself shortly. Today, we will be discussing becoming a mid-level developer and sharing our two perspectives on leveling up in our careers.
00:00:20.200 As for me, I am based in Denver, Colorado. I have a passion for fly fishing, and that's my dog Harley in the middle of the picture. I'm very obsessed with her. I also enjoy teaching code in Peru, which is something I am truly passionate about.
00:00:33.220 My background is quite different because I didn’t attend a coding school or have a computer science degree. I started learning to code after attending a RailsBridge workshop, which helped me begin my journey. I come from a more junior perspective and have recently made the transition toward becoming a mid-level developer.
00:00:50.320 Thank you! Now, I’ll let Kim introduce herself. I'm Kim Barnes. I come from a more experienced standpoint, having been in the field for a while. I might use terms or tools that others may not be familiar with, which sometimes requires me to explain them. It can be unfortunate and a bit embarrassing when that happens.
00:01:11.080 I was introduced to programming by my dad, who would assign me basic programming tasks that I had to complete before playing games on the Apple II Plus. He graded my assignments based on their difficulty, saying, 'If you get an A, you can play this many games of Space Invaders or Sneakers.'
00:01:31.360 My passions include my two amazing kids, both of whom are currently in college. I do not recommend having both your kids start college at the same time; it is not very convenient! I also love test-driven development, pairing, and mentoring.
00:01:43.479 There was an early attempt at coaching my little sister to ride a pony, which didn’t go very well. What's cool right now is that Kinsey and I are on the same team. We have the opportunity to work together every day and mentor each other in this process.
00:02:01.830 We both work for a company called GoSpotCheck in Denver, Colorado, and we are always looking for engineers. If you have any questions about that or want to relocate to Colorado, please come talk to us. We also have lots of T-shirts!
00:02:27.610 As Kim and I were planning this talk, we grappled with terms like 'junior' and 'mid-level.' The definitions of these terms can vary, and we think there are many ideas to share that can benefit developers at any level, so we hope you can take away useful insights.
00:02:46.329 We will cover a few areas today: first, technical learning, where we will suggest ways to level up your technical skills; second, domain knowledge, which involves understanding the 'why' behind the code you write. We will also discuss mentoring, focusing on how to become better mentors, and dive into the relationships between juniors and mentors.
00:03:12.210 We wish to share practical methods for making mentoring effective, whether you are in a paired or solo environment. Lastly, we will touch on soft skills that will help you become a well-rounded developer. Kim will kick us off with some ideas about technical learning.
00:03:32.379 Thanks, Kinsey! First off, I want to say that one of the best ways to learn technically is through teaching. Many people believe that you need to be a senior developer to teach others, but I think it is quite the opposite. Even if you've been programming for only a month or two weeks, you can teach someone who has never programmed before. Teach your sibling or your parents; it really helps establish your understanding.
00:03:49.780 Teaching allows you to solidify your learning and fend off imposter syndrome. When you explain concepts to others, you realize that you do indeed know what you're doing. Side projects are also important; you need to find ways to learn outside your regular job. Working on a 'breakable toy' or contributing to open source can be incredibly beneficial.
00:04:07.120 There are many obstacles to contributing to open source, but many awesome people here at the conference can help. Remember that it doesn't only have to be about code; you can also volunteer for programs like RailsBridge or get involved in your local community. Choose projects you are passionate about because coding should be enjoyable, not a burnout.
00:04:34.090 On the topic of burnout, it's crucial to take breaks. If you haven't heard of the Pomodoro Technique, it's a great way to manage your time. The technique suggests working for 20 minutes and then taking a 5-minute break. This helps you step away from your computer regularly.
00:04:48.570 Maintaining hobbies is also essential. I've noticed that many people in boot camps or coding schools abandon their previous passions, like horseback riding or fly fishing, when they start programming. I believe you should make time for those activities; they are vital for your mental health.
00:05:10.420 Learning additional programming languages is important too. While mastering your first language, try to explore others as it helps solidify core concepts. An example from my experience is SQL. One of my first days at GoSpotCheck, I encountered SQL, and I remember being overwhelmed.
00:05:27.970 Most coding schools don’t teach SQL, and it’s crucial to understand it. If you're struggling with SQL, find a mentor who can guide you. Don’t hesitate to play around in databases to deepen your understanding. The only reason I started asking questions of Kim was that I knew she was knowledgeable in SQL.
00:05:43.360 It’s also important to be mindful of how you approach problems. We often jump right into coding without thinking deeply about the issue. Having an awareness around this is essential. Breaking problems down into smaller, more manageable tasks is a proven best practice.
00:06:06.250 Understanding the 'why' rather than just the 'how' is crucial. In project planning and meetings, ask questions about why you are doing a particular task. Understanding the bigger picture enhances your awareness. Additionally, using techniques like pseudocode helps clarify what your code needs to accomplish before diving in.
00:06:26.900 Pseudocode can highlight potential design flaws, as I’ve found it often reveals code smells. Staying focused is also paramount—it's easy to get distracted by various factors like social media or interruptions. Having a mentor, like Kim, who reminds you to stay on track can be invaluable.
00:06:48.290 Set intentional goals for your growth. Acknowledge what you want to achieve each day and communicate with your mentor. Be proactive about your career and take ownership of your learning process.
00:07:14.390 Time and practice are essential components of leveling up. As I’ve recently started mentoring students at an online coding school, I’ve noticed that many expect to become proficient in JavaScript in just two weeks. However, real mastery requires perseverance and effort.
00:07:29.680 Skill development is not innate; it takes grit and determination. Sandy Maxx's talk emphasizes the value of hard work. You need to keep digging in and putting one foot in front of the other to progress.
00:07:51.240 Now, I want to pass the floor to Kim, who has some valuable insights to share about leveling up technically.
00:08:06.270 Thanks, Kinsey! To start the day, think about what you want to learn. A great quote from Venkat Subramanyam, one of my heroes, encapsulates that idea. At GoSpotCheck, we value continuous learning and improvement, so having a target for what you want to learn is beneficial.
00:08:31.700 I want to introduce a concept called the technical learning axis, which my friend David Maduros taught me. The first axis is horizontal, representing various languages and technologies, such as Ruby on Rails, JavaScript, and React. The second axis is vertical, encompassing the core concepts that apply across these languages.
00:08:57.190 While it’s essential to stay current with new languages, it's equally important not to neglect the core principles that unify them. These core concepts help you solve problems, regardless of the programming language you’re using.
00:09:05.520 It’s crucial to balance learning new languages with mastering fundamental principles such as TDD, refactoring, and design patterns. Proficiency in core concepts can help you obtain roles in languages you may not have prior experience with.
00:09:32.210 Those principles are the foundation that allows you to excel at problem-solving. Learning a new programming language becomes easier with each core concept you master. Similarly, as you learn new design patterns, you’ll understand them better across different languages.
00:09:56.020 When I mentor or pair with someone, I can gauge their understanding of these core principles through the language they use. Using terminology appropriately and addressing design trade-offs reflects the growth of their technical awareness.
00:10:18.750 Next, let’s discuss domain knowledge, which is about deepening your understanding of the company, its applications, the code being written, and the problems you are solving. An excellent way to enhance your domain knowledge is to embrace asking questions—even those you might think are silly.
00:10:36.249 Being too cautious about asking questions can hinder your growth. Imagine you’re in a project management meeting, and cryptic terms are thrown around—if you don’t understand something, it's crucial to ask for clarification. Asking questions demonstrates your commitment to understanding the problem space.
00:11:06.370 Sometimes, asking questions leads to greater trust from your team. Your colleagues will appreciate your willingness to seek clarity, which creates a more collaborative and open environment.
00:11:23.030 At GoSpotCheck, we conduct field trips to get a better grasp of our customers’ needs. Our main clients are large alcohol brands, so instead of conventional field trips, we explore liquor stores to see how our applications are used firsthand. This experience is invaluable—it helps bridge the gap between coding and user experience.
00:11:53.340 These field trips broaden your perspective. Pay attention to the customer’s perspective, embrace their needs, and actively work to meet them. Engaging with customers helps you avoid becoming isolated as a developer.
00:12:08.640 Now, let’s pivot to mentoring and explore what makes a quality mentor. One of the most important pieces of advice I have is to remain aware of your word choices and body language while mentoring. It's crucial to be encouraging and to recognize your biases.
00:12:36.310 When mentoring, keep in mind that it's easy to become frustrated, especially when you are passionate about the topic and your mentee struggles. Remember, frustration can discourage learners, so take breaks if you sense this feeling arising. Your role is to support and empower, not to intimidate.
00:12:55.110 Teaching through metaphors can make complex concepts easier to understand. For example, I once struggled with JavaScript's 'this' keyword until a mentor used a soccer player metaphor that finally made sense to me. Consider your mentee's learning style and tailor your teaching accordingly.
00:13:27.800 It’s also vital to focus on the bigger picture. Junior developers often have much more to offer than just raw coding skills. When mentoring, help them recognize their soft skills and other strengths—the whole developer is more than just technical abilities.
00:13:50.749 Support needs to be balanced with challenges. Be a mentor who inspires while also helping your mentee push past their comfort zone. Challenge them when you see room for improvement. Always remember that juniors can teach you too; they bring fresh perspectives that can enhance your understanding and approach.
00:14:09.570 Being a mentor isn’t confined to senior developers. A senior developer might not be the best teacher. Teaching requires practice and a solid understanding of how your mentee thinks. Use their preferred communication style to explain concepts effectively.
00:14:30.990 It's important to gauge when to step in as a mentor or when to allow your mentee to struggle. Learning from mistakes can be valuable, but don’t let them become too frustrated. Struggling through a challenge is often necessary, but you also need to offer support.
00:14:50.500 Similar to an evolving learning methodology, teachable code is an approach to writing maintainable code. A mentor should ensure that their code is understandable to the lowest common denominator so that others can engage with the code whenever necessary. This approach can elevate both the mentee and the quality of the codebase.
00:15:12.260 Encouraging an exchange of feedback is incredibly valuable for developing relationships between juniors and mentors. Regularly ask for feedback on your mentoring style and work to incorporate it. Similarly, offer constructive feedback in return—aim to focus on improving each other’s impact.
00:15:36.510 Being humble as a mentor means acknowledging that you are still learning. There will be moments when a junior asks you questions you don’t know the answers to—this is okay! Use those moments as opportunities to explore together and model problem-solving skills.
00:16:02.730 While Kinsey and I do not have a formal mentorship program at GoSpotCheck, we've built a valuable structure around mentoring through consistent one-on-one meetings. Regular check-ins ensure we align our goals and work together productively.
00:16:21.880 Finding a supportive learning environment is crucial. Many junior developers settle for places where learning is undervalued. If you find yourself in such an environment, it’s essential to speak up about your needs or consider other options.
00:16:41.579 Actionable goals should be a shared focus between a mentor and mentee to help facilitate the transition to mid-level. Understand what a mid-level developer looks like in your specific context and work toward those goals together.
00:17:06.390 There’s immense value in understanding the balance between pairing and soloing. Many of you pair regularly, while others might primarily work solo. Striking a balance between both experiences is crucial.
00:17:30.900 When I started pairing, I struggled with confidence. Often, I’d be hesitant to take the lead during pairing sessions, which limited my learning. Kim encouraged me to take charge more often. While it was challenging, it helped me grow significantly.
00:17:48.460 Having solo time is also essential for struggles and deep learning. Kinsey expressed a desire for a balance of pairing and solo work, wanting to explore coding challenges independently while simultaneously engaging with others.
00:18:05.450 We recently began conducting pairing retrospectives to improve our collaborative efforts. These retrospectives allow us to evaluate what went well and what can be improved in our pairing sessions.
00:18:24.920 Through these discussions, we identify areas where we want to drive more collaboration. It’s a great way to maximize the value of pairing and accelerate learning outcomes.
00:18:43.070 Now, let’s talk about some essential soft skills that contribute to becoming a well-rounded developer. Time management is one crucial area. Effective developers tend to struggle with providing accurate estimates. We need to acknowledge that estimates can be imprecise and identify ways to manage our time better.
00:19:05.760 The Pomodoro Technique is one effective method for managing time and breaks. You can apply this technique when estimating tasks: note how long each takes, and review your accuracy afterward, identifying patterns and refining your estimates.
00:19:23.590 Avoid multitasking when possible, but it is essential to finish your current tasks before switching to high-priority issues. Completing what you start leads to a smoother transition back to your original task after addressing urgent needs.
00:19:47.380 For further time management techniques, I recommend the book 'Getting Things Done.' It provides various insights to help juggle responsibilities across both work and home.
00:20:03.990 Another essential soft skill is developing emotional intelligence. As developers, breaking the stereotype of being antisocial or introverted is vital. Agile methodologies emphasize communication and collaboration, requiring us to engage effectively.
00:20:20.790 Empathy is fundamental when working with colleagues—from product owners to quality assurance teams. It’s not just about agreeing; it involves genuinely understanding where others are coming from. This understanding leads to better collaboration and problem-solving.
00:20:44.500 Mindfulness and work-life balance are also important. Take time for self-care, such as meditating or enjoying hobbies that help ground you. Recognizing your strengths and weaknesses is key; use personality assessments to improve your interactions with team members.
00:21:05.960 Being aware of your learning preferences can significantly enhance your development. If textbook learning isn’t effective for you, seek hands-on opportunities that cater to your style.
00:21:22.800 Finally, cultivating a growth mindset fosters resilience. Embrace challenges as opportunities to improve, and learn from each step along your journey as a developer.
00:21:37.370 Networking is crucial as you advance in your career. Many job opportunities arise through connections rather than traditional applications. Attend meetups and leverage social media to engage with the tech community.
00:21:55.660 In closing, we encourage you to pursue your journey toward becoming a mid-level developer diligently. Set actionable goals, find the right mentorship, and be open to learning on all fronts. The path may be challenging, but persistence and dedication will pay off.
00:22:15.300 We appreciate your attention and time today, and we'd like to share a final thought: always be aware of what you need as you grow in this field. Speak up, seek support, and engage with your network for guidance.
00:22:31.270 To our junior developers, remember that you have much to contribute beyond coding skills. To our senior developers, embrace feedback and offer your support and guidance when you can.
00:22:47.510 Thank you for joining us at this session. We hope you found our insights valuable and encourage you to implement what you have learned in your development journeys.
00:23:06.520 Please feel free to reach out with any questions or for further discussions. We appreciate your engagement and participation today!