A Year's Worth of Work
It's been quite a ride. Pretty much a year worth of web development and, what's more important, a year's worth of work on myself. I didn't have any goals in January - just a vague sense of direction and the conviction that I had to follow it no matter what. I made a lot of things up along the way.
Then I was bumped into a junior dev role with a bit more responsibility, which felt great. I could finally own a piece of code. At this point I felt the age of darkness aka "god damn get this working" subside and I started to explore how to make my code better. At this point I started to appreciate this whole thing called OOP, but I was still far away from becoming an architect. I did get a good taste of it though from AngularJS and Rails.
Yet later my life changed and I had to change jobs - my new role demanded even more responsibility. Being a remote worker was hard at first since a lot of things were really vague for me. Less hand-holding, more figuring things out by myself. The biggest part though was learning discipline and it took me a good few exhausting weeks to hammer out a routine that would be efficient and satisfying. I recently began experimenting with the pomodoro technique, taking a 3-5 minute break every 45 minutes to space out, stretch, drink some water and so far it's had a great effect. This is something like profiling a script - try different approaches until you get the number of function calls down or eliminate the non-C related loops.
My new job has also taught me yet more about architecture by exposing me to design patterns and more thinking outside the box. It's yet another step on a long journey to being able to produce quality code and even though the end is nowhere in sight, I'm happy to be walking along this path.
Throughout this time I was also able to explore some less web development related aspects of coding such as learning the basics of C and Golang or exercising my existing Python knowledge. Those were extremely pleasant experiences, changing the way I think about programming.
C's classlessness was painful at first, but pointers are god damned awesome. I definitely want to go back and play around with C more, possibly taking a look at writing some Ruby or Python C-extensions. It felt great to be so close to the metal, having control over each byte. It reminded me of the month I spent going through all forty of Lena's Reverse Engineering tutorials and playing around with assembly. Definitely something every programmer should get a taste of. Golang was also a good deal of fun to work with, especially the aspects of composition, goroutines, and interfaces. It seems fast enough (both cpu wise and developer time wise) to warrant use on cpu heavy stuff or on low end machines like a Raspberry Pi.
The field of web development, which I'm most immersed in, is pretty fascinating too. You have people throwing money at developers to make things to make even more money, you have people offering millions of dollars for a program that's essentially an IM with a twist, whereas other, more human-oriented initiatives are striving for a few thousand dollars. As thrilling as the overlap of coding and business is, I think there's huge untapped potential in using technology to help people. There's a billion possible ways to make information flow more efficient that could not only entertain people, but perhaps improve or even save their lives.
As I mentioned before, there's a hell of a long way ahead that's paved with reading lots of books and practical implementation.
A few of the great technical books I've read this year were (don't worry, non-affiliate links only):
The Pragmatic Programmer - Probably the best book of all. Showed me to step back and take a wider view of I'm trying to do and what I'm doing. Something I'll definitely find myself reading again next year.
Design Patterns in Ruby - Another eye-opener. I doubt I absorbed all of the knowledge in here, so it's also on my re-read list, but it showed me the practical aspects of architecture. No more throwing code at problems and instead designing and well thought out design. Easier said than done, but this is a great introduction.
Pro Git - A must. I don't know how I've been able to manage so much time without properly learning git. Thanks to this book working with branches, rebasing, and git in general has not only become easy but damn fun to work with.
C Programming: A Modern Approach - This is what I used to pick up some C. This is the second book about learning to program I've read and I was amazed by how good it was. Anyone can learn C with this, really.
Programming Ruby 1.9 & 2.0: The Pragmatic Programmers' Guide - Funny. I only read this book many months after starting my journey with Ruby and Rails. It was great to fill in all the blank spots and show me spirit behind Ruby itself. Great for anyone wanting a deeper knowledge of Ruby and fun for everyone.
I've also read a great deal of non-tech books, some of the more noteworthy were:
Masters of Doom - Already wrote about this last time here. Great book that puts a lot of a developer's work into a cultural and historical perspective.
The Soul of a New Machine - As above, but instead of developing extraordinary game technology, we are witness to a birth of a real physical machine and the scene itself is set even earlier - we're talking about closet-sized machines. Many parallels to our times.
Jules Verne(Leather-bound classics) - An amazing book to relax with and take a very deep breath from all the commotion of the world around us. On top of that, it has a fascinating way of describing primitive scientific tools and findings that made me look at technology and my craft from a different point of view.
Profiles in Courage - This book here made me reconsider my thoughts on society, citizenship, and courage. It's well written and worth every minute spent on it because programmers don't exist in a vacuum - we're not only part of a virtual world of version control and loc's, but also a part of a very physical, political, and human world that I think would greatly benefit from more programmers taking an active role in society with their unique skills.
Macroeconomics by G. Mankiw - I can't find this book on Amazon since I read it's Polish translation, but it's an awesome introduction to how our economies work. Goes through a lot of the basic and sheds light on things I've been coming in contact with for year without understanding them. It also offered me a small glimpse into the wonderful world of what's possible if you get your hands dirty with data.
The Road to Surfdom - Written during WWII, this book is terrifyingly applicable to the times we live in now. Hayek explores the evils of socialism in a simple but very thorough way. It resonated strongly with me as I have glimpsed the fruits of socialism in my own country - Poland - and found just how well Hayek was able to fortell the future of certain socialistic trends when applied to a nation. As I mentioned before, it's frightening to see certain warning signs in our everday lives. Which leads me to next book...
Nudge - I just read this recently and while the grounds and techniques describe therein seem sound - I think the authors are sugarcoating all of it in a ton of bullshit. The aim of the book is simple - how to influence people's decisions for your profit. Fair and square. But why are the authors going to great lengths to deny the moral tone of their techniques? They call it paternalistic libertarianism. This oxymoron makes as much sense if we substitute antonyms for these words - humble statism or friendly tyranny. I burst out laughing when in the last chapter, which aims to discuss the morality of the application of these techniques, the authors offered the arguments of if it's for their own good, then it's good, right?. Only those with something to hide have to resort to distorting language, as described by G. Orwell in Politics and the English Language
I was able to make some baby steps in this area in 2013. My one man team placed at 232nd place, which I think is pretty good looking at my level of knowledge and the fact that there were 1387 teams in total with 13524 competitors. I learned a great deal during this contest. It strained both my mind and body to the limit as I was trying to cobble together my knowledge of ASM, C, debugging, and web development to get as many points as possible. My greatest weakness was cryptography, which I remedied to some extent by taking the Crypto I class on Coursera (but have not built out further by checking out more crypto challenges).
I promised myself to take part in more events like this and to work on my mad skills, but I've been really busy with work and improving my web development related coding skills and I haven't been able to devote any time. However, I plan to change this within the next two weeks as I'm going to clear out some time and there's another CTF coming up on January 25th.
I've also armed myself with a few good books and I think that exploring this field further will be a good deal of learning and fun. I also think that there's a synergistic effect here - my web development skills somewhat help me here and my cybersecurity skills (small as they are) help me in web development.
2013 was a great year. It was incredibly intense and allowed me to learn more about the world and myself than I ever have, despite me finishing an AS degree in May. I read a wide spectrum of books and did things I never dreamed about doing before.
Most of all, it showed me the endless road ahead.