One of my biggest challenges with retooling myself into being a software engineer is to focus on the kind of knowledge I'll need. On the one hand, I need to know the things that someone who has a Computer Science degree would know, and on the other, I need to be able to perform at my position. I've had some time over the past week where work is light due to training, and I have been using my off hours to study. But, what to study? Should I be poring over my new tome, Cracking the Coding Interview, or should I be trying to take up C#? After all, LinkedIn tells me C# developers make way more than I'm making now. How about getting better at MVC? What about that Neural Network Udemy course? I'll be using neural networks at work soon and I'd like to be prepared. So far, I feel like Seven of Nine from one of my favorite episodes of Star Trek Voyager.
Seven of Nine, one of my favorite characters from any of the Star Trek series (sorry, Michael Burnham), tries to enhance her intelligence by downloading copious amounts of data directly into her brain. She is flooded with information, and while it does prove useful in the short term, in the long term, she has so much information floating around in her cranium that she doesn't know what to do with it. Before long, she conjures up fantastic tales of how Captain Janeway is really working with Starfleet Intelligence. Good stuff.
I want to use my time effectively. I quit teaching in the beginning of 2017 and set out to be a software engineer. I did it mainly because it was always a secondary skill I had never taken the time to cultivate, and to be perfectly blunt, software and programming is where the economy is heading. If the wave is rising and everyone is surfing, I want to be there. Of course, everyone hears about the software engineer making $500,000 at Google. I have no idea if I'll reach that point, but I do want to gain the skills and knowledge necessary to really rise up. So, how to make the best use of my time?
The first thing is to realize I've developed lots of soft skills over the years. I'm a great communicator, strong willed, and creative. The second thing to realize is that it's not about knowing lots of different computer languages, it's about design. I'm an engineer after all. So what I've been doing is focusing on skills that translate from language to language. I've been trying to understand Big O thoroughly, and to understand the different data structures and algorithms. I've been trying to identify how to use design patterns, when they're useful, and when they're not.
The other thing is to pat myself on the back about the major projects I've been working on. I programmed all functionality for tracking employee utilization, including dashboards and designing the database. I've worked on front end user interface using JQuery, making web pages look crisp and clean with Bootstrap, and utilizing MVC. I've programmed interfaces to grab API data and a very complicated import process that involved a SQL script with 6 joins.
My goal for the next 6 months is to master the basics of computer science, and Cracking the Coding Interview should be great for accomplishing this goal. I want to learn one more language, C#, really well. I feel like I'm well versed in Visual Basic and Python, and a third language would round things out nicely. I know some JQuery and Javascript, but I think knowing them enough to get what I want done is good enough for the moment. I also know have picked up a bit of Assembly and Ladder Logic at my job from working with PLCs, which won't get me many accolades, but could be used for industrial applications.
The main thing to remember is patience. Rome wasn't built in a day. I am pushing myself a ton to become smarter, more skilled, and better at this new craft. I've decided it's what I want to do.