1. 10

    Prolog: Somehow, whenever I’m not sure what a good way to approach a problem is, Prolog gives me a path that performs well and is much easier-to-read than anything I’d normally evoke.

    JavaScript: The same language I know is available absolutely everywhere I work, and comes with an impressively rich object system and an amazing GUI library.

    C++: It’s easy to write C-level abstractions in a much higher-level language—even still reusing C libraries as if they were native.

    Python: It’s a scripting language, but designed in such a way that it cleanly scales up to large projects, especially if you use the optional and amazingly flexible optional typing.

    Ruby: It has a wonderfully expressive syntax alongside the clean runtime paradigm of Smalltalk—and with a very rich standard library to boot!

    [Edit: and a bonus, because I have a complex past with Smalltalk]

    Smalltalk: It’s the only language I have ever worked in where diving as low-level as you need to go is just as easy as getting as high-level as you want to work.

    1. 2

      Ah SmallTalk. The first language I got to learn through a class where each of us got assigned a language to study and present to others. Unfortunately I was too immature to really appreciate it and later when I really understood its value it was too late for me to find work with / in it.

      1. 3

        “FOUR!” An old-school programmer I met once held up four fingers and emphasized, “FOUR KEYWORDS.” That’s all the keywords he said Smalltalk originally had, but you could do really, really complex things with it. I lie asleep at night wondering how programming might be different today if Java hadn’t displaced it.

      2. 2

        complex past with Smalltalk

        Have you written about this somewhere? I’m interested in actual user testimonials about the language that aren’t ranting about how it’s not C or raving that the language is the computer.

      1. 3

        Java puts food on the table for a lot of people

        1. 10

          I decided to finally start my “someday todo” project for the last twenty years. Write an interpreter. I expect tonight to write my first line

          1. 1

            That’s awesome! What language will you be interpreting?

            1. 4

              I’m starting with Lisp 1.5 (the story is that initially Lisp was designed for the blackboard, until S. R. Russel figured out that by implemeting eval you can have Lisp implemented). My end goal (10 years from now :) ) is APL.

          1. 3

            Learn Apache Spark

            1. 2

              That’s a useful skill!

            1. 11

              I wanted to restart Mazes for Programmers but I gifted it to my best friend yesterday. So I may browse through The Elements of Computing Systems instead.

              1. 2

                Some Golang stuff; some picolisp stuff and other brain recreational activities.

                1. 3

                  Very noble and good business practice.

                  1. 10

                    J and APL are my dreams for retirement.

                    1. 8

                      Currently reading The Goal by Eli Goldratt. I previously reread The Phoenix Project and The Goal was mentioned several times so I figured it was worth a read.

                      1. 4

                        With the exception of the technology involved, I find the Goal far superior to the Phoenix Project, to the point that I tell people, if you know what a FAX is, prefer to read the Goal.

                        1. 4

                          +1 for the Goal. You may also like reading Taiichi Ohno’s Toyota Production System, though it reads sometimes more like philosophy than industrial engineering.

                        1. 2

                          Metro 2033, the Greek translation. I proceed very slowly because I am unaccustomed to Russian names, both for people and places.

                          1. 4

                            “The name dsw is a carryover from the ancient past. Its etymology is amusing.”

                            For the record, “dsw” comes from “delete from switches.”

                            The way it originally worked is awesome, IIRC. You’d figure out which file you wanted to delete in directory-entry order. You’d then toggle that number (in octal) into the front-panel switches. You then ran dsw, which deleted the file.

                            (If I remember correctly, dsw actually ran, crashed when it reached the desired number, and then you ran the core file to delete the desired file. )

                              1. 2

                                That’s the “press y to delete” version. Here’s the “flip switches on the front panel” version: https://minnie.tuhs.org/cgi-bin/utree.pl?file=PDP7-Unix/cmd/dsw.s

                                The “oac” instruction was “inclusive OR accumulator and switches”.

                            1. 2

                              Wow! I thought “this sounds like The UNIX-HATERS Handbook!”(1994, PDF) Sure enough, Donald A. Norman read TUHH and wrote a great forward for it.

                              Also fun is the anti-foreword by Dennis Ritchie :)

                              1. 2

                                That anti-foreword by Ritchie is amazing. That’s one thing about systems and language development from The Good Old Days (yeah yeah, false nostalgia and whatnot) when I read usenet postings from the pioneers of modern systems, its clear that even when they reached something like celebrity status, they never took themselves too seriously. There was a large measure of intellectual playfulness that you don’t see much of anymore.

                                Anyway, I really liked this line and I’ll be stealing it if I can manage to commit it to memory:

                                The systems you remember so fondly (TOPS-20, ITS, Multics, Lisp Machine, Cedar/Mesa, the Dorado) are not just out to pasture, they are fertilizing it from below.

                                1. 1

                                  That’s what I thought too

                                1. 1

                                  That’s nice. I usually work with a combination of direnv and setting GIT_SSH properly.

                                  1. 2

                                    The value zero (0) is a special case. It is not just an integer value, but can also be used to mean “no value” for all the types, and not just integers. If you create a variable and don’t put a value in it, it starts with the value 0.

                                    I refuse to believe that the language is not an elaborate joke like INTERCAL but more subtle.

                                    1. 5

                                      If I remember correctly, Pike was used to write and extend the Roxen web server. Back in the 90s the choices if you did not want Apache, but needed a programmable web server (without CGI / FastCGI) were not that many.

                                      1. 4

                                        Roxen! That takes me back…

                                        FWIW that company/product is named for the lake.

                                        The lake is home to pike fish too :)

                                      2. 4

                                        I refuse to believe that the language is not an elaborate joke like INTERCAL but more subtle.

                                        Read about Perl and its “zero but true” concept.

                                        Normally in Perl, nonempty strings are boolean true, unless they’re parseable as numbers, in which case they’re parsed as numbers and that value is used. Boolean true and false are numbers, with 0 being false and everything else being true:

                                        "" false (and numeric zero in numeric contexts)
                                        "false" true
                                        "true" true
                                        0 false
                                        

                                        But Perl, oh Perl, has a magic string is that is not empty, not really parseable as a number, equal to numeric zero, and boolean true. The magic string

                                        "0 but true"
                                        

                                        will get parsed as the number zero, but as boolean true. This is what’s returned from, e.g. system calls that return zero on success.

                                        Other strings of this form may work, I can’t remember, but this form is hardcoded into the interpreter such that it does not cause warnings.

                                        1. 3

                                          To defend Perl here a bit I think it’s to accommodate the “return 0 for success” paradigm of the shell.

                                          1. 2

                                            I’m leading a deperlification project right now in fact. ;) The problem with Perl is that it went far beyond its intended scope of “AWK on steroids”. C’s NULL can be seen as a compromise since it’s a very old design after all and was meant to work on hardware that was slow even for its day. Pike is much newer and still seem to be intentionally designed to bring all the old classes of bugs into a new era.

                                          2. 2

                                            Is that that much worse than null?

                                            1. 3

                                              Well for one value types are all nullable now. So it is the same problem but also more so.

                                              1. 1

                                                Imo it’s a big difference that with null you at least know that it always means that there is no value where in this case it can get confusing for integer types.

                                                1. 2

                                                  I guess it just means integers have no “no value” value, and the null for other types is equal to a literal zero. Not saying I agree with the decision, but I don’t think it’s “elaborate joke” levels of bad.

                                            1. -3

                                              there is a lot of programming books more valuable now

                                              1. 1

                                                Agreed, but don’t you think you should accompany such a statement with two suggestions at least? You’ve made me curious.

                                                1. 2

                                                  The programming books i prefer on my small book collections are: the programmatic programmers & ai a modern approach

                                                  Otherwise, quality differs but pretty much all the programming web makes forth books deprecated as long as my memory of it is correct, to start with python official tutorial.

                                                  1. 2

                                                    The Practice of Programming by Kernighan and Pike is my absolute favourite.

                                                    I recently picked up Software Tools by Kernighan and Plauger and I plan on reading it shortly.

                                                1. 3
                                                  1. Bravo
                                                  2. You reminded me of something in my library: A Topological Picturebook
                                                  1. 1

                                                    You were paid for duration, not effort.

                                                    1. 6

                                                      I somewhat disagree with the recommendation against Alpine linux.. I consider musl libc a feature rather than a ‘problem’. It’s easy enough to increase the stack size, and sometimes that can be an indication of an issue on your part.

                                                      1. 1

                                                        Unless you want to run something that depends on the existence of /etc/nsswitch.conf. It happened to us when we tried to deploy Elassandra over Alpine; Cassandra and Alpine worked, Elassandra, not so much.

                                                        The comment with DNS was very close to heart. I am all for Alpine, but I am always replacing it with a glibc based base image at the first sight of issues that smell DNS.

                                                      1. 2

                                                        I had an acquaintance in the 90s who was really big on rc and then switched to es. Hadn’t heard about it since.

                                                        1. 2

                                                          rc! Oh the memories. Oh I tried rc, but could not make anybody else switch to it and followed the bash crowd

                                                          1. 2

                                                            Bingo! For me I just look at all other shells and say “Wow that looks neat” and then go back to using bash because that’s what every environment I work in not just uses but DEMANDS.

                                                            Want to run another shell? Sure! Be ready to debug 1000 or so runbooks that assume you’re running bash, and this is production so good luck if you fubar things :)

                                                            1. 3

                                                              Historically speaking, I think this game was lost when Sun failed to make Tcl the, let’s call it, boot / rc.d language. Had they managed to make the switch to something else than the sh / bash family, we may have had a different evolution of the different init / process monitoring systems (different versions of rc.d, upstart, supervisord, monit, …, systemd). Maybe even developer friendlier. I don’t know.

                                                              es and rc, are nice academic excursions, but for them to take over, we need an implementation that runs over, or with, bash.

                                                        1. 3

                                                          And let’s not forget FuzzyCLIPS