Talks

What I learned my first year as a full-time programmer

What I learned my first year as a full-time programmer

by Hilary Stohs-Krause

In her talk "What I Learned My First Year as a Full-Time Programmer" presented at RailsConf 2019, Hilary Stohs-Krause shares insights gained from her initial experiences in the tech industry, aiming to reassure and guide junior developers. The presentation begins by emphasizing that programmers are not the only important players in tech, challenging the myth of the 'rockstar programmer'. This notion is discussed alongside a study from the Harvard Business Review, suggesting that overconfident 'superstar' workers can actually hinder productivity and morale within teams, ultimately causing a net loss for companies.

She encourages collaboration over competition, asserting the importance of a supportive work environment, and that success is often the product of teamwork and diverse roles within tech companies.

Key points include:

- The value of continuous learning: Stohs-Krause emphasizes learning from peers across various roles, including project managers and QA testers, as essential for growth.

- Contributions beyond coding: She discusses the significance of documentation, code reviews, and testing, as well as the importance of recognizing and valuing all contributions, not just those that involve writing code.

- Understanding users: The speaker highlights the need to consider diverse user backgrounds and experiences in tech products, citing examples of software failures stemming from a lack of inclusivity.

- Handling frustration and seeking help: Stohs-Krause provides strategies for managing feelings of frustration in coding, such as reframing challenges, going for walks, or switching to paper to work through problems.

- Celebrating personal growth: Keeping a journal of successes and experiences can help counter feelings of imposter syndrome and provide a tangible record of professional development.

- Importance of finding and using one's voice in the workplace: She urges attendees to be authentic and to advocate for improvements, contributing to a more inclusive environment.

Throughout her talk, Stohs-Krause integrates light-hearted examples from Rails and encourages junior developers to embrace their unique experiences and perspectives within the industry. By the end of her talk, she reassures newcomers that they will succeed and find support within the tech community.

00:00:21.529 We're going to get started. This is what I learned my first year as a full-time programmer, and I want to reiterate something that I think was said on the first day.
00:00:28.770 If you realize throughout the talk that this isn't what you were expecting or you're just not getting a lot out of it, that's totally fine. Feel free to duck out and check out another session because there are so many great things going on right now.
00:00:34.770 So a little bit about me first: Hello, I'm Hilary Stohs-Krause. I work for Ten Forward Consulting, based in Madison, Wisconsin. We build Rails web and mobile applications primarily for startups, but really for a lot of different kinds of businesses. I tweet a lot, and if you don't like cats or puns, maybe follow someone else.
00:00:46.920 All right, so the first thing I want to talk about is that programmers are not the most important people in tech. This was a lesson that took me a while to learn because when we think about how tech is portrayed in the media, we have images of hackers banging at keyboards and cool visualizations on screens, creating an elevated view of the coder as the central figure in tech. When I entered the field as a programmer, that was the mentality I absorbed. However, it’s not true. We should forget this whole concept of the 'rock star', 'Ninja', or '10x programmer' because it doesn't exist. In fact, we're going to look at why this perception is bad for business.
00:01:56.069 Harvard Business Review conducted a big study on superstar workers, and while it wasn't specific to tech, they examined the impact of these ultra-productive individuals across various industries. The study found that hiring these types of workers can actually cost more money. Why is this? They tend to be overconfident, and as a result, they are more prone to making mistakes. They're more likely to break the rules, and while sometimes breaking rules can lead to innovation, many rules exist for a reason. If someone breaks them without careful thought and communication, they can cause more harm than good.
00:02:48.810 Yes, these workers may produce more code or push out more often, but unless they are taking the time to do quality work, they will ultimately create shoddy code. Perhaps most importantly, their behavior can have a negative impact on morale in the workplace. High-achieving individuals can lower the overall job satisfaction of those around them, ultimately reducing the productivity of the team. So, if this 'superstar' approach is not the goal, what should we strive for instead? It's simple: don’t go rogue. Collaboration will get you much farther than trying to do everything on your own.
00:03:31.560 This idea of 'ship fast, shoot quickly' is prevalent, but if we take a moment to pause and think about what we're doing and why, we can understand the problem we aim to solve. This leads to better products in the end. Fostering a collaborative work environment with colleagues rather than competing to win favor can enhance everyone’s success. This ties back into the study from Harvard Business Review, which showed that if you take one of your superstar workers and turn them into an average performer, you actually create more value than if you replace an average employee with a superstar.
00:04:12.000 The idea here is that a toxic worker can reduce overall productivity. In tech, we're not isolated individuals; we need to recognize that there are many roles contributing to success. Regardless of whether you're in a tech department at a non-tech company, a product company, or a consulting firm, various roles must collaborate effectively, including QA, project managers, product managers, and data architects.
00:05:07.840 Knowing this, I found that seizing opportunities to learn from those around you, including non-coders, has been the most valuable aspect of my career. For example, identify individuals within your team who produce the clearest documentation—this could be someone from QA, a programmer, or a project manager who provides excellent feedback on pull requests and code reviews. Learn from the experts in your surroundings about those specific aspects you admire, which can enhance your own work.
00:05:40.719 Another point I want to discuss is that there are many ways to contribute when starting out in tech. If you have a non-computer science background—maybe you even attended a boot camp or are self-taught—you might feel like dead weight, struggling with impostor syndrome while others seem to do more than you do. However, you can bring value to your team in ways that extend beyond just writing code. One junior developer at our company emphasized the importance of documentation—initially, we had none in our small organization. It was easy to assume everyone knew everything about every project, creating a flawed understanding. This developer pointed out that effective documentation is necessary for anyone starting, as it enables them to contribute effectively.
00:07:05.345 There are also opportunities to assist with code reviews. If someone needs their code examined but you're unfamiliar with the language or framework they're using, being present to help explain can help catch mistakes, acting as a sort of 'rubber duck' for them. Additionally, researching what tools we should adopt and presenting your findings to the team can be valuable.
00:07:43.600 Testing is another area where we constantly need extra help. In every place I've worked, the QA team has always had more demands than they had time for, and the need for increased testing is consistent. Today, I might throw in some fun Rails methods to lighten the mood a little bit. Here’s one of my favorites—Squish. Has anyone used it before? (Pause) I don't see any hands; it could be the blinding lights.
00:08:32.170 Squish takes a multi-line string and converts it into one line—essentially just consolidating it. I enjoyed writing the squish method into my code.
00:09:03.350 Next point: we are not our users. This is particularly relevant for those of us who belong to underrepresented groups in tech, and it’s vital to keep in mind that there are groups you are not a member of while writing technology for them. For example, who here has a hyphen or an apostrophe in their name? (Pause for hands) Just a few. So for those who don’t, it can be frustrating when your name is not recognized on the internet. I once saw a talk by Erin O'Neal where she humorously remarked, 'the Internet hates the Irish' due to the apostrophe in her name.
00:09:39.099 Forms often reject input as invalid simply because they can’t handle names with special characters. I remember having issues while signing into flights because my global entry name contained a hyphen, and airline software stripped it out. This ended up costing me $100 just to change my name to match my global entry because the software wasn’t calibrated to handle diverse name structures. This illustrates how some systems signal that we don’t matter as individuals, reflecting a lack of awareness in software development about these issues.
00:10:43.840 Who here is a woman? (Pause) I’m sure you can all relate to the software challenges that disproportionately impact women, like voice recognition not recognizing female voices. Who here is not white? (Pause) Similarly, there are so many problems within software that stem from this lack of inclusivity. If we're not careful, we can produce systems that reinforce these biases, particularly concerning critical areas such as criminal justice.
00:11:54.210 Many of you may already be aware of these issues, so let’s discuss what we can do about it. One straightforward suggestion is to strive for diverse staff, which is crucial for broader representation.
00:12:10.700 User testing is also invaluable, ensuring that applications are tested by a diverse user base. Put software in front of real people so you can understand challenges that may arise. I like to utilize a cross-cultural checklist with names from various cultures to ensure that our applications can gracefully handle all kinds of names. This also includes testing if we accept apostrophes, whether we accommodate those with long names, and whether we handle names with accents properly.
00:13:11.680 Device testing is another critical aspect. For instance, at my workplace, I have an iPhone SE, which is quite small and not as common. Having a range of devices helps us catch bugs or responsive issues that might not appear on more modern, larger phones.
00:13:51.780 We also need to focus on accessibility testing, a vital practice that many of us are not currently doing enough of—myself included. Localization is essential too. The current project I'm tackling requires international consideration, broadening my experience immensely, showing how beneficial it is to incorporate these practices from the start.
00:14:38.390 As for fun Rails methods, one of my favorites is PluralEyes. It’s used frequently, especially when someone wrote a custom method, but you can simply use PluralEyes to handle pluralization effectively. It’s a sysnch applications feature that many newcomers to Rails were excited to discover.
00:15:07.390 Another essential lesson is that you will never know everything; there's always someone who knows more than you do, and that's perfectly okay. The concept of a 'rubber duck' is beneficial to grasp—verbally articulating problems can shift your mental approach towards problem-solving. This is particularly relevant when you're feeling frustrated—remember that it's normal to not have all the answers.
00:16:05.630 Dr. Laurie Nadal points out that frustration isn't an emotion like anger or sadness. Instead, it's a mistaken feeling of entitlement, believing we deserve to understand what we're grappling with at a specific moment. When coding, it's common to frustratingly feel as though you should 'just get it.' However, there’s no reason you should know something outside of your current experience.
00:16:51.399 Recognizing frustration is essential; it’s an opportunity to learn. Remember that other tasks you previously found challenging may now seem easy because of how much progress you’ve made. Embracing this learning curve is key.
00:17:27.720 It's also been shown that taking short breaks, such as going for a brief walk, can clear your mind and boost creativity. Engaging in physical movement, even if it's just walking in place, makes a significant difference afterward.
00:18:18.380 Switching to pen and paper has shown to improve the retention and understanding of information during note-taking, outperforming typing on laptops. Periodically clearing your workspace or tackling simple tasks boosts your sense of accomplishment, which can provide the mental space needed to overcome challenges.
00:19:23.430 You might also find fulfillment in helping someone else, even if that’s unrelated to your challenge—this altruism can lift your mood and change your perspective on your issues. But if you can't resolve it, go back to the internal resources for assistance, from asking for help to seeking documentation beyond what is familiar.
00:20:09.870 Instructive communication is crucial. Before reaching out for help, clarify what you’re trying to accomplish and provide context. If you’ve already tried something, share that upfront to streamline the process. Indicating what you believe might work fosters productive discussions—ask how others can help you, specifying if you want accompaniment in solving a problem or direction.
00:20:55.370 Though you may not know everything, you know far more today than you did yesterday. Update your experiences—the growth you’ve achieved deserves to be celebrated. For me, I maintain a Word document of my successes, writing down everything I’ve learned. Whenever I feel overwhelmed or out of place, this document reassures me of my progress.
00:21:47.030 Publicly celebrating your accomplishments is also advised. If your company has a blog, you might consider writing about your experiences. Sharing even the smallest victories can help affirm your learning journey.
00:22:32.290 Teaching or mentoring helps reinforce what you know. Teaching someone else highlights how much you've learned; look for opportunities at boot camps or local meetups. Speaking at meetups or conferences can establish credibility while contributing to a supportive community.
00:23:33.450 Another point is embracing your authenticity, especially within environments where you feel pressured to fit in. After joining my current company, I noticed I gradually adopted a more casual dress code just like my colleagues. However, after experimenting with different styles, I found that dressing how I wanted positively impacted my confidence and comfort.
00:24:47.320 Diversity in experiences and perspectives provides strength. Having a unique voice matters, especially for those underrepresented in tech. Speak up for changes, helping to improve not just the environment but also how things are done.
00:25:42.930 Acknowledge areas for improvement, whether focused on office culture or development processes. Taking the initiative to suggest enhancements can make a significant difference in workplace dynamics.
00:26:49.540 On the topic of improving office culture, something as simple as offering new activities can spark engagement. Whenever there's a team celebration, asking for various options contributes positively to team morale.
00:27:42.060 Beyond culture and team bonding, even clothing inclusivity can make a difference. For instance, at my previous company, I voiced my concern about the unavailability of fitted shirts in our redesign. After doing so, my feedback led to an improved selection of offerings for everyone.
00:28:56.460 Lastly, make it easy for others to say yes. Clear communication about what you need and a friendly request via Slack often yields better responses than vague inquiries. If you approach situations by outlining the specifics—such as what you’re trying to accomplish and what you've already tried—people might feel encouraged to help.
00:29:47.400 Suppose you're in a work environment where your efforts are continuously dismissed despite putting forth extra work. In that case, you may want to consider exploring other opportunities—research shows that there are plenty of unfilled tech jobs available across the industry.
00:30:38.720 If you're unable to move due to family responsibilities or health issues, consider searching for remote work. Alternatively, you may discover a more inclusive workplace outside traditional tech sectors. Just because a company is part of a hot new startup doesn’t mean it’s a better work environment.
00:31:38.000 When navigating diversity during the interview process, do your research, as companies are becoming increasingly aware of the importance of a diverse workforce.
00:32:38.920 Take advantage of the market for diversity, recognizing your unique value and how your authentic experiences can enrich the workplace. However, be cautious of tokenism that can lead to feeling undervalued.
00:33:39.800 Finally, when working with Ruby on Rails, make use of the 'find or create by' method, which allows you to check if a record exists before creating a duplicate. It's a handy method to avoid friction when registering users, exemplifying the conveniences Ruby on Rails offers.
00:34:39.490 For those new to programming or the tech industry: You got this. You're poised to succeed, and opportunities abound. This conference is an excellent way to connect with people eager to help, offering a sense of belonging within this vibrant community. Thank you!