Ironically one of the things that I would label as a key
influence on my thoughts about how to program are the
summaries of discussions on the Linux kernel mailing list.
Efficiency matters. Efficiency is good, particularly for
an OS. However even there - or possibly especially there
- it is important to aim for a clean overall design where
you have a hope of proving things correct. If you start
with that then you have a framework where you can
optimize what needs to be optmized, when it needs to be
optimized. (And when you have learned more.) If you don't
do that then you will never be able to work with your code
to keep it in good shape as time passes, processor designs
change, usage patterns change...
Now being the best coder in the world is a great aspiration.
I fully support it. I want to be a great coder as well.
But being a great coder really means having an eye for
what matters. And what matters, what is hard, is that
you are always going to be ignorant. The world is going
to constantly change under your feet. Your code is going
to be used in ways that you didn't expect by people who
never expected to see it. The bottlenecks are not going
to be where you thought they were. People changing your
code are going to make mistakes. People are going to
break your dependencies because they don't know about
them.
Do you want a real challenge? If so then try to address
that set of problems. Unlike trying to eliminate
code it is a real problem. People want you to solve this.
It is a hard problem that nobody knows how to really do
well. It is a complex problem for which the parameters
are constantly changing. It is an interesting problem
which we are constantly learning about.
And you want the really amazing thing?
It turns out that when you try to solve this problem well,
that in retrospect you do a very good job on virtually
every other parameter that people care about. Your code
naturally tends towards compactness. Your designs can
be optimized. Your programs are easily tested and verified.
Overall development speed is good. You can conceive of
and carry out more ambitious projects. And so on.
Now you say that I am assaulting you and that I should just
agree to disagree. Well I am not assaulting you, I am
trying to open your eyes to a correct prioritization of
goals. And I disagree that I should agree to disagree,
this is something which I believe there is a right answer
to, and I am trying to convince you that what I believe to
be the answer really is right. |