The Journey of a Professional Amateur

It has been a few years since I’ve posted anything on here, I guess I got busy and just didn’t really like feel I had anything to share. I originally created this ‘blog’ as a place to sort of write randomly about the different projects I’m working on, not that they would really be of any use to anyone but because I think that if I wrote about the projects, I would identify things that I needed to learn more about. That hasn’t been going as planned, not for a lack of projects, just a lack of interest in posting anything about those projects.

This post is going to be different. Lately I’ve been reading through Robert Martin’s The Clean Coder and it got me thinking about things like professionalism, knowledge, learning and my own journey in software development.

Some background, I’ve been programming since the 10th grade in High School, this would have been in around 1999-2000. It started in some non-programming related class where I became friends with someone who liked to program, and I watched him code a very simple game in QuickBASIC on the computer in the classroom. I don’t recall what I thought about it exactly, but I knew that was something I wanted to try doing. It was so cool seeing him type text into the editor and then have it produce something on the screen. Fast forward and then I started playing around in Perl, which was kind of a strange choice since I was using Windows XP at the time. I eventually moved to Slackware Linux and then Gentoo Linux, and I got focused on writing stuff in Perl that I didn’t really try learning anything else for a few years. Hell, I knew enough Perl to write what I wanted and kind of left it at that for the next few years. I still have some of these Perl scripts I wrote back then (e.g. an AOL Messenger bot that registers a ton of instant messenger names, then spams a user with warning messages to make it so they can’t send out going messages). Looking back, I really wish I had tried picking up another language or going out of my comfort zone since I sort of feel handicapped now because of it. I eventually tried Ruby but at the time I didn’t really want to do web development so Rails was out of the question. I played around with Lua, but it was before World of Warcraft was released, so at the time it was mainly used for embedded systems, so that didn’t really stick with me. I toyed with Python a bit, but didn’t really have any project ideas that I felt like using it for, so I moved on. In around 2005 I started learning C# and fell in love. I think this was mainly because the syntax just came easy to me and I could write tools that could help me with my day to day job (was doing software support). I eventually started writing small tools that would help automate the mundane tasks at work. I started to forget about Perl and everything else since I was consumed by C#. Why wouldn’t I be? .NET Framework was pretty much on every machine now and I could quickly hack up an executable that would automate an hours worth of work in about 15 minutes saving others and myself tons of time in the long run. I unfortunately fell into another ‘slump’ of not expanding my knowledge. I wrote what I wrote, it worked for me, did its job and no one else was maintaining it, so why bother? Looking back, this was a mistake and I feel like I’m paying for it now. A few more years pass and I’m not entirely sure why, but I take a break from coding for about a year and a half. Between the time I started coding back in High School and when I started getting heavily into C#, I had lost both of my parents. I was only 19 when my dad passed and around 21 when my mom passed. It was a rough few years for me, and honestly, I don’t think I could have made it through without having the outlet of programming. They both never really knew how much programming (or as I like to call it ‘writing code’) meant to me, other than it was something that I was doing on the computer A LOT. I spent countless hours after they passed just hacking away at random stuff, most of which I can’t even remember, moving from one project to another. I didn’t feel like I ‘had to code’, it was just something that I enjoyed doing and it made me feel good to make something from scratch. I still absolutely enjoy writing code and it still makes me feel good. While my friends are spending their personal time playing video games, I tend to divvy up my solo personal time reading about programming, design patterns and practices and writing code. I do like to play video games, but usually I’ll navigate towards writing code instead if I have a project I’m working on.

So, why the long backstory eh? Well, I mentioned that there have been times when I kind of got side tracked and stopped learning. I’ve actually personally acknowledged that and have been trying to address that and keep it in mind every day. The last few years I’ve been reading about design patterns and practices, new languages, new frameworks and trying to not find the easy way of writing code but instead a way that lets me take what I’m comfortable with and add in a splash of something outside my comfort zone. I don’t know everything and I won’t even pretend to think that I’m the best or even that great, but I’m learning every day even though it takes me a few times reading the subject matter to usually understand it at a basic level, and then awhile of implementing it to get a firm grasp of it. I was able to acknowledge that I’m not the best, and won’t ever be. I just need the adequate time to learn. I’ve stopped comparing myself to the Stackoverflow wizards out there who will always be 1000x better than me, and I am OK with that. I know I will continue to learn and get better. I know I have Imposter Syndrome and I know that my knowledge and skills are probably better than how I see them. This is a big step for me after all these years and I have to look back on my journey, what I’ve been through, what I’ve learned and who I am. I’m the happiest I’ve ever been, honestly. I have a wonderful wife that makes me happier every day, and I am comfortable with my self.

So, what is with the “Professional Amateur”? With all that said, kind of consider myself a ‘Professional Amateur’, but mainly just a “Programmer”. It may not exactly be my job “title” but it is my main hobby and probably for as long as it is just a hobby, I will always consider myself an amateur, which I don’t exactly thing is a bad thing. I’ve spent a lot of time lately thinking about what exactly a ‘professional’ is. A lot of people will probably tell you it is someone who wears a suit and tie or someone who has worked as a developer for over some arbitrary number of years. To me a ‘professional’ is someone who takes their job/hobby seriously. While my projects may be anything from non-sense random code, something completely irrelevant to anyone outside a small group to something that helps others and myself in our job role or a work project, I am always serious when I work on them. I try to always do everything in the best possible way I know how, which tends to extend schedules or rub people that want an easy, quick fix the wrong way. A better solution may be found later on, but if it is the best solution at the time, I won’t settle for anything less.

Robert Martin said in The Clean Coder that a professional doesn’t just expect his/her employer to provide them with the skills, a professional develops these skills themselves. This tends to be pretty controversial, since an employer should provide you the tools to do your job, but do they really need to provide you the time to develop the skills to do your job or enhance your career? A good employer should, but I don’ think they are required to do so. Looking back at my journey, I’ve always subconsciously leaned towards developing the skills myself. If I found an issue that I couldn’t fix, I would spend my own time researching and learning about the topic at hand so I could address the issue, not because I couldn’t find time at work to develop those skills, but that time probably wouldn’t come for awhile and I needed to fix this now. I don’t spend my time reading about programming because it will help my career, I’m not even a career programmer, I do it because its interesting and I enjoy it. I’m not saying that it doesn’t help me with my day to day job role, it does. I’ve learned how to take what I’ve learned and what I am currently learning with the these programming topics and how to apply them to non programming projects, such as code reuse when writing TSQL for example, when to say no or when to request more time for a project.

I’m not the best, I won’t ever be the best, I do consider myself to be professional since I care about the work I do and making myself better at it since it’s more than just programming to me, it’s what I enjoy. If I can take what I’ve been learning and apply it to other aspects of my life, that is a good thing.

I have some other thoughts about professionalism and how it’s viewed by other people and how I think it’s changing but I’ll save that for another post.