Programming and its different disciplines

Thoughts By 5 years ago

Programming is unfortunately such a general term these days that I often find myself cringing at its use in broader contexts. Programming can mean a number of different things, in fact anyone who has changed settings in an application could have said to have programmed a computer, so I am here to distinguish what I see as the different disciplines of computer programming (excluding of course the very basic as stated before).

Web: Web coders actually have a harder job than people give them credit for. Like I have said in other blog posts, web coding can be extremely frustrating and tedious, and only hardened web coders will know the intricate ins and outs to make a truly robust bit of code. Having said that, it is not without its caveats, web coding does not require memory management and all the programming done is on high level scripting languages, the skills learned here cannot be easily transferred to other disciplines without a lot of intermediary work. I started programming in PHP for web sites, and I found it very difficult to wrap my head around pointers, allocating and deallocating memory when I started learning C/++.
Languages: HTML, Javascript, CSS, PHP, ASP

Games: Game coders are tenacious with the performance and reliability of their code, being such a cutthroat market they have to squeeze out every last drop of CPU and GPU power to make their games entertaining and engaging in a world that’s forever obsessed with how great graphics are. Not only do they have to do this in relatively low level languages like C++ but many are also fluent in game scripting languages (such as LUA) which gives them experience managing memory and using a language that does it for them. If I were to pick a flaw with game coders, it would be that they sometimes compromise on deadlines by writing sloppy code that ‘gets the job done’, but who can really blame them?
Languages: C,C++, LUA

Science: Coders who are interested in science and exotic types of data processing often do not have very disciplined skills in a particular language, rather they pick the best language to achieve their means and then attempt to achieve their objective. The programming is simply a tool, rather like a hammer, as long as they are able to represent their algorithms in them the actual semantics of the language are not entirely important. This lets them achieve their goals and learn the basics of many different languages, but prevents them from truly mastering one.
Languages: C, Fortran, Cobol, Java

Hardware: If you thought game coders were obsessed with performance, hardware programmers are under an even stricter lack of RAM and CPU, and learn very fast that every cycle and bit should serve a maximum purpose. Hardware rarely fails if you consider firmware bugs, so reliability is built very strongly into this discipline. If I were to speculate at a downside to hardware coding, it is that big processing tasks are not really required, so tackling a problem that requires more complex algorithms may not be in their nature.
Languages: C, ASM

Mobile: Having sprung up in recent years, mobile coders are actually quite a varied lot. You will find those that code with maximum efficiency in mind (due to being restricted to a mobile devices hardware) and you will also find a variant of web coders that use tools that do this work for them. Ideally mobile coders should be excellent at memory management but it is not always the case, tools like ARC are certainly bucking the trend when it comes to discipline in this regard (probably implemented because so many mobile coders were doing a poor job at this to begin with).
Languages: Objective-C, .NET family, Java, HTML

Assembly: This discipline is very rare in this day and age were almost everything has the ability to run at least a moderately high level language, however in my opinion these coders are of great quality because being so close to the machine they can extract the maximum amount of work from it. The big problem with assembly is it is simply so foreign when compared with other languages, it is very hard to transfer the skills learned in assembly to a language that is simply so divorced from the hardware (such as web coding).
Languages: ASM

Enterprise: Enterprise coders are incredibly disciplined, they often have to follow a companies standards and make their classes highly reliable. The problem with enterprise coding is it often divorces the coder from having any creative input on their code and the final product, however the whole idea of standards and strict quality control procedures is designed for this happen, after all the company wants what it specs out, not what someone else decides is best. Due to this, solutions that may actually be faster are often overlooked, however the original solution will (usually) work.
Languages: Java, .NET family

Language: In all the other programming disciplines, programming is a means to an end. Sometimes you meet people whose end is to simply take pleasure in the coding work itself rather than the end result. They see a new language as a challenge rather than a chore, and often fuel interest in moderately exotic languages such as Python, Perl and Ruby on Rails. This does give them excellent insight into what language is best suited for a task, but can often lead to complex solutions that may not be easily read by other programmers.
Languages: Perl, Python, Ruby on Rails, Go