I can’t share the sentiment on constant learning. 20+ years in profession and the fastest delivered, the most practical and the most value-for-client things I made were on a platform that didn’t change since around 2000-ish. Not 1.5x difference, but like more than an order of magnitude.
Love for constant learning is a moonshine we drink to avoid looking soberly at our “industry”. It went through one breakthrough per hundred breaking rehashes type of “evolution”, and still goes. Can’t express how morally tired of it I am.
My road was also long, broad and bumpy, from assembly to ts with most of the intermediates you may find in popularity/year charts. And every time I was hoping it was the last thing I learned, that it is a bullet mostly silver, and where it is not, I know what to do. But this train never stopped and now I know 20-30 times more than what can be effectively used. Not that I’m the brightest bulb out there, but isn’t that a senseless waste of intellectual effort.
Learning new things is good, learning the same things in new paint, or too much paint to find the genuinely new, is tiring. In particular languages and ecosystems I find quite boring, it's hard to find the genuinely new after learning maybe 5-7 very different languages.
Trying out new architectural approaches to avoid known problems, achieve better maintainability, flexibility, performance... compared to older approaches hasn't gotten old to me. Not the brightest bulb myself though :-)
I know how you feel: There is no end in sight for learning, and the signal-to-noise ratio is low (aka: percentage of actual breakthroughs to rehashes of old things, or pretention of progress).
And the exposure to this "noise" - which is unavoidable - leads to the feeling of being overwhelmed. I could not start anything, because, what is the point?
That is one of the reasons why I am building those little isolated islands for myself: my personal projects that I want to do. I am trying to keep at it for a couple of years now, and there was some epic failures, but when it works, it feels really good.
Also, I am trying - sometimes unsuccessfully - to isolate the state of the industry (or my work) from my hobby. Work wise, it is laughable at best: so much talent is being wasted. I don't want to claim a high ground here by saying that this waste was avoidable, but really, it was (and is, most of the time).
I feel like complexity has been weaponized by whole industries, by companies and by professionals. It doesn't require a conspiracy: it's easier to let complexity creep in, it makes people feel smart and makes clients captive to tools they don't understand well enough to replace and ecosystems that preclude migrating away from. The rationale I keep hearing is always: "I just wanna solve the immediate problem and move on", and the complaints are also very consistent: "Systems are hard to understand, to reason about and to change". Yet no-one seems to acknowledge the cause-effect relationship and just pretend like all of this is inevitable.
> I have been programming for more than 20 years, and I still feel like a novice. I still feel like I am learning the basics. I still feel like I am learning how to learn. I still feel like I am learning how to think.
> This is merely a reflection on an activity I deeply love and cherish.
This exactly matches my feelings 25+ years in. I've been up and down the stack from games and animation to enterprise crud, to tools and frameworks, to embedded and motor controls. It's all so gorgeous and beautiful and stupid and wasteful.
There were so many years when I thought I could see a destination just a bit out in the distance. Alas, it was always a mirage. Of course there are skills, but it's almost all taste and values at the bottom.
My favorite thing in the world now, is pairing with really junior people and learning to see it all anew.
> It's all so gorgeous and beautiful and stupid and wasteful.
Indeed. I don't think of hobby computing as stupid and wasteful if it's something you enjoy and it doesn't harm others or the environment. On the other hand, I've seen so many examples of harmful and wasteful computing systems that create intense negative effects, directly and indirectly, intentionally and unintentionally, usually in order to control humans and/or accumulate more money.
For the record, I was talking more generally about all the software (including much of what I've written). It's just awful in almost every way, but also beautiful in so many others.
It's literally all of them. I think Apple puts in enormous effort and skill to create beautiful software (and things too), but then these efforts make contact with reality and become something incredibly frustrating and ugly.
For example the glass surface on an iPhone. This is a beautiful object in many ways, but it's meant to be held securely in a human hand and hopefully survive falls from 3-4 feet. Slippery glass is one of the stupidest surface materials one could choose for the back of this device.
We can dig around in just about any open (or closed) software. There are always some small, beautiful ideas floating around in there just waiting to be seen. But then, when the code is actually executed it becomes a terrifying Geiger-like[0] morass of interconnected tentacles that reach into unexpected places and rip at whatever soft flesh they touch.
I feel like I've been able to keep myself refreshed by pairing with jr engineers every day. If I am unable to pair for a couple weeks I start to get grumpy.
Something about getting to see them learn it all for the first time really helps me feel refreshed and like I'm a part of something bigger than just pushing small plastic buttons all day.
Pair programming is an wonderful activity for me as well. Some of my best work, and memories, were made in that context.
Strangely enough, it is becoming rarer these days that I find a partner (it has been ~2 years now since my last pair programming)
I also really enjoy pair programming, and I think most people agree that two heads are better than one and will usually produce better results.
What's interesting about this moment in time is that the main objection to pair programming has always been cost, but this year I acquired a permanent pair programming partner who's practically free and will be with me forever. This partner is a bit dim-witted and random but has somehow memorized the entire Internet, so I haven't fired it yet...!
I'm referring, of course, to a LLM. While I don't buy into the hype that we're just moments away from general AI, I've found that the most effective way for me to work with ChatGPT or Github Copilot has been to anthropomorphize it a little and imagine that I'm actually pair programming with it. Conversation is just such a natural interface, and it adds a bit of levity to my work.
One thing I found weirdly absent is your interaction with the internet. I learned a lot during those time from codes at sourceforge and other sites before stackoverflow existed.
This is an interesting point. You made me think about it.
The interaction with the internet evolved over time, but it was handicaped by biases - and probably the language barrier as well -.
At the beginning, it was mainly to get books, and follow "general" discussions in forums. Books - maybe due to a cultural bias - always felt like the "right way" to learn. The "community" part was really absent from my mind.
This was enforced, unfortunately, with the overwhelming experience of seeing someone's code and not understanding anything. Somehow, my fallback after such experience was: I need to study more books.
It is difficult to explain, but there was a mental leap here that I didn't make for few years.
This is a great read. With 20+ years of experience in the industry (various capacities in software development, content marketing, SEO), I am all for the concept of continuous learning. However, we have to establish a foundation first and then start the explorations. That foundation would be there to keep our sanity intact while in pursuit of the next shiny object.
Personally, I have been rooted to Python since last 6 years, while exploring the wonderful world of JavaScript.
I enjoyed that. It was an honest, humble, useful reflection, and I wish the author well. They seem like a decent sort, and our poor industry desperately needs more “decent sorts.”
I had a similar background (especially the hardware core). I feel having a start in hardware, gave a tremendous foundation to all that followed.
One of the biggest epiphanies that I had, was when I realized that tech had gotten way too large for even the brightest polymath (which I am not) to master. I had to pick a direction, and walk that way, avoiding getting distracted by squirrels.
At the same time, I learned to keep long-term plans extremely vague, and go into focus on only the most immediate tasks. This is also how I tend to do my development architecture. I plan to change plans, and my architectures tend to have a lot of modules, “hooks,” bottlenecks, and “flex points.” Makes pivoting and repurposing straightforward. It’s basically habit, these days. Also, a pretty heavy-duty focus on code quality and documentation[0].
WFM, YMMV.
For myself, I’ve learned that I really enjoy “making things that people use.” UX, usability, accessibility, localization, and affording mental models. It gets sneered at, a lot, but is a huge challenge, to get right. Many great projects fail, because their engineers think that the UX is just “useless chrome that any schlub can do.”
Designing UX is designing around human nature; one of the most complex and unpredictable systems on Earth.
What gets a bit grating, but is also just basic human nature (so isn’t going anywhere, and also isn’t just a tech phenomenon), is folks that insist that if we aren’t experts in <TECH THEY ARE GOOD AT /> don’t use <TECHNIQUE THEY ARE PROUD OF /> or don’t use jargon, that we are “bad programmers.”
Personally, I find people that are truly good (as opposed to just facile) in stuff that is not my bailiwick, to be fascinating, and I appreciate having them around. I like to work on “heterogeneous” teams.
I think tech is wonderful. It isn’t a monorepo. There’s a hell of a lot of submodules, and each is a flourishing, rich, interesting world, with the ability to engage and enrich you. If you don’t like one, move to another.
I will say that shipping software, is different from writing software. There’s a lot of hard, grinding, boring work that we need to power through, and, sometimes, that work exceeds the actual engineering and design work. It’s not for everyone, and demands a different skillset from your standard geek arsenal.
Love for constant learning is a moonshine we drink to avoid looking soberly at our “industry”. It went through one breakthrough per hundred breaking rehashes type of “evolution”, and still goes. Can’t express how morally tired of it I am.
My road was also long, broad and bumpy, from assembly to ts with most of the intermediates you may find in popularity/year charts. And every time I was hoping it was the last thing I learned, that it is a bullet mostly silver, and where it is not, I know what to do. But this train never stopped and now I know 20-30 times more than what can be effectively used. Not that I’m the brightest bulb out there, but isn’t that a senseless waste of intellectual effort.