How I Became a Programmer. And When I Started Calling Myself One

I’ve wanted to start blogging about programming for months now and like so many others before me I set off full of enthusiasm and buzzing with energy and anticipation for the wonderful words I would write to the world.

So I got a domain, grabbed the latest copy of WordPress, installed it and spent a few days playing with CSS until I felt the style portrayed an accurate representation of “me”.

Finally I was ready and there I sat with nothing between me and the world but a blank canvas with a flashing cursor. I sent a request to my brain for a topic but nothing came.

To no avail in my mind I pressed F5 to refresh quickly followed by Ctrl+F5 and then checked my minds internet connection, it was OK, but still nothing. Finally I hit F12 and brought up my developer tools and there it was plain as day — Status Code: HTTP 204 — No Content.

The error was not because I knew too little, or even because I had no interesting or funny stories to go with that information. I could easily whip a few step by step tutorials on any number of topics that I had once struggled with. I just had no idea where to begin or on which topic to start with.

I did however know a few things.

I knew that I wanted my posts to target both junior and seasoned programmers providing either a practical approach or alternative perspective to a problem, but which problem? Should it be a benchmark test of built in array functions vs loops to help choose the best performing method vs the most readable? Or perhaps an intro to MVC? , or a tutorial on how to create a jQuery plugin? , or some useful SQL commands? , or a code free post focused simply on application architecture? My brain was stuck in an infinite loop, so I killed the process, shelved the idea and went back to coding whatever it was that I was working on at the time. Then two months ago when I had my first proper look at Medium it was love at first sight and I knew that I had found my platform should I ever figure out exactly where the hell I wanted to begin, or even exactly where it is that that beginning starts.

Today I read an article on Sitepoint by Jeff Smith entitled “Recognizing and Dealing with Impostor Syndrome”. The article states that the Wikipedia definition of impostor Syndrome reads as follows…

“impostor syndrome is a psychological phenomenon in which people are unable to internalize their accomplishments”

Jeff Smith then proceeds to simplify the above definition to…

“In short, people who are good or successful at something sometimes become sure that they are really not worthy of their job, any positive attention or bonuses that they are getting, etc. They downplay success, and constantly worry that they’re not adequate to meet the task at hand — despite consistent and often self-evident proof to the contrary.”

Immediately I knew that I had impostor syndrome. It felt just as familiar to me as pressing Ctrl+Z on my keyboard or brushing my teeth. Before today I never even knew that Impostor Syndrome existed or to put it more accurately, I never realized that anyone except for myself and the super quiet shy girl in the corner of the office had it.

Allow me to fill you in on my background… I am the Lead/Senior/Head or whatever other title you want to slap before the word programmer in my current company which I have been with for one year now, before that I wrote programs for my previous company for four years and one and a half years before that I taught myself to program out of a combination of passion and laziness to solve a problem that I didn’t want to deal with. In a fortunate twist of fate it turned out that enough other people had the same problem and were willing to pay a subscription for a viable solution, one investor later and a company was born.

Over the years I have built up and have become a respected and trusted member of a very small network of professionals I have met or worked with, each regarded as being proficient and an authority in his or her own field. Through this network I both pass on and receive clients and work that either could not be taken on at the time or that has requirements that can or can’t be met. We also help each other by sharing knowledge, advice and opinions when solving a problem. I have noticed that Junior programmers tend to regard my code with supernatural awe. I find this very strange since I am only beginning to consider myself proficient and have not finished making the mental transition from being the student to teaching one. I’m not quite sure when this began but it reminds me of how much I had to learn not so very long ago.

I generally solve most of the bugs I encounter in minutes. I can quickly pin-point the exact line where everything begins to go pear shaped and occasionally I write a fix so simple, so elegant and reliable that for days afterwards when I think about it I feel mesmerized, like I’m floating on air and I have just re-discovered some old tomb of syntax lost to universe since the age of Netscape Navigator that has been lying buried until now in the millions of tweets, Facebook status updates and porn sites on the internet. I know that I am smart and I often hear one friend telling another just how intelligent I am after a few beers and the statement often goes something like…

“Hes a genius, he taught himself to program! You should see the things he codes”

And to that statement I usually reply…

I am clever, but I am no genius… I write programs in a language that another guy wrote… he’s the genius, I’m just following the manual.

In all truth, that is how I feel. I am not cutting a path through a new land, I am following a map through a public park. Yes, you may think I am smart because the map is written as an equation where after a game of rock, paper, scissors you solve for X but its still a map and I follow directions for a living. I may decide when to jump over a bush or whether to make a raft to cross a stream which directly affects the time it takes for me to complete the journey and the general quality of the trip but the route and destination is not of my making, hell I wasn’t even close to the first person to find the park.You see I have realized that I cannot even attribute a particularly smart or efficient snippet of my own code to my skill level and instead tend give the credit to the language, which logically speaking is 100% correct but on the other hand even though a super car is fast is it not the driver’s skill that determines the lap time? Only in the last year have I begun to think of and call myself a programmer. Maybe it is because I am self taught and did not know how to qualify my skill set, maybe it is impostor syndrome or maybe I feel like I cheated by teaching myself but with this revelation I decided that there is no better place to begin writing about learning and practicing programming than a post about knowing when you have achieved your goal and have joined the ranks of programmers all over the world.

You may notice that I avidly avoid the use of the word “Developer”. This is because I personally feel that terms like “Web Developer, Software Developer and Application Developer” can be both vague, deceptive and are generally abused for ego, street cred or to misdirect attention from skill sets and experience on CV’s. There are also countless articles debating whether a programmer whose qualification’s comes in the form of a degree is more skilled or “qualified” than a self-taught programmer. THIS IS NOT ONE OF THEM. I find that the true beauty of programming and technology, the spring where all my passion for the topic flows from, is that you can never know or learn EVERYTHING. The nature of the environments that we work in (and on), the tools that we use and the practices that we follow are constantly changing and evolving. Essentially you must choose to either become a jack of all trades becoming familiar with most things, but mastering none — meaning that coding will never be more than hobby on weekends but opening the door for you to manage teams of programmers and spec the architecture and features for products, creating a seamless experience by balancing the user’s needs, budget and technical requirements. Or you can choose to focus on and master a single field, keep up to date with its latest practices and eventually take your place maintaining legacy code once the latest technology practice becomes not to practice the field which is your specialty. This is also what I think may be one of the prime reasons why many programmers may have “Impostor Syndrome”.

So what is a programmer? The definition of the word programmer is simply

“a person who writes computer programs”

Yet we all know cooking supper does not make you a chef and this post does not qualify me as a writer. Instead initially you find yourself in a kind of limbo where like Schrodinger’s cat you both are and are not a programmer until you program. Of course when you program you would need to write that code to standard using the current, yet ever changing industry accepted level of proficiency as a measure but naturally don’t forget to use the current, yet also ever changing industry accepted development stack for your chosen language.

Currently I feel that the entire programming industry is in what I can only call a “Framework Bubble”. So much value and attention is being given to the hundreds of open source and premium frameworks out there that it is creating a large blind spot when it comes to being proficient in and mastering the use of the programming language in question. Thankfully when I first googled “How to program” frameworks and framework tutorials did not yet dominate the internet and I didn’t click on the first link to find an article explicitly stating that Ruby is the new PHP, but you should rather use Python if your messing around though if your serious you better deploy a Node.js app to Heroku or Aws and use npm to get express and socket.io to create a REST API abstracting from Mongodb and then consume it with with an Angular app implementing a Material Design template, but don’t forget to push to Git and use Gulp otherwise your application is no good and it will traumatize your users. You will then be banished for tarnishing the respected trade of programming forever. I think if that was in the first 5 posts I viewed I may have just called it a day right then and there. Instead choosing to pursue a career as freelance vagrant and professional couch tester seeking enlightenment through divine intervention.

Now, before I am attacked I need to state that I LOVE FRAMEWORKS, I use them regularly and they enable me to launch small app’s with massive functionality in a fraction of the time it would have taken, without the hours of debugging ,structuring and evaluating the 101 basic utility classes and functions that my app would need to run. Frameworks allow us to create applications in a fraction of the time and cost, they make websites and applications more affordable and accessible to everyone and allow them to share and offer their products and ideas to the world ultimately driving growth and innovation. Frameworks are also great because they enable the junior to intermediate programmers under you to actually DEVELOP applications for production that have good architecture and sanitized inputs. Instead of them wreaking havoc on the much loved stable class that you gave them to extend while you punch out the foundation for the new application while making a mental note to make time on the weekend to extend your beloved class yourself from a backup.

With that said although it is undeniably one of the strongest pros when it comes to frameworks, I also feel that it is also one of the strongest con’s for the budding programmer in question. Personally even though it is not always the case I feel that you should never use a framework that given time and lots of it, you could not write or at least mostly replicate yourself. You should be able to extend, customize and more importantly debug the framework you use. Frameworks and libraries can be very dangerous to a person learning a programming language since very often they abstract from the language they are written in. jQuery was one of the first frameworks to demonstrate this, I can’t even count the number of people I have encountered who learnt jQuery and thought that they KNEW JavaScript. I still occasionally try to call a jQuery method, confusing it for vanilla JavaScript all because I learnt jQuery before I became adept in JavaScript.

This mistake cost me years to fix since not only did I learn syntax for a framework instead of a language, I became absorbed in features in jQuery such as DOM manipulation and animation and I am ashamed to say that at one point I was even one of the ignorant few who carelessly made embarrassing statements like

“Who needs JavaScript when you have jQuery?”.

All that time I should have been focused on syntax, design patterns and most importantly learning about what an object was and how objects are the heart and soul of JavaScript. I should have learnt how to prototype objects and spent time expanding my knowledge to include important things like the fact that just because you write programs in an Object Orientated language does not mean that you are programming in an Object Orientated fashion. Instead I spent countless hours that I will never recover mucking around with buttons, making cumbersome and unneeded animations to make elements hide, slide, pop and spin trying to figure out how to make the website flashy and amazing instead of making it usable.

So when did I become a programmer?

I have always been a natural with computers. I was an advanced Windows user by the age of 8 and I always knew that at some point I would start writing programs, but then life happened, hard times came and I learnt to program much later than I expected. I didn’t even have a computer for a few years, and aside from that small complication here in South Africa Internet was rumor… accessible only by the fortunate and elite, Google was a misspelled word for rinsing your mouth and right up until today I still have not found a half decent book on programming in a library or store.

Only in 2008 did I finally have both the motivation and the opportunity to learn to code. I was a manager of a Super Market… large in size here but about the size of a lemonade stand when compared to a Walmart or Target. Most stores only gave pensioners a discount on their shopping on Wednesdays. We gave them a discount everyday — this was never advertised it was always an ask only basis. I also need to mention that we had 18 tills, I was the youngest manager (Hence I was automatically awarded the honour of completing all undesirable tasks) and in order to award the said discount I would need to walk to the till point, insert a key into the keyboard, twist the key, remove it, enter my staff id and password and then navigate through the point of sale menu using a long series of different key presses to select and apply the discount. Once I had achieved the level of Jedi at applying discounts it took roughly 30 seconds that is, excluding the inconvenience of dropping whatever task I was busy with and walking as fast as possible from where ever I happened to be in the store all the way to the tills.

This occasionally meant I would have to close the receiving area in the basement, secure it, run up stairs, award the discount, race back down and just finish re-opening the receiving only to find that I had to do it all over again. Then some property company built 3 old age homes within 2 km of my store and before I knew it I had to spend the majority of my time navigating from one till point to the next, politely answering each senior citizen question or chuckling at their joke, awarding their discount and then rinsing and repeating. The old ladies loved me and often baked me treats and guilt-ed me into accompanying them while they shopped, during which time I would continually have to run back to the checkout to award discount when needed. I learnt a few things during my conversations with them….

1. On Wednesday their bus went to our main competitor since they offered a 5% discount on a Wednesday.

2. On Tuesday they went to our other competitor since that was the day they offered a discount.

3. Only the minority of the elderly customers were aware we even offered discount.

4. We were perceived to be the most expensive store out of the 3 and hence received only a fraction of their total spend.

5. Gossip spreads faster in a retirement home than on Twitter and the elderly love competing and bragging.

Then it hit me. I needed to give them a pensioner card, a magical card that they could swipe or scan at the checkout that would award them the discount without me having to intervene (this was my primary focus). I was at breaking point and each day I came closer and closer to becoming either the youngest resident at a retirement village, or have the CCTV footage of my public breakdown go viral on YouTube. So I jumped on the internet and Googled “How to Program”. A week later I had written basic calculator and 3 months after that I had a working pensioner card system in my store. It was an instant success, soon we had so many elderly customers coming through the store that we had to buy 3 wheel chairs for when they were tired or simply could not walk fast enough to complete their shopping before it was time for them to leave. The word spread between them fast that there was a special card you could get at my store that gave you discount whenever you wanted and shortly after that I expanded my application into one of the first loyalty card systems in a Super Market in South Africa with a card for regular customers as well.

At this stage any non-coder believed I was a coding savant, and it was undeniable that I could write a program but I was no programmer. My system was basic and crude and compiled from the few snippets I found online that I could kind of understand. Basically I hadn’t the faintest clue what I was doing and only sort of knew how my own program worked… this I chose not to question and lived by the motto “If it’s not broken, don’t fix it.”.

Shortly after that I found an investor and was employed as a programmer (With my employer fully aware of skill level!), but instead writing Visual Basic executable’s I was employed to make websites! My initial concept was being re-developed by people who knew what they were doing and apparently my super shoddy Html and WYSIWYG skills weren’t too bad in comparison to the resident ASP Classic programmers. I was thrown into the deep end and Google saved my life! Within 2 weeks I was adept in Html and CSS and 2 weeks after that I knew basic JavaScript, had started my path with jQuery and understood the CSS box-method.

One year later I knew basic SQL, ASP Classic (Vb Script) and could slap together a decent website with an admin login. I spent all my free time doing tutorials and trying to code my ideas (I still pretty much do). I started making basic canvas games and finally reached a point where I could write 80% of a program/website without using Google. It was somewhere around this point that I think I became a programmer, not because of my mad skills… (I was barely intermediate), but because I had reached a level of understanding about the concepts and the potential of (object orientated) programming.

Don’t get me wrong I was no master of design patterns… actually I barely knew they existed, yet I was creating them without even realizing that they had a name. I could conceptualize how to programmatically solve a problem in my mind instead of trying to solve it by typing function(){… and messing with it until it worked…badly. I didn’t just know how to declare an array. I understood what an array was, what I could use it for, what methods it should have and what they do. Once you understand the concepts of programming this way it becomes 100x easier to learn new languages since in your mind you know what you have to work with, and have a pretty good idea of what you should be able to do with it.

The rest is pretty much learning the quirks, ins, outs and syntax of the language, this means that you can transcend the language that you program in and never be held back by its limitations. Solid application architecture and overall good logic and design is something that you will not find in the syntax of any language. It is something that you either have a knack for and hone to perfection or acquire over time through experience. These are the skills that I hold above knowledge of any language or framework and they are what I believe truly qualifies a person as a programmer.