Look, I'm so bright that people can't look at me without wincing. (At least I assume that's why they can't bear the sight of me.) But even after decades of experience, I still find programming difficult. It's not just people issues; it's technically demanding, too.
It wouldn't be if I had just gone on writing orbital mechanics software in Fortran decade after decade, getting more automatic with each passing year, but that's not what "programming" means to me. Every decade or so there is a sea change: corporate mainframes > personal computers > database-backed websites > online economy > mobile > ?
Within each paradigm, there are new platforms with new languages, APIs, libraries, and tools that matter. Yes, I learned years ago how to manually lay out the logic for looping and branching and recursing and callbacking. Like manual-focus Nikon lenses, they're all still useful today.
But it's maddening that the advanced skills that give me leverage in one era are built into the APIs, libraries, and frameworks of the next and no longer give me any advantage. It's maddening that no matter how much I learn, every new team seems full of people half my age who know far more than I do about the tech stack we're using, and I have to wait for the next technology pivot (sometimes more than a year!) to obsolete their advantage and reset the game yet again.
Having to rebuild your skillset over and over is both a technical and emotional challenge that makes software development ("programming" in the real world) hard.
It wouldn't be if I had just gone on writing orbital mechanics software in Fortran decade after decade, getting more automatic with each passing year, but that's not what "programming" means to me. Every decade or so there is a sea change: corporate mainframes > personal computers > database-backed websites > online economy > mobile > ?
Within each paradigm, there are new platforms with new languages, APIs, libraries, and tools that matter. Yes, I learned years ago how to manually lay out the logic for looping and branching and recursing and callbacking. Like manual-focus Nikon lenses, they're all still useful today.
But it's maddening that the advanced skills that give me leverage in one era are built into the APIs, libraries, and frameworks of the next and no longer give me any advantage. It's maddening that no matter how much I learn, every new team seems full of people half my age who know far more than I do about the tech stack we're using, and I have to wait for the next technology pivot (sometimes more than a year!) to obsolete their advantage and reset the game yet again.
Having to rebuild your skillset over and over is both a technical and emotional challenge that makes software development ("programming" in the real world) hard.