[HN Gopher] Ask HN: What are some of the most elegant codebases ...
       ___________________________________________________________________
        
       Ask HN: What are some of the most elegant codebases in your
       favorite language?
        
       Your favorite language can be anything - Lisp, Python, C, Haskell,
       etc.  Which codebases are the most elegant ones written in your
       favorite language that new comers to the language can learn
       something from?
        
       Author : debanjan16
       Score  : 155 points
       Date   : 2023-06-17 14:51 UTC (8 hours ago)
        
       | bb86754 wrote:
       | So many, I like reading how other people write code.
       | 
       | R - sf package is a clean example of functional OOP
       | 
       | Python - pytudes (Peter Norvig's notebooks)
       | 
       | Haskell - Elm compiler. I could mostly understand what's going on
       | even though I barely know any Haskell.
       | 
       | Ruby - Sequel is really nice.
       | 
       | Rust - Ripgrep
       | 
       | Pretty much any F# codebase is super readable too.
        
         | antonyt wrote:
         | Do you have any F# favorites? People often mention jet.com
         | repos, but I'm interested to hear about others.
        
           | bb86754 wrote:
           | Jet.com has a lot of good ones yeah. One I was looking
           | through the other day is a GitHub repo under
           | /ScottArbeit/Grace and it's an interesting take on version
           | control. It was a pretty cool repo to look through. To make
           | it easier though, remember that F# source code files are all
           | "in order" so you read them from top down, which Github
           | doesn't currently have functionality for.
        
             | lygaret wrote:
             | For folks coming here later, you can figure out the order
             | that you should view them in by reading into the `.fsproj`
             | file, which will lay out compile units in order.
        
         | soulbadguy wrote:
         | +1 on F#, highly under-rated language IMHO.
        
       | bgia wrote:
       | C++: ClickHouse. It is very readable and easy to navigate. Call
       | stacks that you pick up in logs are very descriptive, and you can
       | easily tell what went wrong.
        
       | akkartik wrote:
       | Some past threads for dang to macroexpand:
       | 
       | https://news.ycombinator.com/item?id=33413124
       | 
       | https://news.ycombinator.com/item?id=32384769
       | 
       | https://news.ycombinator.com/item?id=25355171
       | 
       | https://news.ycombinator.com/item?id=15663980
       | 
       | https://news.ycombinator.com/item?id=18037613
       | 
       | https://news.ycombinator.com/item?id=14836013
       | 
       | https://news.ycombinator.com/item?id=34205294
       | 
       | https://news.ycombinator.com/item?id=13624926
       | 
       | https://news.ycombinator.com/item?id=16960300
        
       | agjmills wrote:
       | Php and Laravel
        
         | jpb0104 wrote:
         | Really enjoyed reading through kbin as a Symfony fan.
         | https://codeberg.org/Kbin/kbin-core
        
         | vimsee wrote:
         | I`ve seen so many posts and comments about Laravel and how it
         | has made PHP a modern choice for webdev.
         | 
         | As someone who has written many small apps in PHP, I might dive
         | into it and finally see what that Laravel thing is all about.
        
           | zeroego wrote:
           | I'm currently using Laravel at work. It's very opinionated,
           | and some folks say it uses anti-patterns with regards to its
           | use of facades. That being said my last job was C#/.Net and I
           | am so much more productive with Laravel. It really allows you
           | to develop quickly and I haven't yet bitten by any of the
           | "anti-patterns". If you give it a shot I'd recommend just
           | using Laravel Sail as, if you already have docker installed,
           | you can have a full dev environment setup in less than 10
           | minutes.
        
             | nicoburns wrote:
             | > It's very opinionated
             | 
             | It is and it isn't. It does opinionated ways of doing
             | things. But IMO what makes it so great is just how easy it
             | is to opt out of the opinions you don't like. Facades are
             | an excellent example of this: don't want to use them? Well,
             | you don't have to (and IMO a really big app that may be a
             | good choice - in a small app it likely won't matter and you
             | might as well use them).
        
             | frodowtf wrote:
             | To me, "anti-pattern" has the same bogus meaning as "clean
             | code"
        
               | malux85 wrote:
               | Although at a high level many of things things are
               | subjective, this take is almost entirely wrong in every
               | dimension.
               | 
               | Anti-patterns are things like using a wrong data
               | structure, using the wrong levels of abstractions,
               | tightly coupling components so they are not composable,
               | leaky interfaces, god objects doing too much
               | 
               | The strict definitions of many of these can be subjective
               | at the edges, but they all objectively exist and cause
               | fragility, instability, inflexibility and maintenance
               | problems in the systems built from them.
               | 
               | Clean code is code that's easy to read, has the right
               | level of abstractions, uses the right data structures and
               | has the minimal possible anti-patterns in them (ideally
               | zero!) above.
               | 
               | Calling these things bogus is unfair, I grant they can be
               | subjective in some places but they are prevalent in
               | poorly designed systems especially by junior engineers.
               | 
               | Wikipedia page on anti-patterns:
               | https://en.m.wikipedia.org/wiki/Category:Anti-patterns
               | 
               | There are project management anti patterns too
               | https://en.m.wikipedia.org/wiki/Anti-pattern
               | 
               | Anti patterns are real. Clean code is real. If you cannot
               | see that, I would suggest reading a lot more codebases
               | from open source projects (pick medium and large
               | codebases, not trivial programs) and after 10 or so you
               | will see obvious structural and quality differences, as
               | well as hundreds of anti patterns and examples of clean
               | code.
        
               | frodowtf wrote:
               | > Anti-patterns are things like using a wrong data
               | structure
               | 
               | What is a "wrong data structure"? Is it wrong to do
               | linear scans when hash access would be sufficient?
               | 
               | > ... using the wrong levels of abstractions
               | 
               | When is the abstraction level wrong? I can name you at
               | least 10 projects that avoid so called anti-patterns by
               | introducing unecessary abstractions. Is something really
               | an anti-pattern if it's "solution" massively reduces your
               | development velocity but now everything is nicely
               | composable?
               | 
               | In my opinion, anti-patterns are either obvious
               | (constantly using different names for the same thing) or
               | totally subjective to the context (when to repeat
               | yourself).
               | 
               | But maybe I'm not able to put myself into the shoes of
               | novices and a lot of things seem obvious to me. Granted.
        
               | coryrc wrote:
               | > What is a "wrong data structure"?
               | 
               | I've seen people use multiple named arrays, search for
               | something in the first array, then use its index to find
               | matching data in the other arrays, instead of a
               | dictionary of string:tuple.
               | 
               | Another example is languages with arrays and vectors,
               | usually one or the other is preferred. In Go you can use
               | arrays but you're supposed to use slices whenever
               | possible, while the opposite would be appropriate in,
               | say, C.
        
               | zeroego wrote:
               | This is a solid argument, thanks for taking the time to
               | write this out!
        
               | nrdvana wrote:
               | I'll agree with everything here except the clean code.
               | Clean code is about optimizing human perception and there
               | can't be a standard for that because humans think in a
               | wide variety of ways and it's further impacted by the
               | level of understanding the human already has on the
               | subject matter the code is dealing with. One person's
               | "clean code" can be another person's nightmare.
               | 
               | I'll back this up with the example of Magento 1. It's a
               | PHP e-commerce platform that has (at first glance) some
               | of the cleanest code you'll ever see in PHP. It looked
               | like the entire development team had come from a Java
               | background. Every component was neatly divided into a PHP
               | object with documented private and public methods. There
               | was a clean MVC separation, with lots of shared behavior
               | abstracted into "Helpers", and a Theme system handling
               | the rendering of the front-end. I have no doubt that the
               | authors of Magento prided themselves on how clean their
               | code was. For them, having spent full-time careers
               | structuring all the many features of their platform into
               | these files, it probably did feel like a clean
               | organization. And when I initially reviewed the code to
               | evaluate using Magento, I also thought it was clean and
               | was part of my choice to use it.
               | 
               | The problem was that when you take something as complex
               | as a full-featured e-commerce system and modularize it so
               | thoroughly, you end up with a literal 7000 classes, and
               | it becomes impossible to figure out the sequence of
               | execution of a single page request through that massive
               | tangle. Is it "clean code" if I have to add debugging
               | print statements to 57 source files to figure out the
               | path of execution that renders a single page?
               | 
               | If I had to choose a circle of hell where I would edit
               | Cyrus IMAP (the worst C code ever) for the rest of
               | eternity, or edit Magento for the rest of eternity, I
               | think I would actually choose Cyrus.
        
               | zeroego wrote:
               | That's an interesting take! I'm still early in my career
               | and I ask with genuine curiosity, but why do you think
               | "clean code" has a bogus meaning?
        
               | rjh29 wrote:
               | I suggest you read malux85's comment:
               | https://news.ycombinator.com/item?id=36371733
        
               | spion wrote:
               | Not the OP, but clean code misses the point. Its is very
               | subjective and depends on one person's previous
               | experience and patterns they've been exposed to.
               | 
               | "Reasonably readable" is what I strive for nowadays, and
               | a key aspect is that I no longer think there is an
               | objective measure for it. It depends on the team/company
               | you're in, and its important to keep in mind that the
               | goal is to effectively communicate the program to them.
        
               | [deleted]
        
         | Contortion wrote:
         | Also Carbon. It makes working with dates and times (something
         | which is by it's very nature a PITA) actually enjoyable and
         | easily readable.
         | 
         | I also really appreciate FakerPHP for how easy it is to
         | generate realistic fake values.
        
       | freedomben wrote:
       | For C, I've really enjoyed reading the Ruby source code. There
       | are good and bad spots, but overall especially if you know Ruby
       | the language, the source is both entertaining and enlightening.
        
       | zh3 wrote:
       | RT-11 on the PDP-11 (all in PDP-11 assembler). Back in the early
       | 80's you could rebuild it in several different ways, depending on
       | whether you wanted it "single job" (as it was back then) or not.
       | 
       | As an example, here's the PDP-11 assembler to convert a binary
       | number to decimal ASCII (no idea who wrote it, but they certainly
       | made every word count):-                 CNV10:  MOV     R0,-(SP)
       | ;Subroutine to convert Binary # in R0       1$:     CLR     R0
       | ;to Decimal ASCII by repetitive               INC     R0
       | ;subtraction. The remainder for each       2$:     SUB
       | #10.,@SP     ;radix is made into ASCII and pushed
       | BGE     1$           ;on the stack, then the routine calls
       | ADD     #72,@SP      ;itself. The code at 2$ pops the ASCII
       | DEC     R0           ;digits off the stack and into the out-
       | BEQ     2$           ;put buffer, eventually returning to
       | CALL    CNV10        ;the calling program. This is a VERY
       | MOVB    (SP)+,(R1)+  ;useful routine, is short and is
       | RETURN               ;memory efficient.
       | 
       | Courtesy bitsavers.org
       | (http://www.bitsavers.org/pdf/dec/pdp11/rt11/v5.6_Aug91/AA-PD...)
        
       | diego_moita wrote:
       | C -> Lua, Sqlite
        
       | neonsunset wrote:
       | [C#] Bitwarden server repository is probably one of the cleanest
       | (non-novel) solution architectures I have seen so far. I always
       | point people to it as learning material for structuring the code.
       | It is not the most minimalistic but I feel like it strikes very
       | good balance and does not follow blindly all the """fancy""" OOP
       | patterns people should never use anyway.
       | 
       | https://github.com/bitwarden/server
       | 
       | Otherwise, I can see why people are burned, average Java/C#
       | codebases look abysmal and written without understanding of (not)
       | using heaps of mediator/factory/adapter/provider classes.
        
       | valenterry wrote:
       | fs2 (reactive streaming, https://github.com/typelevel/fs2)
       | written in Scala. It shows how nicely things can compose in a
       | typesafe way if the language supports it.
       | 
       | And then, the opposite is Monix (https://monix.io/) also written
       | in Scala. It's also about reactive streaming and the API is
       | great, but the internal code is ugly because it sacrifices
       | readability/composability for performance.
        
       | Waterluvian wrote:
       | Back when I was starting out, it was nice that Backbone had such
       | clean, well-commented code:
       | https://github.com/jashkenas/backbone/blob/master/backbone.j...
        
         | rudasn wrote:
         | Indeed! jQuery as well, before the breakup into modules.
        
         | jcpst wrote:
         | I really liked reading the source for underscore as well.
        
       | w10-1 wrote:
       | I'd nominate Java itself.
       | 
       | In the decades Java sources have been available, any of the
       | kazillion junior programmers could debug-step into java.* and see
       | exactly what's happening -- progressive disclosure at its finest
       | for building expertise.
       | 
       | Most other languages have a hard boundary, so the roots of
       | language are a matter of conceptual documentation and experience.
       | Java also offers that fly-over knowledge, but when problems
       | arise, programmers love knowing exactly and seeing directly.
       | 
       | Personally, in a pinch I prefer the actual to the elegant.
        
         | ldjkfkdsjnv wrote:
         | After a decade of programming 50+ hours a week in many
         | languages (typescript, javascript, python, scala, java, lua,
         | bash, c++, etc), I have come to the conclusion that Java is
         | simply the best. The tooling, libraries, stability, verbose
         | rigidity. It forces a style of programming that simply scales
         | to more engineers better
        
           | lockhouse wrote:
           | As an end user though, I honestly can't think of any Java
           | software I actually enjoy using. Minecraft? That's literally
           | the only thing that comes to mind.
        
             | foobarbecue wrote:
             | Have you tried Jetbrains stuff?
        
               | lockhouse wrote:
               | I have. Maybe I don't have enough RAM for it, but I find
               | their IDEs to be slow and laggy.
               | 
               | Xcode and Visual Studio Code feel so much snappier on the
               | same machine.
        
           | 29athrowaway wrote:
           | https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris.
           | ..
           | 
           | On a more serious note, most Java code on Github is now
           | written by Copilot.
        
           | winrid wrote:
           | Have you tried C#? It looks a lot nicer to work with than
           | Java.
        
             | watermelon59 wrote:
             | The ecosystem is nowhere near as mature though. I don't
             | work with either anymore but back in 2017 I made the switch
             | from C# to Java and it felt like a breath of fresh air when
             | it came to the maturity and capability of JVM tooling
             | compared to what's available for .NET.
        
               | ablob wrote:
               | I'm curious, what kind of tooling are we talking about?
        
               | winrid wrote:
               | Interesting. Did you try Jetbrains Rider as an IDE?
        
           | AtlasBarfed wrote:
           | In javaland, the actual ideal is somewhere in the feature set
           | supported by Groovy. CompileStatic groovy is probably the
           | best, you get a lot of good features for no performance hit.
        
           | [deleted]
        
         | stickfigure wrote:
         | While I think there's a lot to love about Java, I think the
         | standard library itself is not an especially great role model.
         | Most of it was written a long time ago and has a fairly
         | antiquated style - lots of mutable state, nullability, and
         | checked exceptions. Not that the library isn't an incredible
         | asset - it's luxuriously rich compared to working in Node.js -
         | but if it were written from scratch today, I suspect it would
         | look fairly different. Eg, the collection classes would use
         | Optional and have separate read/write interfaces.
         | 
         | For an example of "modern Java" I would point at something like
         | this (which I wrote, sorry about the hubris):
         | 
         | https://github.com/stickfigure/hattery
        
         | diarrhea wrote:
         | Yes. I have been burned by this in C#, it's very frustrating.
        
           | acedTrex wrote:
           | you can step directly into System.* source as well...
        
       | danap wrote:
       | What else my own, Java, coding for over 50 years. If YOU can't
       | figure out what your own code is doing after ten years of not
       | looking at it then nobody else can either. Hint, Comment your
       | thoughts as much as possible, to make things clear when there not
       | to you.
       | 
       | Format just like a book. Use full text variables, methods, class
       | names. Don't start a project until you define your formatting.
       | Stick to it! Do this and your documentation will be easy.
       | 
       | "https://github.com/csanyipal/ajqvue/blob/master/src/com/dand..."
        
         | freedomben wrote:
         | This is pretty good! I'd be happy to work with you :-)
         | 
         | There are undoubtedly some pointless comments, but there are
         | some good ones too, and the code is understandable. I think the
         | sibling comments are being overly harsh and are zeroing in on
         | single examples and missing the forest for the trees.
         | 
         | I suspect recommending your _own_ code as an example of the
         | most elegant codebase is triggering to others, so there 's
         | probably a negative initial reaction and probably a lot of
         | people clicking your link so they can point out why you're
         | wrong
        
         | [deleted]
        
         | rjh29 wrote:
         | Anyone suggesting their -own- code as an example of the "most
         | elegant codebase" is dubious. Practice some humility.
        
           | travisjungroth wrote:
           | I'd be a little forgiving if it was almost an art piece.
           | Like, they spent a year making the most elegant JSON
           | serializer possible.
        
         | dasil003 wrote:
         | Good structure overall and appreciate the summary at the top.
         | For the inline comments more "why" and less "what" would give
         | higher signal-to-noise as a large percentage of that content is
         | adding nothing that basic Java syntax and variable names don't
         | already tell you.
        
         | irl_chad wrote:
         | A great example of how NOT to write Java. You say absolutely
         | nothing with a whole lot of extra words.
         | 
         | For example: //================================================
         | ============== // Ajqvue Constructor //========================
         | ======================================                  public
         | Ajqvue()
         | 
         | The constructor definition is already clear, I don't need a big
         | header telling me what a constructor is.
         | 
         | Instead, use comments generously where needed - for example, if
         | you have a piece of business logic, a comment explaining the
         | intent behind it can help the maintainer (likely you) a year
         | down the road. What I mean by this, is that what your code DOES
         | should be self evident - but documenting the business decision
         | behind the implementation has done wonders for me.
        
         | Blahah wrote:
         | The getWebsite method comment says it returns the version.
         | That's an example of how not to comment - totally pointless and
         | misleading if it diverges from the code. The code is nice and
         | clear without the comments.
        
       | wewxjfq wrote:
       | At the beginning of the year I was rewriting a SPA and looking
       | for ideas on how to structure a web app. One project I looked at
       | was Github Desktop and I think it has very clean code for an app.
       | 
       | https://github.com/desktop/desktop
        
         | Solvency wrote:
         | Now if only GitHub desktops actual UI/UX wasn't a poorly
         | thought out mess of anti-patterns and anti-design.
        
           | tdba wrote:
           | I use it daily and it works great. It doesn't do all that
           | much, but what it does do saves me a bunch of time. I reach
           | for the git CLI when something goes wrong, but that's not
           | often.
        
           | rjh29 wrote:
           | What's wrong with it?
        
         | mredigonda wrote:
         | Thanks for recommending this, I just browsed some files online
         | and it's looking indeed amazing.
         | 
         | P.S. It's now easy to check a repo file by replace .com with
         | .dev: https://github.dev/desktop/desktop
        
           | batperson wrote:
           | You can also just click the . (period) key when viewing any
           | repo.
        
       | NicoJuicy wrote:
       | My own ( c# ). It's not opensource yet, monetizing it first.
       | 
       | Full DDD, it was a refactor during COVID-19 for my ecommerce.
       | 
       | It powers https://belgianbrewed.com
       | 
       | Copy paste from: https://news.ycombinator.com/item?id=35257225
       | 
       | > But I believe the project is much cleaner and frankly better to
       | understand than all other projects i've encountered for this
       | size. I'm using DDD, so DDD knowledge is a requirement to
       | navigate this in a breeze :) :
       | 
       | - https://snipboard.io/D03VWg.jpg - General overview of the
       | architecture. Small fyi: Connectors => Autogenerated nugets to
       | call the api's
       | 
       | - https://snipboard.io/9M24hB.jpg - Sample of Modules +
       | Presentation layer
       | 
       | - https://snipboard.io/ybp6EH.jpg - Example of Specifications
       | related to catalog ( = products )
       | 
       | - https://snipboard.io/lE9vcK.jpg - How specifications are
       | translated to the infrastructure ( here I'm using EF, so I'm
       | using Expressions a lot), but plain old SQL is also supported. A
       | query is basically a list of AND/OR Specifications where a
       | hierarchy is possible. This would translate to "(QUERY 1 ) AND
       | ((QUERY 2) AND (QUERY 3))" in the Infrastructure layer.
       | 
       | - https://snipboard.io/7rVBpk.jpg - . In general, i have 2 List
       | methods ( one for Paged queries and one not for Paged queries)
       | 
       | Additional fyi: Is V2, so has some legacy code. Uses my own STS.
       | Has 2 gateways ( the ShopGateway that is used to develop new
       | sites and the BackendGateway for the Backend). Enduser frontend
       | is in MVC for SEO purpose, Customer backend is in Angular ( SPA).
       | The basket is a NoSql implementation on top of SQL server.
       | 
       | The enduser frontend supports a hierarchy of themes ( so it's
       | insanely flexible to create variations of pages for other
       | clients).
       | 
       | There are more projects involved outside of this solution, eg.
       | nuget repo's usable accross solutions (JWT, Specifications, ...)
       | and "plugins" for a standalone project that is installed for end-
       | users for syncing local data. So it's +101 projects :)
       | 
       | Edit: my specification implementation has been open-sourced here:
       | https://github.com/NicoJuicy/Specification-Pattern-CSharp
       | 
       | Someone was curious to see it.
        
         | pizzapill wrote:
         | Look at that subtle off-white coloring. The tasteful thickness
         | of it. Oh, my God. It even has a watermark.
         | 
         | Now lets see Paul Allen's screenshots of the directory
         | structure of his codebase.
        
           | NicoJuicy wrote:
           | American psycho, lol.
           | 
           | Ok, i get it.
           | 
           | Just a shame that while i gave a pretty clear technical
           | description on the "why i think so".
           | 
           | Nobody of the downvoters actually cared to give a actual
           | technical counter argument or even did a test with a
           | technical question... Instead just a reply with a partial
           | movie script...
           | 
           | Ugh.
        
         | mometsi wrote:
         | "I just finished reading the greatest script I've ever read in
         | my life."
         | 
         | - "Oh, really? Who wrote it?"
         | 
         | "I did."
        
           | jeremycarter wrote:
           | "What's the name of it?"
           | 
           | ..."Lessons in humility"
        
       | hn_throwaway_99 wrote:
       | Back when I first was learning about GraphQL in 2016, I remember
       | thinking the reference implementation in JavaScript was extremely
       | clear, easy to read, and well organized. It had a "wow, I wish
       | all the code I read was this good" feel to it for me.
        
       | fastneutron wrote:
       | Shewchuk's Triangle code for Delaunay mesh generation is some of
       | the most elegant C-code I've ever seen [1]. It even won the SIAM
       | Wilkinson Prize for numerical software at the time it was
       | written. It's written in a literate style, and builds up from the
       | most fundamental arithmetic operations and data structures, all
       | the way to one of the most efficient mesh generators of its kind.
       | He has a few other codebases written in a similar style [2, 3].
       | It's very different from what you see in the wild, but it's been
       | great for understanding what's happening under the hood for
       | complex algorithms like mesh generation.
       | 
       | 1. https://www.cs.cmu.edu/~quake/triangle.html
       | 
       | 2. https://github.com/ctlee/Stellar
       | 
       | 3. https://www.cs.cmu.edu/~quake/robust.html
        
       | waterpowder wrote:
       | gorilla.bas
        
         | justsomehnguy wrote:
         | CONST TRUE = -1                  CONST FALSE = NOT TRUE
         | 
         | https://web.archive.org/web/19990202113028/http://hem.passag...
        
       | dadarecit wrote:
       | Envoy proxy for C++
        
         | fcantournet wrote:
         | That's quite an indictment of C++. I concur but still.
        
       | seneca wrote:
       | I don't know if elegant is the word, but I often refer to the
       | Hashicorp repos for Go, and specifically admire Mitchell's own.
       | Very clean, well written code most of the time.
        
       | szundi wrote:
       | Swing in Java obviously
        
       | personjerry wrote:
       | Not sure if it's still the case but about 6 years ago Facebook's
       | folly C++ library was something I'd point to for my junior
       | engineers to get a sense of "good" C++
       | https://github.com/facebook/folly
        
       | crop_rotation wrote:
       | Guava -> In Java
       | 
       | Golang Stdlib -> Golang
       | 
       | redis -> C
       | 
       | anything by armin ronacher -> Python
        
       | mepian wrote:
       | For Lisp I would recommend Edi Weitz's CL-PPCRE:
       | https://edicl.github.io/cl-ppcre/
       | 
       | Pretty much anything else from Edi Weitz is also great.
       | 
       | Mezzano is quite elegant in my opinion, especially for an
       | operating system. For example, this is the USB mass storage
       | driver:
       | https://github.com/froggey/Mezzano/blob/master/drivers/usb/m...
        
         | avindroth wrote:
         | CL-PPCRE is great
        
       | culi wrote:
       | mentioned in this thread:
       | 
       | C
       | 
       | * Lua https://www.lua.org/source/
       | 
       | * Redis https://github.com/redis/redis (mentioned twice)
       | 
       | * Ruby https://github.com/ruby/ruby
       | 
       | * SQLite https://sqlite.org/src/dir?ci=trunk
       | 
       | C++
       | 
       | * Botan https://github.com/randombit/botan
       | 
       | * ClickHouse https://github.com/ClickHouse/ClickHouse
       | 
       | Go
       | 
       | * Go's standard library https://cs.opensource.google/go/go
       | 
       | * HashiCorp repos, particular those by Mitchell
       | https://github.com/hashicorp
       | 
       | F#
       | 
       | * jet.com repos https://github.com/jet?language=f%23
       | 
       | Haskell
       | 
       | * Elm compiler https://github.com/elm/compiler
       | 
       | Lisp
       | 
       | * CL-PPCRE https://github.com/edicl/cl-ppcre/
       | 
       | * Mezzano USB driver
       | https://github.com/froggey/Mezzano/blob/master/drivers/usb/m...
       | 
       | PHP
       | 
       | * Carbon https://github.com/briannesbitt/Carbon
       | 
       | * Laravel https://github.com/laravel/laravel
       | 
       | Python
       | 
       | * pytudes (notebooks) https://github.com/norvig/pytudes
       | 
       | R
       | 
       | * sf (ex of functional OOP) https://github.com/r-spatial/sf
       | 
       | Ruby
       | 
       | * Sequel https://github.com/jeremyevans/sequel/
       | 
       | * Sidekiq https://github.com/sidekiq/sidekiq
       | 
       | Rust
       | 
       | * ripgrep https://github.com/BurntSushi/ripgrep
       | 
       | Scala
       | 
       | * fs2 (ex of good type safety) https://github.com/typelevel/fs2
       | 
       | * monix (ex of ugly code with great performance)
       | https://github.com/monix/monix
       | 
       | TypeScript
       | 
       | * GitHub Desktop (ex of SPA) https://github.com/desktop/desktop
       | 
       | ---
       | 
       | thanks to: cejast, bb86754, wewxjfq, antonyt, bit, diego_moita,
       | agjmills, freedomben, Contortion, valenterry, DethNinja,
       | mberning, seneca
        
       | mberning wrote:
       | Ruby - Sidekiq
        
       | mo_42 wrote:
       | C++ isn't my favorite programming language anymore.
       | 
       | I guess the Doom 3 source code is an elegant codebase.
       | Surprisingly, they used C++ features quite sparsely.
       | 
       | I think that's nice because in programming it's about getting the
       | job done and not about using all sorts of features for other
       | reasons.
        
       | blt wrote:
       | Redis is a popular answer for C, and I agree.
        
         | petercooper wrote:
         | I was going to say this too. C is more my "consistently
         | appreciated" language than ever my favorite of the moment, but
         | the Redis codebase is a fantastic example of it that's very
         | easy to digest.
        
       | cejast wrote:
       | Go and it's standard library. 'Elegant' is pretty subjective, but
       | it's a treasure trove of learning how things work under the hood.
       | I've learned loads about networking, compression, encryption and
       | more by browsing through it, because the code is super easy to
       | read and understand.
        
         | earthling8118 wrote:
         | What makes it easy to read and understand though? I am
         | seriously having a hard time figuring this out. People tout Go
         | for this all the time, but I don't know of a single codebase in
         | it that I think fits that description. When I look through them
         | they look convoluted and just sort of messed up. Things like
         | awkward error handling, dealing with null, capitalization for
         | public/private, magic functions, and imports, and much, much
         | more all add up and make me abhor the language. I don't think
         | it's good or easy to use at all, but people rave about it.
        
           | quaintdev wrote:
           | I love Go. I think it depends on what trajectory you followed
           | to reach to Go or any other language. For me it was
           | 
           | BASIC -> VB -> Java -> Python for some time -> Go
           | 
           | How you feel about Go is how I feel about JavaScript
        
             | BrandoElFollito wrote:
             | I went Pascal, C, Perl, Python, Go
             | 
             | And I like Typescript to some point.
             | 
             | I do not think they languages are mutually exclusive (on
             | the like scale). But I am just an amateur hobbyist dev.
        
             | asylteltine wrote:
             | [dead]
        
           | asylteltine wrote:
           | [dead]
        
           | gravypod wrote:
           | (Opinions are my own)
           | 
           | At my employer we use a subset of C++ and we use Go. We have
           | a process by which when you write code others have to review
           | it and you need to have a review by someone who is an
           | "expert" [0] in the language [1]. You become an "expert" by
           | being ordained by a shadowy committee who reviews code you
           | submit to the code repository. They look for knowledge of the
           | core language, how this language is used within the company,
           | the external and internal libraries, performance, testing,
           | etc. There are many factors and if you demonstrate all of
           | them you get marked as being this type of "expert."
           | 
           | Before I joined this company I had written code which was
           | launched into production in the following languages: Java,
           | PHP, C, C++, assembly (arm + x86), Python, JavaScript
           | (browser + node), and a few more. I would consider myself
           | about average in all of these. I did not write any golang.
           | 
           | After I joined my current job I obtained this "expert" bit
           | for both C++ and Go. It took ~1.5 years to get the C++. It
           | took ~3-5 months for Go.
           | 
           | You can actually see the first golang code I wrote (this was
           | at home when I was experimenting with the language before
           | convincing some team members we should rewrite some of our
           | infra in go): https://github.com/gravypod/gitfs
           | 
           | It has all sorts of mistakes but I didn't read any guides. I
           | just used https://cs.opensource.google to search for examples
           | of things that I thought I would need to do (ex: "how do I do
           | a switch statement").
           | 
           | For C++ I had worked on ~2 projects that used it. My first
           | few PRs were very rough and I had a lot of performance issues
           | that crept into my code. If I didn't already have a lot of C
           | experience I would have also had a bunch of pointer/lifetime
           | stuff the reviewers would have found (I know this from
           | reviewing new team members first lines of C or C++).
           | 
           | I know that to some C++ represents a literal worst case but
           | most people coming from C++ to Go will think it's amazing
           | because it removes all of the common footguns.
           | 
           | > Things like awkward error handling
           | 
           | Yes, it is very clunky and annoying but it's very simple.
           | It's just a normal if statement and doesn't use any special
           | language rules. I think this would still be better if there
           | was dedicated syntax for it (something like throw/try/catch
           | which works the same way but gives it a different syntax) but
           | honestly I don't think it's as bad as it's made out to be.
           | It's basically a "less bad" errno and that worked go-...
           | dece-... ehm fine for many years.
           | 
           | > dealing with null
           | 
           | I've never really had to think about this too much. There are
           | some times it is important but I rarely return nullable
           | things without errors and it hasn't bitten me yet. My code is
           | not provably correct but for the things I'm working on I
           | don't need that guarantee. If I did I'd probably switch to
           | Rust or something with better type safety.
           | 
           | > capitalization for public/private
           | 
           | Yea, this sucks but it doesn't really get in my way much. I
           | don't like it but it isn't actively hurting my usage.
           | 
           | > magic functions
           | 
           | Like `String()`? I don't know if that's the worst think in
           | the world. Python, C++, and Java have things like this.
           | 
           | > and imports
           | 
           | It's not been too bad for me. What I think is unfortunate is
           | that the package of something is unconnected to where it is
           | in most go usages which is annoying but it makes things more
           | terse. This does actually hamper my productivity.
           | 
           | > I don't think it's good or easy to use at all, but people
           | rave about it.
           | 
           | It's pretty easy to use because all of the libraries I've
           | seen share common interfaces for behavior. This makes things
           | feel a lot more cohesive. fuse-go and billy was very easy to
           | use in gitfs because of this.
           | 
           | [0] - This is not an expert as in "knows everything" but more
           | like "has been seen to consistently write efficient, simple
           | to understand, idiomatic code." It basically means that when
           | someone else from this subset of SWEs reviews your code they
           | often do not have many comments. Again, I want to stress,
           | this is not expert as in "knows everything" just as in "good
           | enough".
           | 
           | [1] - https://abseil.io/resources/swe-
           | book/html/ch03.html#what_is_...
        
           | cpach wrote:
           | Is there any programming language that is universally seen as
           | objectively good?
        
             | blowski wrote:
             | No, because the different trade-offs they make all have
             | costs and benefits. For example, C's precise memory
             | management can give better performance compared to PHP, but
             | also requires more expensive programmers to work with it.
             | If all you're doing is a simple CRUD system, C's power
             | would be counter-productive, so PHP is a "better" language
             | in that context.
             | 
             | So a "good" language depends on what you're trying to do
             | with it.
        
           | abatilo wrote:
           | Speaking for myself, the language itself is simple. There
           | aren't a lot of features, which means you do have to write
           | more and it's more verbose, but learning the entirety of the
           | language's features is very easy to do.
           | 
           | Even with the relative magic of things like init functions
           | that execute on import, there's so much less magic that you
           | have to consider.
           | 
           | IMO it's the easiest to jump into for this reason. Yes, the
           | code itself might be excessive, but reading Go is as simple
           | as can be.
        
           | michaelcampbell wrote:
           | > People tout Go for this all the time
           | 
           | What gets me about go is 2 things.
           | 
           | Its touted as being so easy that a junior dev can pick it up
           | easily; it's targeted towards average developers. Fine, this
           | is a virtue; when Java said the same thing, it's a horrifying
           | blight.
           | 
           | The other is that people seem to mistake motion for action.
           | "The code flies from my fingers" is one way I've heard it
           | said. And, sure, you have the same error catching boilerplate
           | (which again, in go is a virtue but other languages seems to
           | be considered a sin) 1000x, as if the clicky-clicky of the
           | keyboard is some measure of productivity.
           | 
           | It's got a big "blub paradox" thing going, to my eyes. I
           | don't find it elegant at all, or maybe I mean not very
           | expressive.
           | 
           | Taken ad absurdum, I have a language that only adds 1 to a
           | variable. I can understand that language in milliseconds. But
           | I can't do much with it. Maybe go hits a good balance, I
           | dunno, but I found it quite tedious.
        
           | teeray wrote:
           | It's the complete lack of magic. What you see in front of you
           | is pretty much exactly what happens. You don't have to keep a
           | cathedral of language semantic subtleties in your head when
           | reading someone else's code.
        
             | rochak wrote:
             | Pointer vs value receivers and named returns have so many
             | gotchas that it is not even funny. Lack of magic my ass.
        
               | asylteltine wrote:
               | [dead]
        
             | kaba0 wrote:
             | Then why don't we go back to assembly? There is even less
             | magic there, every line is trivial to understand, isn't it?
        
       | SirensOfTitan wrote:
       | Anyone have any good clojure examples?
        
         | janetacarr wrote:
         | I try not to toot my own horn, but I wrote this little quadtree
         | library that tickles that elegance part of my brain. I try very
         | hard to write elegant code. I have other Clojure repos, but
         | they suck. :P
         | 
         | https://github.com/janetacarr/quadtree-cljc
        
         | lemming wrote:
         | Anything by James Reeves aka weavejester
         | (https://github.com/weavejester).
        
         | doubleg wrote:
         | Metabase's toucan (https://github.com/metabase/toucan) has some
         | elegantly annotated source code:
         | https://rawgit.com/metabase/toucan/master/docs/uberdoc.html
        
       | rkagerer wrote:
       | Open Hardware Monitor (OHM), in C#
        
       | phkahler wrote:
       | C++ this file covers all the math for working with NURBS curves
       | and surfaces:
       | 
       | https://github.com/solvespace/solvespace/blob/master/src/srf...
       | 
       | There is a lot more in other files - triangulation, booleans,
       | creation - but the core math functions are there in very readable
       | form.
        
       | nrdvana wrote:
       | C++
       | 
       | An old one, but the FTGL library (renders truetype fonts in old-
       | school OpenGL in half a dozen different ways: texture-per-letter,
       | texture-per-word, 2D polygons, 3D polygons, etc) is the best
       | example of C++ inheritance I've ever run across. The code
       | formatting isn't my favorite, and comments are sparse, but the
       | hierarchy of objects subclassed for all the different rendering
       | modes is just about perfect.
       | https://sourceforge.net/p/ftgl/code/HEAD/tree/trunk/
       | 
       | Perl
       | 
       | The Mojolicious / Mojo toolkit. Great minimalist API and great
       | documentation and clean code all around.
       | https://metacpan.org/release/SRI/Mojolicious-9.33/view/lib/M...
        
       | arrjayh wrote:
       | I nominate SDL2 and DPDK. Spent a lot of time combing through
       | these code bases, found them to be excellent.
        
       | karmakaze wrote:
       | What I find to be elegant in a codebase is where the chosen
       | abstractions or seams that separate subdomains/concerns is well
       | chosen that each is handled mostly in one place without a lot of
       | ceremony or machinery. I would call these 'well factored' for
       | factors which are domain-specific.
       | 
       | Each language has different ways that may lend itself as part of
       | this shaping, but I like being able to think of this as something
       | to look for when reading and strive for when writing,
       | irrespective of the language at-hand.
        
       | jpe90 wrote:
       | I've really enjoyed reading (and playing with) kons-9's codebase
       | in Common Lisp. It lets you do exploratory 3D modeling via the
       | program's GUI or the repl. The source is very neatly structured
       | and readable. I don't see many CL projects that do 3D rendering,
       | so it's nice to see!
       | 
       | Quick demo:
       | 
       | https://www.youtube.com/watch?v=i0CwhEDAXB0
       | 
       | Repo:
       | 
       | https://github.com/kaveh808/kons-9
        
       | DethNinja wrote:
       | C++ - Botan
       | 
       | C - Redis
        
       | jnordwick wrote:
       | arthur whitney's famous first J interpreter.
       | 
       | https://www.jsoftware.com/ioj/iojATW.htm
       | 
       | The first version of KDB the timeseries database was written by
       | arthur in C to bootstrap the K interpreter that was used to write
       | KDB. It was 26 files, named a.c to z.c, none larger than a single
       | page of C written with notepad.exe.
        
       | ttkciar wrote:
       | Working with Perl, two things spoiled me for other languages:
       | JSON and DBI/DBD.
       | 
       | In Perl, everything serializes to JSON without fuss. It can be
       | "lossy"; objects without an explicit JSON serialization method
       | and coderefs can't be deserialized, but serializations at least
       | have placeholders for them.
       | 
       | Compare to Python's json module, which doesn't try very hard to
       | serialize things and throws exceptions every time it runs across
       | something new. It's very frustrating to use.
       | 
       | Perl's DBI provides a universal API for all databases, with
       | implementation-specific details in an underlying DBD module
       | (which both provides glue between the DBI abstraction and
       | programmer access to features specific to different database
       | systems).
       | 
       | Compare to Python, where you need to import a different module
       | and use a different API for every different kind of database. As
       | I increasingly use Python for a living, I frequently wish they'd
       | follow Perl's example with this.
        
         | mike_hock wrote:
         | > In Perl, everything serializes to JSON without fuss. It can
         | be "lossy"; objects without an explicit JSON serialization
         | method and coderefs can't be deserialized, but serializations
         | at least have placeholders for them.
         | 
         | > Compare to Python's json module, which doesn't try very hard
         | to serialize things and throws exceptions every time it runs
         | across something new. It's very frustrating to use.
         | 
         | Sounds kinda backwards to me. I thought the fact that throwing
         | exceptions (or "making a fuss," if you will) is better than
         | silently producing incorrect (or "kinda lossy," if you will)
         | results wasn't controversial anymore in 2023.
        
         | 2h wrote:
         | > universal API for all databases
         | 
         | Go has this too, very handy:
         | 
         | https://godocs.io/database/sql
        
         | freedomben wrote:
         | You might really like Ruby! It's part descended from Perl and
         | maintains a lot of the nice things about perl such as json, and
         | the amazing string functions.
        
           | ttkciar wrote:
           | I tried very hard to like Ruby. "On paper" it looks great,
           | but I had a lot of trouble getting used to the syntax.
           | 
           | I ended up going deep on the D programming language for my
           | "new language". As a statically typed language it's not as
           | expressive as the Python/Ruby/Perl contingent, but it's a lot
           | more expressive than most static languages, and its C-like
           | syntax "clicked" with me in a way Ruby never did.
           | 
           | It also can approach C-like run-time performance and memory
           | footprint at times, which I appreciate. As much as I like
           | developing in Python and Perl, I frequently wish they had
           | better run-time performance and a smaller memory footprint. D
           | gives me that, at the cost of a little expressiveness.
        
         | 7thaccount wrote:
         | Funny enough, but I've come across some really nice Perl code
         | in the wild at work. I was used to the vendor providing some 40
         | class Java monstrosity to do something that should take like a
         | page of code, so I was pleasantly pleased to find a contractor
         | who provides an extremely well commented page of code to do
         | something simple, yet critical to operations. The way Perl
         | calls the OS to do something and glue everything together was
         | pretty elegant.
        
         | knightcrusader wrote:
         | The only thing about the JSON package though, when things go
         | wrong, it is very unhelpful about where it goes wrong.
         | 
         | I usually end up always wrapping the json_decode in an eval to
         | catch the error and handle it in an easier to understand
         | fashion.
         | 
         | But I agree though, its nice how json and perl data objects
         | pretty much map to each other. It's great.
        
         | dragonwriter wrote:
         | > Compare to Python, where you need to import a different
         | module and use a different API for every different kind of
         | database.
         | 
         | You... don't. Python has a unified DB api (DBAPI 2.0) which
         | drivers usually support. They often _also_ provide a lower-
         | level API specific to the DB.
        
         | culi wrote:
         | Ruby, being a Perl-inspired language, has `.to_json` built in.
         | You can do
         | 
         | ```rb                  # hashes        { foo: 'bar' }.to_json
         | # numbers        28.to_json             # anything really
         | ['hello', 42, { lorem: "ipsum" }].to_json
         | 
         | ```
        
           | viralpraxis wrote:
           | That's simply not true. This method is monkeypatched by json
           | gem
        
             | quesera wrote:
             | JSON was added to Ruby stdlib in ruby-2.0.0 (2013), and has
             | been a default gem since ruby-2.3.0 (2015).
             | 
             | This is pretty close to "built in", I think.
        
               | michaelcampbell wrote:
               | You're both right, I think.
        
         | xkcd-sucks wrote:
         | Omg the python stdlib json / simplejson both refuse to support
         | custom serializers for keys only, as an explicit design
         | decision. It is justified as "JSON keys must be strings", but
         | JSON values can only be string/float/book/null so it seems a
         | bit arbitrary. Leads to annoying gymnastics if you want to
         | enforce "strong typing" of keys with Enum/pydantic/etc.
        
       | [deleted]
        
       ___________________________________________________________________
       (page generated 2023-06-17 23:01 UTC)