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