Software Engineering, Part 4: Always Be A Student

In this multi-part series, I look at software engineering as a separate discipline from Computer Science. For the software professional’s daily practice, I believe SE is a better degree, and I explain why. I decided to pursue a master’s degree in SE as opposed to CS. Earlier posts are found at:
Part One | Part Two | Part Three | Part Four
| Part Five | Part Six | Part Seven

50146_math_sm

A few years ago, I began feeling inadequate. I’d been a web developer in a corporate Java shop for about six years. There was so much I had learned, but also so much I still didn’t know or understand. I had hit a point where I was realizing more and more the things I didn’t know. We were still using Java 1.4, though we had a couple sites on the latest version of ASP. I felt I had both the ability and the capacity to take on more, but I didn’t know how. When I had to come up with something even though I had never faced the problem before, I did. But in my job at the time, I didn’t feel that there was much opportunity for that.

It was a great job, too. Although the pay was just alright, the benefits were amazing, including a huge retirement benefit that was paying a lot, and full-time working from home which was great since my son was still a baby.

I decided that in spite of all of that, I wanted to be a professional and I wanted to try to fulfill my potential ability and capacity. My idea of how to become a better developer was to get another job that would be more challenging. I applied for a senior developer position and got the in-person interview shortly after that. In my mind, senior developer made total sense. I’d been a developer for awhile. Time to move up.

In the interview, I could sense that something wasn’t quite right and I became more and more nervous. A question that the interviewer had said would take five minutes took me twenty-five minutes, and the interview went longer than expected. I was embarrassed to admit that I hadn’t worked with generics except in one personal side project, because we mostly used Java 1.4 at work.

Thankfully, the hiring manager giving this interview was extremely polite, besides the raised eyebrows. But I kind of wish he had laughed in my face or sat me down and told me the truth about myself: I was far behind the crowd. In the spectrum of developers, I was in the bottom tier. My job was not representative of the industry or the technologies in use out there, and I lacked knowledge, preparation, and skills that even some junior developers had. If you had asked me about things like design patterns, callbacks, functional programming, or any number of other important topics, I had only a hazy understanding, if I had any understanding at all.

That was when I made a couple resolutions:

  • Become a professional developer, which required…
  • Determine what I need to know, which required…
  • A new philosophy: always be a student

I’ve been operating from these principles for a few years now. This is what led me down the rabbit hole toward software engineering. It’s why I read Professional Software Development by Steve McConnell (which I highly, highly recommend). At first, I didn’t just jump into the thought that I’d go out and get my masters degree. Actually I looked into several certifications. I am not going to bother covering it here, but I first considered getting some certifications in specific languages and technologies. Then I thought about studying for and getting my CSDP. Finally, I decided that some more serious investment over a longer period of time would be more beneficial.

So now I’m the kind of guy that takes Robert C. Martin’s line of questioning seriously (the one I quoted in part 3 of this series):

Do you know what a Nassi-Schneiderman chart is? If not, why not? Do you know the difference between a Mealy and a Moore state machine? You should. Could you write a quicksort without looking it up? Do you know what the term “Transform Analysis” means? Could you perform a functional decomposition with Data Flow Diagrams? What does the term “Tramp Data” mean? Have you heard the term “Conascence”? What is a Parnas Table?

I’ll explain a little more about why someone would take that seriously in upcoming posts.

Leave a Reply

Your email address will not be published. Required fields are marked *