[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)