• 2 Posts
  • 80 Comments
Joined 3 years ago
cake
Cake day: July 1st, 2023

help-circle

  • You often need to be pretty good at math. But not because you’re “doing math” to write the code.

    In real world software systems, you need to handle monitoring and alerting. To properly do this, you need to understand stats, rolling averages, percentiles, probability distributions, and significance testing. At least at a basic level. Enough to know how to recognize these problems and where to look when you run into them.

    For being a better coder, you need to understand mathematical logic, proofs, algebra/symbolic logic, etc in order to reason your way through tricky edge cases.

    To do AI/ML, you need to know a shitton of calculus and diff eqs, plus numerical algorithms concepts like numerical stability. This is kinda a niche (but rapidly growing) engineering field.

    The same thing about AI also applies to any other domain where the thing being computed is fundamentally a math or logic solution. This is somewhat common in backend engineering.

    I’m not “doing math” with pen and paper at work, but I do use all of these mathematical skills all. the. time.

    I am an SRE on a ML serving platform.





  • cbarrick@lemmy.worldtoLinux@lemmy.mlLinus Torvalds and Richard Stallman
    link
    fedilink
    English
    arrow-up
    73
    arrow-down
    1
    ·
    2 years ago

    However, Linus’s kernel was more elaborate than GNU Hurd, so it was incorporated.

    Quite the opposite.

    GNU Hurd was a microkernel, using lots of cutting edge research, and necessitating a lot of additional complexity in userspace. This complexity also made it very difficult to get good performance.

    Linux, on the other hand, was just a bog standard Unix monolithic kernel. Once they got a libc working on it, most existing Unix userspace, including the GNU userspace, was easy to port.

    Linux won because it was simple, not elaborate.



  • cbarrick@lemmy.worldtoRust@programming.devDioxus Labs + “High-level Rust
    link
    fedilink
    English
    arrow-up
    1
    arrow-down
    2
    ·
    2 years ago

    Fair. But unwrap versus expect isn’t really the point. Sure one has a better error message printed to your backtrace. But IMO that’s not what I’m looking for when I’m looking at a backtrace. I don’t mind plain unwraps or assertions without messages.

    From my experience, when people say “don’t unwrap in production code” they really mean “don’t call panic! in production code.” And that’s a bad take.

    Annotating unreachable branches with a panic is the right thing to do; mucking up your interfaces to propagate errors that can’t actually happen is the wrong thing to do.


  • cbarrick@lemmy.worldtoRust@programming.devDioxus Labs + “High-level Rust
    link
    fedilink
    English
    arrow-up
    5
    arrow-down
    2
    ·
    2 years ago

    Unwrap should literally never appear in production code

    Unwrap comes up all the time in the standard library.

    For example, if you know you’re popping from a non-empty vector, unwrap is totally the right too for the job. There are tons of circumstances where you know at higher levels that edge cases defended against at lower levels with Option cannot occur.












  • Wow 😲

    It’s not that hard to setup GitHub or GitLab to make sure all the unit tests run for each PR.

    If you use something else for version control, check if they offer a similar CI feature. If not, setup Jenkins.

    I’m an SRE at a big tech company, so part of my job is to make sure CI infrastructure is readily available to our Dev partners. But I’ve worked at smaller companies before (10 or less SWEs) and even they had a Jenkins instance.

    This is a bright red flag to me. If I worked for a company that didn’t have CI, the first thing I would do is set it up. If I wasn’t allowed to take the time required to do that, I would quit…