Hacker News new | past | comments | ask | show | jobs | submit
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.

loading story #40249051
loading story #40248929
loading story #40248882
loading story #40250638
loading story #40249584
loading story #40261506
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.

:deep breaths:

loading story #40247614
loading story #40248660
loading story #40247726
loading story #40249130
loading story #40263374
loading story #40255279
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.

loading story #40248912
loading story #40248501
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".

loading story #40248623
> the tyranny of linters

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.
loading story #40249653
loading story #40249049
loading story #40249657
loading story #40250311
loading story #40254144
loading story #40249275
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.
loading story #40246214
I'm just happy to have gone six years without wasting half a day a month debating about formatting or whims.
> 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.

loading story #40246591
loading story #40247003
loading story #40246609
> tyranny of linters

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.

loading story #40246884
> a reprieve from the tyranny of linters

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.

[1] https://eigen.tuxfamily.org/dox/group__TutorialAdvancedIniti...

>We all read through comment threads on HN where each is written in it's own style and nobody has a problem understanding it.

That's not true. Walls of texts get ignored or complained about. Grammar nazis show up if you use the wrong to/too.

If your typing on a phone autocomplete more or less enforces grammar and punctuation.

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.

When code formatters were new, they insisted on vertical in addition to horizontal spacing rules, and that pissed a lot of wise people off.

These days they are pretty good at preserving vertical separation if it already exists and adding it if it’s missing.

>> 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."

> they don't spend their time bikeshedding or homogenizing their work.

They would if their woodworking projects spanned decades and involved thousands of other woodworkers.

"No pre-push linter" is the hill I'll die on.
loading story #40248674
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.

loading story #40246567
loading story #40248998
loading story #40249393
loading story #40257368
loading story #40248798
loading story #40247583
loading story #40246162
loading story #40247095
loading story #40246186
loading story #40247300
loading story #40248221
loading story #40246294
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.
loading story #40248176
loading story #40248207
loading story #40247009
loading story #40246322
loading story #40246950
loading story #40246564
loading story #40246042
loading story #40248484
loading story #40251699
loading story #40249289
loading story #40250787
loading story #40246495
loading story #40250671
loading story #40248861
loading story #40249829
loading story #40257709
loading story #40255321
loading story #40246474
loading story #40248725
loading story #40257531
loading story #40262197
loading story #40277349
loading story #40252151
loading story #40248027
loading story #40257233
loading story #40258212