I just reached my twenty year mark as a professional software developer. I know it’s a cliche, but where did the time go?
We all go through first events in our life. Our first time we could stand up by ourselves, the first time we said our first words, the first time we learned how to ride a bike without training wheels, the first time we learned how to swim, our first crush, the list goes on an on, and continues on through the span of our entire lives.
Probably every software programmer remembers their very first “hello world” experience.
Let me explain.
“Hello world” is a sort of rite of passage for every software programmer on the planet. It’s their very first experience writing their very first software program.
For as long as computer programming books were around, the very first programming assignment in any software programming language, is to write a program which outputs the text “hello world” to the computer screen.
Why such a simple task?
It’s how we learn anything as humans. It’s starting with the very simple concepts and gradually adding more and more complex tasks, until you’ve learned how something gets done.
It’s no different in computer programming.
It really doesn’t matter what programming language you use. Every computer language on the planet has the ability to display text to the screen.
I still remember the first time I wrote my very first “hello world” type program written in BASIC, back in elementary school on an 8 bit Apple II computer from the early 1980s.
10 PRINT “HELLO JOHN!”
Yeah, it didn’t do much.
But the ten-year-old me was thrilled. I made a machine do by bidding!
Fast forward about fifteen-ish years where I started on my first professional software development position. I sort of slid into my first entry-level software development position, thanks to my previous stint doing help desk/technical support for an internal IT department.
The help desk position helped me gain solid foundational experience in learning how to use Windows and UNIX, learning how file systems, networking and scripting work.
Even then, my first entry-level programming job was almost overwhelming. I didn’t have a formal computer science degree. All of my knowledge and experience with software development came from on the job experience and self-learning.
Luckily, I had a coworker who acted as a mentor and helped me when I got stuck and had questions. And believe me, I had LOTS of questions. There was just so much to learn.
When you first start your software programming career, you can safely assume EVERYONE other programmer knows more than you.
I experienced what every other novice software programmer must go through … the “wall”.
It’s that steep learning curve you must overcome to understand core programming concepts. Debugging. Loops. If-then logic. Switch statements. Object-oriented programming. Inversion of control. Dependency injection. And a thousand other concepts, however small or large.
It can be daunting. It certainly was for me. There were times when I was first struggling with my first work assignments where I experienced major despair and doubt about my abilities.
I’ve heard other software developers even refer to it as the “imposter syndrome”. The imposter syndrome is the notion that you don’t feel like you legitimately belong in the position, doing the work you do.
I can’t speak for anyone else, but I’m going to go out on a limb and say many other software developers have probably felt the same way.
And sooner or later, if you ever read up on the history of computer programming do you realize that the field has rested on the shoulders of many giants and pioneers … the computer engineers who designed and programmed the computers to help the first NASA astronauts travel to the moon, the first generation mainframe programmers, Bill Gates, Steve Jobs, Linus Torvalds, Brian Kernighan & Dennis Ritchie, James Gosling, Grace Hopper, the list goes on and on, and will continue to grow as new pioneers enter the field of computing and bring their own contributions.
When I learned about all these giants, I was in awe of what they did and continue to admire them.
Yet from time to time, even to this day, I can’t help but think I’m still an imposter. I never INTENDED to be a software programmer, so obviously, I MUST be an imposter, right?
Even after twenty full years of programming for a living, I still sometimes feel like I have to pinch myself because I still find myself wondering how I ended up doing this for a living.
When I think of the software engineering giants and pioneers that came before me, I can’t help but think, “Do I really belong here, pretending I’m as good as they are?”
And if you’re not careful, dwelling too negatively about this can truly affect your productivity.
Overcoming Imposter Syndrome
There are two important things to understand.
1. All the giant software pioneers in the computer science field, didn’t start their programming careers as experts. They all started at ground zero just like I did.
2. It’s not a competition where software programmers are actively trying to “best” each other.
The reason why any of us are software developers isn’t because we want to compete with each other. It’s because we fell in love with the power a computer gives us.
My first software program of my first professional software development job was embarrassingly crude. It was poorly designed, poorly written, and probably broke every rule of proper software design on the books. I’d probably cringe if I could go back and see what the source code looked like.
But it worked. It did what it was supposed to do, which was to help our company employees do THEIR job.
I still clearly remember one of our primary users of my first application send me an e-mail after it was released. He thanked me for creating the application as it helped him save lots of tedious time which the application helped him save.
That expression of appreciation was priceless to me. It gave me the confidence that maybe it would be worth sticking around as a developer. I am confident that every other software developer on the planet goes through a similar “origin” story.
It doesn’t matter if your first program was crude and poorly designed… the important thing is it did its job.
It’s a fact that with practice, we get better at pretty much anything we do. Computer programming is no different. Even the code I wrote a year or six months ago seems crude compared to the code I write today.
It’s because computer programming is really all about learning. We learn new things and APPLY our learning to computer code.
It’s not just learning the syntax of a programming language. It’s many other things like design patterns, object-oriented programming, and many other aspects of software design.
And here lies the answer to the “imposter syndrome”.
Computer Programming Isn’t Just About What You Know
We software developers need to understand computer programming isn’t just some static attainment of knowledge.
It’s not like gaining the different kinds of belts in martial arts like karate. When you attain a black belt, you’re considered a master.
There really isn’t an equivalent master of programming. You can’t reach a certain level of knowledge in computer science and be confident there is nothing else to learn.
Computer technology is always evolving. In fact, it’s evolving at a faster and faster rate, even compared to when I started out.
That means a successful software developer must love to learn new things all the time.
And that’s exactly what has kept me in the software development field even after all these years. There are not many other careers out there where you can count on the fact that there will always be new things and concepts to learn. Which also means you will never reach a “master” level of programming.
Sure, there will always be programmers who know more than you, and there will always be others that know more than them. It’s not a race. It’s a lifelong journey of learning.
And I hope I’ll be around another twenty years to see where computer science has ended up.
Will I be pair programming with a HAL-9000 artificial intelligence? Who knows….but I got dibs on the stapler!