Oct 6 2010 Opening Statement
- STEVE LITT
- GARY MILLER
To me programming is just ordered solving of a problem using Lego blocks. If the blocks work for the problem space then everything is "easy" if they do not then you try to figure out how to do it with the smallest number of new blocks. One of the goals are generally security (users can only use the code in the way you intended it to operate) this does not mean they can not build something new with your piece but it black box to them. The next goal is predictability (running the program in all cases bring predictable results/time and understandable failures). The last goal is usually speed of execution.
All of these points have to fit into the environment that the code must run in, memory, CPU speed, network limitations, etc ...
In almost all cases the problem being solved will either be flavored by the person asking for it to be solved and unless you can see the environment the user is operating in the solution will not truly solve the problem (possibly because the problem described is not the problem to solved).
Before picking the language to solve the issue the problem space needs to be understood as much as possible. Problems should be described with pictures as much as possible to make sure that all participants can work together to understand the issues and propose possible solutions. Quick object descriptions and how those object are used to solve the problem is a major step to modeling the solution but as understanding increases the model WILL change (the amount of change is dependent on the initial understanding).
You will never (or at least very rarely) know all of the things to be solved so waiting for all the problems to be know will be a waste of time and will never help you hit a deadline.
You must be willing to throw away your code at any point in time so that you will not be forced to kludge a design to work in a way it was not designed to work in.
I have been writing code professionally since 1976 in assembly, Basic
Plus, Fortran, Pascal, C, C++, and Java. I am a low level kind of guy
and I do not design graphical interfaces because my heart is not in it.
- ERIC MASON
Programming: creating a set or series of actions that lead to a desired result. Programming doesn't just involve computers, think in BTTF of Doc Brown's little chain of things that made breakfast, or the old west ice machine. Or a chain reaction machine, the marble heads down the ramp, lands on the balance scale which lifts up the other side which griding the match against the sandpaper which lights it. the match burns the string apart which was holding back the spring that punches the golf ball that heads down the green into the hole. That is programming. Not only that, there are things along the way that may need to change (can't play with matches, so the balance lifts a lever holding the golf ball and it rolls down and into the hole), or problems that arise that need to be solved (marble misses, balance doesn't lift or have enough force, golf ball is off course). Programming more often than not involves a computer these days though.
Quality means that there should be no expected bugs or known security flaws, it should be clean and memory efficient, ready for someone to use and give a great experience, rather than blow up when one clicks "add completed form".
Techniques and tools. I try to strive for cross platform development when I can, however situations dictate how tools are developed (can't make a tool for the console), and how to program (one has to be very memory conscious on consoles).
Being from Full Sail's Game Development program, we're taught to make things run as fast as possible, either using advanced BHV culling, or simple things like an early return when we already know the result (some people have a "only return at the end of a function" mentality, I was privy to this when I learned QBasic in high school), to pregenerated or lookup tables (for rand numbers or trig, the Quake 3 engine used inverse square root lookup tables).
Programming, despite being a science based degree, is an art. We're proud of
what we write, we strive to make better the routines we're not fond of. We
create works of art for the benefit or entertainment of others. (Some of this
comes from stories that the government wants to regulate video games
(essentially also removing M rated games from shelves), and the others see it
as a form of art, a form of artistic expression).
- ALEXANDROS NIPIRAKIS
In order to delve more deeply into this kind of discussion, it is logical to start out by establishing some definitions.
The first thing to define is Computer Programming. Computer Programming (simply put) is the act of creating a set of instructions for the computer to carry out in an organized manner. In other words, computer programming is the act of writing computer programs and computer programs are ordered instructions that the computer executes which (generally speaking) can be done more than once (in other words, the act of simply directing a computer to perform a pre-defined task is not computer programming – this is computer operation).
A Computer Programmer is someone who programs computers. This can be someone who writes complex data systems or intricate control programs, but it could also be someone who writes a VBA module to make the job of entering data into an Access Database easier, or someone who writes a simple shell script to delete a particular set of files. The only vital aspect of a computer programmer is that he or she knows a language which when fed into a computer system causes the computer system to perform a set of pre-defined tasks.
Just as in other creative arts, someone may be a programmer of sorts but it may not make sense to characterize themselves as a programmer because the word programmer is specific to someone who’s life work is programming. Put another way, someone may write an email, but that doesn’t make one a writer. In the same way, someone whose most complex program is a set of shell scripts or a simple VBA program is probably not a programmer.
In the same vein, amongst programmers, not all programmers are created equal. In other words, in the same way that someone may be a writer, but more specifically a lyricist, poet, or novelist there are many kinds of computer programmers. The techniques that make sense for one do not necessarily make sense for all.
When one is a web developer, certain methodologies make sense for that realm that would not make sense for an embedded developer (the prior using the highest level language to express their program, the latter usually using machine language to express their program). Again, the parallel is that whilst while both the poet and novelist perform similar tasks, they do that same tasks using different methods and rules (a poet is usually writing something short a novelist writing something long).
Given these definitions, I am a particular kind of programmer, just as the other panelists are most likely different particular kinds of programmers. Most of my experience is in designing large and durable business systems. My programs usually need to interface several different systems in order to accomplish the task. Given this, I feel the best programs are those, which are properly compartmentalized (in other words, properly divided into sub units with each sub unit performing a single task) with properly defined objects with properly defined object relations. More concisely, I am a follower of Object Oriented Programming and follow it to a T. I mostly code in C based Objective languages (Java, C#, and sometimes C++).
To me, the most important thing a programmer must consider is what are the objects that the program must operate over. Are there particular kinds of documents? Do these documents have similarities (base class or interface)? What are the ways that these documents relate and communicate (for instance, a Purchase Requisition which then becomes a Purchase Order which then would be fulfilled as a Sales Order by the supplier). It is important that code is done once and only once and maintained in a well-documented way.
Even as such, I have done other kinds of programming. A website does not have the same abilities of compartmentalization, nor a program written in assembly language. When I do these other tasks, I try to put aside my adherence to object orientation and write these programs in the ways that are consistent with those platforms. A good programmer can put aside their pre-conceived notions in the face of a job that does not make those notions logical.
In other words, a programmer must (inherently) think as the system they are designing.
In closing, there are different programmers and different programming styles. Each platform pushes the programmer to a particular methodology and the only subjective judgment about a programmer or programming style is the robustness of the program written and the durability of the code.