this post was submitted on 21 Mar 2024
293 points (94.8% liked)

Programmer Humor

19097 readers
1003 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 
top 50 comments
sorted by: hot top controversial new old
[–] sukhmel@programming.dev 67 points 5 months ago
[–] 9point6@lemmy.world 41 points 5 months ago (6 children)

Const everything by default

If you need to mutate it, you don't, you need to refactor.

[–] noli@programming.dev 43 points 5 months ago (2 children)

Dogmatic statements like this lead to bad, messy code. I'm a firm believer that you should use whatever style fits the problem most.

Although I agree most code would be better if people followed this dogma, sometimes mutability is just more clean/idiomatic/efficient/...

[–] 9point6@lemmy.world 1 points 5 months ago

I agree somewhat, but I'd also say any codebase needs some level of "dogmatic" standard (ideally enforced via tooling). Otherwise you still end up with bad, messy code (I'd even say messier, as you don't even get consistency)

load more comments (1 replies)
[–] sukhmel@programming.dev 13 points 5 months ago (1 children)

I'd agree with the first half, but not the second. Sometimes mutability allows for more concise code, although in most cases it's better to not mutate at all

[–] 9point6@lemmy.world 4 points 5 months ago

I feel like I should maybe have put a "probably" in there

After all "there's no silver bullet", but in anything but a few edge cases, the rule applies, IMO

[–] ByGourou@sh.itjust.works 7 points 5 months ago (1 children)

Sorry, I want to make an app that works, not a perfect art piece.

[–] 9point6@lemmy.world 4 points 5 months ago (2 children)

The app working isn't good enough, it needs to be maintainable. From a professional perspective, unmaintainable code is useless code.

Code that mutates everywhere is generally harder to reason about and therefore harder to maintain, so just don't do it (unless there's literally no other practical way, but genuinely these are very rare cases)

load more comments (2 replies)
[–] Magnetar@feddit.de 4 points 5 months ago (1 children)

Scala user unite! There are dozens of us, dozens!

[–] crispy_kilt@feddit.de 5 points 5 months ago (2 children)

Scala? Can we reimplement it in Rust?

[–] lemmesay@discuss.tchncs.de 4 points 5 months ago

sure, just make sure to add "blazingly fast" in the description and append "-rs" to the name

[–] Magnetar@feddit.de 2 points 5 months ago (1 children)

But does it do everything in anonymous functions and lambdas?

[–] crispy_kilt@feddit.de 2 points 5 months ago
[–] RageAgainstTheRich@lemmy.world 3 points 5 months ago* (last edited 5 months ago) (1 children)

That is a... strange take.

Random example, imagine a variable that holds the time of the last time the user moved the mouse. Or in a game holding the current selected target of the player. Or the players gold amount. Or its level. Or health. Or current position.

[–] frezik@midwest.social 1 points 5 months ago (1 children)

In all those cases, the answer is to swap in a new variable and throw the old one away.

[–] RageAgainstTheRich@lemmy.world 1 points 5 months ago (1 children)

Legit question because i think I'm misunderstanding. But if its a const, how are you able to swap or replace it?

[–] frezik@midwest.social 5 points 5 months ago (8 children)

It's only a const within a function. You can pass the value to another function and changing it as it's passed. For example:

const int foo = 1
other_func( foo + 1)

In functional programming, you tend to keep track of state on the stack like this.

load more comments (8 replies)
[–] gerryflap@feddit.nl 20 points 5 months ago (1 children)

Ngl, it'd solve a lot of bugs

[–] xmunk@sh.itjust.works 15 points 5 months ago

The only const in life is to const all the things.

[–] Omega_Haxors@lemmy.ml 14 points 5 months ago* (last edited 5 months ago)

Why even use variables in the first place? Just place the values directly into your code. If you need to change a value, that's just bad planning. Hell, why even use values either? Just run a loop on the INC instruction until you get the value you need. It's just efficient programming.

[–] loxdogs@lemmy.world 10 points 5 months ago (1 children)

can someone explain please?

[–] noli@programming.dev 32 points 5 months ago (2 children)

In functional programming, everything is seen as a mathematical function, which means for a given input there is a given output and there can be no side effects. Changing a variable's value is considered a side effect and is thus not possible in pure functional programming. To work around this, you typically see a lot of recursive and higher order functions.

Declaring all values as const values is something you would do if you're a diehard functional programmer, as you won't mutate any values anyway.

[–] loxdogs@lemmy.world 4 points 5 months ago

thanks, kinda understand

[–] Mir@programming.dev 2 points 5 months ago (2 children)

What is the best practice then when you want to update a variable's value?

[–] noli@programming.dev 10 points 5 months ago (2 children)

Depends on how deep down the rabbit hole you want to go :p

  • creating a new variable that contains the updated value
  • recursion (e.g. it's not possible to make a loop that increments i by 1, but it is possible to turn that loop into a function which calls itself with i+1 as argument)
  • avoiding typical types of operations that would update variable values. For example instead of a for loop that updates every element of a list, a functional programmer will use the map function, which takes a list and a function to apply to each element of that list to create an updated list. There's several more of these very typical functions that are very powerful once you get used to using them.
  • monads (I'm not even gonna try to explain them as I hardly grasp them myself)
[–] DaforLynx@lemmy.zip 4 points 5 months ago

You just dropped a mind bomb on me. Suddenly things make sense :o

[–] shield_gengar@sh.itjust.works 3 points 5 months ago

A monad is just a monoid in the category of endofunctors, what's the problem?

load more comments (1 replies)
[–] lemmesay@discuss.tchncs.de 9 points 5 months ago (4 children)

I oscillate between using more functional paradigms and more object-oriented ones. is that normal?
I use a linter BTW(TypeScript) if that is a useful info.

[–] jkrtn@lemmy.ml 9 points 5 months ago (5 children)

I think using both is normal. Closures and objects are duals of each other. Do whatever is understandable and maintainable, neither paradigm is magic.

[–] lemmesay@discuss.tchncs.de 4 points 5 months ago

that's a nice way to look at it. thanks!

load more comments (4 replies)
[–] ZILtoid1991@lemmy.world 3 points 5 months ago

I also do that. Very simple stuff, especially of those that are easy to optimize for the compiler, are often very close to functional programming paradigms.

[–] crispy_kilt@feddit.de 3 points 5 months ago (1 children)

Avoid shared mutable state like the plague in any paradigm and you'll be fine

[–] lemmesay@discuss.tchncs.de 2 points 5 months ago (1 children)

state management crying in the corner

[–] crispy_kilt@feddit.de 2 points 5 months ago

Functional state management is fine

[–] DickFiasco@lemm.ee 2 points 5 months ago (1 children)

I use a combination of both. Objects are declared const, all members are set in the constructor, all methods are const. It doesn't really work for some types of programs (e.g. GUIs) but for stuff like number crunching it's great.

[–] lemmesay@discuss.tchncs.de 2 points 5 months ago

I heavily use classes while working on back end, and when I'm making a really self-contained logic, such as a logger or an image manipulation service.
but since most frontend stuff heavily leans on functional side, I go with it

[–] ornery_chemist@mander.xyz 9 points 5 months ago (1 children)

you mean let.

and then letting Hindley-Milner do the rest

[–] Magnetar@feddit.de 14 points 5 months ago

let there = "light"

[–] crispy_kilt@feddit.de 3 points 5 months ago

Needs more monads

[–] LinearArray@programming.dev 2 points 5 months ago
load more comments
view more: next ›