Mono appears to be dead. I enjoy making life hard so I dont use windows. I am trying to learn very simple c# but am having trouble gettung visual studio to run anything on linux (debian/mint). It wont even run with dotnet in the terminal either. I dont really like all the features in vs either, i just want simple.

For reference im learning with the yellow book by rob miles. I want to learn the old way, not using a bunch of shiny helping tools (i never feel i really learn with those and it stunts my growth).

  • PhilipTheBucket@piefed.social
    link
    fedilink
    English
    arrow-up
    1
    ·
    20 hours ago

    You define it in exactly the same way you just did. Completely fine, you have to do it for lots of things. It’s nice that Python can do that too.

    Now, I’ll grab a random snippet of code from some random file from my source dir:

            existing_bookmarks = db.session.execute(
                text('SELECT post_reply_id FROM "post_reply_bookmark" WHERE user_id = :user_id'),
                {"user_id": user_id}).scalars()
            reply = PostReply.query.filter(PostReply.id.in_(existing_bookmarks), PostReply.deleted == False).first()
            if reply:
                data = {"comment_id": reply.id, "save": True}
                with pytest.raises(Exception) as ex:
                    put_reply_save(auth, data)
                assert str(ex.value) == 'This comment has already been bookmarked.'
    

    You can see some classes in use, which again is fine. But you also see inline instantiation of some reply JSON, a database returning a list of post_reply_id values without needing a special interface definition for returning multiple values, lots and lots of cognitive and computational load per line of code that’s being saved because the language features are saving people the heavy lifting of depending on user-defined classes for everything. It means you don’t have as many adventures through the code where you’re trying to modify a user-defined interface class, you don’t need as much strong typing, that kind of thing.

    I would bet heavily that a lot of the things that are happening in that short little space of code, would need specific classes to get them done if the same project were getting implemented in some C+±derived language. Maybe not, I just grabbed a random segment of code instead of trying especially hard to find my perfect example to prove my point.

    It is fine, there are significant weaknesses to Python too, I’m not trying to say “yay python it’s better for everything,” anything like that. I’m just saying that if you don’t get familiar with at least some language that does things more that way, and instead get solely accustomed to just user-defined classes or templates for every information exchange or functional definition, then you’ll be missing out on a good paradigm for thinking about programming. That’s all.

    • atzanteol@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      2
      ·
      19 hours ago

      FWIW Here’s similar go code (converted by a llm).

      func TestReplyAlreadyBookmarked(t *testing.T) {
          var reply PostReply
          err := db.Raw(`
              SELECT pr.* FROM post_replies pr 
              WHERE pr.id IN (
                  SELECT post_reply_id FROM post_reply_bookmark WHERE user_id = ?
              ) AND pr.deleted = false 
              LIMIT 1
          `, userID).First(&reply).Error
          
          if err == nil {
              err := putReplySave(auth, map[string]interface{}{
                  "comment_id": reply.ID,
                  "save":       true,
              })
              
              assert.Error(t, err)
              assert.Equal(t, "This comment has already been bookmarked.", err.Error())
          }
      }
      

      You can create in-line data structures AND be a properly typed language.

    • atzanteol@sh.itjust.works
      link
      fedilink
      English
      arrow-up
      1
      arrow-down
      2
      ·
      19 hours ago

      You define it in exactly the same way you just did. Completely fine, you have to do it for lots of things. It’s nice that Python can do that too.

      “It’s nice that Python can do that too.”

      Ugh.

      Never argue with a pythonista.