Saturday, December 31, 2016

The last two years….

Holy crap, it’s been that long? Oh how some plans are laid, then life comes and smacks you in the butt…

So here we are, actually about 2.3 years after my last blog post, heading into 2017. I wanted to write this blog post as a kickoff before continuing writing more here, since I have the blog bug again, and actually have some time and brain space for doing some here.

Over the last few years, I have not only been working on some really exciting things at work for a new team, but been learning many different languages and diving into the land of Linux. As some who read this blog know, I have worked at Blizzard Entertainment for just about 8 years, in January of 2015 I joined up with the Battle.net in the beginning of a “infrastructure/devops/cloud” team, we had a lot of identity crisis, but that is pretty normal for a new team within an established company and tons of established tooling. Since the scope of my work had expanded now past working with support and corporate applications to now working with the systems that control, monitor, integrate with all of our game servers and platforms, it was time to learn some things, which is always exciting for me.

“We need a Linux stack for our Web API, your Windows stuff has to go”. The dreaded words you hear, especially when you have a deadline of completion that is a year sooner than a release for the new ASP.Net Core. So buckling down, looking at my options, we have extensive C++ things, some applications used Python with a mix of raw http request processing and Flask integrations, but what we really needed was something simple, easy to code, and scalable. I wasn’t just porting some of my old applications from .Net to Linux, I was also tackling an extremely complex new systems that needed….. shit loads of scalability.

Let’s learn Node.js. I will admit it, when I first heard that people were putting JavaScript server side to run websites and connect to databases, I literally laughed out loud and thought I was being trolled. But, it was a thing, and I found myself actually liking it, and doing some prototype coding with it. Here is the thing about prototypes, if you ship a prototype, be prepared to support that thing, for like… ever. Node.js natural async nature, when put under control, and even streams are amazing to work with for IO heavy applications, CPU heavy applications, not so much…

Let’s learn Linux. I started out my programming life on Unix with Perl and C, compiling code and setting up cgi-bin to run websites to communicate with my custom MUD code, but since the dawn of Windows 98, I switched from being a command line junky to a user interface guy. 16 years later, I find myself in the same similar place, different distro, tons of new tools, tons of things to learn about security, and remembering why \ doesn’t work like /. If only the Bash for Windows had came out 2 years ago… (I actually use this more than any Windows feature now).

Let’s … not learn Mac. A lot of people who write code for Linux use a Mac, which is a Darwin Linux distro. There are so many things different with Mac’s user interface, and even the Linux system, that it just felt clunky and difficult to use. I gave iPhone, iPad, and even iMac a chance, but after the years of trial, I am not a Mac guy, as I sit here typing on my awesome Zenbook Pro from Asus with Windows 10.

Let’s learn Big Data. Data is key, especially in todays tech industry where you have to make decisions based on data of your users and software performance, and when dealing with the scale we do at work, that means “Big Data”, but big data isn’t just about using a distributed file system (DFS), It’s also about delivery of that data from thousands of services and literally millions of users from around the world. While it went through its own growing pains, I have to say that we now have a seriously bitchin data pipeline with aspects of real time analytics and data warehousing.

Let’s learn Cloud. Yup, there is that word, one that I actually kind of despise. When people ask where I work at Blizzard, I reply with “on the cloud team”. Externally, and even internally, the response is generally “oh ya, what type of data are we storing there, like pictures and stuff?”. There is a naivety in how people understand cloud, its not some random blob storage that is replicated to your devices, that is “Cloud Storage”, which is simply a single service running in a, generally large, cluster of micro services that are transient and virtualized across global availability zones. The “Cloud” is what people used to draw as “those massive amount of things in the internet”, but really what it is is “Infrastructure as Code”. Learning cloud is learning AWS, Azure, Google Compute, and Openstack, learning new orchestration techniques (Ansible, Puppet, Chef, Saltstack), learning about containers (Docker, swarm, Kubernetes) as well as diving deep into configuration services, discovery systems, distributed coordination algorithms for data consistency (eventual vs. immediate), the world of “cloud” is about as large as the clouds over our heads. I am no expert in it, that's for sure, but I spent a lot of time learning and getting immersed in these technologies.

Let’s learn to go. Golang that is, yet another language to pop under my belt, the last six months or so have been dedicated to learning and writing software in Golang. Go is one of those languages that was made with concurrency and event driven designs at its core, which makes it a natural choice for the cloud infrastructure stacks. Docker, Kubernetes, and many other orchestration platforms are built with Go because it is a native systems language that can be compiled cross platform for most CPU architectures. Its fast, garbage collected, and relatively simple, being described as he “pragmatic programming language”. Again, this was one of those languages I looked at (similar to Node.js) and though, what the hell is this little crappy language with a Gopher, who is using it, I mean really, outside of the people who made it? Well, it turns out, its an amazing tool.

Over the last two years, I have embraced that I am a polyglot. I regularly write code in Golang, Node.js, Java, C#, Python, C++, and even Lua. Stop treating languages as a staple of development, treat them as a tool to complete a task. Every programming language has its pluses and minuses, and generally looking at the software written in them will show you exactly what they are best for. For instance, you will see Java used very heavily for Big Data, Data Analytics and Analysis. It is all about finding the right tool for the job, and one of those tools is the language you write in. Can you write a highly distributed 5 million user a day web commerce site in Python? Sure, but was there a better tool for that job, or did you just like/know Python?

In summary… I am back, I have no idea how frequently I will be blogging, but it will be more often, and definitely about a more vast set of technologies and languages. I still have plans to complete my blog post, and more specifically my tools, to automate OBS (now OBS Studio) with MIDI devices, and I may revisit the ASP.Net series with ASP.Net Core instead of the older versions.

No comments: