What Makes A Programmer
Written by Mike James   
Thursday, 01 August 2024
Article Index
What Makes A Programmer
A matter of time

A matter of time

Programming is the same only in this case it is slightly more sophisticated.

To be good at programming you have to acquire an algorithmic thought process. This is like a mathematical proof in that it is a serial argument from start to finish but now the steps include conditional branches and repetition.

Yes its all down to the "ifs" and the "loops". 

Algorithmic thought is arguably a specialisation of logical thought to processes in time.

logictime

Notice that this means that programming is about constructing causal sequences and this puts into question approaches such as pure functional programming. If you take the time out of programming then what you have is mathematical thought not algorithmic thought. Of course, this is exactly the advantage claimed for functional programming as opposed to procedural programming.

It is embodied in the two different meanings given to a=0 by the functional  and procedural approaches respectively.

  • In the purest of functional approaches it is a statement that a equals zero - always has and always will.

  • In the procedural approach it is a sequential process - take a and store zero in it, so changing the value it had before.

The difference is profound. 

If you are of the opinion, as I am, that algorithmic thought has a lot going for it then perhaps eliminating it isn't the best way to go! We have problems creating good procedural code, but that doesn't mean we should throw the baby out with the bath water.

Programming is about describing sequences of events and this is what makes it a powerful idea.

Algorithmic thought isn't the sole preserve of programming. It occurs in other subjects - engineering, chemistry, law even - but nowhere does it gain such a clear and sophisticated expression. After all programming is about the most general algorithmic thought that includes not only logical connections but explicit repetition. It is not only deductive, as in A implies B, but constructive, as in A produces B. You can think of it as logic but with time built into it.

We work with sequential steps in which the logic flows from one moment to the next. This is of course the reason why many of us find parallel processing, asynchronous code, recursion and continuation difficult to swallow - they all distort the role of time in the algorithm. 

To a logician the statement:

A=Not A

is clearly a paradox. To a programmer it is a process that produces a flip-flop behaviour from true to false and back to true again and so on...

If you take a non-programmer and give them a task and ask them to describe how the task might be completed the result is often a mess. They leave steps out, make vague statements about how one step follows on from the next and generally the result is what you might call open to a lot of interpretation. Give the same task to a programmer and the connection between the start and the end should slot together like a child's building bricks or perhaps a model railroad track.

To program you not only need to be able to get to the solution but to describe in exact detail how you get there.

So a good memory and algorithmic thought - anything else needed to make a good programmer?

If you consider some of the basic tests used to pick candidates for programming jobs - for example bracket matching e.g. is this set of brackets correctly nested

((((())()))))()))))(())

then you have to start to think that an ability to focus or concentrate is a good thing.

Indeed it is our folklore that programmers are isolated types who focus on their programs to the exclusion of all else.

However, if you think about such tasks then they too seem to be related to an ability with algorithmic thought. If you can see what the "micro program" is to check the brackets, i.e run a stack algorithm that pairs up the opening and closing brackets, then it can be applied without much concentration or focus compared to a naive method that attempts to understand the structure.

Old programmers...

Of course, as you practice the craft of programming you pick up algorithms that you have used and tend to see new problems in the light of the old. This is quite natural and it makes an experienced programmer faster at getting to an algorithmic solution than a beginner.

On the other hand it also occasionally allows the beginner to see a better way than the obvious and accepted solution. The point is that, while the two main skills are in common, there is a practice effect.

Algorithmic thought is special and if you have had the privilege to master it even just a little then value it.

Above all, don't think that programming isn't an intellectual activity - it is and not everyone has the abilities needed to achieve it easily.

 

Related Articles

Does Math Help Programming Or Programming Help Math?

Deep Teaching

How Jazz Ruined Programming

The Real Reason To Learn To Program - The Power

Teach Code In School - Before It's Too Late!

Trouble At Code School

MOOCs Fail Students With Dark Age Methods

Programming - A Life Long Challenge

Teach Concepts Not Just Code

 

To be informed about new articles on I Programmer, sign up for our weekly newsletter, subscribe to the RSS feed and follow us on Twitter, Facebook or Linkedin.

 

Banner


Google Updates Responsible AI Toolkit
01/11/2024

Google has announced updates to the Responsible Generative AI Toolkit to enable it to be used with any LLM model. The Responsible GenAI Toolkit provides resources to design, build, and evaluate open A [ ... ]



Apache Lucene Improves Sparce Indexing
22/10/2024

Apache Lucene 10 has been released. The updated version adds a new IndexInput prefetch API, support for sparse indexing on doc values, and upgraded Snowball dictionaries resulting in improved tokeniza [ ... ]


More News

espbook

 

Comments




or email your comment to: comments@i-programmer.info

<ASIN:1871962439> 

<ASIN:1871962722>



Last Updated ( Thursday, 01 August 2024 )