Michael's Perspective on Programming
Without further ado, let me introduce you to my thoughts and philosophy on programming in general.
I have been writing code and programming software since high school. While it's not considered much time by many
I do have a wide range of experience working with many programming languages and development tools. These experiences
are critical to me as they form the foundation of how I solve a problem in software.
If you are a technical person you may be interested to know how I approach a software project. Enjoy!
How quickly you learn is much MORE important than how much you already know
Things change constantly. New things are being invented every day and if you
cannot keep up with the current trends that's too bad.
Although I know a lot,
there are still many, many things I don't know anything about. In that case I am fully willing to
learn. I am
extremely quick on the uptake and can learn anything in a
short amount of time.
Knowing your tools before you use them
Programmers generally do not know everything about their tools before
they use them, which is a common source of bugs.
For example, the standard
input
cin in C++ ignores white spaces; the
int type in Matlab remains
unchanged when asked to go beyond its limit; JVM's class loader loads up the
class files and attempts to optimize them. Examples go on and on.
Whenever I
learn something, I make sure I know as much about it as possible, either
through reading or by consulting the experts.
A little knowledge is a dangerous thing. Knowing something partially could
prove fatal, and I don't want that.
Knowing the requirements can take up to half of total development time
Before I get down to programming I
make sure I know absolutely everything about how I will implement it. I don't
dive in without any planning, getting started without thoroughly grasping the
requirements a very dangerous thing to do. I always map
out my design and make sure every detail is taken care of. With a clear
design in mind, I am always able to finish the program very quickly.
The thing is that without thorough planning, it could be the case that your approach is
not a good one and you end up having to change things here and there in order
to get around a snag in the way, but then it creates more problems. You get the
idea.
This stage can take a LOT of time, sometimes as much as half of total development time.
I have real experience when I was involved with
HSM
projects where I needed to build an
Application to Control an HSM Machine. Getting to know the requirements and sketching the overall
design took more than a week. But once I had the design in mind, I was able to
complete it with great results.
Flexibility and user friendliness is the best policy
I make sure the
program maintains high flexibility in the sense that many things can be changed
and extensions can be added fairly painlessly. In other words, I make sure I do
not 'hard code' important attributes of my program.
Also, if I am
designing a user interface I have to make sure it looks nice and easy to use,
by which I don't mean gaudy or complex. Many programmers or developers love to make their
products stand out by making them look exceedingly showy and complex. However
that's not necessary a good approach. Google is a case in point.
Look at its search page. So simple and clean!!
A clean user interface is definitely sweet on the eyes.
The clean user interface may belie its true identity - the
most POWERFUL Internet search engine. Anyone who uses it can vouch for this fact. I
just love it! Therefore I say
the user interface should be as simple as possible to appeal to users of all
ages and knowledge levels.
In regard to a non-UI-related program, I believe it is also the
case. For example many UNIX utility programs are easy to use and have
parameters that are intuitive. I believe before designing a program,
one must
think about its intended users and make sure it is user friendly from their
perspective.
Having a senior guide by your side saves TIME
One lesson
I learned in an electrical engineering class is that whenever I
don't know something, don't guess; ask someone who does. Even if you do know
how to solve a problem, asking the experienced for their suggestion and advice
is not a bad idea.
The thing is that in the
software realm there are almost always more
than one way to achieve a goal. How do you know the approach you adopt is good? You gain more experience as
you write more programs but there's
always a first time to everything, in which case if you have a mentor guiding
you along you are blessed. His or her unique insight can make a huge difference.