IT Professional vs IT Literate
Today, the ability to write computer code is no longer purely the domain of the IT professional. With the prevalence of IT in the workplace, mobile apps and common scripting on websites, it is being taught earlier in schools and some believe it will soon become as important as English and Maths when looking for jobs and further education.
Despite this, IT professionals need not worry for their jobs. English and Maths qualifications are largely necessary for many jobs and are taught as core subjects in schools. Not everyone who graduates is a best-selling author or competing for work as a maths professor. I feel that being able to code is indeed like being able to talk a language or learn a skill. Being able to do write and understand a language may help you in everyday life but it does not make you a professional in that field. This applies to actual native languages, legal speak, medical terminology or programming languages, you need more than a basic understanding to be a professional. You need depth of knowledge and a passion for your craft.
Think of developing with code like other engineering or architecture disciplines. Software engineering is an uncool term today, but I believe it still helps define what we should be striving for. We can all cut materials, stick them together and maybe some of us can even fix a broken toilet. An engineer would know all about suitable materials, their properties, strengths and weaknesses. Architects know techniques for calculating forces for stable construction. Craftsmen must know the correct tools to use for any given endeavour.
Software engineers should be no different!
The Programming Language is your Material
The properties, and therefore uses, of Java, COBOL and Ruby are very different. Know the strengths of different languages so that you can apply the most suitable one to the current situation. Programming languages will never provide an optimal one-size-fits all solution.
Plugins, IDEs and Frameworks are your Tools
Tools by definition make life easier. Take time to explore and get to know which tools exist to help build and maintain your code. Many languages have been around for a long time and their toolsets are now very mature. There is no extra credit for writing code in Notepad and no shame in standing on the shoulders of others. This is how we progress farther than those who came before us, use what you can but continue to innovate.
Design Patterns are your Techniques
Yes, design patterns. This is an often overlooked part of a developers arsenal as it can be a bit dry. Tutorials often cite the DRY rule in coding for “Don’t Repeat Yourself” which reinforces the argument for learning design patterns. For an industry built on reusing code and minimising duplication, some are still unaware of design patterns that exist for a wide range of common problems. Almost any problem you face in coding has already been solved over and over again. The best solutions have been generalised into an efficient, effective template (pattern) which works optimally in any context.
Just to bring home the importance of design patterns, think of a carpenter; if he needs to create a corner by joining two pieces of wood together, he knows he can choose between a mitre, dovetail or dowel joint to name but a few. He does not simply glue or nail the bits together to see if it does the job. This would be naive and unprofessional, the product would be weak and ugly and not up to task. The problem has already been solved in an efficient way and passed down through generations so there is really no need to “reinvent the wheel”. Design patterns may be a bit theoretical at first, but they can save days of head scratching by identifying the problem along with the solution. You will also be implementing an optimal technique to create a more robust solution you can be proud of!
So in conclusion, love your craft and don’t be afraid of the next generation who can code before they can walk. Code development in whatever form it takes, is not just being able to write and understand code. Like any ideal occupation, it is about enjoying the process and being passionate about what you do and that is what sets you apart. Go that extra mile: learn the best uses of multiple languages, research all the tools, frameworks and plugins you can and commit (at the very least) the core design patterns to memory and you can go beyond being a coder and make it as a Master Code Craftsman.
Programming is not a craft – An interesting take on the Software Craftsmanship movement (of which I am not a part). As you can tell from this article, I believe software IS a craft and from reading the comments I can see I am not alone. I could go on for a while about this but in short, experience shows the client wants a solution to a problem and it is up to the developer to craft that solution. doesn’t know what they want in terms of implementation and if you just deliver the features they ask for regardless of the implementation it stacks up the costs in the long run. An IT professional should consider their craft and should be able to deliver something the casual coder can not.
Some Core Design Patterns. I spoke about design patters so here is a link to some of the core Object Oriented (OO) ones. Design Patterns are really useful and can be applied to most languages to maximise reuse and loose coupling for producing flexible code.