A reflection on my journey into software development.
This post is about how I came to love Software Engineering, how I got my first job, and how I feel about it now. It includes parts of other aspects of my life that I feel like contribute to my journey.
It also includes some spiritual aspects of my life. We may not have the same beliefs, but I do ask that you respect mine as I will yours. Feel free to learn more about my beliefs at churchofjesuschrist.org
Originally I wanted to write a reflection on the past year but having not written a reflection for any recent years, I want to go back a bit further to focus on how I really came to love software development.
As a kid I loved video games. I have many great memories of playing games with my father and brother, working together to complete monumental tasks. My father worked in tech, and I always loved learning about stuff he was working on. When I was 11, I remember writing HTML for the first time.
After a few years, I started really enjoying a video game called Blockland. It was a sandbox game, similar to Minecraft, but focused on Blocks (Legos). After some time enjoying this game, I discovered the modability of it. I started learning the scripting language, TorqueScript, just by messing around with already existing mods to the game.
I distinctly remember one memory where I was trying to understand a specific script, and asked my father for help. He came over and took a look at what I was working on, noticed that the language had some aspects of object oriented programming and opened my mind about what that meant and how it works. This is the main spark point when I realized I enjoyed software development.
I spent many years working on random modifications to Blockland, from creating a new menu system, creating new immersive game modes, running an in-game convention that attracted hundreds of players to servers I ran myself, recreating TF2's famous hats into the game, and more.
\<Image alt=first custom built computer src=/media/first-computer.jpg width=4928 height=3264 />
Me with the first gaming computer I built
I learned lots of skills on top of improving my programming ability, including working with others, leading projects, and even source control. I feel a lot of nostalgia reflecting back on this time, I learned so much and remember constantly being on my computer to work on the next big idea I had.
In high school I only had one opportunity to take a computer science class. It was for mobile app development, which at the time was just becoming a huge industry. I worked with a small team and created a mobile game for Windows Phone. It was a fun project and I had the chance to learn some C#. I also participated in the marching band, and was drum major my senior year. It was cool to be a leader and help other students to perform the best they could.
Quickly after high school I left to serve a two year mission for my church in Accra, Ghana. It was an incredible experience and I have so much I could write about it for another time. During this time, I didn't do anything related to software, but learned a lot about people, leadership, and myself. I returned in October of 2016.
I decided to attend university at a small liberal arts college in Virginia. I did mainly to follow my brother, who had started there just a semester before me. We moved in together as roommates, and had a blast that semester spending time with one another.
I was majoring in computer science. The university had at most two professors for the field, and had less than 40 students enrolled in the major. Because of this we got a lot of one on one time with our professors, which I benefited from greatly. It also gave me a lot of time to do self learning, and I was able to grow a lot in the subject from the amount of self learning I supplemented to the classes.
\<Image alt=my wife and I src=/media/wife-and-i.jpg width=1362 height=1816 />
During my first semester at school, I also met my future wife. We had so much fun getting to know eachother and quickly fell in love. We originally met as we had mutual friends (specifically through my brother since I did not know a lot of people), and after spending lots of off time together we couldn't be separated.
When summer break came around, we had to separate to go to our separate homes. I went back to my hometown in Colorado and worked at a grocery store. It was tough to be away from eachother, but I am grateful for technology that let us stay in contact. I am also thankful for the surprise visit she gave me. At the end of the summer, we met up before going back out to school in which we got engaged.
We returned to school in the fall, and started wedding planning. It was -- fun. That December we got married in Colorado and got ready for married life. As with all marriages, we had our trials but we made through all of it. It was fun to be attending the same school and learning how to adult together. During the following summer we both went back to my hometown to work for the summer and go back to school.
During the spring of 2018, I started working on a side project I was quite proud of at the time. While students at the school had the ability to view their grades online, there was no notification system to be notified when those grades were available to view. This led to many nights of constantly refreshing the pages to know how we did on a specific assignment or test. This side project fixed that, and allowed students to recieve texts when their grades were updated.
The tech stack was pretty fun too, I used Selenium with Python in order to scrape the website since there was no API available to get these grades. It would login as the user, and scrape all your pages every 15 minutes. If it ever detected a change, it would send an email or text message with the new grade added.
\<Image alt=mySVU notifier repository src=/media/mySVU-notifier-repo.png width=3138 height=1792 />
Image of the repository for this side project
After I completed this project, the IT department at my school caught wind of it and wanted to talk to me. When I went to meet with them, they mentioned that they wanted to start a student development team there to create some integration services for the school. They wanted my help in starting it, and I was extremely excited as this became my first internship. I worked along with another smart student to start foundation of building integration services between school systems.
In the next semester, I became the team lead and led a team of five to build these services. I learned a ton in this internship about agile methodology, devops, and working with others in professional software development. I am very grateful for this opportunity for everything I had the chance to learn.
During the fall of 2018, I remember waking up one morning and having a strong feeling that I needed to search for an internship for the summer of 2019 in North Carolina. I can't really say why I had this feeling, other than my wife being from North Carolina. I can only attribute this to the Spirit guiding me to where I needed to be. So I started searching, working with the school's career development office and applying on my own, to little success. Then on one Thursday evening, I got an email from the school that was sent out to all computer science majors that someone from a large tech company was going to do some interviews for an internship in Raleigh the next summer. It felt like it was meant to be, and wasn't something I would have normally attended. I skipped my morning classes the next day to prepare for it (would have been nice for the school to provide a bit more warning) and had my interview.
After a week or so, I heard back that they liked my interview and were interested in doing a technical interview with me. I was extremely nervous for this, but was excited for the opportunity. I attended the technical interview, answered questions, and solved an algorithm problem. I did not feel good about it, really at all. But after a few more weeks (this was done over the holiday season so responses took longer than usual), I was offered the internship. I was extremely excited.
Near the end of the Spring 2019 semester, both of the CS professors in the university resigned. This happened during finals week, and was a shock to the students in the major. We didn't know what was going to happen. The school promised they would have a new professor by the fall semester, but based on past school promises, it was hard to trust. I didn't have much longer, but it really put me in a weird spot.
Then comes May, the start of the internship. I was excited but very nervous to start it. I was lucky to be on an accepting and helpful team, who treated me more as a full time employee rather than an intern. I was still helped and was able to pair program, but I got to work on an actual project, rather than a side project I've heard lots of companies assign interns to. Due to this, I was able to learn quickly how to write professional code that came with all of the error handling and maintainability. I learned the most in this internship, had a great time meeting people, and made amazing connections.
I also started to head some refactors in our project, starting with dependency injection. When I started the internship, the project was new and moving fast and thus did not have a lot of time to build a strong foundation. One of the pitfalls of this was that we had issues with different dependencies in our code. Having learned and worked with the pattern before, I proposed dependency injection to solve it. I came up with a small demo of how it can help us, presented it to the other team members, and they agreed. I implemented it and it felt amazing to make a meaningful contribution.
After some time at the internship, I was still trying to decide what I was going to do about school. My wife still had a year to finish her schooling, and I didn't want her to have to move schools just so that I could finish mine. Then I met with my manager one day. We talked about how the internship was going since we were near the halfway mark. He talked about how he was impressed by the contributions I had made, and realized that since if I returned to school, I wouldn't be learning much more computer science without any professors. He then offered for me to come on full time at the end of the internship, as if I had finished school.
This was a crazy opportunity! I had no idea what I wanted to do. When I first mentioned it to my wife, her first thoughts was no because we need to finish school. We took some time to really think about it, prayed about it, and eventually felt that I needed to take the opportunity. She looked into transferring schools to a local one down here, and I looked into finishing my degree online. We found a place to live nearby the office, got settled in, and I started my new job the day my internship ended. Luckily it was the same job, just that I was now a full time employee.
It was awesome to transition from school to working full time. I was able to spend so much time programming and growing in the field. I officially started in the fall of 2019. The first six months were great and I learned a lot. Then came 2020.
In March of 2020, the COVID-19 pandemic really started to affect us. We transitioned to working from home full time. At first it was really tough for me to focus at home, and I did not get a lot done in the first week. Overtime I learned how to focus and what the most productive hours of the day are for me. I've come to love working remotely. I am able to get a lot more done then I ever was in the office. I think a large part of this was that while I was in the office, I learned what a full days amount of work is. It's something that can't really be taught and is specific to companies, projects, and people. I was lucky to understand this and because of it was able to be more productive and understanding of what the business value I was delivering.
The pandemic was, to be honest, frightening. It was difficult to see all the troubles the world went through in 2020. However, I am always relieved when I look back at how I got where I am. I think back to why I had a feeling to suddenly look out for an internship in North Carolina and to take the job even though it risked my (and my wife's) education. It all gives me peace that I am really being watched out for from above. I can't accept that these events just came out to be lucky for us, or coincidental, but that Heavenly Father provided them for us because He loves us. Now He didn't just drop it all in my lap, I had to work hard to achieve them, but thanks to his help we made it through. I cannot even imagine what my wife and I's life would be like if we stayed at school when the pandemic hit. It would have been tough and I can't imagine the increased trials we would have faced not being financially stable.
The best part of 2020 for me was finding out my wife and I were expecting. It's been so much fun preparing for the baby to arrive and we look forward to it this month.
Overall, through it's troubles 2020 ended up as a good year for us. As far as software goes, I still enjoy every day I get to write it professionally and look forward for many more years of it. As I reflect on the skills that I have gained over the last few years, I attribute my success to some specific actions I took.
First, I always spent time to learn. While I was in the office and even more so working from home, I put a priority in learning. Typically I start work an hour early and spend that time going through online courses or reading articles about technology and programming I am interested in. I've invested in myself in purchasing different courses. In 2020 I also continued my education towards my BA in CS online, and while that took time out of my schedule as well I know it was extremely important for me. This has helped immensely as I am able to stay on top of what the best practices are and not get stuck in specific understanding.
Second, I am very serious about making sure that I am not overworking myself. I make an effort to spend time with my wife, and family, so that I can relax and recharge and work better the next day. I have heard many stories of new grads working long hours and it being detrimental to their progress. While it is good to get work done quickly, I've found that higher quality work is better than quantity.
Lastly, I've learned that you only see the ways you need to grow when you ask others. I make a point to look for ways to get feedback from colleague, my manager, and mentors in order to find out what kind of goals to make in improving myself. I continue to do this and don't see any reason to stop, as there is always an opportunity for growth.
If you made it this far, thanks for listening to my story and I hope it entertained you and that you can learn something from my experience.
So what now? My wife and I are getting ready for our first child to join us, while I finish school and continue to write software at work. We look forward to the many adventures we will have in the future.