This past year my personal life has been ridiculously eventful. These have generally been positive events, and I'm much happier than I was at the beginning of the year. But, it hasn't left me with much time or energy to build new skills as a software developer. So in the next year I'd like to make up for that. These are some things that I intend to get familiar with in 2019.
OpenCV in particular. Computer vision is deeply embedded into some of the most cutting edge technology projects, and it will only continue to become more important. It has obvious applications to autonomous vehicles and robotics, manufacturing, justice and law enforcement, and medicine. That's all off the top of my head. A lot of the most interesting and important problem domains are ones where software needs to interact with the real world, and there are so many cases where the best way to do that is for it to be able to see—and to extract information from what it sees. I've been interested in computer vision for years, but I never managed to find a project and actually get into it. If I do nothing else this year, I intend to change that.
This obviously dovetails with computer vision, but it's not restricted to that problem space. In the realm of computer vision, machine learning is how you go from identifying features of your environment to understanding what they are. But, machine learning has applications in practically every problem area that tech companies created (and are only now trying to solve). Natural language processing is another ML specialization I'm interested in. Natural language processing can extract meaning and context from what otherwise would have been just text to a computer. This could enable automatically identifying advertisements and propaganda. Or, it could power instantaneous fact checking. How different might the world be right now if Twitter put a little badge on tweets that are blatant lies? Or if Chrome warned people that a propaganda site was masquerading as a news outlet? What if Facebook cautioned people against using hateful language before they post it? All that doesn't even touch on the potential that exists for machine learning to power predictive systems. Someone is going to build these things, and it may as well be me.
"Do you have any cLoUd ExPeRiEnCe?" Seriously, number 1 interview question of 2018. So, part of this is that I want to just be able to flatly answer that question with "yes, a lot". Part of this is cloud deployment does actually have a handful of distinct concerns relative to conventional servers and I want to have a more detailed understanding of them. By the same token, taking advantage of cloud features like serverless functions and managed infrastructure has implications for application design and I could stand to supplement the theory with experience. Finally, part of it is related to the CV and ML interests I already mentioned. Azure has (I'm told) top tier AI tools, and I intend to take advantage of that. And of course I want to know and be familiar with those tools for their own sake. In fact, I've already started a little bit, by using Azure DevOps for my own projects (such as they are). One of the excuses I've made in the past for putting off my own projects was that all of the dev ops infrastructure surrounding a project is valuable and helpful in its own right, but also a lot of work to set up (not to mention expensive). Not any more. Azure DevOps gives me literally enterprise grade build/test/deploy tools for literally zero dollars. It's prepackaged and ready to use. Sold.
Okay, real talk. A non-trivial part of why I got into software engineering in the first place was video games. I loved playing them and I wanted to make my own. I still do, on both counts. About a year and half ago, I got some motivation and a good idea. I started working on a Unity project, and I got just far enough to decide that I hated all the decisions I'd made up to that point. Then I got distracted, and coming back to it in that state was a pretty steep barrier. And then life happened and I never went back. So this is me, promising myself that I'm going to go back to it. Probably in the form of starting over.
Xamarin (Added later)
My original list didn't include Xamarin, but it's been in the back of my mind for a couple years. In December I started writing a little Xamarin app for myself, and it's what I've kept coming back to all month. So, I'm adding it to the list. That way I can cross it off later when I feel like it's done. Native mobile app development is honestly not something that excites me, but a big part of that is because of the historic requirements for them and how tightly coupled those apps had to be to their respective platform. Xamarin claims to solve those problems, and if nothing else I get to work in C# which is 🔥. Hopefully in a couple weeks I'll have a write up for that.
I wrote this list as a way to collect my thoughts and set some goals for myself. I mean, that's what New Year's resolutions are, right? This list is optimistic. Maybe even naively so. Plenty of people make careers out of each of these things. Certainly any one of them can become its own years long project, so covering all of them would mean just skimming the surface of each. I'm okay with that. This is about learning, and there's a lot to learn. And if something really sucks me in and I wind up doing that for the whole year, that might be even better.
Cover photo by Deleece Cook