[HN Gopher] 26 Programming Languages in 25 Days
       ___________________________________________________________________
        
       26 Programming Languages in 25 Days
        
       Author : azhenley
       Score  : 161 points
       Date   : 2022-12-28 14:44 UTC (8 hours ago)
        
 (HTM) web link (matt.might.net)
 (TXT) w3m dump (matt.might.net)
        
       | charlieyu1 wrote:
       | I have to say I still haven't really figured out how TeX works,
       | despite using latex for years. I can't even do a for loop or
       | simple arithmetic or find the size of an array, let alone
       | implement complete algorithms. Is there anyway I can learn this?
        
         | canadianfella wrote:
         | [dead]
        
       | maxiepoo wrote:
       | For context, Matt Might is formerly a professor whose research
       | was in programming languages/program analysis. Professors like to
       | code too!
        
         | azhenley wrote:
         | I've really missed his blog. I read his posts over and over
         | during grad school.
         | 
         | His story of pivoting from PL research to medical research (and
         | being a star in the field) is quite motivating.
        
           | mattmight wrote:
           | Thank you for the kind words!
           | 
           | I missed blogging too, so I set a New Year's resolution in
           | January to write at least two blog posts this year. It had
           | been over seven years since my last!
           | 
           | I still hadn't written one by November, but now I've got
           | three for the year.
           | 
           | I'm optimistic I can keep it up now.
        
             | davidrupp wrote:
             | I've asked my team at Amazon [usual disclaimers] to read
             | this, and highlighted my favorite takeaways: "Well-timed
             | sleep was probably the most important thing I did", and
             | "Using sleep to do the heavy lifting on algorithm design".
             | I love this concept, and need to incorporate more of it
             | myself.
        
           | lamida wrote:
           | I have been reading Matt' blog for quite long too. I read his
           | post on his son condition but never really noticed if he
           | really switch his academic careers for his son. I am pasting
           | the really motivating video sharing the story [1] and a NY
           | times article here [2].
           | 
           | [1] https://www.facebook.com/freethinksuperhuman/videos/15306
           | 506...
           | 
           | [2] https://archive.is/l7pCA
        
             | bmorton wrote:
             | I stopped reading his blog when we wrote about how to get
             | tenure and completely omitted talking about all of his
             | wife's stay-at-home work.
        
               | arolihas wrote:
               | Can you explain why? What relevance does his wife's stay
               | at home work have to someone else trying to get tenure?
               | Do you think he doesn't appreciate his wife and that rubs
               | you the wrong way?
        
       | maradon wrote:
       | https://dev.to/taw/100-languages-speedrun-episode-01-python-...
       | 
       | 100 languages in 100 days...
        
       | panzagl wrote:
       | No FORTH, APL, Clojure or Rust? My HN bingo card is empty...
        
         | LeFantome wrote:
         | I can see skipping APL. Also, Rust could be frustrating if you
         | only had a day. It like saying you are going to learn a new
         | sport every day and skipping snowboarding because while you can
         | always kick or throw a ball badly, just standing up and falling
         | down continuously for a day does not actually teach you
         | anything about snowboarding.
         | 
         | Forth would be a good one though. Both simple and different.
        
           | tialaramex wrote:
           | It's likely that the professor knows some Rust already.
           | 
           | In which case Rust is a powerful tool to bring to AoC late on
           | because you can afford to take a not-so-algorithmically
           | clever approach and Rust's optimiser will save you.
           | 
           | Take day 16. The professor did it in Python, with which they
           | have some experience. My Part II solution is pretty bad, it's
           | a combinatorial explosion resulting from a search of the
           | solution space with both the elephant and myself trying every
           | option. But, I wrote it in Rust, so this bad solution
           | finishes in five minutes. If I'd written this terrible
           | solution in Python it may have taken hours to finish...
        
         | [deleted]
        
         | tuukkah wrote:
         | Well, Common Lisp and Erlang there made up for it.
         | 
         | Clojure and Rust were on their list of strong languages that
         | they didn't end up needing:
         | 
         | > _F#, Ocaml, Rust, Perl, Swift, Clojure, Smalltalk_
         | 
         | Forth and APL were on the list of probably impractical
         | languages:
         | 
         | > _APL / J, Prolog, Forth, m4, COBOL, Fortran, Ada_
        
         | linhns wrote:
         | Both Clojure and Rust are not very fast to learn to the
         | problem-solving level. Other languages like Java or C++ can
         | substitute for them. APL probably too hard to learn in 1-day
        
           | abrudz wrote:
           | I'm convinced a moderately intelligent person with good grasp
           | of high school mathematics can learn the entire core of APL
           | in 24 hours of study (which of course is more than 1 day)
           | with appropriate tutoring. Lack of programming experience is
           | a plus.
           | 
           | Yes, I'm willing to tutor a student to test my claim.
        
         | drivers99 wrote:
         | I got my 50 stars in Python, but I also did the first two days
         | in Forth because I've been wanting to learn it. Regarding
         | another thread there talking about whether the language affects
         | the implementation, it did for me.
         | 
         | For day 1, I ended up using a pretty different method than the
         | Python code, mostly so I could use what I already knew or could
         | quickly figure out, processing it character by character.
         | 
         | I wasn't planning to do more, but I realize the input for day 2
         | could be _executed_ as Forth code simply by defining the words
         | for what those input command should do, and then executing the
         | input AS Forth, so it was actually a quick and easy one in
         | Forth.
        
       | willio58 wrote:
       | Great way to get experience with a bunch of languages quickly!
       | It's not like you'd put these languages on your resume but you
       | can gain a sense for what each one is like/how easily you'd be
       | able to work in it for a project.
       | 
       | I likely wouldn't do this personally out of pure laziness but
       | good on you!
        
       | d12bb wrote:
       | I did the same challenge this year, though I didn't use as
       | "esoteric" languages (TeX... I love it :D), but I've made it more
       | difficult than necessary by using the languages I'm familiar with
       | first, before realizing this might be a mistake... I've written
       | on my learnings on the AoC subreddit[0] and if you'd like to see
       | my code, it's of course on GitHub[1].
       | 
       | 0:
       | https://www.reddit.com/r/adventofcode/comments/zwi0t4/2022_w...
       | 
       | 1: https://github.com/d12bb/AdventOfCode/tree/main/2022
        
       | medo-bear wrote:
       | great to see prof. might writing about programming again! im
       | curious what he thinks about the ergonomics of the languages he
       | used
        
         | mattmight wrote:
         | Thanks!
         | 
         | I have a part two planned to comment more about the languages /
         | days themselves.
         | 
         | This post was just getting too long to include it here.
        
           | medo-bear wrote:
           | neat! looking forward to it
        
       | bruce511 wrote:
       | We did a similar assignment at University many years ago. I think
       | it was the same assignment, one per day for two weeks. Each time
       | in a different language.
       | 
       | The goal was to see how similar code is, and how little it
       | matters which language you pick.
       | 
       | Obviously it's a constrained problem set (we didn't have to learn
       | all the ins and outs of each language) but it really opened our
       | eyes to the "commonness" of programming, and free'd us from the
       | tyranny of "I program in x".
        
         | rqtwteye wrote:
         | "The goal was to see how similar code is, and how little it
         | matters which language you pick."
         | 
         | I think this thinking is a mistake. If you learn languages
         | superficially, you will end up writing the same code just with
         | slightly different syntax. It can take a long time to really
         | understand a language and ecosystem and use its capabilities.
        
         | ModernMech wrote:
         | Curious which languages you used. If they were C, C++, Java,
         | and Python then I could see how they could blur together if you
         | squint. Different syntax, similar semantics.
         | 
         | But if those languages are C, APL, Erlang, ML and Lisp then I
         | would expect the lesson would be the design space of languages
         | is much larger than the popular imperative languages would have
         | you believe.
        
           | nerdponx wrote:
           | APL might be an outlier here. For the rest, I think the
           | difference lies more in the standard libraries of those
           | languages than the languages themselves. Yes, differences in
           | core language design start to matter when you are considering
           | performance, or structuring larger applications, but for
           | simpler scripts, you're mostly dealing with the standard
           | library.
           | 
           | On the other hand, differences will start to show them selves
           | after you spend a while noodling with your script,
           | refactoring it a couple of times and deliberately seeking out
           | opportunities to use language-specific features in the
           | process. This expands the exercise to something more like "a
           | language a week" instead of "a language of day", which is
           | obviously a bit more of a time commitment. But if you want to
           | get value out of a "polyglot" programming exercise like this,
           | I think that's what you really need to do. Otherwise I think
           | you learn lessons that are only correct at surface level.
        
             | OkayPhysicist wrote:
             | Erlang doesn't have loops. You've got filter, map, reduce,
             | and recursion. It's safe to say for most programs that your
             | Erlang solution is going to look rather different than your
             | ALGOL family one.
             | 
             | And Java didn't, until relatively recently (oh god Java 8
             | was almost 10 years ago), have anonymous functions, which
             | means that you'd be more inclined to express solutions in
             | terms of vulgar loops rather than a map, filter, reduce
             | type operation.
             | 
             | Which is to say, they'd definitely look different.
        
           | dfinninger wrote:
           | Sure, but in university that can be a useful exercise,
           | whatever the language. There are many commonalities in just
           | about every language. Learning your first language is hard,
           | you're second is freeing. At least personally I've found that
           | the more languages I study, the easier it gets to pick up a
           | new one, specifically because of the commonalities. Sure,
           | Haskell and Ruby are really different, but when you try to
           | pick up Elixir you've got a lot of common ground.
        
         | kfir wrote:
         | You can get a taste here and decide if you want to go deeper or
         | not - https://github.com/mattmight/advent-of-
         | code-2022/tree/main/d...
        
         | spikej wrote:
         | We did the same but the idea was to do it in different
         | paradigms: iterative, OO, functional, etc. And the code was
         | very different
        
           | [deleted]
        
         | galangalalgol wrote:
         | Even for a one day task it seems language choice could make it
         | much easier or harder depending on the nature of the task. Text
         | formatting and parsing, vector/tensor math, parallelism,
         | network io, all those things vary drastically in difficulty
         | depending on the language chosen. Then, if there are any
         | performance constraints on the problem that is another clear
         | discriminator.
        
         | [deleted]
        
         | bmitc wrote:
         | > The goal was to see how similar code is, and how little it
         | matters which language you pick.
         | 
         | I think that's a pretty bad result of the exercise. The point
         | of software isn't just to do a thing. Good software should
         | properly encode a domain or idea and communicate that to
         | others.
         | 
         | If one took the analogy of driving a nail into wood, there are
         | many tools that can do the job, but only a couple that properly
         | handle the job. Because the goal isn't to just drive the nail,
         | it's to do it efficiently and ergonomically and in a way easily
         | communicable.
        
           | ketralnis wrote:
           | I think you read a comment that they didn't write. But to
           | take your argument there is still value there. Learning that
           | the goal is to get the nail into the wood and give you a tour
           | of some ways to do that provides different value to
           | practising your memorised best practise of 3/8" 95% iron
           | alloy hammer swings at 20 degree arcs 1.2 times per inch of
           | nail bed. Maybe that's valuable too but you need to know
           | both.
           | 
           | I interview a lot of programmers and I often get told that
           | one of my questions is just impossible because it's slightly
           | awkward to express in Java. (It's only Java folk
           | incidentally, even though it's roughly equally awkward to
           | express in most of the long list of languages we let
           | candidates use.) By analogy these are folk that would have to
           | sit around waiting for their hammer delivery rather than just
           | make do with a mallet for a few minutes.
        
           | WJW wrote:
           | You can write good software in almost* any language though.
           | Encoding of domain and/or clear coding style is mostly
           | orthogonal to language syntax. The OPs exercise is exactly to
           | show that language choice is not all that important, since
           | you can write good software in bad languages and you can
           | write bad software even in the best languages.
           | 
           | * Excluding some deliberately opaque languages like brainfuck
           | and malbolge.
        
             | OkayPhysicist wrote:
             | I would describe programming languages less as encoding
             | problem domain, and more of encoding/enabling solution
             | domains. For example, if you're in Java the language steers
             | towards defining objects that have methods that express
             | your solution, where as in Haskell you'd be more inclined
             | to your solution in terms of a composition of functions. At
             | a lower level, your Java program is more likely to use
             | loops and iteration whereas your Haskell program is more
             | likely to use a recursive solution.
             | 
             | Anyone who's tried hammering a Java-shaped solution into an
             | Haskell-shaped language will eventually see the folly.
        
         | rr808 wrote:
         | Most languages have completely different idioms though. Sure
         | you can write functions, loops, if statements the same in
         | dozens of different language syntaxes, but that doesn't prove
         | anything. I've seen loads of codebases written completely
         | backwardly, eg when a C++ programmer writes their first Python
         | app or a Java developer writes Javascript - they're just
         | writing the same style in a different language, not writing
         | idiomatical correct code as a Python or JS developer would.
        
         | 082349872349872 wrote:
         | > _how little it matters which language_
         | 
         | obligatory reference to Landin " _The next 700 programming
         | languages_ " (1966)
         | 
         | https://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf
        
       | Hovertruck wrote:
       | A note to the original author, it looks like you're including the
       | inputs with your solutions on github which the AoC folks request
       | that you not do:
       | https://www.reddit.com/r/adventofcode/wiki/faqs/copyright/in...
        
         | mattmight wrote:
         | Woops -- I'll take those down. Thanks for pointing that out.
        
       | munificent wrote:
       | The sleep trick is something I do with my hobby projects all the
       | time, without really deliberately coming up with it as a
       | strategy.
       | 
       | By the time I get the kids in bed at night, I'm often out of
       | steam. Sometimes I try to make some progress on a project, but I
       | usually don't have the willpower to push through a stumbling
       | block. After many many nights of staying up late and losing sleep
       | trying to power through but not actually getting anything
       | working, I finally realized it's better to just go to bed.
       | 
       | But I also feel sad if I go to bed early without making progress
       | on something I'm excited about. So I started tricking myself by
       | telling myself, "Well, you can just think about the project as
       | you fall asleep." That's usually enough to get me in bed early.
       | 
       | And, lo and behold, quite often, I figure something out as I'm
       | drifting off. Then when I wake up the next morning, I can get it
       | implemented while I have my morning coffee. It's a really
       | pleasant routine.
        
       | redrobein wrote:
       | > C++ [no experience (beyond meta-programming)]
       | 
       | Curious about this line if op is here.
        
         | mattmight wrote:
         | I've never written any serious software using C++.
         | 
         | But, I did once learn how to do template meta-programming:
         | 
         | https://matt.might.net/articles/c++-template-meta-programmin...
        
       | jezzamon wrote:
       | Nice!! I needed to understand some go scripts with work so I used
       | Advent of Code as an opportunity to learn it as a new language
       | and solve the next problem using it. Unfortunately that day's
       | problem was more difficult than the rest so it took me more than
       | a day to solve it, but it was a pretty nice way to ramp up on a
       | new language!
        
         | mattmight wrote:
         | I had a similar thought after finishing:if you wanted to really
         | learn a new language in depth, you could solve all 25 days
         | using that language.
        
           | tialaramex wrote:
           | I think I'd have felt the same way up until I learned Rust in
           | 2021, and now I just think "I'd rather solve this in Rust"
           | almost always. Rust might have spoiled me for other
           | languages. But yes, in general AoC is definitely a good way
           | to learn a programming language. Since we probably don't need
           | vast numbers of Rust programmers it makes sense to acquire
           | say, Python, or Typescript or something if you're working in
           | some discipline where programming might be useful but is not
           | your core skill.
           | 
           | The initial headline of your front page intrigued me because
           | I had noticed in surveying my own institution (the one where
           | I studied, both as an undergraduate and as a postgraduate,
           | and where I now happen to work) that while most of the
           | undergrad courses of study we offer that require mathematics
           | include at least an opportunity to program, Medicine does
           | not. I reasoned at the time that the Medics have to cram such
           | a large amount of other material into their brief time that
           | maybe there's just no room to teach them to write code if
           | they are to sleep (in my country they certainly won't have
           | time to sleep once they're junior doctors)
        
           | Jtsummers wrote:
           | This is what I try to do. I solve them all (or nearly, I did
           | one in Python only this year) in Common Lisp (my hobby
           | language of choice), and the last few years I try to tackle
           | them in a second language (Ada, Rust, Python, C++) up to the
           | point that my time is too limited to do both versions (or
           | where I find the second version is adding nothing to my
           | understanding of the language I'm exploring).
           | 
           | This year I used Python as my second language (still plan to
           | finish) but with a strong emphasis on TDD and property-based
           | testing since I'm already familiar, but not fluent, with
           | Python.
        
       | armchairhacker wrote:
       | Learning a programming language in 1 day to solve a particular
       | problem isn't the same as learning it over years to write actual
       | production code. I doubt the author was writing "idiomatic" code
       | and he probably transplanted paradigms from more familiar
       | languages in the newer ones.
       | 
       | But it's still very useful and I'm sure he learned a lot and
       | absorbed of some of the new languages' programming styles. You
       | don't master idiomatic functional programming from one week of
       | writing Haskell, but it does introduce you to basic concepts like
       | functors, lambdas and embedding computation (IO) in data.
        
         | canadianfella wrote:
         | [dead]
        
       | judofyr wrote:
       | In 2018 I did the same thing, but I asked my friends for the list
       | of languages (they didn't know what it was for) so I ended up
       | with far more esoteric languages:
       | https://github.com/judofyr/aoc2018
       | 
       | In the end I lost the motivation once I only had the "regular"
       | languages left. I was also solving them as quickly as possible
       | (in Ruby) to get on the leaderboard so it was kinda boring to
       | also solve them again later on.
        
       | aussiesnack wrote:
       | But which was the best?
        
       | xnacly wrote:
       | Very impressive i couldn't even get past day 7
        
         | mattmight wrote:
         | Day 7 is still impressive!
        
       | Izmaki wrote:
       | Next on HN: "Hello World in 100 languages, in just 2 hour"
        
         | wiseowise wrote:
         | Hello world is different from solving actual problems in AoC.
        
       ___________________________________________________________________
       (page generated 2022-12-28 23:00 UTC)