How many times have we all encountered that dangerous programmer? The one that thinks that programming is all about him. That programming is a creative outlet for him to do whatever he wants – regardless of its impact on others. The one that assumes that you can’t live without him and his creative genius. The one that writes code under the mantra “if it was hard to write, it should be hard to understand.” The one that lays booby traps and time bombs so that if anything should happen to him (such as loss of his job, which he’s accustomed to due to his outlook), his code goes with him.
These types, while few and far between, amount to little more than a form a cyber terrorists.
And while I understand that those are harsh words, I do not say them lightly.
I am highly opinionated on the subject of coding / programming / software development / software engineering, and for good reason. I’ve been in the trenches since 1979, doing this for a living – at every level, from punk-kid-who-has-to-earn-respect, to managing a large group of programmers, to architecting large systems and defining standards for others to follow. I’ve seen the best, and I’ve seen the worst. And along the way, I’ve learned TON’S – both good and bad. I’ve learned from my own mistakes, and I’ve learned from the mistakes of others. I’ve changed my way of thinking about software development as a process and as an activity.
And I’d like to share my thoughts, my experiences, my rules (either created by me or adopted from others – if they’re useful to you, feel free to adopt them as your own), my pet peeves, my philosophies, etc.
As a start, I’d strongly encourage you to check out both the acm and the IEEE Computer Society, and consider the value that their publications and their organizations might have to your personal and professional growth.
Then, look at the Software Engineering Code of Ethics and Professional Practice which is a recommendation by the ACM/IEEE-CS Joint Task Force on Software Engineering Ethics and Professional Practices and jointly approved by the ACS and the IEEE-CS as the standard for teaching and practicing software engineering.
Make a decision, right here, right now – if you haven’t already – to become the best software developer you can be. Cast aside all your preconceptions and your whiney rants about particular practices being hard, or taking to long, or stifling your creativity, or whatever, and decide to embrace the best practices you can for making your code the best that it can be (both to your eyes and other’s). Decide to enrich and extend the science and the art that is Software Development, and to contribute usefully to your craft, enabling others to benefit also from your experience (the good, the bad, and the ugly). Decide (actually, recognize) that Software Development is a Profession and not just a job. It requires and demands you to to devote yourself to a lifelong study, maintenance, and mastery of the intricacies of the machine, the language, the science, the art, the magic, the engineering; everything there is to know to make yourself worthy of the calling. If you’re not willing to do that, you will forever relegate yourself to a coder at best – someone that can throw together lines of code to produce a desired outcome – and never rise to the challenge and reward that is a Software Engineer in the truest sense of the word. You will limit your personal growth, your professional growth, your income, and your enjoyment of the practice.