Sometimes A Luddite's Perspective Is Interesting

me in the garden

I advise on and develop computer software for third parties for internal use or resale as well as developing products which are marketed under my own name, or in the past the name IS Associates.

Ian Smith, Worcester,
Yet Another Freelance Software Engineer/Programmer

Why You Might Want To Come To Me - I am a very experienced old fashioned programmer, sometimes this is a positive and sometimes a negative.
I am probably of most help if you have bought in to the deskilling of programming that has been happening over the years and things aren't working out.

Or you are stuck with part of your project as it is outside of your comfort zone.

Or you are starting from scratch and are unsure how to proceed.

I am probably of least help if you have a team that is already working well and you need someone to add some extra capacity for a short time and you are heavily invested in frameworks like MVCs or ORMs (e.g. Entity Framework).

I am an older programmer who started his working life writing assembler on a 1MHz 8 bit microprocessor with 256 bytes of RAM.

At the other end of the technology scale recently I wrote a C#, WinForms, ASP.Net, Web Forms, WCF system creating and fronting an SQL Server databases with 500 million plus rows, which was used to manage email marketing campaigns of millions of emails per month.

People who needed the power and flexibility had a desktop app, others who only wanted to see “results on an iPad” had a web app and some people who needed to access to the raw data has WCF web REST services (APIs).

In the middle size wise, I wrote a full cycle EDI administration and quotation system for household and motor insurance using MS Access/VBA to provide a front end to an SQL Server database and a C++ quotation engine.

The important point of mentioning these systems is that they show that a lot can be achieved using a variety of tools and that I am happy to go with the ones that you want.

There is of course the caveat that the choice must make a reasonable amount of sense.

The assembler background is important as it teaches a programmer an awful lot about what has to go on to achieve anything even vaguely useful.

So when you write a high level command you have an understanding of the computing resources that you are asking for and it makes you think. Should I really use that library function or write some code that will achieve the same thing using far fewer resources but take a lot longer write?

The modern trend is the opposite off this, trust the programmers less and force them to uses design patterns, things like MVC (model/view/controllers), blindly follow SOLID principles and use javascript libraries (Angular, React etc) to form the basis of a system.

The problem with these patterns and libraries is that although they have sensible roots all to often they have taken good ideas too far.

It's only once you get deep into your project they you realise that they leave you restricted in how you develop your applications and often result in fragmented and difficult to maintain source code as well as being resource hungry.

Even worse than all of the above is that all to often they also leave the project owner stuck 10 years down the line when they are abandoned by their creators in favour of another new "best way" of doing things.

And whilst neither PerBI or IPL have been commercial successes they are complete standalone Visual C++ applications that exist in the market place. One where users can send in emails saying that It doesn't work, please fix it.


Sometimes You Need MS Access, VBA And C++

An MS Access form used as a programming language screen
Print #i16FileNum, "typedef CMap< unsigned int, unsigned int, " & Format(rs("BaseName_char").Value, ">") & _
"_STRUCT, " & Format(rs("BaseName_char").Value, ">") & "_STRUCT& > " & Format(rs("BaseName_char").Value, ">") & "MAP;"

An MS Access form that looks like a programming language screen and generates C++ code.

Programming Is More About Experience Than A Specific Language

This is an example of where thinking matters more than the programming language, if you know enough of them.
The C++ and C programming languages allow for the creation of the smallest, fastest and least resource intensive programs, they are also the hardest languages to learn and the most prone to be buggy and just shutting down unexpectedly.

At the other end of the scale there are VB/VBA/C#. Most people who are familiar with C/C++ are also familiar with VB/VBA/C# but many people familiar with VB/VBA/C# are not familiar with C/C++.

In this example the objective was to deskill the maintenance of motor insurance quotation engines which were initially written in C++ using COM to interact with an administration system created in MS Access/VBA.

MS Access and VBA are used to create a forms driven system that generates C++ code which is then compiled using Visual Studio giving the best of both worlds, high performance and ease of programming.


Step 1 Step 2 Step 3 Step 4
A list of the commands that make up a step A single command's options The conversion of the above step to c code C++ code generated from the above forms
The first step is a break the processing up into steps, here calculate the base premium. Each step is composed of commands each of which have a dialog box ensuring that a well formed command is created. Once all of the steps are completed each of these steps are then converted to C++ code and merged with boiler plate code to makes up a full quoter.

Finally An NMAKE project is automatically created and invoked to end up with a dll that can be passed to the live systems.
This is the final C++ program.

You can see that some of the C++ code directly maps to the commands in the Access form but also that some doesn't. The code that doesn't is necessary for the quoter to work but never changes and the person maintaining the quoter doesn't need to know about it.

For example the assignment to q_FactorSave makes the result of this step available via a COM method DllExport double __cdecl StepFactor(int);.


And Sometimes You Need C++ And Assembler


The optimiser missed a trick and a bit of assembler dramatically improved performance.

The risk of course is that it is compiler version dependent and who wants to maintain it?

But You Still Need To Know What Language Is Best For The Task

It is very tempting to think that modern computers are so powerful that they are effectively almost unlimited in their capacity, but this is not true or even close to it.
Indeed some programming languages use this increase in power to increase programmer productivity at the expense of slower running programs.

After all if the program produces a result in 1/1,000 of a second rather than 1/1,000,000 of second who cares?

The problem is that as the amount of data that needs to be processed increases this becomes 1 second or 1,000 seconds and then everyone cares.

The reality is usually not this extreme, the time increases to almost a second, then a second or two and then even more. During this period the users gets fed up with the system but the delay is not so great that the time to fix the issue can be justified.

And this is not as farfetched as it might sound, but all it means is that that you should change the programming language that you use for this resource intensive step. Or possibly discard a built in library function of that language and replace it with one written for your specific case

Quite often this slow down was predictable if the programmers had understood exactly what they were doing, but It worked fine with our test data of 10 customers.

However this "simple" replacement is often impossible in reality as many programmers will not have the necessary skills.

The explosion of the internet has created a huge pool of people who have learnt a little bit of PHP/ASP.Net and don't realise how much they don't know.

Equally their managers also don't realise how much they don't know and make decisions based on their advice.




Go/GoLang or a VB Console App?

A Go directory listing

Sometimes you just want the computer to do things with little or no user interaction.

But do you need a cross platform code and support for 100,000 concurrent users or just code that can be easily and cheaply maintained?

Batch Processing Is Not Dead.

Sometimes "batch processing" is still the best way or the only way.
In these days of the internet it is easy to think that everything should be immediate, but sometimes this is not possible and sometimes this is too risky.

For example if you allow someone to update their account online immediately, no matter how many firewalls and security processes you have in place at the end of the day you have to expose at least part of your live accounts database.

You may decide that you are happier with a process that only exposes a read only copy of the live details and a database of changes and then apply those changes at the end of the day all in one go.

By applying the changes as a batch you avoid exposing the live database to the internet and can make informed decisions based on the totality of the changes. For example if you normally have updates for 10 accounts a day and today you have 100,000 then you may decide that this is an attack of some sort and not apply the changes.

Sometimes the updates can come from a third party, such as a file from a credit card company confirming payments for monthly/annual subscriptions. These would normally be applied in one go by a program without user intervention.

As such batch processes are run without user intervention they need to be programmed in a different way to programs that can ask for user input. If you need to process 50,000 items at midnight then the program can't just stop if there is an issue with the first entry in the batch.


Web Design, WebSite Design, Web Developer


I am better suited to sites that are mostly C# with either minimal markup (HTML and CSS) or where someone else is doing the markup.

This Is Probably One For Someone Else

Generally I am not the place to go to for simple web sites and as an example of a more complex site I have put up a simulated car insurance price comparison site.
There are already many people specializing in brochure or e-commerce sites.

Nowadays most websites are a commodity product, your site creator will pull elements from their "stock" and customise them to your requirements.

This means that the best prices with the most choice will usually come from people who specialise in web sites and have a very large library to draw on.

As I don't have that library I would have to charge you the full cost of originating the work, rather than spreading it over say 20 clients.

So if what you want is pretty much a copy of something that has already be done then the best place to get it from is from the people who created the original.

If however what you want is technically complex and visually simple then we may be a good match.

For example a site that needs a unique and complex database design with say 100,000,000 rows or one that does complex calculations but gives relatively simple answers.

Many web sites involve little or no programming at all, so a company that can set you up with a site that has a comments section and a CMS that allows you to post articles may be at their limits programming wise.

To try and explain this difference I put up the car insurance price comparison site example. The more complicated programming bit is the process that calculates the premiums, something that you don't really see, only the results.

Finally you might find this Checklist useful.


Do You Want A Successful Project?

Ten pound note in a sink by the drain

I think that I have only ever had one big failure.

Finally I am going to do something odd and talk about failure, let's face it failed IT projects are very common.
We often see on the news that a big government IT project has failed and may think that That could have done by a handful of people that I know in a few months.

The assumption is nearly always that it is the programmers or the system's designer that got it wrong, this is convenient but is it fair?

Or was it the case that the project would have been a failure even if were 100% complete and fully met the specification?

My worst project was one that should have been 6 month's work but it got bogged down because the commissioner of the project wanted a new system and the rest of the company wanted to keep the old one.

Another project used SSIS/SSRS when a C#/VB application was more appropriate because the project commissioner understood SSIS/SSRS and not C#/VB and had only gone to an outside supplier because he was being pressured internally to get the project completed.

So it is very important to agree not only what the objectives are but even if they are achieved will the project be a success?


Other Interesting Pages On Some Of My Sites.
Personal Business Intelligence
PerBI Screen shot Personal Business Intelligence PerBI (Personal Business Intelligence) is a data analysis or business intelligence tool designed for use by "normal people" not IT Departments and is intended for use alongside existing administration systems.

Although developed after experiences with insurance brokers, PerBI is relevant to any business that has up to 20,000,000 transactions that it wants to analyse.
Car Insurance Premiums Explained
Generic car picture Car Insurance Premiums Explained This site aims to explain how car insurance premiums are usually calculated in response to repeated questions on various internet fora such as;

I added my mum as a driver and the premium went down.Why is someone quoting £300 and someone else £1200? Why is my renewal premium higher than my first year's premium?
Buy A Ghost
Picture of a cat with yellow star Buy A Ghost is a light hearted source of one page ghost stories aimed at pubs and restaurants as talking points.

Print them off and put them on the tables or walls and you have an instant talking point.

Aimed at regulars who have run out of things to say or new groups or couples as an ice-breaker.
Please note that these links do not use any tracking cookies or similar technology.