Programming is intellectually challenging, and that seems make insiders and outsiders assume that in order to have some success as a programmer, one must be intelligent, rationale, sensible, or heaven forbid, wise.
Yet in my experience, it doesn't take a lot a long time engaging with the digital-technical community at large to realize there is often a large gap between intelligence and wisdom or even basic sensibilities. A field which has so many tools to objectively quantify their work and the result so often are debates displaying poorly concealed biases and egos.
I was visiting the Star Citizen subreddit where a user posted a readable, short, simple proof of concept to improve a longstanding inelegant UI element.
I read debates about languages and see the most reasonable of authors walking on egg shells and writing caveats like they are commas lest one misstep allows a snowballing tirade of people missing the point.
And more universally, I see people who have acquired anywhere from basic to advanced competency spit jargon of the most specific like it is poetry, in a field where learning specifics on the job is the norm (and not that difficult), it seems people cannot resist using obtuse language to virtue signal their intelligence relative to other people.
There are obviously exemplary members of the outward facing tech community; they often have great success for being the foil to what is above, but more and more I become frustrated and begin to believe that progress in digital technology is greatly hindered by the low quality background of interaction between those who use it.
I say this fully embracing that in a domain like tech where extremely complex and nuanced problems need to be solved that disagreements, sometimes passionate ones, will need to be resolved one way or another - I am not against or complaining about that fact; I am simply growing tired of what I think most reasonable people can identify as basic immaturity and the surprising and disappointing commonplace nature of it.
Do I have to issue any more caveats? I am dead certain their have been numerous and highly successful workplaces which were the anti-thesis to these complaints.
I have less experience in this space and in life than many of you - so please offer your perspectives.
That said, I think programmers are prone to some of this simply due to the fact that programming requires a baseline obsessive attention to detail that most people don’t want to think about. Combine this with the fact that businesses need tech and the situation has led to a lot of secure jobs for technical people with poor social skills. This has led to a situation where a lot of people can get by in a sort of comic-book-guy bubble of expertise without having to learn anything about civil discourse.
Now I think it bears repeating, these people are a tiny minority, definitely less than 5% in my experience working with hundreds of engineers over the decades. It’s just the increased size of the community and incentives online that cause them to bubble up without consequence.
From the above perspective, programming is more like politics/fashion than mathematics. There is in general insufficient respect for scholarship, a lack of universally accepted authorities, a consensus on what's high quality and low quality. There is too much dispute and room for profitless argument.
PS: We got attracted to this field; what does it tell about us? :P
And yeah, the industry very immature: it is idealistic, hype-driven and full of cargo cults. Which makes perfect sense: when you convinced yourself that you are a great intellectual, but all you do is building REST APIs, this makes you uncomfortable. So the next natural thing to do is join a cult. Maybe even start preaching. This gives you a sense of superiority you've been looking for.
There's a flip side to providing caveats and walking on egg shells: The culture is terrible at providing feedback. It's given when not requested, it's usually very very pedantic, or possibly delivered with some degree of irritation.
One thing that I find helps: separate things into objective and subjective categories.
code quality, best language, good design, cleanliness -- examples of subjective measures. They're going to vary by person, background and experience, thought processes, etc. They make for entertaining discussion topics, but not usually productive ones.
These generally are also the areas where people's egos and self worth get wrapped up. No one wants to feel like they're producing unclean code.
I try to focus more on objective things: does it produce the correct result? how much time will it take to on board someone to x y or z? It usually helps keep the discussion productive and helps keep egos at bay.
It's difficult though. People have opinions, and they want you to know about them. and they want those opinions to be facts. And it's most likely something we're all guilty of.
Yes, I think programming culture is immature as in there is lots that isn't yet well understood. I think the entire industry of software development is the same. But I think this is more a result of how young the field is compared to others. We've been building bridges, roads, etc for hundreds of year, but we're still trying to wrap our heads around software.
I think this is what makes it great. Yes, there are egos, and folks who strongly hold points of view that I'm sure history will prove incorrect, but I think that's what makes this fun.
To give an analogy - I've noticed that when my friends and I all get into a game (dota, back in ~2008, for instance) at roughly the same time, there's this magical period full of fun and discovery where we're all trying new things and exploring how the rules of the new space translate to outcomes. Sometimes we get suck in a local max and then someone dramatically finds a new mechanic that changes everything. This period is the golden period. This tapers off as we start to know which strategies work and we just continuously use those to win.
This is the point where the goals shift from discovery to execution. I've found that playing games past this point is just frustrating for me.
So, yes, I think we're still in the wild west era of software development, but I think it's kind of fun! I don't think it'll last forever and it will probably be better overall when it ends, but I'm here for the ride.
"Woodworking Mindset" is one antidote: https://scottstevenson.substack.com/p/lego-mindset-vs-woodwo...
A lot of the time being too high in conscientiousness actually makes it super hard to be creative: https://scottstevenson.substack.com/p/how-to-finally-make-so...
This is also what I think makes for great system architects and really differentiates them from “just” a programmer. The ability to reason about all the trade offs at each point and make that deal with designers+users etc in an amicable way. A good architect understands compromise and nuance whereas many software engineers often see it as a puzzle with one true solution.
So debate often becomes: there is one true way to do this. A difference in opinion is a difference in truth.
When I supervised teams, my favourite moments with junior hires was when they’d hit a problem that they couldn’t reason about without compromising something, and also when they’d invariably break something in the process because “it should work this way”.
It’s the best teaching moment. They can learn that best is relative. What may seem ideal is coloured by so many facets they don’t consider in the limited world view they’ve collected of the systems thus far.
The best are when they put out a UI based internal tool (so no designers involved). They’ll often get responses from users that they can’t figure it out but their own engineering mindset often can’t see past their logical flow and familiarity, to see to the lack of intuitiveness within a greater world view. Again, a really great teaching point about how intuitiveness is often non tangible.
Anyway all this is to say: as programmers we often think in absolutes , in binary so to speak. IMHO that’s one of the biggest issues in our community culture. It’s why we often fail to put ourselves in others shoes or fail to have discourse.
I think there are several reasons for this: low barrier to entry, short cycle times, almost zero distribution cost. Compare delivering new or updated SW to designing and machining a part or making a PCB.
That's what makes computer engineering so exciting and also sometimes frustrating.
I started programming in my early teenage years, and befriended a bunch of peers, as well as older folks, that were in the same "hobbyist" group. Yes, it intersected with a lot of other "nerd" circles - but what made the programming circle a bit different from the usual nerdy groups, was how passionate and dedicated coders were.
Lots of people made it their identity to be a computer guy, hacker, software developer, etc. and a solid share of them were pretty much hermits in real life - keeping to themselves 24/7, and just communicating with others over IRC or similar.
Then when these folks entered college/workforce/etc. they already had numerous years of experience, and had tied up those formative years with their self-worth. Lots of highly opinionated experts, to put it that way.
Someone presents an alternative way to do things? Or tries to come with constructive feedback? No, that's just stupid. I've been doing this 12 hours a days since I was 10 years old, have red 100s of books on the topic, have done 100s of open source projects, of course I know the optimal way.
My conclusion was that for people like that, the topic of programming is deeply personal. If you abstain from regular social life, "normal" activities and milestones, and put all your money on becoming a rock-star hacker throughout your teens and 20s, I can see why someone is so invested in that idea.
Unfortunately, I've worked with a bunch of guys like that. Many were very competent and smart, pushing out good products - but were a nightmare to work with or manage. Too much ego and not enough soft skills.
On the contrary, I think the problem is that these tools do not exist.
It's not necessarily a sign of immaturity, as a consequence of the audience and medium. Text is extra hard to transmit nuance with, and if you just get straight to the point any stakeholders with a side-interest will go go rabid.
But then you talk about using obtuse terminology as a virtue signal of intelligence or something. Have you read historical, literary, or other analysis / commentary texts? Such terminology abounds in those communities, are they immature?
The Internet is just a weird place, which is just a reflection of how people are.
I do think we're in a weird situation where people with less experience are likely to speak more. I would engage in these online discussions more when I was a teen/YA but I find myself doing it less and less. It's just not worth the effort to try and write something thoughtful when most people won't even bother to read the whole message before replying.
I'm much more interested in hearing the opinions of people who have actually touch most parts of substantially complex software that is delivering value but I don't think that desire is compatible with most social media.
I don't want to use Windows, when I hunt for jobs I avoid jobs that do not offer mac/linux laptop. This is probably immature (or as programmers we are simply spoiled).
There is hype. Some people that for 10+ years where writing Java are jumping ships to learn Go. Go is like Java 1.6, the error handling is cumbersome. Yet all those people say the simpler language is the better. They are the same people that a few years ago were cheering for functional programming in Java and streams...
Finally we have this cult of x10 programmer, being oncall 24/7, macho work ethic (workaholism) and changing the world. Seems like kids gone wild.
Most people read something and go on without commenting, it's only when they have something to make it worth the bother of a post that you'll get a response. This is why you'll see disproportional lots of nit-picking in responses here and elsewhere on the internet.
I spend a lot of time and effort in most of my posts here on HN trying to anticipate criticisms and being defensive as a result.
As far as using jargon, it helps remove ambiguity to help ease getting a point across. It's not something that people do to deliberately exclude people, for the most part, though I'm sure there are twits who do otherwise.
When it comes to hackers, and I would say most academics too, the weakness is a lack of falliblism. It's the tedious, unshakable obsession with being right about everything all the time.
The three words that would massively improve how many of us are perceived are "I don't know".
1. The majority of programmers/IT/Tech-workers are young (<=3 years of work experience). They don't have enough experience to know what's good (or even what matters) for their craft. (i.e. no one should care about programming language because often you don't get to pick it. Your employer does.)
2. The majority of programmers aren't in North America. They're in Europe and Asia. So there is a linguistic barrier. And this linguistic barrier will get hit because the majority of programming work is done in English. So many of these young non-north-american programmers are trying to polish off their English in these online forums. (So expect people to talk past each other or losing things in translation or flat out misreading subtext)
3. The majority of employers of young/non-senior programmers are not product companies. They're services, start-up, IT or financial companies. Services and start-up companies are sales focuses. So a programmers career path will always ultimately lead to sales to some extent. IT and Financial companies have a larger focus on infrastructure or data reporting. (i.e. majority of careers force programmers to become something else, like leaders. So there is a very real brain drain away from the craft)
---
for OP:
The simple solution to what you're observing is to stop reading online forums. Instead watch youtube conference videos, read books, and listen to podcasts. When programmers don't have anonymity, the quality and relevance of the content/discussion go up dramatically.
---
Irrelevant comment:
I think the reason for all this is because anonymity allows insecure/young programmers to test waters before asserting their ideas in the workplace. This is most likely what all the young programmers being pushed towards different careers are doing. They're looking for a magical piece of information that will force a business to align to their own career aspirations rather than changing their own goals to better align with their employer's objectives (i.e. a very uncomfortable sales-oriented self-transformation).
My personal experience is that inside of tech companies, things are very different than online tech forums. There are still debates, but people’s goals and tech choices are often much more aligned, and there are good reasons not to act immature about things, because everyone knows who you are and your behavior is being noted and recorded in performance reviews.
High quality internet discussions seem to depend on moderation, forum size, and participant reputation (lack of total anonymity). While HN is medium-large, it has very good moderation, and the point system helps with reputation (also the best conversations here I’ve seen tend to happen with people who aren’t anonymous at all, but who’s real-world reputations are known and carried online.)
On the lowest scale you have beginners who are just starting out and learning to code. They tend to be the most arrogant and those are the folks you will find commenting on subreddits like StarCitizen (and other gaming subs).
On the other side of that delta you have complex enterprise software. This stuff takes maturity because programming is just one part of it. It gets past programming and goes into architecture, best practices, culture, etc.
So what you end up with is a community where both the 16 year old who just learned Python and an enterprise SWE with 20 years experience are technically in the same field of “programming”.
I’ve worked mostly with the latter group and can report there is little to no immaturity there. These folks have been around the block, and it always ends up being a very professional environment because of it.
A big reason I feel that the delta is there besides the age and experience difference is where your pride is. If you’re just starting out your pride is in your code, your language, and you defend your choices there. Higher up the totem pole you have pride over a piece of software you delivered, and things like the language you use is just a small part. Tell that 16 year old that Python sucks for the task and they will feel slighted for you saying that. Tell that to someone working on a large software project and they will likely agree or at least hear you out, because their pride is in the entire package, the individual pieces are less important.
The bright spots in the 20’s I’d say are things like elixir and rust, which are bringing some more esoteric development techniques into the light. I don’t know enough about property based testing to say if that’s a way out, but it does point to the possibility that testing is actually NP-complete, which would help explain why decomposition is so damned effective. It reduces the branching factor to something we can manage by hand.
The problem with this is our industry does not establish firm practices and licenses like in other disciplines like civil engineering, legal, medicine, etc. This causes us to focus on tech luminaries as a guiding post of how to behave in the field, which leads to chaos if the tech luminary is dishonest or unethical. We refuse to learn lessons from the past a repeat failure patterns, over and over again.
As technology starts to eat the world, the people affected won't even have the opportunity to respond with laws or regulation, because we have no insight into what the field is going to do next and no way to control what people do.
This felt wrong when I read it.
I agree we have many, many tools to objectively quantify aspects of our work.
Where I disagree: these tools only measure _some_ aspects. There are many aspects where we don't have good tools for measurement. Some of those aspects are for all practical purposes immeasurable.
For example: measure maintainability.
I think what happens then is the same thing that happens in politics. We take proxy metrics that _are_ measurable, and try to extrapolate over everything. The debates and egos come from arguing which proxy metrics should be weighted which way.
Then I realized I'd propose an alternative hypothesis: programming as a craft is immature.
I could never imagine civil engineers arguing over proxy metrics to the effects of natural forces on a bridge.
Can programming _become_ mature? I don't know. I'm skeptical of any claims that it can be. They all seem rooted in a gut sense of a particular weighting of what we can measure.
We've all developed our own biases based on experience and along the way we form a mental model of how "software" should be built. For example, many of us have been burned by some technology or language and we warn people away from it. This isn't a bad thing. It reflects, to an extent, contextual knowledge that isn't really going to be found in a google search or by reading the tutorial. Take it with a grain of salt. That negativity probably harbors some contextual issues that engineer ran into at some point. Noted.
As engineers we take pride in our work. No engineer likes to have his work challenged, so we all become defensive about our way of doing it. Over time, if your not careful, we can get pretty prickly about how to do something. Rather than immaturity I'd call it being resistant to new ideas. Its the old adage about "if you have a hammer...".
I think it's up to each of us how we want to relate to various communities of people. For me; I've accepted the chaos of people and try to spend my time wisely.
You've sort of answered yourself here:
> Yet in my experience, it doesn't take a lot a long time engaging with the digital-technical community at large to realize there is often a large gap between intelligence and wisdom or even basic sensibilities.
The ability to solve problems in one domain does not naturally extend to all domains (or even adjacent domains). I've seen engineers come up write technically impressively code, while concurrently a believer in "Overunity energy" - enough to buy tickets to free energy conferences.
Exactly. It's also a matter of choosing the right work environment. I moved from a startup with quite a few junior employees, to a more experienced team in a FAANG. One thing I noticed is that bike shedding was much more limited, and people much more pragmatic. It was quite refreshing. Maybe I'm lucky with my team dynamic, but overall I think that experienced SWEs are less likely to lose time with stupid debates and are more eager to get things done.
I know that might sound harsh but I really believe that to be true based on my interactions with tech people.
I see this a lot right here on hackernews. You could say as an aside "nobody likes getting kicked in the genitals" and you'll have some folks actually-ing about it obnoxiously -- and they'll ignore the real thread of conversation. There are also folks that can't or more likely choose not to understand hyperbole. It's exhausting.
Why bother spending time doing this?
Forums with gamified points/award systems encourage people to 'win points'. These systems and their goals are not aligned with humanity, healthy debates or avoiding dogmatism. They don't necessarily preclude the desired behaviour, but they certainly don't incentivise it.
By "debates about languages" do you mean comparing one programming language to another (in full or in part)? I think that sort of discussion has always been problematic -- flamebait. It's not just technology or programming or highly technical topics. It's not just the internet. See vim vs. emacs, Holden vs. Ford (cars in Australia), milk or water first (when making tea).
> authors walking on egg shells and writing caveats [...]
I think this is more common on the internet today, compared to many (maybe 15?) years ago. People weren't arguing better back then, its the eggshells that are new.
The Star Citizen reddit user presumably appeared as an expert in that forum -- who would question them? Does the same thing happen if you make a claim about the viability of some choice in the game, which other users would be likely to have some expertise in? In my experience, disagreeing with a gamer or disputing the dogma (or "meta", perhaps) surrounding a game is a very reliable method of starting a bad argument.
- Programmers are people. People have biases and egos.
- It's easy to see problems in things you know a lot about and also in things you know very little about.
- "The world divides into people who think there's two kinds of folk and those that don't." (a Custard song, title missing)
(I didn't finish writing this but the time it is taking me is actually becoming a problem. There's a few points in there and hopefully someone finds something worthwhile.)
My suspicions are that well we sit at a computer a lot. That's not normal. Granted now smart phones have risen the tide of general intelligence one way to help the general populace. At least one would think - because I feel in general a lot of people have less patience than times before. Nowadays most arguments/disagreements where could be figured out by the sum of intelligence involved - since everyone is low on patience the immaturity of response/solutioning is poorer.
Its also a sign of immaturity to have your value determined through eternal views and society, aka to be eternally stuck in high school, without experiencing the growth events that allow one to transcend that scenario via creativity.
Computing science is also quite immature, because of all the mathematical sciences it is by far the youngest. I don’t think that’s what you meant though.
It's the same feeling I used to get when playing MTG against Timmys/Spikes at local card shops. They're no fun to play with, have a good time, or to learn from. They're smug, douchey, and a turn off.
Its the same in every field, knowing the latest and greatest ten dollar words let's people know you are ingroup.
* Some people think "Microsoft rules, and Linux sux" and other people think the opposite
* People talk about project management the way that they talk about agile (I'd say that agile proponents and detractors are equally bad... It's the style of the discourse that is the problem.)
* There is a general lack of respect for all of the skills that it takes to make software: for instance all of the trash frameworks (e.g. Microsoft's failed MVC for .NET) written by systems programmers who think they are better than applications programmers but have no idea of how to structure an application systematically.
Some reasons:
- The field skews young. Like it or not, younger people are more obnoxious and doctrinaire than people with more experience.
- It used to be that the field attracted people who loved technology for its own sake and loved creating things (there was not much social cachet or recognition). But now it increasingly attracts people who are much more competitive and feel the need to project confidence to the point of being arrogant (any field that throws off large amounts of money eventually attracts these types). They are drawn to the money, recognition or a religious zeal to 'change the world'.
- Technical decisions such as libraries/languages/frameworks to pick are often the only avenues for self-expression and autonomy that are left in modern companies. Product Managers are often non-technical (still!) and tend to infantilize programmers. Programmers, despite making more money than other functions and providing obvious value and leverage, still have much lower standing in companies.
- Religion has disappeared from most people's lives, and for many, the religious fervor is replaced by fervor of a different kind. This is also why SJWs have proliferated everywhere. People need to believe and act on their beliefs.