The other day, I ran into the idea of The Programmer Competency Matrix. Which as I scrolled through the various categories and read the various rows I realized: Wow. I am not very competent.
Except for Software Engineering.
I am level 3 in all categories of Software Engineering except for testing, where I’m a solid two (UI testing would be new to me). I would probably be a Level 1 in all Computer Science categories.
And I’m completely OK with this.
I’ve had a lot of folks ask me while I was live streaming heavily how to get better at programming. And if this matrix is any indication, I’m the wrong person to ask.
Now I think the question they were really asking is how do I feel more comfortable navigating my programming language’s API or be better at integrating third party libraries…
But if the question they were asking is how do I better prepare myself to get hired, I would respond with the following:
As a (now) working Mechanical Engineer, very little of my day job requires engineering. I’m working in supplying spare parts, which is the perfect physical analogy to maintaining existing systems. My only job is to not break it and keep it running. The design engineering has already been done.
I would argue that most software jobs are similar. Keep the system running and don’t break it.
And when you’re trying to do that, documentation and process become the most important steps. What is this? Why did it break? When I fix it, will someone else understand what I did? Additional software engineering terms, how do I commit changes? Who approves them? What testing needs to be done? Or types of tests written?
These types of questions will take up more than binomial or Fibonacci heaps [data structures, level 3].
What do you think about the debate of Software Engineering vs Computer Scientist? Let me know in the comments below.