
Without further ado, let me introduce you to my programming philosophy. The
term philosophy sounds so serious; I'm just going to describe my thoughts on
programming. If
you are my future employer, it's safe to assume you'd 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
relatively 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 red (as opposed to 'the green').
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 60% 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 up as much as 40% of total development time and I am not
exaggerating. I have real experience when I was involved with
HSM
projects where I needed to build an
HSM
Application. 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 attributed 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 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!!
It is definitely easy on the eyes and can be described as 'Still water
runs deep': The clean user interface may belie its true identity - the
very 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 mega hours
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 and learn more languages, 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.