#

Wednesday, January 31, 2018

Programming Vs Software Engineering

Software engineering is more than just programming or development. It means you commit to writing quality software and not just programs.

What is the difference between software and a program?

A software is a well packaged unit that can be installed or run easily in its intended environment. This includes compiled code, documentation, instruction manual, tests, environment configuration etc. A program is just raw code and useless in practice unless it exists as a software. Most developers focus and love programming but forget that software is everything and their code is only a tiny part. Imagine, if Microsoft gave you their code and gave you no instructions on how to build it into an installable version of Windows. That's the difference between code and software. Software is usable, code is not .. in a nutshell.

Software Engineer vs Developer Vs Programmer

Every Software Engineer is a programmer and a Developer at some point among other things. He/She is concerned with the end product (Software) and not just the code. The distinction between a programmer and a developer though is more a amateur Vs professional one. Developers are part of a professional work force aimed at producing software in one way or another. However a programmer maybe just passionate about coding or hacking and things like that; it does not imply any professional intent.

Importance of debugging

Most of your career will go not in writing code but in looking at your own or someone else code. For this reason it is very important to follow good design practices and document everything in a structured and professional manner. Even a brilliantly written code is worthless if it does not make sense to the reader 2 or more months later. Debugging can get complex, you must learn tools and master your IDE and discipline yourself to debug well. In fact if you think being a developer is about writing cool code all the time, think again. You need to learn how to debug complex code. That is why one should use good logging practices etc.

Software Quality

Software quality can be measured by the longevity and cost to use and maintain a piece of software. This implies code that is well supported, documented, tested and is easy to debug. Brilliant code is useless unless you are writing some new algorithm never thought of before (very unlikely). Note: A lot of developers in the industry are confused or frustrated due to, what they believe is a lack of opportunity. What they basically want is someone to tell them Go ahead write code, learn at our expense and not care about what you deliver and how we can maintain it after you are dead!. If that is your idea of programming, I suggest you look for another career. However if you are committed to creating a usable software for an end user and want to take pride in the overall quality of what is being delivered, then only software development is for you.

Can programming be considered an art ?

This is highly debatable but here is my perspective after 29+ years of being a programmer and a professional. By all definitions software engineering and development does not qualify in this conversation so we shall limit ourselves to programmers.

Any innovation also includes creativity. That's more a basic intelligence pre-requisite. However, in any science, engineering or even coding one realizes true genius is an iterative process over the piece of work and not just the person skill set. (huh!)

Ok, Lets assume you are a master programmer or a hacker. In terms of skill you are pretty much accomplished. However, even so; when you work on your masterpiece your vision of what should be, may change with every iteration, that you did not foresee when you started. Even high level designs undergo some changes (admit it bitch!). In other words the process is more evolutionary. Evolution is a sequence of trial and tribulations that go beyond imagination and hit real and hard constraints and feedback. An artist in my mind differs in the sense that the artist is more free in terms of their expression and Art is an expression of their undiluted imagination or abstractness that need not conform to any constraint. While programming, is iterative no matter how creative you maybe. In programming (as in development and software) you can achieve perfection only via iteration and testing. The end product maybe akin to a piece of Art (yes), but thats where the similarity ends.

However, what about musicians. Musicians I have learned also make music in an iterative process, their music is constrained by the instruments they choose to use etc. So lines blur; .. however since there is more science, evolution, more logic Vs gut involved in programming (the most artistic aspect of software); I'll still stand by saying ..... programming or coding is not art. The Code itself in its final state maybe considered an "art form" though. Over time the skill of a programmer improves and seems into the subconscious mind to make the right logical choices quicker but thats just ...well .... deep learning not art! I leave you with an equation:
  1. An artist is a person who produces art
  2. A program can be a piece of art work
  3. A programmer is not an artist (by meer coding abilities)
  4. The act of programming, can use imagination as a starting point but where it iterates to is evolution and science hence less artistic