Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 May 2020 19:39:44 -0400
From:      Aryeh Friedman <>
To:        Polytropon <>
Cc:        Ralf Mardorf <>,  Ralf Mardorf via freebsd-questions <>
Subject:   Re: Back to the topic of the original thread: FreeBSD Cert
Message-ID:  <>
In-Reply-To: <>
References:  <> <> <> <20200527203627.2c9faae5@archlinux> <> <> <20200528022232.662100a3@archlinux> <> <> <> <> <> <20200528193512.7fcf9192@archlinux> <> <20200528204832.7bf83e2b@archlinux> <> <20200528224701.7cc6f222@archlinux> <>

Next in thread | Previous in thread | Raw E-Mail | Index | Archive | Help
On Thu, May 28, 2020 at 6:22 PM Polytropon <> wrote:

> On Thu, 28 May 2020 22:47:01 +0200, Ralf Mardorf via freebsd-questions
> wrote:
> > It's trivial to _program_ a digital video recorder to automatically
> > record a television programme, [...]
> Yes, but only for _old_ people! :-)

I wonder?  I have no problem debugging a compiler or writing a full web app
(including the HTTP server) but I have never figured out how to program my
DVR (VCR in the old days) to anything except stop flashing 12:00 (and I am
one of the pioneers of streaming media ;-))

> > [...] but it's not trivial to translate data
> > into _code_.
> It's not just data - it's concepts (of behaviour, of data, of
> calculations, of interactions, of data exchange, of communications,
> of hardware control, etc.).
That is just the tip of the iceberg.  You start with what problem (or even
if there is a problem) to solve, this involves getting good solid answers
to the five journalistic questions for the current process/system, the
ideal one the end-users really want (not the one they will get) as well as
the quick and dirty solution and the "done right solution".   Note here
that many times the best solutions don't even involve a computer (they just
are nothing more then refactoring the current manual process and leaving it
manual).  Of the solutions that do involve using a computer the ones that
involve writing any code (including scripts) at all are almost always the
last option you should consider on how to solve the problem.    Coding is
slow, tedious and very error prone even in the hands of the most seasoned
developers.  The reason for this is what I (and as far I know only me)
consider to be the there laws of software engineering:

     1. Bugs are a fact of life, get used to it!  (The goal of software
engineering is to not get rid of them but make catching and fixing them

     2. Anyone who claims to fully understand software engineering,
computing or computer science (or any major subarea of them) is full of
crap (non-PC version full of <bleep>)

    3. There are no laws to software engineering only recommendations based
on very costly (personally and organizationally) F'ups from thinking law 2
doesn't apply to the recommender and/or their organization.   All such
recommendations make no sense outside of the (narrow) context they are made
          Corollary 1: There are no silver bullets, white knights and
Merlin is a myth!
          Corollary 2: If the recommendation doesn't include references to
"Alice in Wonderland" the recommender didn't pay a high enough cost to gain
any real wisdom.

All this needs to be done before deciding to write any code and then comes
the easy part (writing/debugging the code if there is any at all).   But
before we write any code we need to make decisions about what
tools/languages to use, what is the over all system architecture, what
should the I/O look like in detail, what algorithms/data structures to use
(pick the right algorithm and the data structure will pick it self, pick
the right data structure and the algorithm will write it self, pick either
one wrong and you will be jealous of how easy Alice had it in Wonderland!),
decide on the quality/reliability requirements (including what automated
tests to make to make sure once it works it stays working), make sure your
design is portable and maintainable, etc.

Finally we can start writing some code but where to start?   Should we do
the riskiest part first or the easiest part, should we do the UI first or
the guts, etc.?   How can I make sure my code is actually testable, etc.
Do I use library classes/methods or do I do roll my own?  Etc.

Now I get to write the fun and easy part:

for(int i=0;i<10;i++)
      print i;

Of course real code is more complex then this ;-)

Aryeh M. Friedman, Lead Developer,

Want to link to this message? Use this URL: <>