DEV Community

loading...
Cover image for I Am Not A Real Programmer

I Am Not A Real Programmer

Andy George (he/him)
I do internet construction (and sometimes demolition) at Forem!
・3 min read

I am currently a systems engineer at Kenna Security, but wasn't hired into this role: I started four years ago as our first official support engineer (in part, I think, because our co-founder and CTO didn't want to answer tickets anymore).

I still like to be close to that support team, though. One of our current, younger support engineers likes to send me code snippets he's written from time to time, maybe to ask a question or to show off something cool he's learned. He sent me this the other day after one of his snippets:

We're a busy place, and I am Not Great at staying on top of DMs, so I didn't initially think much of it and didn't immediately respond. After lunch, I went back and saw what he had said and something clicked. I responded:

I DO know what he means. I've always wanted to be a programmer - I grew up developing at home on old computers, scripting on graphing calculators in school, asking for O'Reilly Perl books for birthdays. I was very close with CS teachers, and I even had a part time web dev job at a non-profit in high school. After graduation, I followed a track that eventually got me into a Computer Engineering (think CS + circuits) program in college. This seemed like an easy path forward, right?

I dropped out of college, though, and spent over a decade trying - and failing - to become a professional programmer/developer. By the time the Kenna opportunity came around, I had moved from support to software QA, thinking getting as close to "real" development as possible was how I'd land my dream job. As easy as it was to take a job at Kenna (then Risk I/O) - a startup with some very interesting, smart, cool people - the thought of going 'back' to support was a little tough. I still wanted to be a Real Programmer, and I had worked for years next to Real Programmers without being able to do, professionally, exactly what they did.

Kenna was different. I got access to GitHub. I got my own dev instance. I was taught how to create and merge PRs and watch my code (my code!) get deployed to production. Yes, I was answering support tickets, and yes I was jumping on calls to do technical support, but by god I was learning and writing Ruby. A newer engineer even told me later "I didn't know you were support, I thought you were one of our developers when I started".

Our growth at Kenna changed the game a little - I had far less time to play around with code, and was getting swamped with support work as our client base grew in size and complexity. We started growing our support team, though, and hired some support engineers that are easily better at that role than I was. This also opened up an opportunity to move over to our platforms/systems/operations side.

I'd be doing backend, infrastructure work. We're a Fedora shop, and while I played around with Red Hat and Ubuntu and others over the years, I'd never done honest to god Linux system administration. My boss took a chance bringing me over, hoping I'd ramp up to the level of systems engineer we needed.


That was a few years ago, and I now feel like an honest to god systems engineer - but am I a Real Programmer?

That support engineer told me "I'm not a real programmer, I just glue stuff together". I replied:

Isn't that exactly what being a programmer is? A great article from last year stated "The Bulk of Software Engineering in 2018 is Just Plumbing", and it's as true at massive scale as it is when simply grepping out strings from log files.

I know a lot of people in tech who suffer from Imposter Syndrome, and it can be extra hard for those of us like this support engineer who may not have "developer" or "programmer" in their title. I spent a lot of my career with a chip on my shoulder, but have thankfully been surrounded by a lot of incredible people that, daily, help me shed that mentality.

My name is Andy, and I am a real programmer.

Discussion (54)

Collapse
daveskull81 profile image
dAVE Inden

Thank you for posting this. I totally agree. If someone is writing out code and making a computer do anything they are a programmer. I’m sure this rings true for lots of people. I know as a self taught programmer trying to get into a developer role I suffer from imposter syndrome. But, it is important to remember that those feelings are a lot more common amongst developers than we think, especially among those with experience doing it for a living.

Collapse
jorgecc profile image
Jorge Castro

You are a programmer if you know how to program, as simple like that.

For example, a programmer could understand it:

http://i.imgur.com/oxMdJ7P.jpg

(there are 3 mistakes).

Collapse
qm3ster profile image
Mihail Malo • Edited

I only see the assignment operator used instead of the equality operator, which tragically also yields the assigned value.
What are the other 2?

What mistakes are there in

static bool isCrazyMurderingRobot = false;

void interact_with_humans (void) {
  if (isCrazyMurderingRobot)
    kill(humans);
  else
    be_nice_to(humans);
}
Collapse
jorgecc profile image
Jorge Castro • Edited
  • Curly braces are not required, however, it is a bad practice not to write it:
if (condition) 
     operation1;
     operation2; // it will be execute regardless of the condition.
  • using a static variable is dangerous because it could be changed everywhere, for example, inside a function like in this case. And using a static variable is not thread safe (unless it is a final or how Java creates a constant).

  • We mustn't leave bad code around here. It is not rare (but not acceptable) to leave testing/legacy code around here for no reason because they will haunt us later (aka, a skeleton in the closet).

Thread Thread
qm3ster profile image
Mihail Malo • Edited
  1. The formatter should have caught that and given you
   if (condition)
     operation1;
   operation2; // it will be execute regardless of the condition.

or better

   if (condition) operation1;
   operation2; // it will be execute regardless of the condition.

There were never two statements in a row, so the above couldn't happen.

  1. True, there are better ways to do this like a config getter.

  2. Who says it's bad code this time? Perhaps the default is at the top but this is something that should have been affected by feature/A-B testing flags.

@ben halp pls, I indented everything in point 1. by 3 spaces but it still escapes the numbered list. Your markdown is misbehaving.

Thread Thread
jorgecc profile image
Jorge Castro

Bad code is a code that it's prone to error. However, modern UI changes it and some old practices are not required any more but we are still using it. In the case of curly braces, it is a good practice but it is not a requirement and it's not for every case. For example, if we need a slim code (printing code or for a video), then we could save space by not writing {} but for everything else, it's part of the quality of the code.

For example, Google leads me to:

softwareengineering.stackexchange....

Why?

Write your code for other people.

Thread Thread
qm3ster profile image
Mihail Malo • Edited

For example, if we need a slim code (printing code or for a video)

I think the comic wanting to use as big a font as possible is exactly this case

I find that the formatting that is the most cohesive, keeping related ideas together is actually this:

if (condition) operation1;
else operation2;

Generally, multiline conditional operations are a bit of a code smell.
If there is only one long branch (or one branch at all), it should often be refactored into an early return.
If there are multiple, you totally lose sight of the condition by the time you get to the else. This probably means both branches should be extracted as function calls with good summary names (and limited scope of variables, passed as arguments).

The only case that has me really conflicted is

if (condition) {
  voidReturningFunction();
  return;
}

On one hand, it would be less noisy to do

if (condition) return voidReturningFunction()

But on the other hand, this means that we are potentially returning the return value of voidReturningFunction, which might even in the future change its signature.
Maybe the middle ground would be

if (condition) return void voidReturningFunction()
// but it's esoteric

Not sure. Perhaps having two lines here is optimal, especially if other returns in the function are not void (A case possible in some languages like JS but not others).
Seems like the same reasoning as why I would usually not use

condition
  ? operation1
  : operation2;

for side effects, especially in the return position:

// scary
return condition
  ? operation1
  : operation2;

// okay
if (condition) operation1;
else operation2;
return;
Thread Thread
itr13 profile image
Mikael Klages

Another note on the static variable, the name "is(..)Robot" implies it's meant to describe the state of a single instance of a class, while in most languages static would make it the same for all instances.

IE in c# you may have

public static bool IsKillerRobot { get; private set; }

Which would be as safe as any other property, but when a single robot is meant to turn killer, all of them would

Thread Thread
qm3ster profile image
Mihail Malo

Presumably we are in the runtime of a single robot, not a manager handling an arbitrary number of them, but I see what you mean.

Thread Thread
itr13 profile image
Mikael Klages

Fair point, seems I forgot programming is still limited by physical boundaries :-P

Thread Thread
qm3ster profile image
Mihail Malo

Yup, this is how you get hacks like this:
rust-embedded.github.io/book/perip...

Collapse
stargator profile image
Stargator

I would suggest they never have the kill() function. Just doesn't make sense to give a robot the ability to kill. :)

Thread Thread
qm3ster profile image
Mihail Malo

What if a criminal, or even a non-human animal is posing a threat to the owner? Shouldn't they kill(perpetrator)?

Thread Thread
mikeeus profile image
Mikias Abera

They should administerBearMace(animal)

Thread Thread
qm3ster profile image
Mihail Malo

Why would an android assistant for grannies contain bear mace?
Sounds scary.

Thread Thread
mikeeus profile image
Mikias Abera

Lol well why would an android assistant for grannies kill animals? No one is innocent here

Thread Thread
qm3ster profile image
Mihail Malo

Because the granny is in imminent danger, and it's the best effort it can make with the general purpose mobility functions.

Collapse
workmad3 profile image
David Workman

'humans' appears to be undefined, and it's either a missing closing } or poor indentation on the else clause.

So I'm surprised this compiled :)

Thread Thread
qm3ster profile image
Mihail Malo

it's either a missing closing } or poor indentation on the else clause

Butt where? :o

static bool isCrazyMurderingRobot = false;

void interact_with_humans (void) {
  if (isCrazyMurderingRobot = true)
    kill(humans);
  else
    be_nice_to(humans);
}
Thread Thread
workmad3 profile image
David Workman

Oops, my bad... I managed to insert braces around the clauses in my memory.

Collapse
kimmohito profile image
Kim Mohito • Edited

The obvious mistake is on if(isCrazyMurderingRobot = true),

We should use == to check if the variable is set
while using = to assign the value

I'm not sure in other languages, but I think you should have nested curly brackets {} for every if(condition).

The correct way to code is

static bool isCrazyMurderingRobot = false;

void interact_with_humans (void){
  if(isCrazyMurderingRobot == true){
    kill(humans);
  }
  else{
    be_nice_to(humans);
  }
}
Enter fullscreen mode Exit fullscreen mode

For more details, please check these descriptions (they are for the C# language, but the operators behave similar in other languages like PHP, Java etc

Collapse
onwsk8r profile image
Brian Hazeltine

I don't know anyone except the Ivy League crowd that's never felt like an imposter. But I can remember the exact second that I realized I was a real programmer. I hid in my cubicle because I was scared I was going to cry.

When you become a real programmer there will be no doubt in your or anyone else's mind. It's not about skills or syntax or anything like that. It's about quality. It's when you realize that you can solve any problem. Sterilize any mess. Debug any bug. You know that anything you make will not only exemplify world-class workmanship, but you will know the second it is truly complete. All it takes is 10,000 or so hours of deliberate learning - just ask Malcolm Gladwell :)

Collapse
not_helmet profile image
Evan Hellmuth

Hey, Ivy Leaguers get imposter syndrome too.

Your case sounds particularly bad, but you fought your way out of it. Way to go! It's always encouraging for people still going through it to hear a story like yours.

Collapse
molly profile image
Molly Struve (she/her)

What Evan said, Ivy Leaguers get it too!

I think a lot of people won't talk about it or brush it off instead of facing it head on. I would bet at in one way or another it happens to everyone! At some point we are all beginners. Even years into our career, if we decide to learn a new technology, we are back to being a beginner and having that feeling of flailing around aimlessly not knowing which way is up. But when you can push through that discomfort, thats when you learn the most. Coming out the other side is so rewarding.

Collapse
stefandorresteijn profile image
Stefan Dorresteijn • Edited

I don't think your second paragraph is correct at all. I've been doing this for 10 years, I have an easy 10,000 hours under my belt and I still don't feel like some sort of untouchable god of programming. I'm pretty decent but still make dumb mistakes, still get into messes and still spend endless hours debugging bugs I've never seen before. I still feel like an imposter whenever I'm working with people of equal seniority until we've worked together for a while and I feel better about what I know. Insecurity and imposter syndrome don't just disappear.

Collapse
itr13 profile image
Mikael Klages

I'm a bit confused, is the second paragraph an example of what the Ivy League crowd thinks?

Collapse
willglyles profile image
willglyles

Most powerful sentence: "I know a lot of people in tech who suffer from Imposter Syndrome"

I struggle with that. I didn't know this was a semi-widespread issue. It feels nice knowing someone else gets that. I graduated from a top CS school and the top of my class, and yet I feel that I'm quite unqualified for the majority of jobs. Any tips?

Collapse
molly profile image
Molly Struve (she/her)

One of the best things I did to gain more confidence was start teaching! By teaching others you solidify your own knowledge and it forces you to focus on everything you know. I bet you know a lot more than you think! You can do anything from teaching a younger dev at work to participating in pairing sessions setup by groups like DevTogetherChicago which might exist in your area.

ALSO, I highly recommend Code Newbie's Twitter chats on Wednesday evenings at 9PM EST. Their recent one was actually about confidence! Lots of people shared great ways to gain confidence. HERE is the chat if you want to check it out.

Collapse
raypaseur profile image
Ray Paseur

I love this article and the comment thread. For context, I'm 69 years old and enjoy both retirement and consulting these days. I have worked as a salesman, a photographer, a teacher, and a programmer. Here are my thoughts in no particular order.

I wish Donald Trump had at least a little Impostor Syndrome.

You are a photographer if you take a picture;
You are a professional photographer if you sell a picture;
You are a journeyman photographer if you can support your family selling your pictures;
You are a famous photographer if people look at your pictures and say, "That's gotta be worth a lot of money!"

You are a programmer if you write code;
You are a professional programmer if you get paid to write code;
You are a journeyman programmer if you can get a job writing code;
You are a famous programmer if you're Linus Torvalds or Taylor Otwell, etc.

Except for my years as a salesman, I know that my neighbor (a plumber) has always made more money than I have!

My best job ever was teacher, and teaching programming was so much fun -- you could light up a room with an "A-ha." Seeing the onset of insight in your students is the ultimate high.

Collapse
workmad3 profile image
David Workman

When I see 'I just glue stuff together' I take objection to 'just'... it trivializes things too much. It's not like a builder 'just' glues bricks together to build a wall, or a welder 'just' glues metal together, there's still the knowledge of how to do that in a way that doesn't immediately collapse and fits the purpose.

Collapse
andygeorge profile image
Andy George (he/him) Author

Totally agreed! And the work that goes along with learning how to "just" do these things is wildly non-trivial.

Collapse
karllhughes profile image
Karl L. Hughes

Hey Andy, thanks for the shout out to my plumbing article!

I felt like I wasn't a real programmer for the first couple years I did this too, and I even still feel like it when someone brings up monads, pointers, or one of the other million things I don't fully understand about our profession.

Anyway, keep up the writing and the programming. It's great that you're using your talents to inspire others!

Collapse
andygeorge profile image
Andy George (he/him) Author

Wow, this is very cool of you to say!! Thank you!

Collapse
niorad profile image
Antonio Radovcic

After I wrote my first C-program for templating files for both MacOS and Windows I waited for days for my "real programmer"-certificate in the mail. it never arrived.

So I don't know, really. I always say "programmer" when it comes up in conversation (in germany it's one of the first topics when meeting anyone new).

Does it matter?

It's not like it carries special privileges if true. Like "I'm a veteran" or "I'm a policeman".

("I'm a programmer" - "Oh, thank you for your service, here's a free coffee")

It's like someone wondering whether they are a "real plumber" or "real project-manager".

Come on, there's chiropractors calling themselves doctors ¯_(ツ)_/¯

As somebody trojan-horsing into the field as design-student-intern I think about this a lot. I still get fundamentals-panic every few months, where I realize how much I don't know. Some call it impostor-syndrome.

But those are the first steps to improvement. It started to get better when I first got a faint idea how a computer works from logic-gates to clicking the "X" on newsletter-overlays.

I have no point, just a few thoughts. Don't worry, be happy.

Collapse
jcabraham profile image
Jim Abraham

Everybody who cares about his or her craft feels like an impostor (not "imposter" -- you don't post things, is that it?). For example:

When Sonny Rollins got to hear, and be scared by, the mature Coltrane, he was Sonny Rollins -- he owed nobody anything. Nevertheless, the experience made him tear down his entire approach to musicianship and build it back up again. Because his next-door neighbor had a baby in the house, he woodshedded out on the Williamsburg Bridge. It took him over two years of rebuilding before he felt ready to play in public again (the album aptly titled "The Bridge", 1962).

If you're any good, you're always suspecting you're a fraud -- that's what drives you to keep learning.

Collapse
jordonr profile image
Jordon Replogle

I had that exact same attitude. I was working as a "Data Entry Manager," where I managed a team of guys to input product info for eCommerce sites. I would write small scripts and programs to speed up the job for everyone.

At a conference I was able to talk to one of the developers of Identi.ca and mentioned I made the ZipWeather bot for identi.ca. Told him I'm not a programmer, I just write scripts.

He told me what I was doing was programming and if I enjoyed it to keep doing it. Later I applied for a position as a full time developer and been doing since.

Collapse
ddaypunk profile image
Andy Delso

My name is Andy, and I am a real programmer. Thank you for saying what I had a hard time saying for a while. You and I have had very similar paths coming from Trustwave. I'm so happy to be programming a ton as a QA Engineer and continuing to grow as a programmer. I'm so happy you have received similar opportunities! Best of luck my dude.

Collapse
ekafyi profile image
Eka

Thank you!
I used to worry about this badly (still do sometimes, but much less often); I gradually realized that the "realness" of a programmer is all really arbitrary, varying by person and by trend (you're not a "real programmer" if... you build for the web, or if you focus on HTML & CSS, or if you do front end, etc etc).
I do not want to base my self worth on such arbitrary measures and as such I won't bother worrying about that.

Collapse
elijahbee profile image
Elijah Bee

Crazy how I've been going through this. Thanks for writing down my thoughts

Collapse
ggenya132 profile image
Eugene Vedensky

You know, I've always been okay with calling myself a programmer; calling myself a 'software engineer', as my official role describes, is where I start to feel the familiar creep and anxiety of imposter syndrome. I might be creating something I'm really excited about but even then as I'm solving problems, I'll be struggling with the inner thoughts of, "This is a naive solution, it won't scale...how would a real engineer solve this problem".

The obsession with performance and scalability in this industry kind of a toxic thing to carry as you're just making things for your own personal enrichment and goals. It's in times like these that posts like this one remind you that 'good enough' is often more than good enough.

Collapse
twop0intfive profile image
Chris

I echo the others who have said this already, but thank you for posting this. I recently moved into a systems analyst role within an application development group, whereas prior to this role I've spent my entire career in the telecom network support world. I have had severe impostor syndrome for the last several months but I'm trying to learn as much as possible so that I can also become a real programmer. I was pretty proud the first time code that I modified/pasted together/wrote a small part of was pushed to production, and I look forward to more of those instances.

Collapse
andygeorge profile image
Andy George (he/him) Author

That's super awesome to hear, and I'm SURE you'll have plenty more of those to look forward to.

Collapse
steelwolf180 profile image
Max Ong Zong Bao • Edited

I think everyone has a chip on their shoulder but we don't really show it to people.

For me, while I was studying in university, I never dream of myself being a professional programmer since I was literally drowning in school work losing my passion to be a programmer.

So directly out of school, I choose to become a salesman for a tech startup. Thinking since I can't code, I could do well by just being in the tech industry.

Luckily after multiple twisted and turns, I stumbled across that you can get a job as python developer using Django. That was my aha moment which I'm grateful that I'm developing professionally by using python till this day.

Collapse
socratesdz profile image
Sócrates Díaz

I think, if you're able to solve a problem by making a system solve it for you (or helping you), then you're a programmer.

Collapse
camto profile image
Benjamin Philippe Applegate

Real programmers flip switches to insert raw machine code.

Collapse
grepliz profile image
Liz Lam

As a person that built a career in QA for a long time and finally made the jump to development last year - I can totally relate! Thank you for posting this! My name is Liz, and I am a real programmer.

Collapse
sanwal_chaudhry profile image
Sanwal Chaudhry

Hi Liz, I am about to graduate in next 4 months. At the moment I do not feel comfortable to start my first job as a developer. This is because I started coding 6 months ago.I am not a computer science student. But my final project is completely related to software development. I took this because I wanted to become software developer. I take a lot of help from my senior colleagues. Even sometimes they write code for me. When the task is done by some other guy I feel very down and it hurts me. Right now I am thinking to start my first job as a Software tester and after working for 2 years I can switch to Development. I do not know will this work or not. As an experienced person what will you suggest me. ? Thanks a lot.

Collapse
grepliz profile image
Liz Lam

To be honest, if you want to work on product development, I would go for development jobs. With that being said, there are a lot of QA jobs that require coding skills (test automation, etc) and that can be a stepping stone into a product development role. What you are going through is totally normal. No one can know everything when starting off. It's a learning process.

Thread Thread
sanwal_chaudhry profile image
Sanwal Chaudhry

thanks :)

Collapse
quanla profile image
Quan Le

The industry is booming hotly, and yes, you are a programmer by industry standard. If there is someone who is a more worthy programmer than you, you can call him a Guru. :D

Collapse
marklocklear profile image
J. Mark Locklear

Thanks for sharing this Andy. It really spoke to me and promoted me to write medium.com/@marklocklear/i-am-not-...

Collapse
andygeorge profile image
Andy George (he/him) Author

This is so awesome! It's so incredibly cool to see others sharing the same sorts of experiences.

Collapse
phlash909 profile image
Phil Ashby

This. Every single time: xkcd.com/1053/ :)

Collapse
drylabrebel profile image
Geoff English

Awesome.