Nathan Kurz

Transitioning from C++ Windows App Development to JavaScript Based Web Development

C++ and JavaScript

A Little History

I'm writing about my current experience in the software development industry. I graduated from a four-year university in May of 2019. There I studied Computer Science with the hopes of landing a job in the field. Through luck and perseverance, I was able to obtain a wonderful position with an insurance company as part of the software division.

This opportunity was amazing. I was met with a brilliant team to mentor me. They offered a SAAS (Software as a Service) product, so they had a fairly large IT program. My managers were extremely helpful and would work with me whenever they could to help me with issues. The same can be said of my teammates. The software I worked on was written in C++ using the MFC framework for the GUI components.

C++ Development

I wrote C++ programs for eleven months. This allowed me to better understand memory management, passing by reference, and other concepts specific to C++. Before this experience, I had only used C++ for one semester in my Data Structures class. I basically went from being aware of these concepts to understanding them and using them on a regular basis.

I also learned some important software engineering principles from my colleagues. I was constantly being mentored on things like code structure, best practices, and different ways of solving new problems. The learning experience was incredible.

The Job Offer

Jumping Man

Several months later, my friend from college told me there were openings at his much larger company. I didn't really think I had much chance of getting the job, but I did well in the interviews and got an offer. I was offered a significant amount more at the new company, and I thought the opportunity might benefit me more in the future.

I began working for my new company this year in January. My new team is completely different than my team at my last company. I'm not saying they are worse or better, but it's a completely different environment. My team consists of three individuals; myself and two others who are both younger than me. This hasn't proved to be an issue though, as I believe they are both brilliant individuals who consistently amaze me with their problem-solving skills. I feel grateful to have two people on my team like them.

The Transition to Web Dev

Transitioning sand

Another large change is the technology I use to write software. I'm writing web applications in javascript. I had only written a few basic websites before this as most of my education was in Java and C++ writing more traditional server or local applications. Learning web development is proving to have a pretty steep learning curve, but I'm learning and providing value every day.

No Types

One of the biggest obstacles was not using types in JavaScript. Writing in C++ had me constantly aware of the types of variables I was working with. It definitely led to confusion when trying to visually parse code in JS. Some of our projects are written in TypeScript, which felt much more familiar to me to look at.

Function Syntax

Another major difference I've noticed is the syntax in regards to a function declaration. The ultimate purpose of their creation remains the same, but the syntax is completely different. I had only heard of ES6 and didn't really understand it. The short function declarations looked extremely foreign when I first started seeing them. I rather like using it now though. The short versions are so much easier to write after getting used to them.

The fact that we are constantly passing functions in as parameters was another thing I struggled to completely understand. This coupled with the strange look of the new shortened function declarations caused me to miss the rigid structure I was used to in C++.

Engineering Principles

After eleven months of writing C++, I was developing a much better system of engineering my applications and managing my code. This was one thing that didn't suffer as much during the transition. After learning the basics of JavaScript, I find that I am able to implement a lot of the software engineering concepts I learned from my first company.

Visual Studio to Visual Studio Code

Comparing Logos

I wrote every bit of my code at my last company in the robust Visual Studio IDE. Every developer at the company used it, and it was the standard there for working with our software. This caused me to really get used to things like it's debugging and IntelliSense. As a web developer, I can pretty much use whatever IDE or text editor I want. My current team all use Visual Studio Code, so I'm sticking with that for now. Many aspects of these two pieces of software are similar, so the switch has not been so bad. I find that debugging the node applications though is not as intuitive or seamless as the experience was in Visual Studio.

Team Differences

This next challenge isn't as much with the technology as it is with my team. My first team was bigger, and it had much more seasoned developers with many years of experience working on the systems at that company. The developers I work with now, though extremely intelligent, are much less experienced. This definitely does cause different issues that I am not as used to working through.

My manager at company number one had about a decade of experience himself at that company. He also had a Masters in Computer Science from Georgia Tech. I don't mean to brag for him or put him on a pedestal. I only want to emphasize that when I got stuck on a problem that was proving very difficult for me to solve, he could usually help me with the issue extremely effectively. He understood the software stack so well that he knew sometimes what problems were and where they were in the code just by me describing the issues to him. His problem-solving skills were highly impressive to me.

My team now has much less experience than my other co-workers, and this leads to certain issues that I didn't have to face at my last company. I realized that my first manager was shielding me from the business side of the company. I very rarely had to sit in on meetings with clients discussing requirements for features, bug fixes, and things like that. He and other leaders would build the requirements. This is not the case with my new team. We all do very well in requirements translation and providing solutions, but when we all three run into issues we don't have a seasoned veteran that we can quickly turn to for assistance. There are benefits to this though. We have had to work through issues together as a team, so we all are learning from the problem-solving process. We haven't come across an issue that we haven't been able to solve yet, so I am extremely satisfied with our performance. Sometimes we have to reach out for assistance to other areas of the company, but we are really working to get the job done.

Final Thoughts

Woman Pondering

I don't mean to ramble, but the experience has been pretty insane and I could write about it all day. I am building a deeper appreciation for my work as I continue to learn new things every single day. I view both positions I have worked so far as extremely valuable. I wouldn't trade either of them for anything. As I continue to work and grow my knowledge and skills, I want to sometimes stop and remember just how much I have learned over the years. Sometimes I feel that the absolutely absurd amount of technical knowledge one could learn over the years puts me in this mental space where I feel like I just started. Then I tell myself that everybody else realizes this fact as well, and we are all just learning what we can and trying our best to provide reliable solutions for our companies.

I plan on being in this field for a while, and I feel extremely fortunate for the opportunities that I have been given. I love programming, and I'll probably be doing some form of it for the rest of my life. And I'm pretty happy with that for now.

P.S.

If you read this whole article I sincerely thank you for sticking with me.

References for images:

  • https://morioh.com/p/3be45e2372a2
  • https://images.unsplash.com/photo-1499202977705-65f436dac18a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80
  • https://images.unsplash.com/photo-1545986467-13cfe33c156e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=968&q=80
  • https://www.talkingdotnet.com/wp-content/uploads/2015/12/Visual-Studio-Code.png
  • https://images.unsplash.com/photo-1543386650-2be9a18d2750?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1051&q=80