Heads up, this doesn’t have much to do with Perl but, in my highly unqualified opinion, PerlMonks are the smartest programmers around (at least maybe the only smart ones who will give me the time of day (barely)) so I thought I’d post this here.

So anyway, I had a few beers last night and a couple of cocktails to boot and I started getting a little philosophical about programming. What is it programming, exactly? I decided the best definition I could come up with is that it is “the automation of the creation and extraction of meaning from the world.” It’s basically a mining exercise where the “natural resource” is meaning.

Once the meaning is extracted, it can be used to help guide decisions, help increase efficiency of processes (including the mining of more meaning even faster and more automatically), or help us uncover how the universe works as in the case of scientific research.

Then I got to wondering where programmers fit into this cosmic extraction of meaning. It struck me that programmers are like foot soldiers. Those who employ soldiers and direct them are like generals. The generals would be equivalent to the business leaders and bureaucrats who make big picture decisions. And then somewhere in the middle are computer scientists, who study the extraction and processing of meaning with computers. The generals rely on the knowledge of computer scientists to determine which strategies to employ to help extract meaning. The computer scientists would be like war strategists, determining the best tools and methods for automating the extraction of meaning.

Outside of these three major roles are people like IT folks who would be like Seabees; those who set up the infrastructure and equipment needed to process the meaning. The companies that write software workhorses are like defense contractors who manufacture equipment (the tanks, jets, and ships) that do a lot of heavy lifting (IBM, Google, Microsoft, Facebook, Apple, etc.).

Of course, the lines between these roles are much blurrier than in war. For example, a programmer running a small business writing consumer software is often the general, the foot solider, and the Seabee (probably not so much a war strategist). A consultant who helps businesses develop complex custom software is probably much less of a foot soldier and more of a war strategist.

My thought is the most valuable programmers are those who have a good idea about what would be of value to leaders, are very familiar with computer science and are highly expert on wielding the most powerful tools used to automate the extraction meaning.

$PM = "Perl Monk's";
$MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
$nysus = $PM . ' ' . $MCF;
Click here if you love Perl Monks

  • Comment on Mining and war as a metaphor for programming

Replies are listed 'Best First'.
Re: Mining and war as a metaphor for programming
by GrandFather (Saint) on Feb 11, 2017 at 22:45 UTC

    Programming is a tool making profession, new age blacksmithing if you will. Sure, you can make tools to extract meaning from the world, but most of programming is more about getting everyday stuff done more easily, efficiently and accurately. Programmers more than anything else are problem solvers. People who figure out how to use a box of tools to build an edifice and ensure it is fit for purpose. It's about problem solving, but then most creative and destructive processes involve problem solving.

    To the extent that war and mining involve problem solving, programming is like those. But war as an analogy to programming doesn't seem a very good fit to me. You might as well use a factory as an analogy, or politics, or any of a huge number of other metaphors which share the common objective of managing people with a common goal. Programming in and of itself has almost nothing to do with people management. In the war analogy programming is much closer to fighting, learning and applying a domain specific set of skills, than war which is much more about managing people and resources.

    Premature optimization is the root of all job security
      I absolutely agree with GrandFather++.
      Programmers more than anything else are problem solvers
      I couldn't agree more.

      The following is the very beginning of Chapter 1 of my coming book on programming in Perl 6, Think Perl 6 - How to think like a computer scientist (see New Perl 6 book coming out with O'Reilly), although, to tell the truth, this particular passage was not originally written by me, but my co-author, Allen B. Downey:

      The goal of this book is to teach you to think like a computer scientist. This way of thinking combines some of the best features of mathematics, engineering, and natural science. Like mathematicians, computer scientists use formal languages to denote ideas (specifically computations). Like engineers, they design things, assembling components into systems and evaluating tradeoffs among alternatives. Like scientists, they observe the behavior of complex systems, form hypotheses, and test predictions.

      The single most important skill for a computer scientist is problem solving. Problem solving means the ability to formulate problems, think creatively about solutions, and express a solution clearly and accurately. As it turns out, the process of learning to program is an excellent opportunity to practice problem-solving skills. (Emphasis in the original.)

      I guess it depends on whether you consider the end product of the programmer is the software's output or the code in the files the programmer writes. I'd argue the real value of software (and hence the programmer) is not the code itself, but what the code is capable of producing (meaning). I can write software that spits out garbage data but that doesn't make me a very valuable programmer.

      Sure, programming is problem solving. The problem trying to be solved is how to use the tools at your disposal to try to create meaning as efficiently as possible. In your analogy, you use an anvil, hammer and fire (compilers, computers, programming languages) to create horseshoes and nails (meaning). Anybody can bang a piece of metal with a hammer but that doesn't make them a blacksmith. They need to produce something that is actually worth something to other people (or at least to themselves).

      $PM = "Perl Monk's";
      $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
      $nysus = $PM . ' ' . $MCF;
      Click here if you love Perl Monks

      Programming has a lot to do with people management. You need to be able organize and direct them and provide them with the equipment and training they need to perform their jobs. It's certainly not as hard as convincing people to risk their lives in combat and getting them to follow orders, but without proper management and discipline, you will be hardpressed to accomplish anything. This is true even in small shops and even true of a single programmer. The difference is it's easier for programmers to be like generals and direct themselves.

      $PM = "Perl Monk's";
      $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
      $nysus = $PM . ' ' . $MCF;
      Click here if you love Perl Monks

      Sure, war is just one metaphor that could be employed. But the benefit of it is that it has the same kind of urgency and import as trying to uncover meaning.

      $PM = "Perl Monk's";
      $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
      $nysus = $PM . ' ' . $MCF;
      Click here if you love Perl Monks

Re: Mining and war as a metaphor for programming
by jmlynesjr (Deacon) on Feb 12, 2017 at 23:59 UTC

    Programming is like Pin Ball: if you get it right, you get to do it again.

    Unfortunately, sometimes to get it right, you have to go to war. Four months, seven days a week, 12-14 hour days(one 38 hour day), mostly nights, when construction used up all the project slack time allocated for system integration(see tag line below).

    James

    There's never enough time to do it right, but always enough time to do it over...