Programming is painful.
There are prevailing trends, prevailing code styles, and on top of that, frameworks and libraries that are in high demand.
I want to ask why I can't just implement everything myself, but the truth is that most programmers use libraries others have already built. You can't implement everything in the world on your own, and there's really no need to.
It's a matter of cost-effectiveness.
But to use what others have built, you have to know what others have built.
An approach that was recommended yesterday can become an antipattern today, and a security vulnerability can be discovered in a library you've been happily using. Yet if you chase every new technology every day, the time you need to actually build software disappears.
That's why programming as a profession is so exhausting. You're already busy building programs, and on top of that you have to know how other people are building theirs.
I'm a freelance programmer in particular, so once I start falling behind, there's no end to how far behind I can fall. I have no one around to review my code, and no one to discuss programming with.
My study materials are limited to technical documentation from AWS, Microsoft, and Google, plus whatever framework docs are currently popular, so my code style tends to slip into antipatterns or go wrong more often than not.
That's why I regularly browse programming information sites and communities.
Wandering around like that, I sometimes end up joining discussions. And that's where another problem starts.
Sometimes I confidently say something I had wrong and get called out on it; other times I leave a comment that doesn't fit the community's mood and get a flood of downvotes. On the flip side, a comment I dashed off without much thought sometimes gets far more upvotes than I expected.
I tell myself I can just read quietly and take only the information I need, but in practice you only get the information by actually bumping into things.
Personally, I think the best way to gain knowledge is to ask questions in expert communities. Most of the time you get downvoted, but occasionally someone will kindly walk you through an explanation.
Asking an AI is another option, but as anyone who has used one knows, AI quietly feeds you small inaccuracies even in my own area of expertise, which makes it hard to verify. If you use AI to establish your initial framework, you risk building on a flawed foundation.
When I'm learning programming knowledge, I always start by challenging what experts say in expert communities. People immediately show up to put me in my place, and every time that happens I shore up my position and build my own mental model.
Some might say this is simply asking for punishment. It's essentially living out Cunningham's Law in the flesh, the principle that the best way to get the right answer on the internet is not to ask a question but to boldly post a wrong answer. Watching sharp rebuttal comments pile up and the downvote count climb is never pleasant. Being exposed for your ignorance and attacked by strangers on the other side of a screen clearly drains emotional energy.
Honestly, putting it plainly: for someone else it's just one click of a downvote button, but it puts me in a bad mood. Still, that's how I learn and pick up raw knowledge.
Even so, being criticized by others is painful. But if I don't do it, I fall behind.
There are always prevailing trends, the things I use most often keep becoming antipatterns, and I always have to stay current with the outside world. I have to watch language changes and also how people are actually applying those changes.
There's no definitive answer about which workflow produces better results either, but I have to keep working it out by rubbing up against other people every time.
I sometimes wonder whether communication would have been easier if I had attended or been born into a good university in the English-speaking world.
If I had good colleagues around me and people I could seriously discuss code with, I wonder whether I would have needed to use this approach at all.
Then again, knowing my personality, friction probably would have existed even in a good environment.
I always feel like I'm standing on the margins.
The philosopher José Medina addressed the intellectual resistance that arises when you encounter perspectives that differ from your own beliefs through the concept of epistemic friction.
According to him, this kind of friction compels you to critically examine your own beliefs, discover gaps in your knowledge, and compare your views against other perspectives. He also noted that a harmful kind of friction exists, one that suppresses questions and doubt.
In the programming reality I've experienced, most of the time questions were rejected and I was dismissed because of my educational background. That was mostly the case with my failed graduate school experience too.
People who live in Seoul or Silicon Valley can test their thinking at work through code reviews, design meetings, and conversations with colleagues. That is Étienne Wenger's community of practice.
But for me, a freelancer on the margins, no such safe and institutionalized community of practice exists.
I always want to program independently, but to maintain the capacity for independent judgment I ultimately need other people.
I use social dependency as fuel to sustain intellectual autonomy.
Every time I debate someone I'm mentally exhausted afterward. But without that friction, I can't organize my own thinking.
I sometimes think that perhaps the reason I'm so cynical and pessimistic is that my desire for intellectual validation has never been satisfied.
But I know it won't be satisfied. The nature of my work ultimately comes down to assembling and delivering things that a particular subset of people need, nothing more.