J
jehugaleahsa
Hello:
Should the average programmer, like a full-time programmer, know when
to use a Binary Search? Should a serious programmer at least know what
it is? Not so much the name, but at least how it works...?
My opinion is that anyone who spends the majority of their work day
writing code should know what a binary search is.
Should they know when to use a Dictionary? I think they should.
I know a lot of people think that you shouldn't expect a programmer to
know trivial things. However, I don't think data structures and
algorithms are something you can really afford to overlook. Sure, I
don't expect someone to be able to implement them, but I do expect
them to know _when_ to use them.
You can't even get out of a decent CS program anymore without learning
the basics about such things. Maybe I'm being biased because of my
background... but I don't think so.
I know this sounds harsh, but when my company is trying to hire a full-
time programmer, we get a lot of candidates who come from a background
of short-term jobs. Their experience usually involves small projects
written in interpreted languages. When you are looking for someone
with experience in a language like C++ or C# and you need them to have
basic skills in software design, it is really frustrating to get a lot
of desperate, out-of-work hackers (essentially). I know that most of
the community is made up of such individuals and I am not
disrespecting them. These individuals do have their place in the
computer industry. I just wish there was a better way of filtering
them out from our searches (to avoid the bad feelings and wasting
everyone's time).
We have had candidates that could answer any C# question you throw
their way. They might even have a certification in C#. However, when
you ask them questions about their understanding on things like
software architecture, design patterns, etc., you get shaky answers.
You really can read all the GoF books in the world and only _think_
you understand. Unfortunately, their correct application requires
experience... lots of it.
So how can you tell if someone is knowledgable... and experienced? Is
it wrong for us to disregard someone because they aren't familiar with
the tools in our environment? We need someone who can hit the ground
running. We can't afford to waste the time to teach someone how to
program in Visual Studio and C#. We can't afford to redo all of their
work because they don't understand the principles behind our
development process and coding standards. I don't think we are being
unfair, by any means.
Another hard question is: if someone is very knowledgeable about C#
but doesn't have first-hand experience with design patterns and
software architecture, can we bring them up to speed? I was given that
chance and I am all the better for it, and I hope I've been more of a
grace to my company than a burden.
I guess I'm partly being paranoid. I have to relinquish some of my
control and trust someone else's work. I can't expect someone to come
in and know everything. It's so hard when you're the one on the
opposite of the table.
It would be nice to find someone who had read these books:
Gang of Four (maybe)
Patterns of Enterprise Architecture (definitely)
Applying UML and Patterns (preferrably)
xUnit Test Patterns (maybe)
They literally changed the way I program. They are also really long
reads. There are also some books that are equivilent. The information
they contain is what we really need. Unfortunately, I think most
people who understand these books are getting paid a lot more than we
can afford to pay. I can always lend these to whomever we do hire.
Big SIGH.
Should the average programmer, like a full-time programmer, know when
to use a Binary Search? Should a serious programmer at least know what
it is? Not so much the name, but at least how it works...?
My opinion is that anyone who spends the majority of their work day
writing code should know what a binary search is.
Should they know when to use a Dictionary? I think they should.
I know a lot of people think that you shouldn't expect a programmer to
know trivial things. However, I don't think data structures and
algorithms are something you can really afford to overlook. Sure, I
don't expect someone to be able to implement them, but I do expect
them to know _when_ to use them.
You can't even get out of a decent CS program anymore without learning
the basics about such things. Maybe I'm being biased because of my
background... but I don't think so.
I know this sounds harsh, but when my company is trying to hire a full-
time programmer, we get a lot of candidates who come from a background
of short-term jobs. Their experience usually involves small projects
written in interpreted languages. When you are looking for someone
with experience in a language like C++ or C# and you need them to have
basic skills in software design, it is really frustrating to get a lot
of desperate, out-of-work hackers (essentially). I know that most of
the community is made up of such individuals and I am not
disrespecting them. These individuals do have their place in the
computer industry. I just wish there was a better way of filtering
them out from our searches (to avoid the bad feelings and wasting
everyone's time).
We have had candidates that could answer any C# question you throw
their way. They might even have a certification in C#. However, when
you ask them questions about their understanding on things like
software architecture, design patterns, etc., you get shaky answers.
You really can read all the GoF books in the world and only _think_
you understand. Unfortunately, their correct application requires
experience... lots of it.
So how can you tell if someone is knowledgable... and experienced? Is
it wrong for us to disregard someone because they aren't familiar with
the tools in our environment? We need someone who can hit the ground
running. We can't afford to waste the time to teach someone how to
program in Visual Studio and C#. We can't afford to redo all of their
work because they don't understand the principles behind our
development process and coding standards. I don't think we are being
unfair, by any means.
Another hard question is: if someone is very knowledgeable about C#
but doesn't have first-hand experience with design patterns and
software architecture, can we bring them up to speed? I was given that
chance and I am all the better for it, and I hope I've been more of a
grace to my company than a burden.
I guess I'm partly being paranoid. I have to relinquish some of my
control and trust someone else's work. I can't expect someone to come
in and know everything. It's so hard when you're the one on the
opposite of the table.
It would be nice to find someone who had read these books:
Gang of Four (maybe)
Patterns of Enterprise Architecture (definitely)
Applying UML and Patterns (preferrably)
xUnit Test Patterns (maybe)
They literally changed the way I program. They are also really long
reads. There are also some books that are equivilent. The information
they contain is what we really need. Unfortunately, I think most
people who understand these books are getting paid a lot more than we
can afford to pay. I can always lend these to whomever we do hire.
Big SIGH.