Naive Programming: The mark of plebs?
Now that I am finding
my stride a bit more as a developer, I have noticed that this
unexplained need to prove just how clever you are as a developer.
After spending (wasting?) several months worrying about if I was
“clever enough”, I noticed that a disturbingly large number of my
peers have the overwhelming need prove they are, indeed, more clever
than the programmer sitting next to each other. Watching these
battles, is somewhat akin to witnessing two scrappy cats duke it out
over their food bowl. I find this trend
is even more puzzling since these programmers, like myself, only have
a few years of work experience in programming.
Recognizing that I
could benefit from some more consistent programming techniques, I
decided to do some digging on various programming styles. With the
help of various Katas and a couple Test Driven Development classes at
Codaisseur, I stumbled upon
Naive Programming.
Naive Programming is
exactly what it sounds like: finding the simplest, most straight
forward approach to solving an algorithm. When the course instructor
suggested using this approach, I was definitely intrigued. I mean,
shouldn't I be flexing my muscles to find the clever approach? The
other half of my pair programming team wasn't having it “There is a
better way to do it”, so I let him drive and I took the opportunity
to observe and learn from a “cleverer” programmer. By the time we
left for the day, the code was filled with bugs and I had a hard time
following all of the loops, mappings, conditionals, and indexings,
let alone why they were being used.
With the help of
exercism.io, I decided to check out Naive Programming and was
pleasantly surprised by the outcome. However, when I consulted
professor Google, it was clear by the number of programmers calling
Naive Programming unsophisticated or implying that they are not
worthy of being in production codebases, that this technique was
apparently beneath any self respecting coder.
Now I get that this
technique may not be the optimal solution, but I believe that,
particularly for those of us who have enough experience to really
make a mess, but not enough experience to always see the full extent
of the potential fallout, Naive Programming is a great tool.
Why you ask? I'll give
you 5 reasons:
~ It gives you a
starting place
I have always
struggled to find a starting place when it comes to writing
algorithms. My brain just seems to freeze and then I begin this
existential crisis about whether or not I will ever “prove”myself
as a coder because I couldn't solve this single, insignificant
algorithm. Naive coding solves this issue. It gives me a starting
point every time, without fail. Break down the problem and just make
the solution work. It doesn't matter it is clever, elegant, or
perfectly written. Does it work? Great.How many times have you looked at legacy code and thought WTAF is going on here? You dive in and after a trip down the worm hole of time, you come back up only to discover that the same issue could be solved in a couple of extremely simple lines. In my relatively short time developing, I have seen it more than once. If the original coder had reached for the simplest solution, it would have been much easier for his or her successor to understand what was going on, and maybe, just maybe, you wouldn't be looking at the code for bugs.
~ It helps you
breakdown predefined methods.
~ It gives you the most flexibility to evolve your solution
When I started developing, I was introduced to this lovely infographic
What I didn't realize, is that my solution will never be the same as my colleagues, and even amongst us developers, our interpretations can be VERY different. As a result, I have developed two reflexes. 1.) Check in with my senior often, which I know can feel like overkill, but I am inherently lazy and this saves me a lot of time rebuilding and him a lot of time telling me what isn't what he pictured, explaining what needs to change, and re-explaining what he envisioned from the beginning, in a language that isn't his mother tongue. 2.) Keeping the solution as simple as possible. The simpler my solution is, the easier it is to modify, and the the easier it is to part with. It's also easier for my colleagues to build off of or modify.
When I started developing, I was introduced to this lovely infographic
What I didn't realize, is that my solution will never be the same as my colleagues, and even amongst us developers, our interpretations can be VERY different. As a result, I have developed two reflexes. 1.) Check in with my senior often, which I know can feel like overkill, but I am inherently lazy and this saves me a lot of time rebuilding and him a lot of time telling me what isn't what he pictured, explaining what needs to change, and re-explaining what he envisioned from the beginning, in a language that isn't his mother tongue. 2.) Keeping the solution as simple as possible. The simpler my solution is, the easier it is to modify, and the the easier it is to part with. It's also easier for my colleagues to build off of or modify.
~ It requires you to
thoroughly understand the problem at hand.
What about Naive Programming only providing a blanket case solution, you say? And I would agree with you there, but (because there is always a but) I would also argue that if you truly understand your problem, and its caveats, that solving that problem in a clear and simple way should pose absolutely no issue. Perhaps using Test Driven Development?
Go on. Give it a whirl. Give exercism.io a little site traffic and see what you think.
What about Naive Programming only providing a blanket case solution, you say? And I would agree with you there, but (because there is always a but) I would also argue that if you truly understand your problem, and its caveats, that solving that problem in a clear and simple way should pose absolutely no issue. Perhaps using Test Driven Development?
Go on. Give it a whirl. Give exercism.io a little site traffic and see what you think.
Comments
Post a Comment