5 Reasons Learning Terminology Increases Your Effectiveness [As A Programmer]

image

A couple of weeks ago I wrote a post “7 C# Interview Questions to Weed out Losers” which was my most popular post yet.  As of this writing, it has received over 13,000 views.  It also got a lot of comments.

While there are a lot of things I could respond to, the one I want to focus on today is what I would call, “The fallacy of concepts over terminology.”

While none of the comments actually come out and say this, several imply that knowing the concept but not knowing the proper term for it is enough.  In conversations with people I’ve worked with, I’ve received similar feedback.  In fact, as recent as three years ago I actually told someone, “If you want someone who can pass some sort of test, I’m probably not your guy.  If you want someone who is an awesome programmer, I’m your guy.”

But three more years of experience has changed my mind.

Knowing the Proper Terms Clarifies Communication

“’When I use a word,’ Humpty Dumpty said, in rather a scornful tone, ‘it means just what I choose it to mean — neither more nor less.’” – Through the Looking Glass, by Lewis Carroll

Here are just a few examples of how knowing what a term actually means helps communication:

As I’ve written before, I’ve been using Sencha’s EXTjs at my day job.  When I first started using this environment, the first thing I was told was that it uses the “MVC Architecture.”  Now, to me, MVC has a very specific meaning and more importantly implies certain qualities about how the code should be written.  Primary among them is that the Model, View, and Controller are loosely coupled.  Anyone who has used EXTjs 4 knows this is not necessarily true.  What they call the “Controller” is more accurately called a “ViewController” but even then, it isn’t really.  You can’t have a controller without having a view, which makes the whole thing quite hard to test.  This whole mislabeling thing set me back about two weeks in my attempt to learn the framework.

Another example from my work place.  We’ve created our own ORM to access the DB2 database we have to work with.  Why?  Because DB2 doesn’t play nice with Entity Framework.  But here again, I was told that this code implemented a design pattern that it doesn’t really implement.  Since the number of times I have to interact with this code is trivial, it was not as costly to my learning.  But it did cause confusion.

Probably the most notable misuse of a word in our industry is the word “Agile.”  As I’ve been interviewing, I’ve run into a lot of companies who call themselves “Agile” but I’ve found that what they mean by “Agile” is very different from how the Agile Manifesto defines Agile.  In fact, one of the questions I ask during the interview to companies who have promoted themselves as “Agile” is, “How do you define Agile?”  One of the first places I asked this question replied, “Oh that just means we program iteratively.”

So, knowing the proper term for a concept, makes your communication clear.  But that doesn’t explain why I expect someone I’m interviewing to know the term I’m using.

Knowing the Proper Term Shortens Communication

Way back when I was first learning object oriented programming with C++, someone asked me what polymorphism was.  I couldn’t answer because I’d never heard of the word or hadn’t taken the time to find out what it means.  I can’t remember exactly.  But I had the same reaction many of you did.  “I know what virtual functions are and I know how to give a function multiple implementations by changing the signature, I just don’t know the word for it.”

But you see, it is much easier to ask, “What is polymorphism?”  Than it is to ask, “What do the keywords ‘overridable’, and ‘overrides’ do?”  And then have to follow up with “what does the ‘new’ keyword do when placed in front of a method declaration?”

Spoken languages have terms for the various parts of speech.  If you are a programmer, I’m sure you know about this, even if you can’t name them.  But, let’s say you were a professional writer or an editor.  You probably wouldn’t be able to even get a job if you couldn’t talk about the various parts of speech using the proper terms.  And yet, many of us expect that we should be allowed to write code without having the same ability.

Which leads to my next reason.

Knowing the Proper Term Aids in Learning

My family is a languages family.  My wife knows English, French, Latin (from teaching the kids), and Biblical Greek.  My daughter was an English major and learned Latin during High School.  My oldest son, knows English, Latin, Greek, and a bit of German.  My youngest son knows English, Latin, a bit of Greek and German.  I barely know English well enough to get these post written every week.  Which gives me a unique perspective.

What I’ve learned as I’ve watched my family play with languages is that because they know the parts of speech in the various languages, as they pick up a new language, they can talk about a word being in a particular tense, or case, or whatever and everyone knows exactly what they are saying, making it that much easier to pick up a new language.

In fact, while my son was learning German in High School, he would come home and talk to his mom and sister in German and they would be able to make out most of what he was saying because they had enough back ground in other languages and when they didn’t know something they could talk about it using the terms for the various parts of speech.

This was true for me as I moved from C++ to Java and then to C# and VB.NET.  Because I already knew what polymorphism was, all I needed to know was the mechanisms in the other languages that made that feature happen.

If You Know the Terminology, You Probably Know the Concept

One of the complaints I got specifically accused me of asking questions that only proved that the applicant could pass a test.  And this is true.  If all I were to ask were these questions, this would be a bad interview indeed.  But here’s what I’ve found.  Most of the time, if you can answer the questions I’ve asked in that article, you are much more likely to be able to answer the questions I really care about.  “Are you a hack, or do you really know what you are doing?”

The market is flooded with programmers with less than 5 years of experience being presented by recruiters who know nothing about programming.

Using the metric of charity over what I see coming in for interviews, here is what I think is happening.

Recruiter sees an applicant that has most of the buzzwords on his resume that the company they are recruiting for is looking for.  But they are missing a critical buzzword, so the recruiter adds this prior to passing the resume on.

Having been on a lot of interviews over the years, I have to assume that this works enough of the time to make it worthwhile because there are some places that I’ve interviewed where I haven’t had to prove I was technically capable at all.  In fact, I’ve been on a few interviews where the resume they have for me doesn’t look anything like what I gave the recruiter.

And so, those of us on the receiving end of this have to have some quick way of determining, “do you know anything?”

Knowing the Concept Isn’t Enough

Keep in mind, I used to think that knowing the concept WAS enough.  But what I’ve come to realize is that if I know a concept but I don’t know the proper terms for it, I probably don’t know the concept as well as I could.  Sure, I can write code all day long.  But, it doesn’t mean I will write the best code that I can.  It just means that I’ll get the job done.

But once I spend the time to learn not just the concept, but the words that describe the concept, I’ve become a student of my craft.  I’ve proven that this is more than a job.  I’ve become a true professional.  Anything less and I’ve proven that I’m a really good hack at best.

I realize that this may offend some of you.  So, let me soften this.  I’m not saying you are a bad programmer if you don’t know the proper terms for what you are doing.  What I’m saying is you aren’t as good of a programmer as you could be.  And for those of you who might disagree, the question I have to ask is, “how do you know?”  If you are still defending not having to know this, I have to make the assumption that it is because you are happy not knowing the terms.  Meaning you have nothing to compare where you are to where I am proposing that you should be.  Why not try becoming a student of programming and seeing for yourself if what I am saying has any merit or not.

7 JavaScript Interview Questions [To Weed Out Imposters]

image

Last week, I posted 7 interview questions for C# programmers.  I guess I forgot that people can’t see in my brain.  So, let me be very explicit this time.  The “weed out the losers” questions are meant to do just that.  Weed out people who have absolutely no business even applying for the job.

You would be amazed at how many people interview for a job who have all kinds of cool buzzwords on their resume, but when you ask them about it, they know nothing about the subject.  I’m not sure if this is the recruiter who is representing them trying to help them out by beefing up the resume to get them in the door or if they actually do this themselves.  But, as someone who interviews, I have to have a way of making sure the applicant I’m interviewing is worth interviewing in the first place.  Hopefully, I can do this over the phone in less than a half an hour.

So, with that said, if your favorite question isn’t on this list, it is probably because it is a question I would save for some future interview.

Also, to those of you who may think that a technical interview doesn’t really tell you if the programmer is a good programmer or not, I have this to say…

You are right.  And when I was a younger programmer and was being interviewed with technical questions, I felt the same way.  But now that I’m on the other side of the table, I find that way too often, the people who can pass a technical interview are a lot more likely to be good programmers than the ones who can’t.

And finally, I would not rule out an applicant because he got a couple of questions wrong, or didn’t answer them exactly the way I expected.  But if couldn’t answer most of them, that would raise a huge red flag!

So, here are 7 JavaScript Interview Questions you should ask first.  Otherwise, you may be wasting your time. Continue reading “7 JavaScript Interview Questions [To Weed Out Imposters]”

7 C# Interview Questions [That Weed Out The Losers!]

image

So, once again, the place I am currently working has been interviewing for some more programmers and we’ve had to laugh at some of the answers we’ve received on some pretty simple question.

For example, in answer to “How do you create an object in JavaScript?”  One applicant responded, “I always use the WHERE keyword.”  What?!!!

And that naturally got us all talking about good interview questions.  How can we tell that the applicant is even worth interviewing?

The following questions are not meant to be THE interview.  The questions are meant to shorten the interview process by ensuring the applicant has a basic understanding of the language they will be expected to work with.

Continue reading “7 C# Interview Questions [That Weed Out The Losers!]”

15 Ways To Write Beautiful Code [That Have Nothing To Do With Testing]

image

I got a question this last week that I answered very briefly but I felt that to answer it completely would take a blog post.  So here’s the blog post.

Should the author of a piece of code be responsible for more than just unit testing, or does peer review have a play?

Continue reading “15 Ways To Write Beautiful Code [That Have Nothing To Do With Testing]”

Testing EXTjs with Selenium using C#

image

For the last two years, about 99% of the work I’ve been doing has been JavaScript programming using EXTjs.  The problems I’ve encountered along the way are primarily related to testing.  Writing unit test using the “MVC Framework” out of the box is nearly impossible, but I did eventually put together an architecture that allows me to do that.  I may blog about that in the future.

Today, what I want to offer is how I overcame various hurdles related to testing EXTjs with Selenium.

Continue reading “Testing EXTjs with Selenium using C#”