From the outset, Programming is hard. Anyone who says it is easy is missing the salient point of programming.

That salient point is that you as the programmer have to gain an understanding of the target field you are programming for. Programming is about solving problems for someone, not just writing code to a specification.

A lot of the comments, so far, are talking about programming languages, programming tools, programming frameworks.

These are NOT programming, these are the tools you use to program an adequate solution to your problem. Unless you are continually gaining knowledge in every field that you are programming for, you are staying a novice. This does not mean that you have to be a subject matter expert, but it does mean that you have to gain enough knowledge in that field to be able to provide a solution for the subject matter experts (or others that will be dealing with your solution in that field).

Too often, I have found that "so-called gun programmers" have not only NOT understood the the field they are providing a solution for, they dictate what that field is supposed to "put up with".

I have spent nearly 40 years programming and I have come across many people who can churn out code much faster than I, but many of those cannot provide an adequate solution for the problem at hand. They cannot and have not been taught to think outside the "box".

I have also worked with many who cannot churn out the code but what they do give you is (at the minimum) an adequate solution to the problem at hand. They effectively solve the problem as it actually is.

Many years ago now, I took over the maintenance of a small system that was being used by 6 or so people. By the time I was finished, it was handling 60+ people simultaneously in at least 7 different fields for a single telecommunications project. The reason I tell this is for the following:

The base system in use was that venerable old girl, MS-Access 2000. This was one of the constraints of the system.

The original programmer was a highly paid foreigner (British) who basically told the subject matter experts that this was how they would have to work.

Part of the process I undertook was to find out what and how they needed to work and rebuilt the system to do it appropriate to the needs of the project. The satisfaction and appreciation was very encouraging.

Once this was seen, each of the other functional areas wanted to get on board. The application was then expanded to include these additional groups.

I got various complaints from various people about how hard some of their tasks were because MS-Access could not do want they needed. They had been told this by management. Finding out what they needed became the incentive for providing a solution. That meant for one person, I cut their after hours report production down from 3 to 3.5 hours every night to about 3 minutes (included production of reports, formatting, emailing to international management, emailing to national management and local report printing). His wife and daughter were very happy to get him home at night at a reasonable hour.

Programming is understanding the problem at hand and providing a workable, efficient solution using the tools at hand. This means that you have to be able to understand the subject field with enough detail to provide that solution and make it easy for the end user to use.

Early in my working life, I had people who encouraged this mindset and multi-discipline learning. Not everyone is capable of this, or even wants to do this. This then leads to the shmozzle that is the industry today and its continuation is the outworking of many of the major IT industry players who are interested only in the easiest way to make a profit.

Programming is hard because you have to become a "jack of all trades" as well as an expert in your own. You have to be able to document all the assumptions that have controlled your development activity, the "whys and wherefores", the paths taken and in some case the paths not taken and why. Too many "programmers" think that documentation is not really needed. They are happy to show off their "tricks" to enhance their reputation as good or great programmers, but anything too hard to do is left for some other shmuck. To those of us who are tasked with expanding, maintaining, correcting or even rebuilding applications, we find that the lack of intelligible documentation just makes the entire process that much harder. It does then behoove us to provide said information.

I have extended family members still in their teens who are recognised as brilliant programmers, yet they fail to appreciate that knowing programming languages, frameworks, tools and toolsets is only the beginning of the process to becoming a good and maybe in the future a brilliant programmer. My job as an old programmer is to expand their multi-disciplinary education is as many ways as possible, so that they become much better than me.

Programming is hard and it is not what a lot of programmers believe it to be. It is much much more.