The perception of wrong
During the last days I’ve been facing new challenges and practicing a few algorithms using mainly Hackerrank, but not exclusively. At least 3 of those code challenging websites has the same methodology to asses code submissions. They give you a problem and few tests for you to prove if your code works as expected, but once you submit your code it will run more tests and then you realize your mistakes. This process caught my attention and I’ve decided to write about it.
So, let’s take a step back and think about how we conceive a solution or at least what are the popular methodologies to do this.
- TDD: Test driven development, Red, green and refactor. Write a code which fails, fix it, refactor then do it again.
- SOLID: Single Responsibility, Open/Close, Liskov, Interface Segregation and Dependency Inversion.
All of this will drive us to develop software well architected, simple to extend and easy to maintain, AWESOME!
It’s not my intention to sentence these famous methodologies of having this conceptual lack. I’m just trying to put some lights at this particular moment on conceiving a module, class or function, saying that to just rely on these methodologies is not enough and this is so evident that we are seeing these websites taking advantage of this.
The reason why they took advantage of that is that we developers have been developing software with a misconception of what is wrong.
So, my point is, we waste too much time thinking to solve design problems and end up evaluating the correctness of our code only based on how easy my class is extensible, but if we stop and think, we are extending garbage.
The most important thing we have been neglecting is the algorithm complexity. We left this subject for those guys who work at unicorn companies, who create libraries and frameworks, then we become a simple developer who just put pieces together without realizing what is going on under the hood.
Next step, you must understand the common Algorithms and Data Structure, I recommend this module at Hackerrank.com the most important challenges have a short video by Gayle Laakmann McDowell, author of Cracking the Coding Interview, explaining the concept and how to solve those challenges. The list below will help you on your studies:
Let’s review it. I assumed we developers, switch our studies from the fundamental (but not weak) concepts of Computer Science to Software Design, both are important but must not neglect one in favor of another, a well-designed software will not overcome the algorithms complexities by its own, at the same time you are thinking on how long an ID attribute is, also think if your software will stand up when your system reaches your estimation.
I hope you have improved your perception of wrong.