• 0 Posts
  • 88 Comments
Joined 2 years ago
cake
Cake day: August 14th, 2023

help-circle



  • Kache@lemm.eetoProgrammer Humor@programming.devstop
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    3 months ago

    It’s a container with certain behaviors and guarantees making them easy and reliable to manipulate and compose. A practical example is a generic List, that behaves like:

    • List[1, 2, 3], i.e. (“new”, “unit”, “wrap”) to create, containing obj(s)
    • map(func) to transform objs inside, List[A] -> List[B]
    • first(), i.e. (“unwrap”, “value”) to get back the obj
    • flat_map(func), i.e. (“bind”) to un-nest one level when func(a) itself produces another List, e.g. [3, 4].flat_map(get_divisors) == flatten_once([[1, 3], [1, 2, 4]]) == [1, 3, 1, 2, 4]

    Consider the code to do these things using for loops – the “business logic” func() would be embedded and interlaced with flow control.

    The same is true of Maybe, a monad to represent something or nothing, i.e. a “list” of at most one, i.e. a way to avoid “null”.

    Consider how quickly things get messy when there are multiple functions and multiple edge cases like empty lists or "null"s to deal with. In those cases, monads like List and Maybe really help clean things up.

    IMO the composability really can’t be understated. “Composing” ten for loops via interlacing and if checks and nesting sounds like a nightmare, whereas a few LazyList and Maybe monads will be much cleaner.

    Also, the distinction monads make with what’s “inside” and what’s “outside” make it useful to represent and compartmentalize scope and lifetimes, which makes it useful for monads like IO and Async.



  • IMO it will “succeed” in the early phase. Pre-seed startups will be able demo and get investors more easily, which I hear is already happening.

    However, it’s not sustainable, and either somebody figures out a practical transition/rewrite strategy as they try to go to market, or the startup dies while trying to scale up.

    We’ll see a lower success rate from these companies, in a bit of an I-told-you-so-moment, which reduces over-investment in the practice. Under a new equilibrium, vibe coding remains useful for super early demos, hackathons, and throwaway explorations, and people learn to do the transition/rewrite either earlier or not at all for core systems, depending on the resources founders have available at such an early stage.


  • Highly recommend having some scripting/interpreted language in your stack – in fact you likely already do (consider how shell scripting makes up a significant part of Dockerfiles)

    It’s an incredibly useful intermediate between freeform-but-non-executable text/docs/wikis and “industrial-grade”-but-inflexible tooling

    In other words, a great fit for capturing this partial/incomplete/tribal knowledge space the post is talking about. I personally even go a bit further and actively advocate for converting “onboarding/operational docs” from wikis into scripts that print out the equivalent text that can be committed and incrementally automated.




  • If you want to entertain having kids, you need to be ready for a radical shift in your life priorities. Your kids will take priority over just about everything – often even yourself. They’ll take priority over your parents entirely, let alone your personal relationship with them.

    First, are the practical and logistical aspects of your life at all dependent on your parents? I.e. are you fully independent? You will need to be and then some, you’re going to entertain having kids.

    Once you’re fully independent and additionally have resources to spare (time, effort, money, space, etc, usually b/c you’re with a partner you can trust and rely on), then choosing to have kids means starting your own family – not your parents’ family.

    If the grandparents are supportive and helpful, that’s great! They’re extremely welcome to contribute to your kids’ lives (and lighten some of your parenting load!)

    However, if they’re negatively impacting you or esp your kids, then they can lose that privilege. Again, your priority will be your kids. If this is a real concern for you, you’ll need to factor it into your “ready to have a kid” considerations.










  • IMO mathematical/logical/abstract thinking is critical for programming well, but IMO that’s different from “math degree” math.

    Software as a means to an end can be used in almost every domain, so proficiency within that applicable domain is often either useful or necessary. That is to say, “math degree” math is likely needed for 3d rendering (certain games), scientific computation (incl machine learning), etc, but maybe not, otherwise. It depends on what software you’re trying to build.

    To be more specific, general programming is definitely and specifically different from trig and calc. However, because math is also broad, “mathy” concepts like type theory, relational algebra, set theory are considered important for programming, even if only informally or indirectly so.