Sometimes I can't shake the nagging feeling that I am simply not a very good programmer. After all, in a world full of budding programmers, statistically someone has to be below average at programming, right?

There's at least a few good reasons behind the self doubt of my programming abilities, namely the following:

I did not major in Computer Science, or even in any related STEM fields.

It inevitably comes up right away in phone interviews: "Why didn't you major in CS?" I really wished I had picked up programming much earlier than at the beginning of my junior year of college. I really do. Well actually, I did take an Intro to Programming college course during the summer of 7th grade, but I guess that course lacked the sufficient oomph to lead me down a career in programming. I blame Visual Basic 6; if the course was taught in any C-based language instead, I'm pretty sure I would be a rockstar programmer by now. Just kidding, but I still think that Visual Basic is a truly terrible language.

Regardless of the circumstances, I am set to graduate in two months with a Bachelor of Science in Business Administration, a degree which I don't find to be particularly useful. Although I did pick up knowledge on data structures and algorithms through my minors, I won't be leaving college with formal education on systems programming, operating systems, computer networks, artificial intelligence, digital circuits, and a handful of other CS topics. None of these topics have direct relevance to the work I do as a front-end web developer, but having this knowledge would help me better understand the surrounding context of my work, such as what actually happens inside Chrome's V8 JavaScript engine. Speaking of JavaScript and front-end...

Software engineers (well, some of them) don't take front-end development seriously.

HTML and CSS are definitely not programming languages. JavaScript was conceived in only 10 days and has its fair share of missing features (block scoping) and weird quirks ({} + [] === 0) to show for the rushed development. Then we move to all sorts of awfulness when trying to interface with the DOM through JavaScript, with rampant cross-browser inconsistencies creating the need for a library like jQuery to abstract away the mess. In short, front-end development can seem like nothing more than bits of design work mixed in with some hackery to make all the browsers play nice. Then we might also consider just how many tools exist to enhance our limited toolbelt of HTML, CSS, and JavaScript...

Front-end development is moving at such a rapid pace that it's hard to keep up.

I barely used Grunt for a few months and now Gulp already threatens to overtake it as the de facto JavaScript task runner. I also thought I stayed sufficiently abreast of JavaScript MVC frameworks by learning both Backbone and Angular, only to discover quite recently about the existence of more performant offerings like Vue.js and Facebook's React (as the View component). This is not to say that having more shiny new toys at our disposal is a bad thing, but it certainly doesn't build confidence in feeling that I am a competent developer.


Of the four stages of programming competence, I am probably at the stage of conscious incompetence, which I guess is not so bad. I do wish I was a little more proficient, but I embrace the fact that there's still so much to learn. I embrace keeping up with the changing landscape of front-end development and needing to pick up fundamental CS knowledge. I'm also inspired by developers with a non-traditional background like Rebecca Murphey, who came from a journalism background to become one of the leading voices in JavaScript development. I'll just have to work at it, and hopefully one day I'll be competent enough at programming. And if not, well, at least I'll have made some cool things to show for my efforts.

comments powered by Disqus