** This post didn’t really take shape like I was hoping. I might come back later and rearrange it to be more coherent, but as it currently stands it is an imperfect combination of memoir/note to former self/love letter to my workplace. ¯\(ツ)

I would have never hired myself. Bless the people who threw me a bone and let me learn to be a programmer at their expense.

After sophomore year of my CS program, I was looking around for a job that would put my years (two is still plural) of programming “experience” to work. I thought that by going to school and half paying attention in my classes that counted as experience. I was wrong. The first two years of college did not at all prepare me to work on a real dev team as I would soon find out.

Luckily, I had a friend, Kaden, who I had previously worked with in tech support, who now worked at a small-ish software company. He was willing to refer me to his company as an intern and I got called in for an interview a couple days later. I had failed a couple of development interviews previously but with a little bit of pre-coaching from Kaden I was able to pass the online screener and the in-person interview.

Years later I think back to that interview and cringe at one of my answers to their questions. One interviewer, Dave, asked me how many cups I would need if I wanted to build a cup tower with a 10x10 base, each layer of the tower getting smaller by one cup on each side (the next layer would be 9x9). I wrote a little loop on the board to iteratively solve the problem, feeling so proud of myself. Next, Dave asked if I could solve it recursively. I hesitated and needed a bit of help but got through it. The other interviewer, Steve, then asked what the difference between the two solutions are and what issues might they have. I had no idea so I pretended I was thinking and then after a minute he prompted me with, “What would happen if instead of 10x10 we started with a base of 10million x 10million?” Still nothing. After another minute he explained that with the recursive solution you might run out of memory if you start with a large number. I nodded my head in understanding and gave him an “Oh yes, of course” but still I had no idea what he was talking about. Thinking back to this I appreciate that Dave and Steve still gave me a chance even though I was obviously clueless.

On my first day I realized a couple things. I shouldn’t have updated my company computer to the latest MacOS beta the night before. Rookie mistake. It took my mentor like four hours to figure out why MySQL wasn’t behaving correctly. In the end, we had to wipe my machine and reinstall stable MacOS. I know now to be hesitant with beta software, especially if it might prevent you from doing work.

The next thing I realized was that I had never used git. Now I was thrown into a team of 30 developers all working on the same codebase with multiple languages and multiple staging environments and automatic CI/CD builds. Holy moly. I was so lost. I didn’t know about pull requests, merging branches, or resolving conflicts. Honestly, I didn’t even know what a branch was. Even now, devops is tricky sometimes. Back then I felt like I would never figure out how it all worked and that I was just a hopeless waste of space and money.

The last thing I realized was that I didn’t know Vue or Ruby on Rails. The software stack was something that I had never worked with before. In school, I had used C++ and Java only. I used a SQLite database for one school project and still didn’t really understand the syntax. Now with Rails I needed to write DB migrations and keep my own local DB up to date whenever I pulled new changes. I made a html portfolio once but never used any JavaScript, let alone a complete frontend framework. I had no idea what my codebase was doing let alone how to change it to do something different.

During my first month or two I took many breaks to the kitchen to grab yet another candy bar and procrastinate asking questions that would surely make me look dumb. I should have asked more questions. I should have done a lot of things. These are the things I would tell my former self to do in order to have a better time at my first dev job:

  1. Learn git. I think that universities should teach git earlier. Maybe require us to turn in work with a GitHub link. I felt so dumb not knowing how to use git and I felt dumb having people babysit me and help me merge my changes at first.
  2. Write a small personal project in each language you will be using. Asking questions about Vue and Rails wasn’t so humiliating for me because they weren’t ubiquitous technologies. Because of this I learned Vue fast and Rails relatively quickly. I think that it would have been even better for me if I had followed some simple todo app tutorial online in both Rails and Vue in order to get a quick baseline knowledge of the frameworks.

I think that becoming a programmer is a bit of a chicken and egg story. It’s hard to get a job without experience but it’s hard to learn and get experience without a job. I tell my past self to do some personal projects in Vue before I start a job with Vue but I don’t think back then that I would have had any clue where to start.

I was extremely fortunate to land an internship position at a company that could pull me into the loop of becoming a professional developer. The first months were the steepest learning curve I had ever, and probably will ever, have to face in my career. Eventually I started being able to contribute and feel productive. I made a lot of friends during my internship. Also, because literally everyone at the company was more experienced than me, they were and are all great mentor resources for the rest of my career. I’m grateful for Kaden and Dave and Steve and everyone else at SimpleNexus for giving me a chance and giving my career a great launching point. Thanks!

-Sam