Monday, November 28, 2011

On Chess, Design Patterns and The Dying Art of Programming

Chess is probably one of the best game or sport to instill discipline and sportsmanship: you win or lose not because you did or didn't listen to and followed the counsel of your coach, but because of the choices you made. While basketball has Michael Jordan as its greatest player, billiard has Efren 'Bata' Reyes and Edison Arantes do Nascimento, better known as Pele, is the best soccer player of all time, chess has the late Bobby Fisher. It's notable that of the sports greats I mentioned, chess again stands unique: its greatest and most popular representative has already passed away.

For buzzwords, chess has names for certain move or combination of moves like Ruy Lopez, Sicilian, Najdorf Sicilian, King's Indian Defense, Grunfeld Defense, Neo-Grunfeld Defense and Nimzo-Indian Defense to name a few. Sophisticated as they may sound, they won't and shouldn't matter if we don't win the chess match. In our parallel reality on software development, buzzwords practically run amok and one of the most popular as of this writing is design patterns as a result of the effectiveness of object-oriented programming. I have observed many colleagues are very well versed on the design pattern philosophy and it has served their purpose well.

Critique of Design Patterns
What's so special about data structures and algorithms anyway? They're basically the building blocks of programs we develop with consideration for fast processing of
Thinking of software problem solving in design patterns has obscured data structure and algorithm analysis and design to practical oblivion. Rarely is the occasion that I meet new developers who appreciate data structures and algorithms enough to understand them and further know them. Tragically, data structure and algorithms nowadays for younger generation of developers are ancient knowledge that can be simply copied and pasted off Google or other open-source project hosting website with little to no understanding of the rationale behind the technique.

It's a sad fact that knowledge and appreciation of data structures and algorithms are a dying art. Your approach on what data structure and algorithm will spell the performance and correctness of result, not the design patterns, like in chess that your decision, not the specific move patterns, will determine your victory. In contrast, design patterns make software solutions canned in a set of code patterns that have no direct bearing to coming to a solution, they obscure data structure and algorithm analysis and development that have direct effect on what results we need.

Another tragedy is the study of data structure and algorithm in programming languages insulated from the hardware, like Java. I have to clarify that I have no personal grudge against Java developers, some of my colleagues who are Java developers by profession I think are top-notch in their field, but learning data structures and algorithm in Java is like learning survival by playing first-person shooter games; they may be nearly realistic, but still far from reality, thus not worth it in the long run.

Ask the Doctor
If there's one thing I have always dreamed to have since 1990s that I finally got thanks to my youngest sister as a birthday gift and I would recommend you should also get your hands on, it would be the item I mentioned in a previous article: Dr. Dobb's Essential Books on Algorithms and Data Structures CD-ROM Release 2. I would have ended this post with a recommendation to get it from the Dr. Dobb's Journal website, unfortunately I can't seem to find Dr. Dobb's CD on data structures and algorithm in their online store now.

Is my hunch true that data structures and algorithms are dying knowledge? Haven't we last seen the last of coding horrors?

1 comment: