>My stance on this has probably shifted in a negative direction over time, primarily because of my growing awareness of how often technology is used for wealth accumulation. I don’t think capitalism will solve the problems that capitalism creates, so I’d be much more optimistic about technological development if we could prevent it from making a few people extremely rich.
What's wrong with people getting rich by producing goods and services, and selling these to willing buyers? People laundering wealth into undue political power, regulatory capture, erecting barriers to market entry ("pulling up the ladder behind them") are different problems than people creating wealth. Efforts on creating a just society should focus on the former - preventing wealth creation is not the solution to injustice. In fact, since people have vastly different abilities and inclinations for creating wealth, a just society is also one with vast wealth disparities.
I don't think he's saying no one should get rich, just that wealth inequality is already too large and seems to be on a path to continue growing. I think most people would agree there is some point where there is too much wealth inequality, we just disagree on whether we're already past that point.
Wealth is power.
When you have enough and the rest don't, it's inevitable you will use it for political power.
This obsession with anti government sentiment that Americans have gives them a blind spot for the fact the power accumulation in the hands of the few is the problem. Not government.
How exactly could you stop so called 'wealth laundering'?
Some abuse of wealth for political power may be inevitable but some countries are a lot better at limiting it than others.
For example here in France the amount of money politicians can spend on campaigning is strictly limited (and reimbursed by the state for those that pass a certain threshold of the vote). I'm not saying that it's perfect or that abuse doesn't sometimes still occur (as the current court case involving ex president Sarkozy shows) but I think it does improve things a lot.
Contrast that with the American system where to have any chance of becoming president (no matter which party you support) you basically have to be rich. And where multiple lobbyists and special interest groups basically buy the policies they want...
> What's wrong with people getting rich by producing goods and services, and selling these to willing buyers?
If you take this sentence and change "people getting rich" to something else (like "fomenting drug addiction" or "polluting the environment"), does anything change? Whether the inequality is a result of "selling goods to willing buyers" is a complete red herring. If that consequence is bad, it doesn't really matter whether it's a result of supposedly "fair" market exchanges.
Others have already pointed out that it's not really plausible to avoid the "different" problems you mention while still allowing unlimited wealth inequality. But aside from that, how do you know that the buyers are willing? What is the set of alternatives being considered to decide if a person is "willingly" choosing a certain product? It's difficult to even maintain the pretense of "willing buyers" in a "free market" when some individuals control a large market share. Miners living in a company town were "willing" to buy groceries from the company store in the sense that they needed to buy groceries, but they didn't really have any other options for how to express their "market preference".
Even if markets were free, there's nothing inherently good about a free market. What's good is a free society, where people in aggregate have substantive freedom to do what makes them happy. That goal isn't furthered by allowing a small number of wealthy people to pursue their goals while a large number of less wealthy people are unable to do so.
> If you take this sentence and change "people getting rich" to something else (like "fomenting drug addiction" or "polluting the environment"), does anything change?
False equivalency. It is possible to gain wealth without performing any of the listed/possible negative global effects. Furthermore, it is a backdoor towards injecting ideas of poverty being a morally positive position.
> Even if markets were free, there's nothing inherently good about a free market. What's good is a free society, where people in aggregate have substantive freedom to do what makes them happy.
Having a free society implies the freedom to exchange with each other with minimal restrictions. Not allowing people to do so runs opposite to the ideals of the stated intention.
--------------
All that being said, that *doesn't* mean that the current market's working as intended. What has been inherited is a complex tangled ball of national ideals, personal & corporate persuasions to governments for their own reasons/goals, & consistent global coordination failures when circumstances change.
But the outright banning of markets is equivalent to the banning of hammers, just because hammers are sometimes used to bludgeon people to death. It is ultimately a tool, and a very useful one in terms of signaling demand & supply.
> Having a free society implies the freedom to exchange with each other with minimal restrictions.
I don't think that it implies "with minimal restrictions", any more than it implies the freedom to do anything else with minimal restrictions. In any case, a free society also implies a lot of other freedoms, and insofar as wealth accumulation interferes with those other freedoms, it's not adding to net freedom. An abstract "freedom from market restriction" is not useful if you don't have things like the freedom to eat or the freedom to sleep peacefully.
> Not allowing people to do so runs opposite to the ideals of the stated intention.
Not necessarily. Not allowing anyone to engage in market activity probably does; allowing everyone to engage without restrictions also does. The point is that markets don't have some magical special status as a component of freedom.
> But the outright banning of markets is equivalent to the banning of hammers, just because hammers are sometimes used to bludgeon people to death.
I'm not suggesting banning markets, I'm just saying that the mirror image of your position is also true: elevating markets to some mythical status and insisting that they are the ultimate litmus test of freedom is like saying that because hammers can be used to build houses, everyone must be allowed to use hammers however they please. Markets (just like everything else) are okay when controlled and regulated within their bounded role as a component of society.
Money is a proxy for rights to resources. If rights to resources are not widely distributed, there are power imbalances that are no different than royalty. The majority of humans have rejected royalty in all but a ceremonial role in recent history.
> What's wrong with people getting rich by producing goods and services, and selling these to willing buyers?
They are not producing goods and services by themselves, but by having a usually massive workforce. We as a society are saying “ok, it is fine to keep the money if you work like that”.
On the other hand, we are seeing in real time what super rich people want in the end: power over the rest, not just money.
I don't particularly worry about someone making $100m dollars from their tech startup. I worry about how a few hundred Americans have more collective wealth than the majority of the country combined. And it seems that computing is really good at eliminating labor and consolidating wealth, further increasing wealth inequality and reducing worker bargaining power.
In capitalism, power correlates with wealth. So wealth inequality yields power inequality. Too much inequality, and a society can hardly feel just. If we only could somehow fix capitalism so that wealth doesn’t correlate with power.
Rich people once they made their wealth creation move on society they no longer need to work. Their capital gains actually start increasing from the ownership of human capital. So they get richer and richer without contributing work. In fact that wealth gained without contributing and creating new wealth rises at a compounding rate. Simply owning enough capital your wealth will grow at speeds that far excel what a person earns doing actual wealth creation whether that means creating a startup or labor.
So if you no longer create wealth but your ownership of capital is growing at compounding rates then what exactly is happening? What’s happening is that you are siphoning and extracting wealth off of people who create wealth. You own human capital so you take a cut of it off the top and you use that cut to buy even more human capital which compounds your wealth ownership to even higher levels. This is how billionaires like Warren Buffett or other investors grow their wealth by simply investing rather then creating wealth.
Thus wealth inequality is not a result of wealth creation. It is an artifact of capitalism. In capitalism wealth is variable among individuals and it fluctuates. However once wealth accumulates in concentration higher then normal among one individual or several it hits that compounding growth factor and wealth starts going up at astronomical rates and these wealth owners start buying up more and more human capital until they own all of it and benefit from all of it without actually contributing work.
You can see this effect in y combinator. The owners of y combinator don’t actually do much work. They have so much capital that they simply can take a bunch of no risk couple hundred k bets until one startup becomes a unicorn in which they rake in a ton of capital from the growth.
Think of this like property ownership. A rich person can invest his wealth in property and contribute zero work to society and simply rent his property out. The rent from the tenant is from wealth creation aka labor and the rich person simply siphons it from the top without contributing additional work. The property owner uses that income to buy more property and the cycle continues until you have an affordability crisis of housing across the US and the world.
This growth continues unimpeded and uncontrolled until the wealth inequality is so extreme it doesn’t logistically work. This is direction the world is heading in today.
This isn’t the full story though. When you take away capitalism to solve this problem you invent communism. Communism was the result of Karl Marx noticing this problem that is fundamental to capitalism. That’s why he got popular because he illustrated the problem of wealth inequality and how wealth naturally becomes more and more concentrated among a few individuals without those individuals creating wealth.
Hence communism spread all over Europe but was ultimately a failure. The reason why it’s a failure is because communism lacks incentive. It turns out that wealth inequality is what drives wealth creation. Without the ability to be unfairly rich you don’t get the economic drivers that promotes wealth creation and thus communism keeps things fair but you don’t create wealth.
So no system is perfect. Everything has problems. Actually I take it back. There is a perfect system. See Scandinavia. Basically create a more socialist and egalitarian society while benefiting and extracting technological wealth from adjacent societies that are capitalist. Have the government own human capital of countries that are very capitalist then redistribute that wealth to its citizens so those people can live in a more just society while the rest of world can burn.
YC partners own capital right? I mean the labor they actually do doesn’t translate into the income they receive which is astronomically more.
Take for an example: a yc partner can take everything they know and train someone to do the same work and pay that person a much lower fixed salary. That salary represents work contributed, but a yc partner earns more than this. The majority of wealth gained from the yc partner does not come from actual work contributed… it comes from capital gains from growth.
I mean you can already see a logistical issue with capitalism by looking at a fundamental problem. A 747 is the result of thousands of man years of labor. Not one single man can build that thing. Not one single man can create enough wealth to create a 747.
Yet if one man can’t create enough wealth to create or trade for a 747 how do people become rich enough to own a 747? Of course it comes from siphoning wealth off of human capital. It is fundamentally unfair but unfortunately unfairness is the ultimate driver that led to the creation of the 747 in the first place. The idea of having an unfair advantage must exist to drive people.
Nobody needs to be rich enough to own a 747, in order to justify making one. In fact, I doubt there are more than a dozen individually owned jetliners in the world. All you need is for a lot of people to pool their wealth and allow it to be directed towards a common purpose. In turn, this happens because society provides entitlements (such as financial and corporate regulations, the money system, etc.) that allow great ventures to be formed and operate.
The entitlements are justified by a social theory, that the activity produces a net benefit for everybody. There may be pockets of unfairness -- no system works perfectly -- but no reason why it must allow unlimited unfairness. If it does, then there's also no reason why it can't be restrained.
>Nobody needs to be rich enough to own a 747, in order to justify making one
My argument is not about the justification to making or owning a 747. It's the justification for how is it realistically possible for ONE person to own enough wealth to buy a 747 EVEN when his own intrinsic abilities are not great enough to build a 747. This is orthogonal to society pooling together wealth and building a 747 AND orthogonal to the actuality of a wealthy person purchasing a 747.
At best a human can probably output the utility equivalent of 3 other human beings if that human has super strength or genius level intelligence. But the ability to make a 747 which takes thousands of man years to make? What sort fair exchange did the person engage in, in capitalist economy to generate that level of wealth WHEN at best his own output can only be 3x the average human? Obviously the exchange he made is fundamentally unfair.
The thing with communism is that it's unfair. You distribute resources equally, then actors who don't perform get an undeserved portion of wealth. Capitalism on the other hand is fair in the sense that the amount of effective effort you put in the more wealth you gain? Or is it? Then how come in capitalism you get entities that own enough wealth to buy a 747 when clearly the amount of work that person can output is obviously not even close to the amount of work used to create the 747 itself? That's the issue, and it's a small issue.
The bigger issue is that the person who has enough wealth to build a 747 has assets that will grow in compound. He will get richer and this will eat the world as what's currently happening in the actual world right now.
Yesterday I had a very similar argument. Maybe I haven't been paying attention until now but this is the first time I see somebody else summarize it so clearly.
I've come to the conclusion that value (you call it wealth) is created by work. Yet the fastest way to get rich is to own already created value (a fixed amount) and use that to buy power/influence (e.g. buy a company) to take a cut from value created by other people over time (an unbounded amount).
IMO this one-time vs indefinite distinction is the core of inequality.
Currently, reward is based on capital invested, it should be based on work invested.
There’s a famous book on it called Capital by Thomas Picketty. It’s one of the first economic books to approach a subject utilizing a data driven approach. It’s actually published not as a text book but as popular non fiction.
The story is more complicated than just rewarding people for work. You must make them work togetheron public works that don’t directly benefit them. But people usually tend to work together only when they’re paid a salary and this can only happen if there’s a leader and huge incentives for someone to take that leadership role.
The incentive for that leadership role is the ownership of human capital.
It’s the idea of becoming dirt rich is what drives people to do startups and form corporations.
Most of the people I know who pursue creative/crafting hobbies alongside a software development job have chosen to work for well-known big companies, for prestige and safety, and ended up unfulfilled in their jobs.
Most big companies are not good if you want to solve problems and build stuff. Especially "the enterprise", where software is seen as a cost center so the less of it the better. The effort of managing up eats a creative person's soul.
I want the clarity of being able to talk to "the boss/the customer" and solve their problems and get paid the market rate for my skills. Not prepare endless PowerPoints for my skip-level, who has no ownership but has to act in their own best interests in a swamp of principal-agent problems.
This is why I am very happy at a fast-growing small tech company where one can have honest conversations about the customer and the product. How do other people deal with this?
At a level or two down from the abstraction of company size, crafting hobbies are also a reprieve from the tyranny of linters. So many programmers today believe that code is always better when it all looks identical. Consistency is a good thing, but not when it's expected to be absolute. Programming should actually allow for creativity, and where you decide to add spaces and newlines can actually add subtle but important communication as to the significance of a particular part of one's code. Most places I've worked in the last 6 or so years are obsessed with tooling and add so many lint rules that it's often impossible to merge your pull request if you decide to format your code in a way that violates the rules in some trivial way.
With woodworking, you can just do the thing. OK, I don't do woodworking myself, but both of my parents do, and I know that they don't spend their time bikeshedding or homogenizing their work. The tools they use are intended to help them accomplish something and aren't there to prevent you from doing anything.
It's possible to do personal software projects however one wants, but one will no doubt be faced with the modern compulsion to want to "do the right thing" and add a bunch of time wasting tooling. If you don't, and you share your code, inevitably someone is going to want to add a bunch of rules and bureaucracy to your software that was already working and free of serious problems in the first place.
How you choose to add whitespace to your code is not a meaningful outlet for creativity. Linters are a great tool for eliminating bike shedding.
I don't think wood working per se gives you more flexibility than building software. It's wood working as an individual, not part of a team, so you can make your own decisions and not answer to anyone. If you were a one man software consultant you would have the same amount of autonomy.
> How you choose to add whitespace to your code is not a meaningful outlet for creativity.
I'd like to mildly disagree. Using whitespace to group functionality together in "paragraphs" and aligning the horizontal indentation in the clearest possible way is not too far away from editing a short story to make it flow better.
Earlier today my linter rearranged multiple "key: value" one-liners into two-liners and the end result is both objectively and subjectively worse.
This is why I like when formatters give you some wiggle room in how the rules are applied.
Like, in Prettier, adding a trailing comma to a short list of items will tell the formatter to put each item on it own line, while removing the trailing comma will keep each item in a single line (if the line length is not too long).
I normally just auto-apply `black` to my code, but occasionally I feel the need to have things arranged in a way that is easier to read -- e.g. a list of several dictionaries. In that case, I just put a comment telling it to stop reformatting at the start of the block, and another at the end.
Yeah, it's proto-editing, but with such limited degrees of freedom in the activity your creative options are pretty limited and as time goes on and on the endeavor starts to look like this: https://xkcd.com/915/
Interesting, I can't tell if the comic is about "people will become obsess and develop taste in what they see every day", or "people will develop preferences to separate themselves into groups".
As a one man software consultant, I just want to point out that you are working with clients, in their systems, on their problems. You provide advice, they make the decisions they deem best for their company.
You get to choose the problem spaces and teams, which is a degree of autonomy. But it is not quite so free as “making your own decisions and not answering to anybody.”
It’s devex. Not for you, but for the reader. It’s part of the craft. We can argue about whether craftsmanship is creative or skill, but at the end of the day it’s satisfaction that they are chasing. Satisfaction they are denied at work.
Not that they can’t find at work. It’s actively taken away from them.
Yep. Imagine being a woodworker on a massive project like a large sailing vessel or Japanese castle. Suddenly coordination and collaboration requirements go right back up. Now you can't just wing your project. You've got to make sure the part your building matches the agreed upon spec and hope the teams you're "integrating" with have also followed the spec. When one of those teams gets "creative" suddenly things aren't fitting together and progress on the ship crawls to a halt.
When I think of going multiplayer with my hobby and doing something big, I'm not thinking about what you described - that's just walking into bullshit and letting everything interesting about your work be suffocated. No, I'm thinking Skunkworks, or Xerox PARC. I imagine others are too.
This happens literally every single day in residential construction. Aside from the building code, there isn't typically a "spec" for construction. The plan doesn't specify "this wall shall be plumb to within +/- 0.001 radians". Somehow, cabinets still get hung even though the framer framed a crooked wall on top of a crooked stem wall all because foundation guy was hungover that day.
That’s because average residential construction has some tolerance for error (and is therefore poor quality imo).
Sure - perhaps not plumb to within +/- 0.001 radians, but there’s still an expectation that the wall needs to be vertical within some error tolerance band (even if not specified). Error correction happens real-time - the cabinet guy compensates for the wall error, and so on.
That’s also why I find residential construction so shoddy (the US at least) - electrical junction boxes are always a little off-angle, cover plates aren’t flush, etc.
I curse the inferior linter formatting and at the same time would not have it any other way because why? Some diva would come in and put up a MR reformatting half the code base to their preferred way, mixed in with the actual change they are making and I would have to hunt for the actual changes in the reformatting noise. And then we would spend half a day arguing about it like in the good old days. Fast forward six months and there would be 6 different code styles in the codebase and it would just be terrible.
Sorry. Guilty party here. I used to be that diva at times, but also came around to your point of view after being on the other side of that several times myself.
But I think the biggest thing as I move up and spend more time reviewing code than writing it...style preferences make it so much easier to review code. Linters have given back years of my life at this point!
In my experience, it is not the divas who are the problem, but inexperienced developers (especially ones from non-CS background) who have a weird/no sense of formatting. I have seen my share of strange, inconsistent formatting in code reviews with junior developers.
Why not just set up a rule to auto-format the code before it is committed so that nobody wastes time discussing formatting trivialities and the repo stays consistent?
It would be fantastic if there was a good normal-form formatter I could use for local work, and let automation format the code back to lint style. Unfortunately with something like IntelliJ/Java the commit-time reformat is not reversible. Maybe google's Java formatter is, hmm.
I've worked in a place where reviews were obsessed with coding style. No one noticed serious bugs, but forget a space in the right place and you'd be doomed. And yet people still managed to rewrite stuff to their preferred style while managing to not violate any rule. No prescription about function and variable names? they'd change every single one their way. No prescription about argument alignment, they'd change it. Everything not esplicitly forbidden was an outlet to express their creativity or maybe tame their frustration.
This has never been a problem for me. Coding guidelines, clang-format and precommit scripts can do this automatically. Also a senior should reject or revert the work of the diva. You shouldn't accept this at all.
I think you’re romanticising woodworking a bit here. A large saw is specifically built to allow doing a single, precise cut, in exactly the same way, over and over again.
The tools are absolutely made to prevent you from messing up the various ways, it’s just that you don’t use the professionals tools at home.
And indeed that’s something I’d apply to software: both hobbyists and small companies are tempted to use professional tools (as in, intended for lots of engineers collaborating) for small projects or a low number of collaborators that don’t warrant such stringent rules.
Most of the stuff in the lee valley catalog is the same garbage you can get at rockler or any other tool outlet. The only thing possibly drool worthy are the Veritas tools. For the longest time I felt the same as you, I had assumed everything from LV was the same quality or at least close to the Veritas line. The truth is most of the LV stuff is garbage. On the other hand everything from Lie Nielsen is phenomenal, it's just not always in stock.
I spent a lot of time searching for and restoring old tools. I finally realized I was spending way more time on the tools than actually using them.
That’s not the arrangement of the words “Rockler” and “garbage” that will get you upvotes in r/woodworking.
If you had a Woodcraft in town you’d only go to Rockler for things you can’t find at Woodcraft. Which is largely cabinet-making and air handling equipment.
Lee valley and veritas are mostly making reproductions of golden age Stanley tools before the race to the bottom (what the kids call enshittification) started, with a few omissions or improvements. They aren’t garbage, they’re low volume. That makes them less appropriate for people being paid by the hour or piece.
I live equidistant, 15 minutes, from a Rockler and two Woodcrafts and I am not concerned about what would get upvotes in /r/woodworking.
I went to rockler this morning to get a reamer because the only reamers at Woodcraft are for pen making. With the exception of big brands like festool or powermatic most of the tools they sell at rockler are not great tools. This reamer is not great.
That’s kind of missing the point here (I actually do enjoy woodworking as a hobby! :)
OP complained about all the strict rules software engineers have to abide by, while woodworkers get to have all the fun with sharp tools, nobody telling them how to use them, and generally freedom at how they do stuff.
But that’s precisely the perspective of a highly compensated person doing manual labor for fun, not the one of a professional woodworker. It’s like someone cooking fancy once or twice per week saying chefs have such a great job because they get to dice the onion the way they like. Ask any professional chef how well that works.
Something you do as a hobby will always seem more fulfilling, because it’s a hobby. Anyone doing it professionally very likely also has strict rules to follow, you just don’t know about them - because you’re not a pro.
> A large saw is specifically built to allow doing a single, precise cut, in exactly the same way, over and over again.
Ignoring hand tools, which give you precise, tactile control ... I'd still argue with this.
There are tools for specific things and they're meant to reduce error. But a router (woodworking) can be used to do half the stuff you want/need to do. A table saw can make straight cuts, rabbets, joinery.
The tools themselves (outside of specialty ones) are generally multi-purpose and allow for experimentation and creativity.
Programming tools are no different. All tools are like this.
OP's complaint is about syntactical differences and that's just because his team doesn't agree with him.
And tbh, to me, the fun creative part in programming lies in architecture, not how I space my code. With woodworking, the creative part is how I put it all together but not the actual cutting part.
Note really. A table saw is incredibly versatile tool. Yes, it has a bog standard purpose of ripping stock to width, but there are scores of uses beyond that. E.g., removing the fence and freehanding a 20 foot piece of baseboard through it to cut a scribe. There are plenty of professionals who do that. Source: I used to be one.
> where you decide to add spaces and newlines can actually add subtle but important communication as to the significance of a particular part of one's code.
Isn't this part of the problem? If the purpose of code is to be understandable, the important communications shouldn't also be subtle. Your intention that the extra empty line before a block of code signals "This is the important part" is likely to be entirely lost on a reader of the code (especially in a codebase where the formatting isn't consistent so those spare lines are littered everywhere). Much better to leave a comment saying "there's a subtle but important thing going on here".
> Much better to leave a comment saying "there's a subtle but important thing going on here".
Sure, but don't let perfect be the enemy of the good. Well-meaning engineers frequently don't document their code at all. It's why I advocate programmers at least use descriptive variable names and function names; what I call "self-documenting code".
It still falls short of well-documented code but, as I say, gets you "good".
For sure, well-written code often doesn't need comments to explain itself; my point was that "there's an extra space here so you know this bit is important" is pretty much the opposite of that.
I do use whitespace (empty lines) to "group" parts of a function the way paragraphs group thoughts in prose. For a function it might be as simple as param-check, setup, loop, tear-down. But it makes it a little clearer that some lines of tightly-grouped code represent an "activity" (sub-activity?).
As an example, your own comment three above is split into three parts (quote and two sections of your own). Plus my comment here, split into two.
Code has its own flow and natural groupings just like human language, and adding spacing to match makes it easier to understand even though it is subtle.
This is a take I don't think I've seen before. Is someone actually mad prettier is changing their single quotes to double quotes? Are they mad some line is breaking at some word?
Certainly I've never been. I use linters / formatters even when I'm working solo because the mere concept of having to think where to break lines is meaningless disruption from the actual goals I have.
If you _really_ want to break a line somewhere, just add a comment in between and your linter will comply.
Strict adherence to formatting rules can impair readability, yes.
Before back-tick strings in JS, it was useful to employ both single/double quotes for strings -- you'd use one most of the time, and then if you needed to embed a bunch of that quotation mark in a string literal, you'd switch to the other one.
'my string'
'my other string'
"insert values ('foo', 'bar', 'baaz')"
A formatter with naive "single quotes only" rule would obliterate the last one to:
'insert values (\'foo\', \'bar\', \'baz\')'
unless you remember, before you hit save, to add a directive like:
// linter pwease preserve my qwotes
I still use linters and formatters every day, and on balance I think they're good to have, but it's ridiculous to pretend they don't have downsides, or that there isn't room for the occasional dash of human intervention in the automation; hence, the linters which have // linter pwease directives.
The key point here is that the formatter has to be sufficiently advanced to know to do the right thing the vast majority of the time. Once it gets there, and once you've gotten used to the code it produces, it's better. Note that the "prettier" formatter will do the right thing in JS here, at least with the default config. It will even switch "\"string\"" to '"string"' for you.
Linting is a bit of a different beast, because linting includes changes to the code behavior itself, not just syntax. In JS there are so many footguns, that linting can often be pretty involved/strict. I think most of the people who don't like linting in JS either aren't aware of the footguns, or don't do very much code review and haven't worried themselves much with "what sort of bizare and unusual ways can this fail" sort of a thing.
> Is someone actually mad prettier is changing their single quotes to double quotes? Are they mad some line is breaking at some word?
Yes, both of these.
Obviously there are huge benefits to auto-formatting in large teams and popular open source projects, but some people also find benefit in having control of alignment, line breaks, indentation etc.
Seriously. Python Black is a godsend. I don't have to waste brain cells on formatting minutiae, just right-click and go "format my code, please." It's consistent, it works, and IDGAF about the details.
The only formatting that drives me up the wall is people using K&R braces in C# or Java. It's not 1970 anymore, and we're not all typing on green-screen terminals. It's like people fetishizing vim or emacs over modern IDEs.
You know what annoyed me as a C/C++ programmer? People using Microsoft style braces... But OK, if you are using Microsoft-Java, then Microsoft rules apply.
AFAIK there is no rule in K&R requiring no braces for single-line blocks. In that situation, braces are optional.
The K&R style was hugely influential on Java and many other languages, it has nothing to do with green-screen terminals (I used those, as well as white and amber), it is just a style. I also moved on from vi, and use IntelliJ and Sublime most of the time.
The only difference between K&R braces and Java braces is that they combine lines on if-else. The Java guys did it because it enabled them to fit more code on to overhead slides. Overhead slide projectors predate green-screen terminals BTW...
..huh? But either way, should you ever be annoyed by K&R again next time you work with C#, you can trivially change it by setting csharp_new_line_before_open_brace = none in .editorconfig and running dotnet-format tool against solution files.
K&R doesn't just mean the opening brace isn't on its own line, it also means single-line blocks have no braces at all. Always using braces but not putting the opening one on its own line is 1TBS (not the best name, but I don't know what else it's called).
for some people talking about whether it's best to put a curly brace on its own line or on the same line as an if condition is like talking about which religion is the one true path to paradise...
Consistency is critical for reducing mental load when working as a team. Format your personal projects however you want, but when collaborating your editor should apply the standard format every time you save.
I absolutely agree that consistency, in principle, is usually a very good thing.
My objection is to the idea that it's always a good thing, which it's not. Treating code formatting as rules rather than suggestions, in my experience, is a waste of time and unnecessarily tyrannical.
In terms of mere code formatting, I don't buy that there's a meaningful difference between 100% consistency and say 95%.
It's far more important that APIs and other conventions are consistent. When constructs in the code aren't consistent, it can be an absolute nightmare. When code isn't formatted well, it's usually just annoying and can be trivially fixed with automation.
> My objection is to the idea that it's always a good thing
If everyone doesn't follow the standards all the time then there are no standards.
Code is not art, it's instructions.
If you can't write instructions without adding your own avant garde whitespace brush strokes to it then yes coding for a professional company may not be your jam.
I'll slightly disagree here because code needs to be read by a computer and by your human teammates.
There are times when I'm frustrated because prettier is making a necessary but unintuitive choice and causing my code to become harder to read. But those are rare, and I would never trade them for the guarantee of readable code the other >99% of the time.
Yes, this is fundamentally where I disagree with the person you're responding to and what seems like most programmers (or perhaps mostly web developers). If code is just instructions, it would look barely comprehensible to [most] programmers.
Again, maybe I came off as more extreme than I actually am, because I think that consistent formatting is a very good thing most of the time, but that last 5-10% that programmers in positions of power fetishize is where things can get frustrating and time can get wasted.
The worst is when linter rules are used for things that should be evaluated by a human being in code review. At a previous workplace, someone thought it was a marvelous idea to try and enforce things like functions having no more than 6 lines or some other poppycock. My current workplace is OK, but even then there are some stupid rules like not being allowed to assign `this` to a constant, even though the function in-scope is being re-bound by some stupid middleware making it impossible to use fat arrows or `.bind` (in JavaScript). Sorry, but I'll assign whatever the f*** I want to a constant that isn't escaping the current scope in any way. What's also funny is that I've never worked anywhere that didn't have `eslint-disable` sprinkled everywhere. In many cases, these rules should be warning instead of errors, but because programmers love errors for some reason, virtually every rule violation needs to be an error.
> What's also funny is that I've never worked anywhere that didn't have `eslint-disable` sprinkled everywhere. In many cases, these rules should be warning instead of errors, but because programmers love errors for some reason, virtually every rule violation needs to be an error.
Well I'm quite proud of having owned a certain repo at work which takes exactly this approach. If I have to disable a rule more than once, I take a good look at whether we need it at all, so we have extremely few `eslint-disable` comments in the entire codebase. It's one of the cleanest and most transparent codebases I've worked in -- but that's also an artifact of me spending long stretches working in it alone and having little oversight of how I spend my time. So there's a tradeoff :)
Programmers don't love errors. In fact, we see time and time again that even just seeing the word "error" causes programmers to forget how to program. It's their kryptonite.
But they don't see value in warnings. Either you have a problem that needs to be fixed or you don't.
My point was that removing code (not just reformatting it) without changing behavior is a gain, not a loss. Art is the opposite.
That tells me that the code itself is not important; the task/instructions the code performs is the important part. Therefore code is a utility, not an artform.
Yes I want written instructions to be understandable to humans, so my code conforms to tool-enforced formatting standards 100% of the time, not subject to artistic interpretation.
This is one of the major differences between hobby programming and work programming. When you're writing code as a hobby, it can be anything you want: code can be art, instructions, math, beauty, a means to an end, an experiment... At work, code must ultimately be a tool that creates profit. It has to be manageable, consistent, and boring.
It is a mistaken idea that work programming is or must be boring. I think you might mean "boring" as opposed to unnecessarily "creative" or complicated. But not all work code is boring, boiler-plate code.
I think of "boring" in this context the same way my dentist calls me a nice, boring patient. He means no surprises for either of us, nothing out of the ordinary, just a mouth in good shape with maybe a cavity or two.
That's how I like to see code. I don't want to struggle to figure out what you're trying to do. I want to be able to read your code and understand it easily and get on with what I need to do.
The opposite of this, keeping the medical context, would be the orthopedic surgeon who was so excited about how badly my then 25-year-old wife had smashed her wrist. "I never see this much joint damage in someone so young. It's incredible." Not words you want to hear from a doctor!
>Treating code formatting as rules rather than suggestions, in my experience, is a waste of time
How can it be a waste of time? The whole point is to avoid wasting time talking about formatting on PRs or seeing line noise on PRs because people have slightly different preferences or settings for code formatting.
Right, exactly. Code formatting should be fully automatic (format on save, verify on commit) so that no one has to waste any time thinking or arguing about it, ever.
What I love, is a code formatting check on the server side. Just check that the code is properly formatted using Biome or Prettier. Everyone can set it up in their editor, or run it manually however they want, and nobody ever has to think about it.
What I absolutely detest, is any kind of code formatting comment on a PR. If it cannot be enforced automatically, it’s not worth arguing about, and definitely not something to hold a PR up for.
Arguing about what 5% is appropriate is a significant distraction. I do not believe that any benefits from allowing these discrepancies are superior to the reduced mental load in authoring, reading, and reviewing code of "the linter is automatic and true". If a rule can be written into a linter, simply have it automatically formatted and never argue about it again. It eliminates entire classes of argument.
> Arguing about what 5% is appropriate is a significant distraction.
Yes.
> If a rule can be written into a linter, simply have it automatically formatted and never argue about it again.
That is unless one believes to have good reason to violate that rule, in which case suddenly time is being spent having practically the same conversation in this part of the thread that I started.
The point of automatic formatters is that they are universally enforced. There is no violation of the rule, even if you have a "good reason". If you have a pattern of good reasons, you can write to whoever controls your team's coding standards/linter rules and suggest a tweak, but you never have one-off violations, you just accept the automatic format.
Does your company not just use an automatic formatter? Set a prettier config, format the entire codebase and never have to deal with another formatting change in a PR ever again.
But my issue with formatting, while great most of the time, is that sometimes I want to violate it, and tooling around automatic formatting and format validation is usually installed with the intention that it is 100% correct all the time. Sorry, but as a senior programmer, sometimes it really should be up to me to decide whether code belongs on a single line, and I don't want to fight against automatic formatting or the CI pipeline throwing a hissy fit when I desire that discretion.
On the contrary, as a senior developer you should be able to look at and see the team-wide benefits of consistency. You don't have to handhold new junior devs to learn the style, you don't need to watch their PRs to see if they're being consistent, and you don't need to argue with other senior devs about whether something should be on a single line or not. You just let the automatic formatter do its thing.
Being a senior eng isn't about always knowing what's right, it's about knowing how to keep the team moving efficiently.
I think you’re selling you example short here. Linting and formatters should be about applying a minimal acceptable limit to code, not diluting everything to the same mediocrity. It’s been a long time since I ran into a formatter that I hate out of the box.
> In terms of mere code formatting, I don't buy that there's a meaningful difference between 100% consistency and say 95%.
I think you are contradicting yourself a bit with
> Programming should actually allow for creativity, and where you decide to add spaces and newlines can actually add subtle but important communication as to the significance of a particular part of one's code.
The point being that something small might have significance to one person but not the other.
And that consistency is probably important, but there is a difference between consistency of your stuff and consistency between your stuff and stuff of others.
So I think what it boils down to is that crafting hobbies are often more fulfilling not (only) because they have tangible outcomes, but because you can do them on your own and on your terms.
If you were to do woodworking where you craft one piece of a bigger thing (say a part of some larger furniture), you would also have to produce very homogenic and precise output. And it probably would not be very fun and fulfilling.
> The point being that something small might have significance to one person but not the other.
Yeah, that's totally fair. I think conversations can be had with such cases, and I think that trying to effectively eliminate the conversation is a bad thing, which relates closely to my overall objection. Ironically, it ends up in conversation anyway unless a developer is always a good little goober and never marches out of sync.
Maybe my mindset would be different if I saw great software around me, but I see mostly crappy and user-hostile software these days. I'm not sure whether strict formatting "standards" is of meaningful benefit for the users.
> If you were to do woodworking where you craft one piece of a bigger thing (say a part of some larger furniture), you would also have to produce very homogenic and precise output. And it probably would not be very fun and fulfilling.
Yeah, I guess you've identified where my thought in response to woodworking falls apart. haha If it were one's employment, it could indeed be as confining as being a programmer at BigCo.
> Most places I've worked in the last 6 or so years are obsessed with tooling and add so many lint rules that it's often impossible to merge your pull request if you decide to format your code in a way that violates the rules in some trivial way.
Shouldn't all the lines of code uploaded in a pull request be automatically formatted into the coding style preferred by the reviewer anyway? It should be like an automatic translation done by some bot or something.
That desire is in conflict with a desire for the reviewer to see only the changes and many of the diff tools don’t diff this reformatted code against that reformatted code but rather work on the pre-reformatted.
It could obviously be done, but involves a yak shave that isn’t clear that it brings enough value to be worthwhile.
It's not a bot but formatters like prettier for example make it very easy to set them up as git-hooks, where the formatter is applied on commit. Meaning, unless you specifically commit without hooks, all committed code should comply with the formatter.
For linting (e.g. eslint in the JS-space), this is also possible, however, most linting-processes tend to run just long enough to be annoying when run on every commit. In the monorepo I work on we created a command "prep-pr" which specifically addresses this issue - run it before creating a PR, and the CI-pipeline will mostly be green, at least in terms of linting/unit-testing.
Thank you for that: "linters" (but as a person's role, not as a tool).
Pretty sure that contributed to my early retirement from the industry. It didn't used to be that way — perhaps because there were fewer cooks; perhaps because of a more cavalier, cowboy-style approach to coding.
I definitely preferred the days of the open range....
If there's a small team, individual freedom can be perfectly fine, as everybody knows everyone and it's easy to talk with each other in case there are discrepancies.
For larger projects however, not having tooling set up that enforces certain consistency is an absolute showstopper for me. I'll either introduce it or I'll quit; I simply do not want to waste my time with developers squabbling over arbitrary formatting-choices or irrelevant coding-style-details that can easily be enforced by some tooling.
Of course, developer-experience is paramount. Meaning, the tooling must be easy-to-use and generally not stand in the way. Otherwise it can indeed create a lot of friction which will annoy everybody. But once this has been set up (properly!), it will make a lot of silly discussions and choices obsolete.
I hear you. But I’ve been programming for 30 years and I have some strong intuitions around where my code needs an empty line to space things out. Stuff like that. The day I first tried gofmt and it removed some of my carefully considered whitespace, I turned around, put blood on my hands in the old way and made a promise to the night that my soul belongs to me and gofmt will never sully my code with its corporate BS aesthetic.
Some consistency in a codebase is good. Naming consistency. Indentation. But people go too way far with it. Who cares if your JavaScript makes consistent use of semicolons? It doesn’t matter. It just doesn’t matter.
Sure; but when I join a team and they've already got a linter set up with stupid pedantic rules, they never seem to appreciate my complaints about it. "Oh god, can we not have that conversation again!". I understand. But nobody is happy.
Carpentry isn't my jam, but I've taken up piano. I love it.
I have similar feelings as GP about Black (probably the most popular python code formatter), which goes by the philosophy that linters should not be configurable because that just moves conversations about styles from the code to which rules to use.
Black also behaves decently wrt empty lines. It does have some opinions on that, like two lines between functions and in some other contexts, and at most one line elsewhere. But inside function bodies, it will collapse multiple consequent blank lines into a single one, but it will never remove them altogether, so it's still possible to use them to logically structure code.
Consistency is dramatically overrated. We all read through comment threads on HN where each is written in it's own style and nobody has a problem understanding it. I read through open source repos all the time, which all have their own styles and which are often not self-consistent; my comprehension is not impaired. I have worked with teams that enforce linting with a religious fervor and teams where anything goes. The anything goes team is probably more productive and with a comparable rate of bugs (but I don't have the metrics to prove it). Personally, I don't feel like my comprehension is better or worse in one setting or the other.
The difference I do notice is that when there are no linters, nobody wastes time trying to figure out how to work around it for a few lines. A great example is Eigen matrix initialization through the stream operator overload [1]. You really want to manually format that so each row is on it's own line. If you use clang-format in such code, it will be littered with
MatrixXf mat(2, 2);
// clang-format off
mat << 1, 2,
3, 4;
// clang-format on
which adds a ton of unnecessary noise which does impair reading.
I'll take the tyranny of the linter tool over not having it at all (and I've had both). At least with my current project, it's single-handedly helped catch tricky React re-render bugs, because it warns me when I'm missing a dependency, or also warns me ahead of time if I'm likely to encounter a re-render every frame (and what's causing it), etc.
Also it's helped keep unused garbage out of the codebase also, which people tend to leave in there otherwise.
Also prettier has helped in me no longer reviewing MRs where every single line shows up in a file because their local machine has a different tab indent set or a different way to handle newlines (like with or without carriage returns, IIRC).
Sure it styles some things that aren't my preference, but I don't have to do it myself, it just automatically changes it all, so I can deal with it.
And if something is especially annoying or causes issues, I can usually get an exception added to the configuration, at least on my current team.
> Most places I've worked in the last 6 or so years are obsessed with tooling and add so many lint rules that it's often impossible to merge your pull request if you decide to format your code in a way that violates the rules in some trivial way.
Symptom of nothing better to do, I have found ;)
Hard to picture someone who values their time blocking PRs on tiny stylistic nits.
>> With woodworking, you can just do the thing. OK, I don't do woodworking myself, but both of my parents do, and I know that they don't spend their time bikeshedding or homogenizing their work.
This is why woodworking is actually a poor analogy for software development. A better analogy is carpentry. And when it comes to carpentry, it is much more important to ensure whatever you're building is extensible or follow certain specs. The cabinets you make, for example, need to fit into a certain space under or over the counter, and need to be homogenous to a large extent.
It seems like you're making a distinction between types of work.
For hobby or artisanal pursuits, homogeneity isn't the goal. Often the uniqueness is a feature. But for mass production or large coordinated efforts, uniqueness is a bug. You don't want your car to be manufactured by someone who just felt like a 3mm panel gap felt more right than the 4mm gap the specs called for. Standardization makes coordination easier and that's why some products are better when they are homogenous while others are better when they're allowed to be "creative."
My theory is that excessive linter rules might be a symptom of trying to compensate for the weaknesses of a programming language. I see it a lot in Python and JavaScript projects where the language gives very litte guarantees about anything.
If you use a programming language that affords some guarantees like Haskell or even just C#, people seem to be less interested in linters.
Linting reduces the expressiveness of a language so that a large team can have some consistency.
It’s not necessarily a weakness of the language.
Languages like Haskell, C#, and Java don’t have the same amount of expressiveness as js, python, or ruby, so they don’t benefit as much from a linter, though I know places that use one for C# to prevent usage of the ‘var’ keyword
I like the big companies because I can be paid a hefty six figure salary while working 4 hour days and spending the rest of the hours doing woodworking, gardening, home remodeling, baking, exercising, reading, etc.
It's an odd thing - at all the big companies I've worked for, you can usually get all your work for the day done in 4 hours. Between meetings and status waste, that's all anybody expects from you.
What you personally do is only part of your job. Communicating with others is probably at least the other 50%. Even if your an individual consultant your clients will expect you to communicate with them.
I wish I could be so lucky. In recent years, every job I've worked for has reached a point where I had to endure 4 hours of meetings per day before we could even begin to get work done (if we were lucky)
The departments where people were casually putting in 4 hours per day mostly got axed during COVID and again during the 2024 recessions. There was a period of time where a lot of teams accumulated a lot of people so they could spread the work thin. Eventually management started catching on and put an end to that.
I’m very lucky. I work on a very small software team, with a very flat structure, where my boss, with a very high level of trust, tasked me with replacing several very old parts of the product stack using my best judgment and choice of languages/tools. He also appreciated that during the interview, I mentioned that my work must be oriented towards customer value; that is the ultimate goal of any of our work. I am often privy to client feedback. However, I am also protected by a hard communications firewall from direct contact with those customers, as well as the much larger field tech and sales side of the company. My job thoroughly satisfies my creative and technical needs, such that I do not pursue much programming or high-skill crafting outside of work.
Nobody believes me when I tell them this. Software is so thoroughly corrupted by the low-trust managerial paradigm, where massive hierarchies are built to justify high-paying managerial positions that end up reducing the efficiency and productivity of great programmers, that it’s simply taken for granted: We should never trust engineers to make independent decisions, to schedule their own pursuit of tasks, to pick the right tool for the job, to do this all with customer value in mind.
Who knows? Maybe I’m the exception and engineers don’t deserve to be trusted. In which case we have a very, very big societal problem. All I know is that our software team performs very esoteric group interviews, and our style seems very good at sniffing out pretenders and exploiters.
> However, I am also protected by a hard communications firewall from direct contact with those customers, as well as the much larger field tech and sales side of the company.
One of the worst faceplants I've seen in my current role was when my team was developing a solution to integrate some third-party data. Our PO reported to a Product Manager who was tapped as the "I talk to the end users" person and he completely fucked it up. The team was siloed off to do this for multiple quarters, and at the rollout we literally got laughed at and told "we can't use this." But God forbid my team actually, you know, TALK and DEMO to the end users once an iteration like you're supposed to in Scrum, as opposed to plugging in some drone from corporate who it turns out doesn't know what the hell he's talking about.
We have a liaison in a similar manner, but she manages a Jira ticketing system by which we require our sales people and field techs to fully communicate issues and feature demands. The company used to give out programmer phone numbers and emails. Projects used to get completely side-tracked by programmers chasing trivial features or even entire alternative tools and getting sidetracked long-term from the primary projects. It cost the company their leadership position and a significant amount of programmer turnover. It's still an ongoing issue that our field techs and sales folks simply do not understand the field well enough to know what they're asking for.
The ticketing firewall has been a net boon and we've been able to overhaul a number of ailing backend systems, while adding features that were in demand for going on two decades. Turns out, most of the features being requested were easy to implement given the right choice of languages and architecture. We went from constant fires to downright quiet in our office. Most of the ongoing project work is aspirational and would vault us back to industry leadership, instead of the constant remedial work that was bogging us down.
At small companies, across a long career, I’ve solved the same problems many times. But that’s not the part that stings the most.
What grinds my gears is failing to solve problems I’ve already solved. At some point you have to convince others that a plan is good. Your arguments might not work on a new team. You might not know what the secret sauce was that got you consensus last time. Or after years of getting your way you may forget some of the arguments for an idea.
Because mastery is, at the end of the day, converting an intellectual process into intuition, so you can go faster. Once a decision process is successfully ingrained, the intellectualized path is dead weight.
There’s a lot of vaguely intellectually lazy, cheap instead of frugal thinking, and ethically challenged people in or around our industry, and the collective weight of it causes pushback on progress.
> Because mastery is, at the end of the day, converting an intellectual process into intuition, so you can go faster. Once a decision process is successfully ingrained, the intellectualized path is dead weight.
That's where you write a blog post, a company note, or a book if you got the time. The best proof of mastery is teaching because that's when you got confronted to the problems from another perspective (the other may not learn it as well as you do). And you won't have to repeat yourself that much if your arguments and process are written somewhere.
Companies can be wildly different in how they operate, how decisions are made, and what trade offs they prefer, what culture they have.
Simply adoption something that worked in a previous place isn’t a way of usually making decisions, imagine a company with 100 engineers where they all came from different companies and have different ways they solved the cicd problem - how do you move forward from that ?
Decision making can be complex - can also be very simple, depending on the company ..
> Most of the people I know who pursue creative/crafting hobbies alongside a software development job have chosen to work for well-known big companies, for prestige and safety, and ended up unfulfilled in their jobs.
Depends on the industry. I've been doing iOS for over a decade. You're right in that there are different dynamics with enterprise that can wear you down. I find that to be less so the case with jobs in the retail sector. Things are always fluid and changing there.
Still, this is a very subjective statement. As someone in my middle ages, I've come to appreciate and understand how views change over time. The 20-something me would have jumped over to new jobs every 2-3 years. The 40 something me recognizes value in work/life balance, stability, and a more defined and often opportunistic growth path in larger companies. And it's at this stage that while I may not fully comprehend the occasional stubbornness of 60-something devs, I can at least approach their way of thinking as not wrong. When you have a spouse, family, and mortgage to support, the potential upsides of a smaller, more nimble company just don't overcome the peace of mind of being in the corporate world.
Sometimes jobs aren't just boring, but one is constantly stressed by absurd deadlines or communication efforts with bosses/customers whose expectations are both in line with business practices and out of reality. You surely get back home with a nice check, but no energy or will to spend it on anything fun. Being good at forgetting the workplace and associated problems when one walks out of there is an art not everyone can master, especially among those who actually love their jobs.
At Google I started to forget if I could even build things anymore. Doubted I would be able to pick up the skill of solving problems again if I left the company. I had strange and hard to interpret nightmares after realizing the company’s PR department had sold me a lie. At this point they are a traditional company.
I have a hobby that involves metalworking and building and it was strongest and I was at my most hobby-productive during a time I worked for a soul-destroying FAANG full of unreasonable expectations, stress, awful management, and so on. I think for the sake of your mental health, you really need to get good at "forgetting the workplace" and switching to fun mode. It's a skill like anything that you can practice. I know people who can't separate, and they take their misery from work and spread it into their home life. It's awful, especially for their family.
I fully recognized that would be required when I was in that situation. The TV show Severance kept coming to mind. I think I only saw a couple of episodes and the basic premise of dividing your mind between work and home was too real and I had to stop.
Thankfully I had an alternative and went back to startups. I could absolutely never accept dividing my brain like that, steeping in cognitive dissonance and just letting myself rot inside. Once you’ve felt the good life - where work is play and learning happens all day long - there’s no amount of money that can be accepted to lose that.
Doing the boring job at all is a waste of 50+% of your waking hours? By all means, do it if it makes the remaining 50% more enjoyable, but I think it’s possible to have both.
The non-boring companies I've worked for have had problems of wanting to work you at 150% of your schedule, quite often illegally. It is insanely rare that you'll get a job that keeps you busy (only) 8 hours a day constantly. Either the place is always on fire and has 12 hours of work a day, or you'll have it better managed and work will be bursty with the majority of the time under utilized. Spend that extra time being taught stuff on the company dime.
Possible, but unlikely today. I think the advice being converged on is not to let the possibility of 100% enjoyment ruin one's actual, real-life situation. Attain it if you can, but don't spend your life rueing its absence.
It's more so true today than ever before, where there are more companies than ever willing to consider allowing software developers, and some other kinds of knowledge workers, to work any where in the world.
It gives you more opportunities to find that combination of work you find meaningful, coworkers you mesh with, flexibility, and decent compensation, than any other time in history I'm aware of.
It's still not easy. Just easier than in the past.
I completely agree. As you stay, it's still not easy, especially in the post-ZIRP economy. Do I deserve to work with a team of interesting people, on a product I can be proud of, on a team that gives me flexible work hours? I sure do. But finding it is a big challenge for me, so I'm still going to celebrate the freedoms my current job gives me until I can find the right one.
But you know, at the end there should be someone who is cleaning the toilets and taking out garbage. You eating the cake and having it is a bit selfish.
Just because someone's cleaning the toilet doesn't mean that everyone must struggle. Yes, life's not fair to everyone, some people starve right now, while other throw away kilograms of food. Some people clean toilets while other people were born with gold spoon in their mouth and will enjoy whatever they want for the rest of their lives.
Daring to work at place that does not suck is not the worst offender to the world fairness, I think.
>Daring to work at place that does not suck is not the worst offender
But there is something to be said that some people are born into situations that force them to adopt a very risk adverse posture. If you don’t have any safety net, “daring to work at a place that does not suck” takes on a different risk profile and doesn’t necessarily generalize well as a strategy.
Me living in a 4 BR house with only our 4 family members instead of us taking in a stranger is also a bit selfish.
Everyone does some level of selfish things; trying to shape work so that you find it enjoyable (and therefore likely something that others would also find enjoyable) is an acceptable form of selfishness to most.
I think it was Joel Spolsky, who said one of his responsibilities as CEO of a new startup was cleaning the toilets until they could afford to pay a janitor.
I thought it was a good reminder to have an attitude of just seeing what needs to be done and doing it.
Why can't we just automate the terrible jobs out of existence? There's no good reason why we can't have a machine that cleans the toilet or takes your trash out to the street. Plus a self-driving machine that picks up your trash.
In corporations is not a lot of money, almost never the market rates. In my big non-IT company I am paid at rates lower than any external company we contract for projects, even if their people are always lower qualified.
Also there is the problem of having to deal every day with "professional managers" that don't know anything about IT, but make decisions based on magic 8 ball and their career interests. Similar to illiterate politicians in many countries.
If you were comparing what the other company was charging your company for their developers: Labor and software services have different markets. Because, among other things, tax/insurance regulations and the expectations of contract longevity are not the same. A software shop needs to charge 2-3x salaries to be profitable. I was referring to a theoretical free market for labor.
If you were comparing salaries, either your company was compensating you with extra prestige, job security, etc. or you were underpaid.
I am comparing manager/architect positions in Europe with long-term (5+ years) contractor positions in India. Yes, I know contracting is more expensive than employees, but not to this level. We use contractors because internal developers would be paid so bad, nobody would apply (and they don't).
I'd say they pay bad so they don't have to have the local employees that would be protected by strong local laws. Contracting is effectively cheaper, mostly because the company doesn't care about the health of the local company/economy.
It’s only soul destroying if you let it be. As someone who grew up in poverty and spent most of my 20s working at a call center and pawn shop, I feel like the luckiest person in my family with my soul destroying corporate job.
It sounds cliche but happiness is truly a state of mind. You don’t have to wait for something in the future to be happy now.
These conversations where highly paid software people complain about insanely minor things (the code linter is the worst part of your job??) are actually kind of nice to read, in a funny way.
The privilege of having pixels be the most stressful part of your life... it's actually really nice to read that. Having perspective from hardship is good, and everyone will have at least some perspective at some point in their life when hardship is forced upon them. But hardship in and of itself isn't good. I'm happy it is being completely eradicated from life, at least for some of us.
Yea, that linter thread was wild! Sometimes I think we are totally pampered and out of touch!
I've cleaned McDonalds bathrooms, worked in a plastics factory where the chemical stench left my nose nonfunctional for weeks, hauled heavy sacks of shingles up onto a roof in 100+F degree summer temperatures.
I am utterly grateful and consider it a lucky privilege to now be typing into a computer in a climate controlled office, where my biggest stressor is a deadline.
I don't mean to pile on but i feel the same when software devs here talk about how becoming a farmer is their salvation from their workplace suffering. As a kid I remember watching my cousin lie on his back with a stick welder underneath a horse trailer in 105F Texas summer heat. No thanks, i'll stick with my coffee, desk, and computer.
edit: different strokes for different folks, i don't want to sound too presumptuous. For some people what i described is exactly what would bring them joy.
A lot of the folks working in these bigger tech companies didn't grow up this way. A lot of them grew up in wealthy families, lived in wealthy neighborhoods, were pushed into an elite tech career by their parents, went to elite pre-university schooling, elite universities, etc and have never had to feel monetary scarcity. Just look at HN comments and see how many 3rd generation programmers there are. As an adult with savings working at bigger tech companies and never having experienced hardship or poverty as a child, the prospect of following your dream feels alluring.
I grew up in poverty myself but my partner and many of my friends at bigger tech companies grew up the way I discussed earlier. Most of them were pushed through their parents' social circles into a tech career and never were wanting for money. They feel the grind inherent to being paid for your time as opposed to volunteering your time and think of it as an injustice. My partner and friends complain constantly about tech and their jobs but other than a handful who briefly worked service jobs in their teens, they have nothing to compare it to. I spent my summers as a teen moving heavy boxes/furniture, often in 100F+ hot weather, and being paid in cash (hoping to become a cabinetmaker!) barely making ends meet and I know what it's like to keep a job a job.
I left Big Tech (I had joined it as a startup and ended up staying much longer than I expected) so I understand the complaints about heavily bureaucratic jobs where most of your time is spent coordinating rather than building, and while I'm always unhappy at something or the other with my job, I know how good I have it. I do a job that I don't hate, working with generally smart people, alternating between a cushy office and my home where outside of my work I mostly just complain about minor office perks. It's fantastic.
As a counterpoint to that, I grew up in a blue-collar family under modest circumstances and I still feel like bigcorp software development is soul-crushing. Surely, you appreciate it for a while. But eventually the reality of it sets in, and can't ignore the BS anymore.
I know I'm luckier than most humans on Earth, but still hedonistic adaptation is a thing, even if you grew up in a poor family.
>For some people what i described is exactly what would bring them joy.
Backbreaking manual labor sucks. The heat. The cold. The shit. The frost. I'll format my fucking code any way you tell me to to avoid farm life. Like I give a shit. A week in and I won't even notice. Ah Christ, the smell of cow pus ...nyaagggggh.
As for woodworking: You will get cut, there is no hope of avoiding it, and no telling how bad it's going to be. The next day, we will see how serious your woodworking gig really is. You gotta be out there, bub. Get it stitched up and keep on cranking out the pieces.
I will say: I don't necessarily like to say "lucky," or even "privileged". Luck incites tricky emotion because there's an implication with luck that you didn't deserve it. A gambler who won at the slot machine should have lost his money -- luck carries that "should have" connotation with it. Likewise, privilege carries a zero-sum connotation, because we always mean someone is privileged in relation to another, which introduces almost an adversarial tone to it.
For me, a better term is fortunate. I am fortunate that I have a job in a nice office, solving interesting puzzles all day, getting paid (relatively) a lot of money doing it. Fortune has come upon me. I work hard, although not really harder than any other reasonable person. I was born in the right zip code, to the right family, had access to an amazing education, had the stability in my life to pursue it. Fortune.
I will never look down on anyone who is fortunate. I wish most people could have fortune in their lives. If the price we pay is a few complaints that the soda machine is down today, so be it!
> rarely have I heard someone say “well I said I’d be happy when this happened, it’s happened, and now I’m happy
I've heard this, but only from people who had been in an very shitty situation and then got out. Happiness is a state of mind, but misery is a set of circumstances, and the latter precludes the former unfortunately.
That's not "soul destroying", it's real life. The vast majority of people in this world have to do a job that they aren't in love with so that they can pay the bills. Anyone who is privileged enough to be in a highly paid tech job should be extremely thankful. Not only do we get paid well, we have to work 1/4 as hard as the people busting their asses for a living. We have a real sweetheart deal even if our jobs aren't always everything we would like.
There's something to be said for being able to look back and see a bridge or road or house of piece of furniture or an automobile you built, and see it's still being used and providing value to someone. Even if the monetary compensation was only mediocre.
Because it’s soul destroying knowing that to get medical insurance, it is directly tied to your employment. If not for that, people would gladly pursue their interests and passions without the fear of a bankrupting medical incident.
It sounds like modern day slavery, or perhaps more precisely "corvee" labor. You have to toil away on your master's land before doing your own thing. I find it unbearable, but sadly much of the world has to deal with it.
And you are mocking his authentic feelings. Slaves are an abstract kind of human for him. Feelings are not comparable, right? Now this poor dude can't even vent a lil in an online forum?
To the OP: When it sucks a lot, try singing. It really, really helps. Throw your head back and let it out of you on the way home.
I think those people also are more likely to have the work life balance to pursue hobbies where most people doing fast growing/early stage startups are off balance. I personally don’t care what I spend my time on at work, I’ve found even when I enjoy the work, it doesn’t increase my fulfillment in life over the long term. So I try to optimize the life part of the ratio as much as I can, at times at expense of the work side of the ratio.
I learned to play the game. I too really enjoy being able to talk directly to the client while building, but I also learned to play the game of cogs, where I am separated from the client by layers of increasingly clueless management. I balance the insanity with pursuing photography.
I work for a large company , and I love people I'm with and had some great challenges and accomplishments, but yeah... There's still a creative urge that's left not completely filled. So I ran a photography business for a decade!I loved interacting with happy and involved clients, and creating something that brings them immediate joy :). I don't have time anymore to do it professionally but I still do it for friends and family ( while I work with my therapist to survive my day job :)
When you are young and especially when you don't have a family to support, you move to some place where you like to work. When you are older and opportunities are rare (and agism is huge in the industry), you just take what you can and escape any way you can, like video games or side passions of any sorts. I bought a motorcycle when I was over 30 years old for commuting (heavy traffic, the bike was saving hours), but after a few years I started to take motorcycle trips in the weekends and, once in a while, across Europe. But it can be anything that you find enjoyable, the point is that you have to try different things and see what you like, when I was 20-25 years old I had no desire to ever buy a motorcycle. Now, if it's a light rain, I am happy to take it for a ride.
I work for a digital services consultancy handling large gov't contracts. It has all the problems of every large organization, public or private, but it's not overly demanding. The work is more challenging from a people perspective than a technical one.
But, as in my last big project, I'm building something well that makes a concrete difference in people's lives, internally and externally. In my previous project, the software we delivered saved hours a day for clerks who were typically very overworked, and we received grateful emails telling us that they'd been able to sit down for lunch for the first time in years. In the current project we're bringing GIS capabilities and full accessibility to a gov't online service--we have a mandate to ensure it works properly with screen readers, and we're actually doing new work on making map features accessible to the visually impaired.
So much of the motivation for geeks is technical satisfaction that we can miss many other forms of fulfillment in our technical jobs. Having worked on the web since the late 1900s, through multiple hype waves and "oh, we're doing this again" moments, I find the non-tech, more people-oriented rewards much more satisfying.
I was in a fast-growing company (although adjacent to Tech), that grew "big" and went though tons of extra bureaucracy where you will spend months fighting for some stupid change that makes all the technical sense. Now the company is sinking, I hope I will be fired and with the severance package I can enjoy life for 6-8 months and then go find again a company where I can fix things and impact someone's life in a mostly positive way. Wish me luck.
I get what you're saying, but for the author of the article it seems the opposite issue. He seems to (mostly) live from his own software products, and his two main points of stress are unreasonable customers & his own inability to let things go when fixing/working on stuff.
I'm one of those creative types. I have woodworking shop, I'm a musician, my wife and I are part-time performing magicians.
I've only ever worked for small start-ups. Including my own which paid the bills for 15 years.
Working for start-ups does not solve the problem for me.
The problem for me is that I need to give a shit about WHAT I'm creating. And I find that after 25 years of working in the tech industry professionally, as an end user the older I get the less interest in modern technology I have.
It's hard for me to not see the negatives. I want a car that I can maintain myself and that does not talk to a network for critical functions. I want a fridge that just cools my food and doesn't come with an app or "smart" features. I have zero interest in AI. I love writing code, and I'm already over-burdened by poor code quality that I've inherited and that was written by inexperienced devs. I don't need AI generating code for me that I then need to review and refactor. It's faster and more fulfilling for me to write it myself. I never got on the smart phone bandwagon. Yes, I own one, but I often forget where I left it and when I find it the battery is usually dead because I haven't touched it in days. I don't want a "smart home." I'm not a gamer.
So in my off hours, I find that I spend my time doing things that don't touch modern tech at all.
So yeah, I find myself constantly planning my exit strategy from the industry. I enjoy coding, making things and solving problems but I don't enjoy modern technology the way that I used to. And making products that I wouldn't use myself is what I find soul crushing.
As an aside, high skill and low excitement is a great recipe for composure. It makes me think of a veteran I once knew. He once talked us out of a sticky situation because seeing his calm demeanor, the authority figures had no reason to suspect we were up to something.
Amen. On the same bandwidth here. No social media. I don’t read the news. We don’t have a TV. I yearn for old tech. New tech has no character or charm. AI is the worst thing to happen to the industry. Literally just makes our working conditions worse
There are plenty of big tech or big tech adjacent public traded company jobs paying far better that are still majority coding and with a lot less speed pressure than an early stage startup, among other things allowi Ng for an earlier retirement.
I think there is something special about physical creativity that scratches a certain part of your even if you have a very fulfilling day-job.
"Even" Chris Lattner (of LLVM and Swift fame) which I as an outsider at least would say have a fulfilling job dabbles in the occasional woodworking: https://nondot.org/sabre/Woodworking.html
I worked for big companies, startups, and freelance. If you don’t take control of your career you will be unfulfilled. Software has the pick of the litter. The winning combination is a big company and a role you chose. Security, compensation, and creativity all in one. Startups are 90% likely to fail, contracting will set you back late in life if you don’t hustle all the time. YMMV but nothing beats a blue chip.
One man's garden of eden is another's hell on earth. I've gone back and forth between big and small. I'm genuinely happy at small companies with tight knit teams (getting abused by csuite for shit pay ofc). At big companies I get extremely depressed in a corporate hell scape mostly surrounded by people that have maintained sanity by dissociating from the job and collecting a paycheck.
I'm trying to start my own business now without going down the consulting route. At the very least I tell myself that the spoils of the hustle go to me. Let's see how this phase goes.
I run my own self-funded solo business. I talk to my customers and make a meaningful difference in their daily work. If I do my job right, they gladly pay me subscription money. I'm pretty happy with this, especially given that I choose my tools and technologies, and that my customers are smart engineers.
>"This is why I am very happy at a fast-growing small tech company where one can have honest conversations about the customer and the product. How do other people deal with this?"
I am very good at designing and creating software products from scratch. Was doing it for few years a an employee of smallish company that served numerous clients. I then went on my own and kept doing the same. I have my own product that brings in some money. Also I design and develop software product to various clients. I've had ups and downs but in average am very happy, not overworked, have more than enough time for myself and like my job which is basically a hobby paid for by the clients. My client are usually small to medium size that are not really in software but for one or another reason software runs their business.
Yes, fast-growing companies can grow out of my preference zone and as other commenters said, jumping ship when that happens may be the correct way to go.
There are other issues with slow-growing or not-growing companies. When the company is not growing, people are incentivized to take a zero-sum approach to their work relationships. If the pie is not growing, you need to guard your own slice and take from others. This creates a toxic environment. If the company is growing, then collaborating on growing the pie can become the shared attitude.
Slow growth and no growth companies tend to be under a lot of pressure for cost-optimization (which makes sense in a lot of ways, but is grueling to live through…)
> Most of the people I know who pursue creative/crafting hobbies alongside a software development job have chosen to work for well-known big companies
Guilty (although retired now). When I could apply creativity to my job, I did so, but I think I prefer to have had the outside-work activities to have been my creative outlets.
The application to express creativity in software is fairly narrow in comparison to other activities and, as was pointed out in this thread, physically creating with your hands (rather than virtual creating with your keyboard) is ... real.
> Most big companies are not good if you want to solve problems and build stuff.
There are many levels to "build stuff", so it's important to introspect what kind is important to you.
I love to build quality code. Production code that is quite efficient, fast, secure and maintainable while being full-featured.
Having done five startups now, this is very difficult to do in startups.
(There was one startup where we had a great team of like-minded quality-driven people and it was awesome, but it was the exception.)
"Building stuff" in startups usually means throwing together a mess of half-baked code and holding it together with chewing gum and duct tape and immediately moving on to the next thing that sales promised a customer yesterday but hasn't been started. From a business perspective, that's not wrong. It's a startup, you need to grow fast and add features at lightning speed to capture some market. But if you crave to build quality, this isn't it.
It's only in larger companies with some stability and steady revenue that there is some possibility of finding the environment to build things I can be proud of. Of course, most large companies also just build junk. Finding a good one is hard, and is an exercise left to the reader.
This comment hits the crux of what OP was really getting at. It's not that software itself is an inherently bad trade; it's what's been happening to it and why.
> very happy at a fast-growing small tech company where one can have honest conversations about the customer and the product
Right. Why is this getting harder to find? Engineers are feeling like their labor is increasingly becoming unimpactful vaporware; their work life is increasingly subject to the whims of nontechnical people; product complexity is going beyond the amount that's just natural in software and getting disproportionately bad.
It's because the market is driving people to the software world like tourists to a national park that's gone viral on social media. The mass of people trying to make a buck off software are unknowingly degrading it. The park's land is still good - just a little too good for its own good.
As long as software makes it easier to reach many eyeballs and wallets at once (which is "always") people will flock to it. What's less inevitable is what makes fluff and snake oil rampant in other industries, like health: a deadly combo of unbridled capitalism and masses of uneducated people.
This makes people, including many software engineers themselves, view software engineers as natural resources you can just endlessly extract from, instead of people with biological limits and dreams of making cool things with their hands.
The remedy to this - people democratically owning the means of production, and providing each other with reliably good schooling - might seem like a pie-in-the-sky idea but will be common sense in 100 years if we're still around.
people, including many software engineers themselves, view software engineers as natural resources
I’ve said this a million times on this forum.. the little trick whereby people who were once employees became merely _human resources_ has done more to damage work-life in this world than anything else I can think of.
Its natural to exploit resources to their fullest. Labeling humans as resources is inherently dehumanizing and desperately needs to end.
I've lost my cool one time when a very young "manager" asked: "Do we have a backend resource on this call?"
It really got my blood boiling and I've said something very similar to: "No we don't have a resource on the call, we have engineers, colleagues, employees, humans and friends on this call. Resources are air, water, memory, cpu and time, please don't call people like that". This followed by silence, and a lot of red faces.
Couple of weeks later, had a talk with my manager who is a true and true programmer I really respect. And then he says something with that "resource" referring to our team members...
I have experience across various industries, and many professions think very highly of themselves. But over here I have seen the working population be so easily manipulated, self-effacing, and self-abnegating. Most of the time bad managers just say "jump!" and engineers just ask "how high?".
But resources are what you are, hoss. Sounds like the youth of this manager got you messed up. Old head move is to pull him to the side, with the sotto voce, give him a chance to show you he is open to feedback. How can he change now without losing something? This is workplace 101 stuff.
Good attempt at tone policing, I'll grant you that.
You can keep calling yourself whatever you like, or more to say, swallow whatever little pride you still have. But I don't subscribe to that and I won't be called a tool/object/resource in my presence.
I had the unfortunate privilege of meeting two of the first "techbros". They were marketers more than tech people, but they were tech-adjacent and that was enough to make them cutting edge.
The thing they kept saying was "We'll run it through the machine." Meaning "We'll hand that off to our software team and have them complete it." Of course today, the one who stayed in tech might be salivating about running software requirements through an actual machine to produce code.
Not everybody is like that, even in software. I mean sure, creative aspect is very cool, but its fraction of any senior job, including most bigger startups from what I've heard. Even my current corporate job which started 12 years ago was pure dev in the beginning, now its maybe 20-30%. Responsibilities, personal growth, but also business grew in complexity and IT landscape and various regulations governing it exploded and keep exploding. I know stuff very few other do, so I get involved continuously into tons of efforts.
As they say, if you work manually hard work rest with mental challenges, and vice versa. Wood working must be cool since you create visible results with your hands and there is certainly some physical effort. I don't seek further creativity TBH, I look for extreme/adrenaline sports, be it climbing, ski alpinism, paragliding and few other similar (but also super chill diving to cover all elements and balance intensity). And ie in climbing, finding out how to climb some new route that is hard and scary for you is extremely rewarding, a literal creative ballet on vertical rock face.
Till kids came, this was making me properly happy and fulfilled to 120% since I was doing something every evening, every weekend, every vacation combined with 3rd world backpacking. Plus it made me super healthy and more focused on healthy eating too, became quite attractive to women since all this changes visuals but also confidence and overall persona for the better in aspects many women notice.
With small kids, and few non-horrible injuries I am now somewhere in the middle now, but kids are top priority, rest are not that important now (folks who keep going the same way/pace after having kid(s) I don't respect, it shows later on those kids in all kinds of bad ways). I know I have skillset to show them later some pretty awesome places and activities, but will let them go their own way. Just managing maximum possible off screen time since thats cancer for young soul and sugary stuff since thats cancer for body, now its easy and they follow our examples so they happily much some bio carrots and ignore cakes.
> This is why I am very happy [...] where one can have honest conversations
Cheers! Nonsense is tiring, nonsense breeds detachment, and I daresay most humans will detach from sources of constant nonsense. (As well as from economies of constant nonsense. See: advertising, social media)
> endless PowerPoints
We can agree that PowerPoint is a lossy encoder for instances of Conway's Law.
But to your point about Small versus Large entities...
> ended up unfulfilled in their jobs.
There are many well-travelled roads to Unfulfillment in the software business. Both Small and Large entities have the problem known as people.
Although it's true that corporations tend towards uncalled functions and structured madness, small shops can amplify the oddities, mistakes, and loyalty-antipatterns of principal's exclusive control. And people at a small shop will often work longer hours just to sort these problems.
> people [...] who pursue creative/crafting hobbies
These people are lucky and are doing what is healthy. They are the tool-maker sort of person and are fortunate to have the time to extend their skills and knowledge.
Same. The enterprise can be enjoyable from some aspects, but in the end the soul-suck isn't worth it to me. I think a great skunk works team with a big budget is probably the dream, but short of those rare and difficult-to-get opportunities, the startup/small-tech co is the place to go for people like us. Some are better than others at faciliting honesty, but it's far more common IME than big corp.
> I want the clarity of being able to talk to "the boss/the customer" and solve their problems
I finally identified that at my last job, and have begun actively working to make that happen. For example, I transitioned internally to a "platform" team so that I know my customer—my fellow product developers at the company.
This has resulted in me being MUCH happier with my day-to-day work.
Another idea: work for an IT services big company. Then you'll have a lot of change, will be much less of a cost center (only at times) and talk directly to the customer to solve their problems. Not the same as a startup of course, but at least on paper it looks like checking your points with slightly less stress or risk.
> Most big companies are not good if you want to solve problems and build stuff
My experience is the opposite: you can usually chill at big companies, while startups need money fast and attracts the worst managers. I know it's not the same experience for everyone, but I'll never work for a startup ever again.
>> The effort of managing up eats a creative person's soul.
This really struck me because I'm realizing it is soul destroying but have gotten competent, and even good at it. I was involved in my family's small business and some of my own startup attempts and consulting, so I remember those feelings.
> This is why I am very happy at a fast-growing small tech company where one can have honest conversations about the customer and the product. How do other people deal with this?
My experience is the opposite. Startups i've worked at were mostly 'boys clubs' where if you weren't part of a 'core group' then you were merely a mercenary. So you are in the same situation as in 'big tech' without the safety or prestige. You still have schmooze and 'manage up' to get into that core group of decision makers. Startups aren't immune from human nature.
startups as meritocratic wonderlands of creativity is not an idea based in reality.
What will you do if your company becomes “successful”: is either acquired by a “big company” or becomes a “big company”? Particularly if you play a significant role in your company’s success? Maybe get a head start and learn about wood.
This reminded me of the story of the VC who tried to avoid meeting Larry & Sergey when they were looking for investment:
> David Cowan’s college friend rented her garage to Sergey and Larry for their first year. In 1999 and 2000 she tried to introduce Cowan to “these two really smart Stanford students writing a search engine.” Students? A new search engine? In the most important moment ever for Bessemer’s anti-portfolio, Cowan asked her, “How can I get out of this house without going anywhere near your garage?”
The discontinuities at the used care sale prices graph seems like an arbitrage opportunity on depreciation. Buy right after a round number, sell right before another, pay less on dep.
If that's true it's only because most people don't understand these pure maths fields. But their results are generally very useful to the applied mathematicians (whose results are and should be used in most other fields) and in this way there is still an impact although it's not always reflected in the citations.
The fact is that these pure mathematicians could almost surely write the more applied papers but don't because it would feel to repetitive. You don't need to read Euler's work in order to indirectly benefit from it. It's the same for a lot of pure math.
As an applied mathematician, I'd say this depends on the field. Pure maths more often than not comes with assumptions that make the theory more elegant, but by doing so they also drastically limit its application to real life scenarios.
This is not even close. Pure math is often complete clueless about how it applies. For example Developing algorithms to compute properties used in the most basic pure math is a massive pursuit.