How has it been a year already?
As I write this, it has been exactly one year and one month since I started my new career as a software developer with NewAperio. In that time I have learned the PETAL stack, worked on my first production-level app, met the team in person (and had way more fun than should be allowed), attended my first tech conference, was a guest on the Elixir Wizards podcast, and presented to my team about ergonomics. And those are just the major milestones; far too much has happened to fit into a single blog post.
Learning Elixir as a first production level language
Learning Elixir at my first job reminded me of my first days in Flatiron’s coding bootcamp: trying to soak up knowledge while being sprayed with a firehose of information. Not only was I going from object-oriented to functional programming, I was also learning Git and GitHub, how to talk with clients, and how to work asynchronously for the first time- all while adding “y’all”, “buckwild”, and “gettin’ hot” to my daily lexicon. But with the support of my team, I fell into a rhythm that helped me learn while contributing to client projects. Here’s my process:
- Take the time to understand the problem: That includes thoroughly reading any deliverables and requirements and asking questions to ensure you understand what needs to be accomplished.
- Come up with a plan: Write notes, draw diagrams, ask more questions.
When you get stuck:
- HexDocs are your friend. I have spent so much time reading about the Enum Module that when I type “h” in my browser, it’s the first recommended page.
- Check out Elixir Forum and Stack Overflow to see if anyone else has asked about the particular issue you are stuck on.
- Take a break. Walk your dog. Eat. Soak up some sun. Your brain will thank you. I have had a number of breakthroughs while not at my computer.
Phone a friend. When you’ve exhausted your own brain, borrow some others!
- At NewAperio we have project-specific channels, a “helping hands” channel, and a programming channel in Slack where devs of all levels can ask questions and get help.
- If asynchronous communication isn’t sufficient, get on Zoom and pair program with another developer. This is great for complex topics when talking is more efficient.
- Know when to ask for help: This is different from getting stuck because there have been times when I know that eventually I will solve it. However, there are deadlines we have to hit and we need to show our progress to clients. Sometimes, we just need to be humble and ask for help sooner than we might like. Other times, we can afford to take that deep dive into the forums and try many different approaches before finding one that works.
- Iterate on feedback: When we make pull requests, we require that any PRs written by junior developers be reviewed by at least one developer with senior-level experience or greater before being merged. This provides a great opportunity for me to learn about how I can improve my code.
- Reflection: For my first year, every day after work I journaled to reflect on what went well, what I struggled with, and what I wanted to remember. I still flip back sometimes to find lines of code to reference or read quotes a teammate said that make me smile.
Key Learning Moment
When learning something new, one of the most frustrating things is feeling like your improvements are incredibly slow. As such, while in bootcamp, one of my coding buddies and I would verbally shout “Bask!” and throw our hands in the air to celebrate every time we overcame a hurdle. It’s important to acknowledge the small wins. Now that I write code for client projects, I sometimes forget this and it makes it all too easy to forget how far I have come.
One of my big “bask” moments that made me realize I was actually understanding Elixir was when I implemented a recursive solution to a problem that had me stumped for several hours. After trying a few different approaches on my own and scouring my standard internet sources, I was feeling very frustrated and sought help on Slack. Nick offered to hop on a video call and pair program in a few hours.
I took a break to eat lunch and went for a walk to blow off some steam and while enjoying the snow I had an “aha!” moment; maybe I could use recursion! Recursion was mentioned during bootcamp and went way over my head at the time. I had only seen it done twice in the months I’d been working at NewAperio. In one PR, our other junior developer Nikki had used recursion and received feedback on how to improve it with tail recursion and tail-call optimization. Recalling that lesson was enough for me to completely implement a tail-call optimized recursive solution! That was a major “bask” moment for me. I still met Nick to show him what I had done and he validated it as a “great solve”.
This happened approximately 8 months after starting my job and was a good demonstration of how much I had progressed in my problem-solving skills as a developer and in my fundamental understanding of Elixir as a functional programming language. It also emphasized to me that our brains need breaks. We work more creatively and productively when we’re feeling good.
It’s More than Just Coding
Even with the intense amount of learning and growth I’ve undergone this year, my coworkers have shown me time and again that we are more than Developers, Designers, and Founders. We are whole humans with lives outside of work. Two close family members of mine died last year. In the weeks leading up to my family members’ deaths, my coworkers sent me loose leaf tea from my favorite local tea shop and dried soups so my family and I could put together some easy meals. While the pain didn’t lessen any, it warmed my heart and my belly to know that they were thinking of me. We are all still figuring out how to be there for each other as a remote and distributed team, but they have been creative in reminding me how much they care about me and want to support me through a difficult time.
We all make efforts to be more than just coworkers. It’s the twice-weekly social Zoom chats, sharing pics of the silly thing our kid or fur friend did, geeking out over the latest game or show we’re enjoying, challenging each other in our assumptions, the video birthday cards, King Cake exchanges, and sharing of work and life experiences that bind this team together. We work to make it a safe space for everyone to be as much of their whole selves as they want to be so that they can work at their best. We take the time to verbally recognize each other and celebrate our successes and milestones.
It has been a year of intense growth, challenge, grief, joy, honesty, humility, and laughter.
I wouldn’t have it any other way.