I'm seeing a bit too many answers with "programming is not supposed to be fun", and I disagree strongly.
Sometimes, I turn on good music, take a bottle of liquid happiness, then program for several hours for the fun of it. I'm not accomplishing a task, I'm enjoying the process.
This is very understandable and "normal" to me. I have started programming when I was roughly 13, in the early 8-bit home-computer area (Atari etc.). These days, I am a senior manager in a large IT company, and when I need stress relief, I grab some project and program for a bit; also I frequently am able to help youngsters out when they are at their wits end with some programming task. Last holidays, I played the games TIS-100 and Shenzhen I/O for a week straight while sitting at the beach, which consist of programming some more-than-weird assembler dialect.
That said, during my studies of CS and subsequent work in the field, first as programmer, then team-lead etc., the number of people that align with this view were indeed minimal. Unfortunately, many, many people really are in this job for "solving problems", not because they enjoy programming.
It is not about being a recluse, sitting in the corner of a room all day, and writing lines of code until your finger bleed. But enjoying something is, at least in my opinion and experience, the only source of real learning and improvement. I see it everyday, people who do not actually enjoy programming a) regularly fail to grasp more complex topics, b) are stressed out a lot, c) do their best to get out of programming ASAP. It is a meme in my rather large company, that young people do programming, and older (sometimes even starting 30+) get out of it as quick as possible for some managerial position. I am one of the few in a "post-programming" position who grasp what we are even doing today on a less-than-abstract level, and it is very saddening to me. (And do note that I am not lessening the importance of having experienced "architects" or other roles, which make up a significant portion of my work as well, obviously.)
For me, this is like working as a cabinet maker, and only wishing to sell the finished result while not being interested in the look, feel and smell of the raw wood or the beauty of the work itself.
I view it as the most important and beneficial job of a CS educator to instill fun about the field, not the least about programming, in the students, no matter what age or experience level. Do not be dissuaded from that by the difficulties you face.
That said, I have not really found a way myself to instill real, deep joy and interest towards programming in people who do not already have it. I have met many people who program all the day for many years, and don't enjoy it a bit. They enjoy "solving problems". Which usually means taking as many shortcuts as humanly possible and trying to get done with it ASAP, scorning the type of the work they must do.
Do all you can to make it fun for your son. With my (younger) daughter, I'm very slowly and partly successfully introducing her by the means of Minecraft (=> with its minuscule amounts of "programming" optionally available there); we tried Scratch (didn't interest her); she will probably get a Nintendo Labo set for her next birthday; I even showed her some BASIC (in an actual Atari 800 XL emulator :-) ), but that was more like "look what your old dad did 100 years ago" and obviously not really applicable in todays world. She saw a "hello world" (or rather "hello YOURNAME") and at least has a small inkling about what it's all about. Aside from that, she's obviously also at the level of "dad, can you show me how I can program a game like Minecraft, pretty please"...
She is still a bit too young for more, but my strategy is to get her hooked at some point, when she will be able to research stuff herself (just as I did back then with paper books). And obviously she will need to find something that actually interests her. If we don't find that, then I will be very happy about her not becoming a programmer / CS girl in the future.