It’s another new year. I enjoy this day because it feels like a blank slate to begin new habits, and drop old ones. We even make lists–resolutions. And so here is my list of computer-related resolutions.
1. Learn Linux Well
Modern Linux distros make it very easy to use. The fist time I installed Linux, it already had a GUI interface (KDE, GNOME, and XWindows) but the installation process was still console based, and any customization needed to be done manually in the terminal; as well, most applications needed to be compiled (I don’t remember any RPMs). I ran LILO, played with the distro a bit (Fedora, I believe) and dropped it. I regret that now. Linux is becoming ever more important as a desktop OS, while still holding on to its supremacy as a web server. For this reason, I want to learn the ins and outs of the kernel and terminal usage (not so much any X-Windows GUI).
2. Learn VIM
This of course, goes hand in hand with (1). I already started to learn this amazing text-editor in 2012, and I love it. It’s quick, powerful, and entirely customizable.
3. Learn Basics of C++
I want to have a working knowledge of C++ by the end of 2013. I have a basic grasp on the language’s syntax, but I want to become more familiar with its OOP capabilities, and have the ability to quickly adapt to any API.
4. Expand on my C# and ASP.NET Expertise
To break from the GNU theme, I also want to build on my C# and ASP.NET expertise. Mainly I want to learn more about MVC and multithreading in C#. I still think that Microsoft has a huge role in the web of the future, especially with enterprise systems. I want to be part of it. No one can convince me that there’s anything better for enterprise web applications (for the developer at least) than Microsoft. We’re spoiled rotten by the support, easily the best IDE, and awesome frameworks with built in capabilities.
5. Become a Web UX Specialist
In addition to expanding my knowledge of java\html5\css3, I want to learn more of the theory behind UX, its implications, and its the best possible implementations. The user interface—and in turn the user’s experience–is such an important part of any application (web or otherwise) because it’s how we communicate with the application. Linux may have been a faster, more stable and cheaper alternative to WIndows and Macs, but they lost the UX war. It is only after distributions became easy to install, configure, and use through an excellent GUI, did Linux gain a larger market share in the desktop world. User interfaces are always important—even if they are not graphical. An application like VIM may be entirely devoid of a graphical UI, but it still has a UI: the commands (and how they are implemented) is extremely important. It is one of the things that makes it a great application. The placement of every key is considered when the command line controls were programmed.
To summarize, it may seem like there’s a real dichotomy between (1,2,3) and (4,5), but I see these skills as complimentary. Having a greater knowledge and experience of lower level programming will give me a better understanding (and appreciation) of the abstraction layer I’m so very used to. And while 4 and 5 will probably contribute most to my career (since I’m already employed as an ASP.NET web app developer), knowing a whole other world can only expand my horizons.