The language is as important as architecture and stuff.
Pick the right language for the right task.
Performance? Don’t use python.
Everything else? Use python because everyone does.
/s
I despise python syntax.
as someone who uses python daily: what is syntax? /s
It’s a tax you pay for synning.
error: syntax error. reinstall syntax and try again
sin-tax
That’s a strong opinion. What’s the problem with python syntax?
So Mojo and Python then?
The programming language promotes a thinking model and the ecosystem defines a modus operandi.
Of course they matter.That’s why we use JavaScript on the front end, JavaScript on the back end, and you can streamline it even more by using JavaScript for the db layer too. After all, if you have too much data to be reasonably parsed in a single .json file, you are probably just architecting wrong.
Every time you get over 200k lines of JSON you gotta split it into another app, so you can webscale.
I miss the old tts voices and now everything is ai generated garbage :( Bring back the robot voices!
Almost any language is OK, but Rust is just so, so fucking ugly
Almost any language is ok but some ecosystems make me want to turn into a murder hobo (looking at you, JavaScript).
You can’t imagine how often I just sweared today about js. What did go through the mind of their designers, when they created this growing disease, and why did web browsers accept this as the lingua franca for the web. So… much… pain…
Try using luarocks with luajit.
Also looking at Rust. Yeah, I totally like recompiling thousands of crates for a single webapp single-threaded.
well if you are recompiling thousands of crates with a single thread, for a simple webapp no less, then you are doing something wrong. multiple things, actually, I count 3.
Actually, my (not that small) Rust projects now take officially less time to cold compile than the “hot” reloading of our next.js monster in my job. Incremental compilation is at least an order of magnitude faster. And cherry on top, dumb code is often 100x faster than js.
Hard disagree. Super beautiful.
Average Rust code:
macro_rules! sum { ( $initial:expr $(, $expr:expr )* $(,)? ) => { $initial $(+ $expr)* } } fn remove_prefix<'a>(mut original: &'a str, prefix: &str) -> &'a str let mut up = 1; 'outer: loop {Hell I don’t want to know what you define as ugly then.
- Macro syntax technically isn’t even Rust
- This is definitely not average Rust code.
Sorry, I love Rust but I can’t really agree with you here. They only showed a
macro_rules!definition, which is definitely rust syntax. Lifetime annotations are relatively common.I will concede that loop labels are incredibly rare though.
Loop labels are rare, but they lead to much simpler/clearer code when you need them. Consider how you would implement this kind of loop in a language without loop variables:
'outer: while (...) { 'inner: while (...) { if (...) { // this breaks out of the outer loop, not just the inner loop break 'outer; } } // some code here }In C/C++ you’d need to do something like
bool condition = false; while (...) { while (...) { if (...) { condition = true; break; } } if (condition) { break; } // some code here }Personally, I wouldn’t call it ugly, either, but that’s mostly a matter of taste
I guess I see what you mean if we want to get very technical about what a syntax extension is. But I think for the purpose of this discussion, it’s reasonable to think of
macro_rules!as a part of the Rust language. Practically speaking, it is syntax provided by the language team, not just users of the language who are free to extend the syntax by usingmacro_rules!to do so.
What language are they then? They’re not Python, JS, <insert any other language here>
You used macro_rules, which is not common at all. Most rust files don’t contain any macro definition.
This code doesn’t even compile. There is a random function definition, and then there are loose statements not inside any code block.
The loop is also annotated, which is not common at all, and when loops are annotated it’s a blessing for readability. Additionally, the loop (+annotation) is indented for some reason.
And the loop doesn’t contain any codeblock. Just an opening bracket.
Also, the function definition contains a lifetime annotation. While they are not uncommon, I wouldn’t say the average rust function contains them. Of course their frequency changes a lot depending on context, but in my experience most functions I write/read don’t have lifetime annotations at all.
Yes, what you wrote somewhat resembles rust. But it is in no way average rust code.
I don’t know if anyone would argue Rust macros are beautiful. If someone does they should be checked out by a doctor.
Speaking as a fan of Rust.Definitely not your average Rust code, more like a very ugly example of it.
Also, as the syntax first put me off as well, I gave it a chance years afterwards, and have now (or rather years ago) officially joined the church of Rust evangelism.
A lot of the syntax you define as ugly makes sense when you learn it, it’s just so much more explicit than a more dynamic language, but that exactly saves your ass a lot (it did for me at the very least) (I don’t mean macros, macros are ugly and should be avoided if possible)
Brainfuck Cobol Perl
for a start
what? what part of rust is ugly?
Maybe they’re confusing the literal name with the language? Idk.
I grew up on Perl and holy fuck… Rust is fine.
I’m learning Perl - purely for fun - and yeah… it’s a little funky.
Perl is ugly but great. It’s like shell scripting with a more solid programming language. I’d never use it outside of simple scripts in my os, but whenever I do use it it’s very fun. Anyway, yeah, rust looks fine to me. Maybe they are not very experienced with it? I know some of my programs used to have lines with just x.unwrap().unwrap().unwrap() or whatever, which is not pretty.
Enums and nested blocks. I understand the importance of
OptionandResult, but it’s fucking infuriating when I have to check and destructure the result of every function call and either bubble the result up the stack from six levels of nestedif letblocks or risk Cloudflaring my program by using.unwrap(). And while I like being able to extract a return value from anif...elseexpression, the structure gets really convoluted when multipleifandmatchblocks are nested (of course each one returning a value), and it gets completely fucked once closures are introduced.I like Rust, but calling it pretty is delusional.
Sum types with associated values are worth it
have to check and destructure the result of every function call
Learn how to use enum error types, how error bubbling works, and how to convert between Options and Results.
It’s Rust you are talking about, not Go.
This isn’t about some feature of the language being good or bad. It’s about Rust being ugly or not. The things I mentioned will always look ugly in the source code.
It’s hilarious to me that people talk about “ugly” as if their opinions are objective.
I found Rust unpleasant to look at for the first two weeks of learning it, and now that I’ve been using it professionally for three years I loathe when I need to read code in other languages.
No other language can rival Rust in showing the exact information needed to understand the code — never too much and never too little — while being concise, correct, and handling all edge cases.
You can be more concise in other languages, but it will come the loss of handling every little possible bug. You can be prettier in other languages, but it will come at the price of adding a lot of useless boilerplate.
Of course there are cases where Rust can be verbose or confusing, but that’s when you’re doing very esoteric things that would be just as confusing in other languages.
Like any opinion on aesthetics, how someone feels about the prettiness of a language will have far more to do with familiarity than with any objective metrics.
You can also use let else.
let (Some(count\_str), Some(item)) = (it.next(), it.next()) else { panic!("Can't segment count item pair: '{s}'"); };But really it’s the exact same as other languages, it just forces you to handle it better. C-based languages will return 0/null/-1 and you’ll have to check all 3 of those because they might not mean the same thing. How is that better?
Cloudflaring my program
I’ll start using this one
I like to use
unwrap_or()to define fallback values. TheOptionAPI is quite expressive.Enums are the best part of the Rust language IMO, so I’m not sure how you can view them as ugly. Having the choice to destructure something is fantastic. You generally aren’t required to destructure every return value. Make sure you’re using the
?operator as much as possible. If destructuring is getting in your way, it sounds like the code is not very idiomatic.I can’t really comment on your issue with nested
ifandmatch. Too much nesting is bad in any language; try extracting more functions and let bindings to make it more readable.You can enable a clippy lint to deny
.unwrap()if you’re worried about it.Most of the times you can just
let ... else(which is basically a custom?if you needif let ... elseit’s because you actually need 2 branching code paths. In any other language you also doif ... elsewhen you have 2 different code branches. I don’t see why this is a rust-specific issue.
Literally every single bit of the syntax.
The majority of its syntax is very similar to many other languages. Can you give an example of a language with pretty syntax?
Key point being, similar to some random languages. JS and Python Syntax don’t fit a typed and compiled language at all.
Pretty syntax would probably be something like C, where not every single character already widely reserved for specific keywords (like !, ', =) is reused in completely random ways.
Ah yes I also found macro syntax like
vec
Whatever your place defines as a standard. I’ve seen ugly code in C, JavaScript, Java, etc., that uses them all over the place because they’re not mandatory.
If you don’t have consistent indenting, your code looks like copy/paste from several sources; but if you do have consistent indenting, then the indenting of Python is a non-issue.
Per the Linux kernel coding style:
Tabs are 8 characters, and thus indentations are also 8 characters. There are heretic movements that try to make indentations 4 (or even 2!) characters deep, and that is akin to trying to define the value of PI to be 3.
First off, I’d suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it’s a great symbolic gesture.
I’m rather partial to five myself but only when I’m feeling fancy.
Yes
No one will ever know. That is my editor’s job. XD
Depends on the mood.
Indentation-driven control flow is one of the most cursed things ever invented, excluding things explicitly designed to inflict pain or death.
White space sensitive languages are evil.
Haskell has the choice of both indentation based and brackets for things like
doblocks, but most people use indentation based cause it’s the norm and looks cleaner
List comprehensions are much stranger than tabs vs spaces. There are very very very few languages that use them, and python’s is by far the worst out of the popular ones.
Skill issue. Once you learn them they are quite fun.
The concept of a list comprehenshion is sinple but syntax is awful, as if Yoda was writing a for loop. “x for x in y it is, hmm yes”.
I’m not saying I don’t understand them. I’m saying the syntax is terrible. Compare it to Ruby (or any other modern language) and it’s abundantly clear.
python (uses syntax not available in any other top 25 language)
print([j**2 for j in [2, 3, 4, 5]]) # => [4, 9, 16, 25]ruby (normal chain syntax with
map)puts [2, 3, 4, 5].map{|j| j**2}even kotlin is more readable, even though you have to convert to a double and back kotlin
val list = listOf(1,2,3,4) println(list.map{it.toDouble().pow(2.0).toInt()})For nested cases it’s even more apparent:
python
digits = [1, 2, 3] chars = ['a', 'b', 'c'] print([str(d)+ch for d in digits for ch in chars if d >= 2 if ch == 'a']) # => ['2a', '3a']ruby
digits = [1, 2, 3] chars = ['a', 'b', 'c'] digits.product(chars).select{ |d, ch| d >= 2 && ch == 'a' }.map(&:join)kotlin
val digits = listOf(1, 2, 3) val chars = listOf('a', 'b', 'c') println(digits.flatMap { d -> chars.filter { ch -> d >= 2 && ch == 'a' }.map { ch -> "${d}${ch}" }})just from a base level, you have to read the middle of the comprehension first, then the end, then the beginning. It’s a completely backwards way to write and read code. unlike other languages that use a ‘functional’ approach, where it’s chained methods or pipes, etc. Even Elixir, which does have list comprehensions, reads and writes in the proper order:
elixir
for x <- 0..100, x * x > 3, do: x * 2
Wasn’t the python convention to use spaces (4 iirc)? Which is just plain wrong imho.
most repos use 4 spaces
This is the one thing I hate about python, because the spacing would differ between editors. I used vim to create the files on one system, and geany to edit them on another. Via uses 8 spaces in a tab (at least for me), while geany uses 4. This makes python mad, and drives me crazy.
Also, the rules for whitespace separation between things like loops, methods, and the rest of the code is annoying/ wierd (at least to me).
Via uses 8 spaces in a tab (at least for me), while geany uses 4.
You know that editors let you change their defaults, right?
and that indentation defaults in decent editors are usually language dependent. I’m not familiar with these editors, but… come on - if they use one default for all files, OP should use a better tool.
Yes, but I don’t normally program in python, so I never did. When I had to, I never thought of changing it (it wasn’t for long anyways and was less of a thought out decision to do programming in vim)
Get a code formatter. Ruff is popular. So is black. Never think about it again.
I can actually see where this is coming from, as I found Rust hard to read when I started out. I do really like Rust for reference, but I do agree Rust is hard to read for someone that has not learned it.
For example:
return statements that are implicit just because the semicolon isn’t there. Even better if they occur inside a if block or something like that. Very hard to understanding when you don’t know the syntax rules.
Lambda functions, especially when using move semantics too. They are quite simple, but if you don’t know the meaning, it’s more arcane characters. Especially when this is used inside lots of chained methods, and maybe a multi-line function in the lambda.
A lot for the if let x =… type of stataments are tough the first time around. Same for match statements.
Defining types for use with function::<Type>() and such.
Lifetimes, especially when they are all named a, b, c etc. It quickly gets messy, especially when combined with generics or explicitly defined types.
Macros, though not entry level rust to begin with, they are really cumbersome to decode.
None of these are sins of Rust, but for new people they are a hill to climb, and often hard to just “get” based on previous programming experience and reading the code. Rust can be really hard to approach because of these things. This happens in other languages too, but I do feel Rust has a particularly large amount of new concepts or ways to do something. And this is on top of learning lifetimes and borrow semantics.
This is the most sober take in this thread. I was bothered by all these things you mentioned for the first two weeks of using the language. I begrudgingly accepted them for the following two months because I felt the benefits of the language were worth it. Now all of these things feel natural and I don’t give them a second thought.
I think that’s a great set of criticisms.
None of these are sins of Rust, …
They might not be strictly language issues, but if they are symptomatic of idiomatic rust then they are “sins of rust”. Something about the language promotes writing it using these kinds of idioms.
Just like French speakers don’t pronounce 80% of the written syllables because it’s impractical to speak fast with all of them…language features (or lack of them) drive how the language is used.
(BTW the implicit return behaviour on a missing semicolon sounds like Chekhov’s footgun)
Something about the language promotes writing it using these kinds of idioms.
As someone who has used Rust professionally for 3 years, the idioms are good. I wouldn’t want the idioms to go away, and I don’t particularly want the style/aesthetics of the language to change unless it can be done without negatively affecting the idioms.
It’s not a situation where the aesthetics are actually bad, it’s just different than what most programmers are used to, but almost all of the differences are for pretty good reasons. With enough familiarity and practice you’ll start to recognize those differences as benefits of the language rather than detriments.
But I think a lot of people have so much inertia about tweaking their way of thinking that they don’t feel motivated to try long enough to make it over that hump, especially when their expectations get set by rabid Rust promoters like myself who insist that Rust is vastly superior to any other languages in almost all situations. The stark contrast between how good they’re told the language is and how they feel when first exposed to it might be too much whiplash for some people.
I recognise that different languages have different styles, strengths and idioms. One of my pain points is when people write every language as if it’s naughties java. Enough with the enterprise OoP crap.
I’ve also learnt languages like Haskell to expand and challenge the way I think about software problems. I learnt a lot doing it. That doesn’t stop a lot of Haskell code looking like line noise to me because it over-uses symbols and it being close to impenetrable in a lot of cases when you read somebody else’s code.
I think the aesthetics of Rust are the wrong side of the line. Not as bad as something like Haskell (or Perl), but still objectionable. Some things seem to be different even though there’s pre-existing notation. Things seem to be dense, magical, and for the compilers benefit over the readers (as an outsider).
I’ve been learning Zig recently and the only notational aspect I struggled with was the pointer/slice notation as there’s 5 or 6 similar forms that mean fairly different things. It has other new concepts and idioms to learn, but on the whole it’s notation is fairly traditional. That has made reading code a lot more approachable (…which is a good thing because the documentation for some aspects sucks).
The implicit return is perhaps the most dubious of them. I don’t mind it for simple functions, but they are not so good in anything large and with multiple return sites. Even more so when developers choose to implicitly return 4 chained method calls inside a closure with else cases.
But the rest aren’t really sins, they are mostly new or different concepts or ways to do something. And if there is a sin, it’s largely because the language itself has a complexity larger than others.
Taking my own examples here, lambdas are just fine, but the move semantics are cumbersome to deal with. But we need to do it some way, to indicate that a value is actually being moved into the closure. Maybe there are better ways and they make into the language in the future.
Conditional values and let statements and such is a good consequence of Rusts design choice with returning Results or Option types. Just because it’s different doesn’t make it a sin. Just takes time to learn the right way. I think most come from an exception based language, and that has a differnet code flow than what Rust has.
Lifetimes are hard though, and I feel a lot of the introduction is made excessively hard with the simple naming. It’s as of every programming tutorial used single letter variable names. Lifetimes isn’t something I’m that good with either, mostly because I haven’t had to use that complexity yet.
Go look at that Lisp kojumbo then tell me Rust is ugly.
(defmethod wake ((object magic-packet) address port) (let* ((payload (encode-payload object)) (size (length payload)) (socket (usocket:socket-connect nil nil :protocol :datagram :element-type '(unsigned-byte 8)))) (setf (usocket:socket-option socket :broadcast) t) (usocket:socket-send socket payload size :host address :port port) (usocket:socket-close socket)))Actually unreadable.
deleted by creator
It’s like comparing Hitler to Stalin. Both are pretty shit… Two things can be ugly at the same time. 😅
Entirely readable to someone who knows Common Lisp, and unreadable to someone who doesn’t know any kind of Lisp. Mostly readable to someone who knows Emacs Lisp, Clojure, or Scheme.
Being able to correctly guess what the syntax does without knowing the language is a function of similarity to familiar languages more often than it is a characteristic of the syntax itself.
deleted by creator
I imagine the tricky part for someone unfamiliar with Lisp would be that there’s no syntactic clue that a particular thing is a macro or special form that’s going to treat its arguments differently from a function call. Someone who knows Scheme may have never seen anything like CLOS, but would see from context that
defmethodmust not be a function.deleted by creator
You don’t even need to define a class to define methods. I’m sure that’s surprising to people coming from today’s popular language, but the original comment was about syntax.
Whether Lisp syntax is ugly is a matter of taste, but it’s objectively not unreadable.
deleted by creator

One of the reasons i find it so hard to use non-Rust languages is how ugly they typically are by comparison. “fn” instead of “function” is such a great example of saving key presses where they’re most needed. And you get very used to seeing compact abbreviations. Idk if that’s what you’re talking about though.
Rust:
fn getofmylawn(lawn: Lawn) -> bool { lawn.remove() }C:
bool getofmylawn(Lawn lawn) { return lawn.remove(); }With Rust you safe 1 char, and gain needing to skip a whole line to see what type something is.
With Rust you safe 1 char, and gain needing to skip a whole line to see what type something is.
Honestly, the Rust way of doing things feels much more natural to me.
You can read it as
- Define a function,
- with the name
getoffmylawn, - that takes a
Lawnargument namedlawn, - and returns a
bool
Whereas the C function is read as
- Do something with a
bool? Could be a variable, could be a function, could be a forward declaration of a function, - whatever it is, it has the name
getoffmylawn, - there’s a
(, so all options are still on the table, - ok, that’ a function, since it takes a
Lawnargument namedlawn, that returns abool
So that’s why people like C-style return types. That actually makes a lot of sense. I do too now.
“fn” was just one example. There’s also other abbreviations like “pub”, “impl”, “extern”, “mut”, “ref”, “bool”, “u64” And it’s true that some of these keywords are only relevant in Rust, however other langues have their own specific keywords, and they tend to be longer. In languages like Java (which is the worst example I can think of), you see things like “private static boolean” as function definition. In c++, you have to type “unsigned long” or even “unsigned long long” to represent “u64” (depending on data model).
To be fair, in C/C++ you can include
stdint.hwhich defines type aliases such asuint64_t.
Tell me this is sarcasm
Yeah, the most beautiful code is where all variables are just letters of the alphabet.
Keywords aren’t variables
Ooh yeah, overall coding culture is definitely not affected by the preferred nomenclature for identifiers. The person who’s habituated to
fnoverfunctionwill absolutely never name their functions in the vein ofchkdsk. The two are completely disconnected in the brain of the programmer who read too much K&R in their childhood and was irretrievably traumatized by it for life.I’d say it’s much more influential the names of the identifiers of the standard library.
A language with
functionkeyword that names it’s stdlib functionsstrstrandstrtokwill inspire way worse naming than on that hasfnkeyword with stdlib functionsstr::containsandstr::split.We could search for a random crate on crates.io and see what identifiers people actually use, or we could spread misinformation on Lemmy.
Compared to untyped languages? Sure. Compared to C or C++? Then maybe it’s a skill issue 😋
Not to stereotype too much but I think this is the first Blåhaj I’ve seen (in a programming context) that wasn’t team Rust.
What your programming language of choice (if you don’t mind sharing)?
The account is feddit…
As much as I’d like to think I’m generally in the loop of Lemmy lore, I’m afraid I don’t understand the connection.
@InternetCitizen2@lemmy.world seems to think you’re referring the instance lemmy.blahaj.zone, instead of the blahaj they have as profile pic
Ahh; that makes much more sense.
This is pretty smart for the left guy. He’s usually down at the level of “HTML is a programming language” or “What’s a programming language?”.
That said, the first one of those isn’t mutually exclusive with what he says in the meme.
It mostly reflects my own story. From a beginner enthusiast of multiple “cool” languages (Scala was all the rage back then), through considering myself more “mature” and thinking about business priorities, ending at understanding that using a good programing language is a business priority.
If the team works with a language they enjoy, they will be happier (and more productive). Doesn’t even matter if the code is written by humans or machines.
What do you mean by “monad has no business value”? /s
I like using python just cuz I can quickly get it working. I wish I had the time to undust C and try getting that to do what I want but my work cares more about iteration and speed to implement than speed of the program itself.
Python has many great aspects, unfortunately it’s missing
strongstatic typing.it’s missing strong typing
Python is strongly typed, but not statically typed.
You’re right, that’s what I meant
Most of the code at my current job doesn’t even have the optional type annotations. You just see like
def something(config). What’s config? A dict? A list? A string? Who the fuck knows.Unfortunately most of the developers seem to have a very pre-modern take on programming and aren’t interested in changing anything.
There’s a special circle in hell for people who write Python without type annotations.
LLMs will cure this /s
Sounds like the Ruby code base at my work
Good news, everyone!
Just type harder lol
Mash that keyboard
Dynamic typing is a great feature at times. It’s a pain in the butt other times. One of the things I like about Zig is being able to have opt-in comptime dynamic typing. For a certain class of problem it’s really nice.
But, Haskell…, it’s so well thought out, so evolved, the best of all functional programming in one, the ability to handle infinite lists, the lazy evaluation, the strict type checking, the compiler that catches whole classes of bugs, the curt syntax, the ability to breathe it like pure thought, the clarity like maths…
Okay, sorry, I better leave the room too.
Sorry, Clojure is newer and fancier.
Better if you need the ability to unintentionally shoot yourself in the foot.
And love reading ten pages of Java stack trace.
How else am I to justify my purchase of a widescreen monitor?
Reasoning about memory use is kind of hard though.
Haskell is pretty cool, I really like Scala too. It’s a bit easier to understand for me :P
Ngl changing paradigms can have the problems do a 180.
I hate leetcode but it’s surprisingly fun to code certain questions in prolog when final outcome with error checking is like 15 lines.
i cowode exclusively in pythowo
It’s amazing how much the NSA’s github page is comprised of Python.
Makes sense that they specialize in python, so many good math/crypto libraries.
i’m not too far from an nsa building (never really looked into what they do there) but i can throw some thigh highs over the fence for y’all if it helps
I’m only a hobbyist no skin in the game but as an engineer first programmer second I feel like how you design the architecture of your logic and how you choose to prioritize computational optimization or feature implementation have a much bigger impact than language. Obviously theres a time and place like using luajit instead of lua if you really need that speed boost, but in big complex programs I’m willing to bet lazy programmers skip optimization steps and copy paste thousands of lines to ship quickly regardless how performance optimized the underlying language is.
I make a module that does a specific thing for version 1, after initial bug patches and maybe a feature addition theres usually an epithany that the logic can be generalized into an api type registry structure that allows the code to be reused and configured as needed on per item basis. Along the way you do stuff like ask what the not expensive calls are, add accumulator timers to reduce unneeded CPU usage , ensure early returns are up top when it makes sense, choosing to render a cleverly crafted sprite instead of a full 3d entity.
A conditional if then logic loop Is a logic loop no matter what Turing complete language its written in. What really matters is how you use the loop not which syntax its written in.
Any function can be written in any Turing complete programming language. That doesn’t mean a sane person would use malboge or brainfuck for a production system. Language choice can have a huge impact on productivity and maintainability and time is money.
No one actually copy/pastes thousands of lines of code. We use libraries.
Languages do matter a lot. Yes, they are all technically equivalent, but the craft of software engineering is much, much more about social/cultural/community considerations than it is computational ones. What the community around a programming language values matters, because it informs a great deal about what’s idiomatic in a language, what libraries are available, what kind of bugs are possible (or not), how easy code is to read, comprehend, and maintain, and much more.
What makes a language good is not what programs you can write in it, but how it constrains what you can do such that you naturally writing good code. For example, null pointer exceptions (or segfaults in C, etc.) are a classic problem that plagues many mainstream languages like Java, C#, Python, etc. In Haskell (and a handful of other languages, including Rust), null pointer exceptions are not possible, because nulls do not exist in these languages. Taking away this language “feature” actually increases the power of the language, because you can guarantee that a certain class of common bugs are not possible in your program. So languages that restrict known bad programming practices lead to programmers writing better programs and, more generally, a community around the language that resonates with these philosophies.
You make a fair point, programming skill is more important than language but picking a programming language is still important in a lot of cases.
Ecosystem size can reduce “reinvent the wheel” code.
Some languages just have dogshit performance like Ruby, lua is pretty good though and it absolutely matters when you have to crunch a lot of data. Access to developers is big since you ideally want to find someone with experience in the language your project is in.
Some languages like Rust are very good for making safe code but very bad if you want to get out a microservice fast. I could make an equally correct version of some adapter in a fourth of the time in python compared to rust and I know them similarly well.
Then there’s low RAM requirements like embedded devices, it’s best to run something that compiles to machine code and doesn’t need a big runtime. Java and C# become almost useless in very low RAM environments and you’d have to use Zig, C or Rust instead.
So long story short, depending on what you’re writing it can just not matter or matter a lot.
It’s extremely important, because you’re never really picking a programming language, you’re picking a stack
You can technically write an android app in Python, but should you? You’re now locked into a framework used to run apps in Python, which are going to be much more limiting than other languages and frameworks. But you’ll also have access to Python libraries, which gives you options in that direction
Then you examine the context. How good are you at learning other languages? How long/complicated is what I want to do? Does this need to be performant? How long do I need to keep this working?
And most importantly, and you really have to think this one through… Will I need to extend the original goals in the future?
So really, yes, it’s very important. A bad decision in the beginning could cause problems for decades
The only people who say that are mentioned in Forbes.
deleted by creator
wow a Unison comment on the wild! What kind of stuff have you done with it?
deleted by creator
Represent
Programming languages, much like the jackass in the middle, are tools. Different tools are for different things. The right tool for the job can make your day. The wrong tool can make you question your entire career.
Right… And the best tool for every job is of course Rust.
Exactly. And what is the best tool? The best tool for the job
That’s just not terribly meaningful, though. Was JavaScript the “best tool” for client-side logic from the death of Flash until the advent of TypeScript? No, it was the only tool.
And what is the best tool?
AI! (This message brought to you by The Microsoft Marketing Dept.)
The available libraries, operating system, and hardware platform pay a bigger role than the programming language. Often the choice of language follows the tool chain and frameworks that fit with the intended program.
The most important thing is using Rust, be it only to avoid calls for a rewrite in Rust by people like me
Keep your Rust to yourself. I don’t care what language someone else uses for their projects but Rust is an unreadable mess that I don’t want anywhere near my projects.
Rust is an unreadable mess to you because you can’t read it. It has a steep learning curve, but the reward is one of the most reliable and efficient languages ever created.





























