• 2 Posts
  • 194 Comments
Joined 2 years ago
cake
Cake day: August 7th, 2023

help-circle
  • 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.


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



  • It’s the round trips that kill you.

    Oracle drivers for .NET are fun. Have a user client application which uses quite a lot of data, but a few thousand rows are fetched some queries. It’s way too slow for any larger query, turns out for the batch query kind of work we do, the default FetchSize for Oracle is just a performance killer. Just throw it to 128 MB and it doesn’t really hurt at all.

    Worst thing i’ve seen though, apart from the 150 line long dynamic sql stored in our database, was probably a page in our program that loaded about 150 rows from the database. Normally we do create a new connection for each query, but it’s fine since Oracle has a connection pool. Whatever millisecond is trumped by the round trip. But imagine a UI so badly written, it did 4 separate database queries for EACH row it loaded into the UI list. Useless things like fetching a new ID for this row in case it is changed, reading some data for the row i think, and more. Thing took a solid minute to load. There was so many bad patterns in that page that even during the PR for improving the speed it was just dealing with a mess because you couldn’t just rewrite the entire thing, so they had to make it work within the constraints. Horrible thing to work with.



  • I principally agree with you, it’s why I use reddit/lemmy and not 4chan.

    But there is a difference, albeit hard to convey correctly through text. But I think some of the extreme responses mentioned are the ones in the banter type. It’s a kind of response when someone jokingly says “Star Wars and Star Trek is pretty much the same” and you go “I’ll skin you alive” due to the unjust comparison. It sure as hell don’t work with strangers, but it can within an community since everyone knows neither party is serious about it. Which is what the original post kind of says that it can work in the right community.



  • Code normally works fine after you write it and then hopefully at least test by hand. The new guy 5 years later, which do not fully grasp the extent of his actions, and the guy reviewing the code also not being too familiar with it, will not make sure everything does as intended.

    Tests are correctness guarantees, and requires the code and/or the test to change to pass. They also explain how something should behave to people that don’t know. I work in a area where there are so many businesses rules that there is no one person that knows all of it, and capturing the rules as tests is a great way to make sure that rules remains true after someone else comes to change the code.


  • In modern games, I think it’s fairly common to have a common 3d skeletons share names. So you can make animations like the one above apply to any character even if they have differences. It doesn’t mean that dog extends human, but it may mean that a dog model shares a lot of common “bones”, that are used for movement, with a human model.

    So when a human animation is applied to the dog, you can see it warp to start position of the animation, move, and then then stop at the end position as a standing human, before warping back to idle animation (when it turns back into the dog shape)

    Related, weapons in Destiny also share the same components across weapon types, and bugs have caused one weapon type to be used for another weapon, making funny things happen. Like how a hand canon (pistol) stretches like a bow because it’s model got used in place of the bow model at the start of this clip:

    https://www.youtube.com/watch?v=0YZa9vv5U0M




  • None of those issues for my main IDE, though Rider on some occasions do get stuck marking some spelling errors after they are fixed.

    It has stuttered a few times, but pretty rare. But it does have a bug where it think it is building a project, but isn’t. And requires a restart to fix… Easy to trigger if you try building a project while it’s loading the project…

    Visual Stuido with Resharper is the one where things would randomly stop working though. Especially hotkeys would sometimes stop working until I restarted it. Slow and stutter too.


  • In my country the consultant company i work at shifted to only going for hiring experience / senior people once interest rates went up 2023-2024. The economy being worse reduces investments, and naturally consultants are less desired during those times. So we didn’t even meet hiring goals for 2024, we barely grew. I think expectations are a bit better this year though, if that is a indication that also applies to your country/place.

    It’s a strong contrast to where I, with Master degree in non-tech areas, got a developer job shortly after university at this company. Things were pretty desperate “hire, hire, hire” back then. It also helps that my country is less bad on interviews and such compared to the US.


  • Not sure if this advice really applies, given i haven’t used Git for any reports myself and I don’t know how you are doing the text based project. I did pretty much all my uni reports in a online latex document site which allowed shared editing, so there was some history but all edits were live to the main doc.

    But with the power of latex at least, you can have the main file do import and usages, and maybe some setup. And then combine other files representing anything you want. Such as one for front page, one per chapter or one for appendixes.

    Then just can do changes/new sections in feature style branches, and it’s up to you if you want things to go to the main branch, or have a dev like branch where further refinement can happen if your work is structured and not all over the place like my report writing was.


  • A worthwhile note is also that pretty much all US car manufacturers have dragged their feet doing EVs, excluding Tesla. So naturally US car manufacturers are struggling a lot with the massive costs related to adopting EVs now, and struggle competing with a country that spent this money getting established a good while ago.

    The subsidies are still a problem, but the 100% tax is in my view a massive handout to domestic manufacturers that never bothered to try until they were behind. That 100% price increase in Chinese will probably mean high margins on EVs for yet some years before cheap alternatives come along.