Tuesday 15 January 2019

Subject Matter vs Programming Tools

I am an old school developer. And I have been struggling to land interviews in the modern world. However once I got into the job my performance on the job usually exceeds expectations.

I have tried to think about the issue. My conclusion is that I am a victim of a world where people look for knowledge of specific tools rather than knowledge of a specific subject matter.

Often people are looking for a Delphi Developer, a C Sharp developer or a Python developer. It seems the assumption is if you know a specific tool inside out then you can handle any subject.

I find it rather strange. Suddenly you do not need to know what the Newton-Raphson method is or entails, all you need to know is C-sharp and wallah you should be able to solve a power system stability problem. You do not need to know what a Voronooi polygon is but you should be able to model a mine's ore body because you are a C++ developer.

I tend to approach things from the other side. You need to know the subject matter thoroughly and then know, not just one, but maybe one or two tools that you can use to solve problems in that subject matter. In fact in my world you do not need to know a specific tool, but the available tool's manual and documentation should contain enough information for you to solve the problem with that tool.

In many subject matters there is a lot more than number crunching involved. Every subject matter has a set of theories, concepts and assumptions you make before you arrive at the number crunching. Very often your number crunching choices depend on what you want to optimally solve based on the concepts and theory of the subject at hand.

I think the industry has suffered a lot from this focus on tooling. I have worked on many projects where it was patently obvious that the developer doing the calculations had no idea why they were doing it but had just been told add these numbers.

I have also worked on projects where people think I am genius but the truth is simply that I understand the concepts more than the average developer.

Unfortunately the job market of today people are looking simply for knowledge of a specific tool. I have been to many interviews where if I ask what nature of problems we are going to be solving, people simply can not answer. People will simply be looking for a developer who knows a specific language.

Very often the questions asked to test such knowledge are classroom questions. That is where I have a problem. Classroom questions are usually asked of someone who has been following a specific syllabus and using specific textbooks for the past couple or so of years. The syllabus and textbooks would have prepared them for question worded in a specific way. In some cases the expected answers would have been provided several times. They often determine how well you have crammed or memorized the contents of your course.

Then there is the question of concepts and theories that may be implemented differently by tools. You guessed right. I am talking about object oriented programming. Object oriented programming does not just fall out of thin air, but it follows from object oriented system analysis. Your system must be constituted of objects intended to solve a specific problem optimally.

The objects may even change depending on what what the problem you are solving is. If you are building a house, then you need to have objects called foundation, walls, roof and fittings. If you are decorating a house, then it is much better to have objects called lounge, bedroom, kitchen, study and bathroom. Your objects should simplify how you solve your problem. They do not need to demonstrate how well you know object oriented programming theory.

If your SYSTEM objects are properly designed, you can PROGRAM your system in any language and STILL be able to follow object oriented programming concepts.

I have this one word of advice for industry. Knowledge of languages specifically designed or restricted to object oriented programming, does not equate to knowledge of object oriented system design. In fact application of OOP to an improperly designed system, can actually worsen the original problem that OOP is trying to solve. That is the problem of simplifying system maintenance.

I have worked on systems where every line of code is in an object as per the language specification, but the system has not been upgraded for decades because the objects are spaghetti. I will admit on some of the systems it was because of deliberate obfuscation by coders (a technique which some people use for intellectual property or job security purposes). However in most the problem was that the system was not correctly designed in the first place.

There are concepts that have to do with system design, and that have an important impact on your system objects, but have nothing to do with object oriented programming per se. I will mention system modularization and component standardization. A system module may form an object, a standard component may form a base class. Such concepts do not apply to programming only. For example in construction a roof or a foundation may be system module and a brick may a standard component. In a properly designed house if you change your bricks from say commons to blocks, you do not need to change your roof in any way.

You may not know anything about firing bricks because you have used cement blocks all your life, but that does not mean you do not know how to build a house.

Back to the subject of programming, I maintain that knowledge of of a subject matter is more important than knowledge of a tool. I have implemented algorithms like Newton-Raphson in several languages (Pascal, C, C++, Modula 2) and I have implemented asymmetric key cryptography in the above languages and PHP, but today I probably can't find a job in scientific or cryptographic programming because they will be looking for a C sharp developer. Never mind that such a developer has absolutely no clue what Gauss-Seidel decomposition is.

Never mind that I actually have knowledge of the mathematical formulas behind the stochasticity of the various encryption algorithms.

If they want a Delphi programmer they will probably ask me class-room questions without even bothering to test my knowledge concerning the subject matter of what they want me to do.

This creates a vicious cycle. The hired person will struggle because they don't have enough knowledge of the subject matter. The superiors will most likely conclude that it is because his knowledge of the programming tool is not up to standard. Then they will set out to look for someone with "more" knowledge of the programming tool.

Why now: The rising tide against Mnangagwa

For years people of Zimbabwe have been called all sorts of names simply because they would not rise against Mugabe.

Suddenly, when it is least expected, they are strongly rising against Mnangagwa.

In the years leading to and soon after independence Robert Mugabe was hugely respected by the black population of Zimbabwe. He was especially respected for the role he played in freeing Zimbabwe from the clutches of racist colonial rule.

Not only was he respected in Zimbabwe, but throughout Africa. His Pan-Africanist and nationalist rhetoric struck a resonant chord with many who had been victims of colonialism. His stance, though very unpopular in the West where the beneficiaries of colonialism reside, had a lot of sympathy in those countries who had been victims.

On the other hand Mnangagwa simply does not have the same gravitas as Mugabe. He does not have the same causality to command respect.

Many Zimbabweans also believed Mugabe had made a good effort for the country but a lot of it had come to nought because he was surrounded by bad people. Emerson Mnangagwa was counted among those on the bad side of Mugabe's coterie.

It is therefore simple logic to understand that Mnangagwa does not have as much leeway among Zimbabweans as Mugabe had. Unfortunately ED himself does not seem to understand that. He seems to think he is a perfect fit for Mugabe's shoes.

The way things are going it should be clear he is not. Zimbabweans are simply not prepared to show as much resilience under him as they did under his former boss.

If Mnangagwa does not start listening to those who have proper economic policies and knowledge, and continues to be misled by the rabble of Mugabe hangers-on that he inherited, he is going to find the going very tough. The hoi polloi are only interested in lining their pockets. They use access to power to skim from the fiscus, not to protect the centre of power.

Mnangagwa should be aware that those close to him are pushing him in a direction that makes them rich, but exposes him to failure. They are racing their truck while they know the engine is about to knock. They don't care about the engine, they just want to get as much kilometrage out of the truck as they can.

I hope The Crocodile has enough presence of mind to realize that what he needs to do now is focus inside Zimbabwe not on globe-trotting.

Sunday 6 January 2019

Zimbabwe's Economic Causal Nexus

I have been listening to the Zimbabwe economic discourse for some time. The entire conversation is nearly always about what others can do for us.

If the Chinese give us mega deals then we will be okay. If the British put us in the Commonwealth then our economy will grow. If the Americans do this. If the Japanese do that.

The solution to Zimbabwe's problems lies with us. When the Munhumutapa empire was among the richest on earth there was no commonwealth. There were no Chinese. Native Americans did not know there is a continent called Africa. Europeans were diseased beggars fleeing from the Black Death and poverty.

So why is it that now Europe, America and China are needed for us to become prosperous? Will they bring anything here?

What is it that is making us poor now? I say it is our mentally colonised minds.

For example why do people the world over want gold and diamonds? It is because those materials are inert. They do not rot or rust. They last forever and they maintain their value forever.

But here in Zimbabwe what do we do? If we dig up gold and diamonds in excess of what we need, we give them away. Then we go and buy huge quantities of things that rust, rot, or, we just end up excreting in the toilet after a few hours. Cars, fancy clothes, expensive beer and food.

If a typical Zimbabwean finds gold or diamonds worth ten million dollars, they will go and sell all of it, and buy ten supercars. A car is mostly iron and plastic so you can be sure it will rust and degrade and have almost no value in about ten years time.

The people we are selling the gold and diamonds to, what are they doing? Most are locking it up in safes. They know even after 20 years those substances will have much higher, or at least, the same value. In those twenty years, gold and diamonds do not need a service, they do not need mechanics, they do not need replacement parts and they do not consume fuel to be useful. They do not depreciate. It is called investment.

Yes a car is useful for transportation but for that you only need one or two good cars, not ten very expensive ones.

In Zimbabwe we take investable materials and exchange them with consumables. Consumables get consumed. If you buy food worth $100 in one sitting (because it is a 'high class' restaurant) once it served on the plate in front of you that is it. It has lost its value. Even if you do not want to eat it you cannot sell it to the next customer, but your $100 is gone for good.

We also have another very serious problem. The belief that government has the right to take money from people and use it for what it deems 'higher' priorities.

I am not going to take the risk of driving on Chiweta mountain at night, trying to earn foreign currency, just to hand the money over to someone else through the government. I am not doing it so that the government can take what Tanzanians have paid me, and hand it over to a minister who is sleeping in his Chisipite house while I risk being murdered by robbers on remote stretches of road.

That practice of taking people's money and handing it over to others, is what has killed Zimbabwe's economy. It removes the incentive for people to go out and earn more. Rather than go and negotiate the risky Kapiringozi at night, I would rather stay in the safety of my house.

If I am a foreigner with a lot of money, I am not going to let it sit in a Zimbabwean account. I will only bringing in what is absolutely necessary. Why take the risk that the Zimbabwe government will take my foreign currency, and give me something that I can't use.

As long as the practice of foreign currency 'allocations' continues, whether by committee, whether by command allocation, the Zimbabwe economy will not recover. The bottom line is people will not have confidence and trust in the Zimbabwean monetary system. It will be seen as a high risk area and it is natural for people to avoid risks.

So my advise to Mthuli Ncube is disband your committee. Let the banks deal with their customers without government interference. Money is a substitute for property and should be treated like any other property.

Mthuli, I cannot come and take your suit and allocate to my father, because I deem my sister's marriage ceremony to be more important than your business meeting. Chances are if I do it again and again you won't bother buy suits anymore.

But that is exactly what our government is doing with foreign currency. They will take a miner's foreign currency and allocate it to a minister because they deem the ministers trip to China to be more important than the miner importing spare parts for their bulldozers and other machinery.

That practice also has knock on effects. Where the miner were planning to mine a hundred tonnes of ore, now they can only mine maybe forty because they have to spend a too much time just sitting and waiting for an allocation.

Yes. The foreign currency allocation practice is actually reducing Zimbabwe's capacity to earn more foreign currency. It is a serious bottleneck for producers.

It creates a vicious cycle. We allocate scarce foreign currency to non-producers. We earn less because of that. We introduce more stringent allocation rules because there is less to go round, and we end up earning lesser foreign currency, worsening the problem.

Therefore end the allocation sytem. If ministers or the president cannot find forex for trips ngavagare kumba vadye sadza. Let them stay at home, there is plenty sadza they won't starve to death. Money should never ever be taken from producers for that purpose.