There has been a lot floating around the meme pool recently about how more people - possibly even everyone - should learn to code. The most high-profile manifestation of this is the Mayor of New York taking an online JavaScript course.
At one time, maybe fifteen years ago, you were either a programmer or you weren't. Then people started playing with VBA in Excel. They created entire database systems in Access. They got a free copy of Visual Basic CCE on a disc taped to the front of a magazine. The free Express versions of C# and VB .NET came along. Now half the population are programmers.
I'd like to be able to say this is a good thing but, honestly, it isn't. However much modern development environments abstract away the complexity of software development, that underlying complexity is still there and is actually very much greater than ever.
To tap away or drag-and-drop away without understanding or even being aware of that complexity is just the path to chaos. There are many fundamental concepts that "proper" programmers don't even consciously think about, they are just hardwired into their brains, but they are crucial to their everyday work. But the amateur programmer, blissfully unaware of this, cannot help but create inelegant, inefficient, unfathomable and unmaintainable code, whilst being intensely proud of what is probably the most complex thing they have done in their lives.
You might argue, quite reasonably, that the sort of development done by non-professionals if of the type that would never get done at all by professional developers, and that a far from perfect system is better than none at all. This may well be, but the scope of many systems grows rapidly, and a small system put together by somebody in accounts or marketing or wherever just for their own use gains interest from colleagues who ask to use it or for it to be expanded. Somebody else asks for it to be integrated with some other system, perhaps the company's "official" system. The system's proud parent runs out of talent and then the IT department starts getting involved. They take a look at it and - with a level of tact and diplomacy dependent on the begetter's seniority - inform them that the best thing to do would be to dump it and start again, but, of course, IT don't have the resources to rewrite a system which might have become business-critical very rapidly but which they didn't even know existed until yesterday.
If you are a professional software developer there is a good chance this is all starting to sound familiar. I'll round off with a list of Daily WTF style situations I have come across caused by people determined to prove the old adage "a little knowledge is a dangerous thing".
Every day around mid-morning the system (SQL Server, about 50 users) slows to a crawl for 10 or 20 minutes. Finally it just crashes. Culprit: someone in accounts has figured out how to attach tables in Access using ODBC, and then proceeds to query the two largest ones for a daily report. With a Cartesian join.
Some guy I don't know from another floor: I've put together this Access database but have got a bit stuck, could you look at it for me.
Me: Stifled groan.
Me an hour later: Why does this code export data from one table to a csv file and then import it to another table?
Some guy I now know from another floor: Because I could figure out how to export and import csv files but not how to copy data from one table to another.
Me: Stifled groan again.
Me to esteemed colleague: If you want me to export data into your (home-made) system you'll have to add an integer column for the ID.
Esteemed colleague a bit later on: I've added that column. It's a 200-character string, is that long enough?
Email from client: I am an experienced and competent VB developer but need a bit of help doing (XYZ).
Reply from me: You just need to write a couple of lines of code to do (XYZ).
Reply from experienced and competent VB developer: I don't want to get involved in anything advanced like writing code.