Update to Post Regarding Hacking & Ruby
Labels: Bad Design, Dynamic Languages, failed language implementation, Python, Ruby, Speed
Labels: Bad Design, Dynamic Languages, failed language implementation, Python, Ruby, Speed
Recently I’ve had the misfortune of being exposed to a multitude of software packages constructed in PHP and I have to say that I am very disappointed. I’m not talking about the language specifically as it is capable, even though I don’t particularly care for it. I’m talking about code that unless run in absolutely perfect conditions (a.k.a. the developer’s box), the code fails to work as described by said developer. This point alone stresses the importance of proper testing and the benefit of peer-based code review.
I have noticed this issue as being more common in what I refer to as the ‘lazy languages’. These are your weakly typed dynamic languages, specifically those lacking any real enforcement of data constructs, and lacking proper exception handling. The lack of these two key language features don’t necessarily cause bad coding to transpire, but what they do is allow poor programmers (and non-programmers alike) to continue on with poor practices because nothing (on the compiler/interpreter end of the code) will dare to call said programmer(s) on his/her problems. Careless coders will naturally gravitate to these languages as it lets them continue to live in their own little make believe world, the world in which they are competent coders and/or designers.
This isn’t to say that there aren’t good or even great coders that didn’t start out in the same manner as mentioned previously. It is all part of the learning process through which we grow. This isn’t exclusive to coding obviously, but it most definitely is applicable. The most important point which I need to stress is that recognising poor habits and working to eradicate said habits is paramount to becoming a better coder. Don’t wait, act now. The code you save may be your own.
Labels: Bad Design, PHP, Poor Programmers
Now that a little over a week and a half has passed at my new place of employment, I find that I understand my new environment enough to make some observations in a not-too-specific manner out of respect for my new employer.
First let me state that all of the existing software is a product of its environment and that it all functions as it was intended. That being said I’m able to say with a clean conscience (after that little preamble) state that the code was ... lacking.
I am thankful for this to some degree. For one thing it provided an opportunity for employment at a place I enjoy with some very intelligent individuals who all seem to have their own special abilities and areas of expertise.
More importantly though, I’m thankful because it places me in a situation I find most mentally stimulating. It makes me re-think an entire existing architecture and being that I have held the role of Software Architect (amongst others) for much of my professional life, it is all the more appropriate.
It is one thing to walk into an new environment with a clean slate in which one may design to their heart’s content, yet another wholly different situation when the software exists in a production environment of one form or another. There are so many more facets with which to deal when the database structure and all of the depending software is tightly build upon that aforementioned code base.
The whole point of this rambling is that my first week and a half has passed and while I have done much more with the database redesign, class design, object handlers, etc., I have finally been able to enjoy that great feeling which comes when turning previously un ‘strict’able perl code into a fully compliant piece of code. I might also add that I ensured the code conformed within the guidelines of Damnian Conway’s “Perl Best Practices” book, which while a little different than my own manner of laying out perl code, is wonderful none the less.
Now that this honeymoon is over, I can move onward and upward to greater code causes to champion, and based upon the intents of the owner of the company I don’t doubt that there will be a wonderful logic requiring plethora of future projects for which I am to contend. I only hope that others out there are as lucky in their endeavours.
Labels: Bad Design, Best Practices, Coding, Methodology, Objects, OOP, Perl, Strict