15 ms·
Ask HN: Where do I find good code to read?
I feel the need to do some code reading, but I don’t know where to find good code (don’t say GitHub).
- dusted 3y agoDepends what good code is to you. Good code is different depending on your sense of aesthetics, but also it's purpose. Good code for an enterprise-life-blood type of system is terrible code for a "let's check if this is an idea" type of prototype (and vice versa). For a relatively large and mature project, someone might suggest Linux, but it's a bit hardcore in my opinion. FFmpeg is actually really nice, and you can wrap your head around the general idea of how that system works, to the point where you can comfortably add new options and even introduce new codecs and containers in a few days.
- sumtechguy 3y agoI would add to your points. Just read code. When dealing with code you are most of the time going to be dealing with 'good' and 'bad' code. Learn to read both. As both are going to be around. If you just go to 'good code' how do you know what 'bad' looks like? Also to your point what is 'good code' can be very subjective. I have one language I use a decent amount. There is a particular style that many use that they consider 'good code'. I think it is a terrible bit of style to do. I have my reasons for it. But good/bad is not necessarily a metric you can measure. I would posit that discarding github out of hand is not a great start. Pick one of the big projects on there and follow what is pushed in. You will notice how others interact with the code. You will start to notice who checks in good stuff. Follow them. Also pick your language. As a good style there could be a bad style in another for example C++ vs Python. Python styles in C++ would drive the C++ guys nuts and the other way around.
- ssss11 3y agoThere was a HN thread months ago on this topic. I recall people suggesting well known github repo’s. I’m unsure which ones but you could start at github…
- mtmail 3y ago"Ask HN: What's the best source code you've read?" https://news.ycombinator.com/item?id=32793534 https://news.ycombinator.com/item?id=32793534
- waynesonfire 3y agoIt's worth clicking for the top post.
- sixstringtheory 3y ago> I generally wrote my algorithms in Pascal (later in Modula or Ada and by Borland days, in C++) and then hand compiled down to assembly Beast mode. This is a great way to understand more about how the high level code we write actually performs. I learned the basics of compilers long ago but never though to apply it in this way, where you can have a reference implementation against which to test an assembly rewrite. Very cool!
- viraptor 3y agoHave a look at https://aosabook.org/en/ https://aosabook.org/en/ You can use it as a guide to then read the code itself for the described projects.
- assbuttbuttass 3y agoI really like the go standard library. It's all really clear and easy to understand https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/flag/flag.go https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/... https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/strings/strings.go https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/...
- Rooki 3y agoWas about to comment the same thing. Highly recommend.
- minerva23 3y agoIt's worth noting, Go's stdlib isn't perfect, but that's part of why it's so good. You can see how they've deprecated certain methods/fields/etc while maintaining backwards compatibility.
- 6D794163636F756 3y agoI usually describe it as the least bad codebase I've seen.
- andy_ppp 3y agoThe Elixir standard library is quite readable I’d say, but it all depends on what you’re interested in? I’d recommend learning Elixir as it’s immutable and a very simple language and does concurrency better than everything else (by inheriting from Erlang/OTP on which it is based) and the packages don’t seem to exhibit the needless churn that goes on in the world of JS, for example.
- alskdj21 3y agoI was about to say this. To folks starting out with Elixir, I suggest reading its standard library. From my experience, there was this aha moment when I started reading `Enum` module. Also, Elixir's documentation is one of the best out there.
- Gualdrapo 3y agoOpenBSD use to pride themselves in the quality of their code, so if you're into OS development you might be interested on that.
- sorenjan 3y agoPeter Norvig's Pytudes was recently posted here. I think that's some of the best code I've read, although they're only small problems and not a bigger project. Still very much worth a read, he goes through the whole problem solving through code process. https://github.com/norvig/pytudes https://github.com/norvig/pytudes
- YossarianFrPrez 3y agoI second this; there's a lot one can learn about how to think about problems from Norvig's Pytudes.
- lijok 3y agoThat's very interesting. I found his code to be unreadable
- kif 3y agoSame, actually. Perhaps some of it is due to the naming convention. For instance, in the Lisp interpreter, he tends to use "parms". Which I assume is short for "parameters". That makes me think of parmesan cheese -- "params" would be a better fit.
- photon_lines 3y agoI find that reading books rather than code tends to be more helpful in terms of finding good takes on what clean code is -- more specifically books on refactoring or specific language-related features (like 'Effective Java' or 'Fluent Python'). The issue with just reading code is that many times - you'll miss out on why the author chose to use the expression or abstractions which they chose to use. Reading a book at least takes you through author's thought process. For an alternative - you could always browse repositories which contain notes on refactoring as well like this one (which does a good job summarizing some of the key principles from Fowler's book on refactoring): https://github.com/HugoMatilla/Refactoring-Summary https://github.com/HugoMatilla/Refactoring-Summary
- woleium 3y agoYes, yes. good code to read s/read/train my AI on/
- katamaster818 3y agoThis isn't exactly a repo to look at, but the book "Clean Code" is a fantastic read for learning how to write good code. It does have a lot of examples in it, and does a great job explaining everything. https://github.com/jnguyen095/clean-code/blob/master/Clean.Code.A.Handbook.of.Agile.Software.Craftsmanship.pdf https://github.com/jnguyen095/clean-code/blob/master/Clean.C...
- pc86 3y agohttps://qntm.org/clean https://qntm.org/clean has a great discussion of all the things that are wrong with Clean Code.
- y-curious 3y agoInteresting read. I read a companion book (or is it wholly unrelated?) called Clean Code for Python and I learned a whole lot! That book improved my Python more than anything else, honestly. That being said, I agree with the critique that obsessively committing to DRY is throwing the baby out with the bathwater.
- ecshafer 3y agoI don't like clean code, and like the author I find the things presented in Clean Code to just make incredibly inscrutable code. The worst code bases I have seen have been the ones with no code plans at all, and the ones that use Clean Code and Gang of Four like a bible, both are equally mazes of spaghetti. Clean Code I really just don't agree with, and I think this author lays it out well. Special design patterns and tons of polymorphism usually end up creating multiples of complexity in the effort to reduce DRY at any cost (and often are abstractions that are only ever used one or two times anyways). Ultimately I think the single most important rule for clean code is: skinny controller, fat model. If you are doing batch data, then this applies still I think. You should have all of the logic you can in the model, avoid data objects. And the code paths that alter things should be as thin as possible. I honestly think it is better to have a 5k line model if it avoids more. The most unlcean code I have seen usually falls into the abstracted out processes in financial instutitons where they follow Clean Code advice and everything are a bunch of functions passing around some big fat objects full of getters and setters, and changing any functionality means adding changes somewhere in the process to check state and alter the state, which leads to loops and if statements everywhere to see which account type it is at each point etc. But in OOP programming its supposed to be objects sending messages to each other. Every object should know everything about itself, which is what a fat model demands. Any more abstraction than that seems to get in the way.
- ComputerGuru 3y agoWhat are you into? Language, technology, purpose, provenance, etc?
- tonym128 3y agoI'm sorry these are videos, but your question made me think of these. If you're looking for programming inspiration I love these videos Jon Bentley - Three Beautiful Quicksorts https://www.youtube.com/watch?v=aMnn0Jq0J-E https://www.youtube.com/watch?v=aMnn0Jq0J-E Bret Victor - Inventing on Principle https://www.youtube.com/watch?v=PUv66718DII https://www.youtube.com/watch?v=PUv66718DII
- pbyte13 3y agoOP might also be interested in Bentley's book, Programming Pearls: https://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp/0201657880 https://www.amazon.com/Programming-Pearls-2nd-Jon-Bentley/dp...
- justaman 3y agoI'm an F tier programmer but I think the Simpson's Hit and Run game has some really great code. Its easy to read and well organized in my opinion. https://github.com/Svxy/The-Simpsons-Hit-and-Run/tree/eb4b3404aa00220d659e532151dab13d642c17a3 https://github.com/Svxy/The-Simpsons-Hit-and-Run/tree/eb4b34...
- Zetice 3y agoGive up on “good code”. Its pursuit is how junior devs pesters senior devs based on a delusion that such a thing is possible. Good code is working code, code that pays the bills. Focus instead on writing code you can throw away easily, code that you are wholly unattached to and is isolated enough that rewriting it won’t cost absurd hours.
- bentice 3y agoGood code "is isolated enough that rewriting it won’t cost absurd hours." This is the hard part.
- HumblyTossed 3y agoYes, and it also is the point I think most people here are missing.
- happytoexplain 3y agoThis is uncharitable. The GP's comment is short. What people have an opinion about is, "Give up on 'good code'" and, "working code, code that pays the bills ... code you can throw away easily, code that you are wholly unattached to".
- johnnyanmac 3y agobig claims require big justifications. I can't just go out and say "C++ is better than Javascript" and expect people to not scrutinize me because "well it was a short comment". But hey, they do justify it in responses. So maybe they are indeed playing to their philosophy of "work fast"
- iamflimflam1 3y agoSo much this. Good code is code that delivers business value.
- 3y ago
- gwbas1c 3y agoI'll shoot with two examples: (Tooting my own horn) A Fitbit watchface that I wrote a few years back: https://github.com/GWBasic/Binaryish-Clock https://github.com/GWBasic/Binaryish-Clock An event/threading library for C#. I keep a fork in my Github because the original source was archived: https://github.com/GWBasic/retlang https://github.com/GWBasic/retlang Note that both examples are "functionally obsolete." The Fitbit studio environment is deprecated in favor of Android Watch; and if you're using C#, you can should be using Tasks to get similar functionality to Retlang.
- bandyaboot 3y agoThe sqlite code base is really well done. Lots of documentation. https://github.com/sqlite/sqlite https://github.com/sqlite/sqlite
- T3RMINATED 3y agoGood code is working code, code that pays the bills. Focus instead on writing code you can throw away easily, code that you are wholly unattached to and is isolated enough that rewriting it won’t cost absurd hours.
- joshmarlow 3y agoNot exactly an emphasis on coding style itself, but I would recommend checking out the "The Architecture of Open Source Applications" to see examples of how some large and popular open source projects are structured. https://aosabook.org/en/ https://aosabook.org/en/
- dinkleberg 3y agoThis looks excellent, thanks for sharing. It also links off to this which looks like a good read https://third-bit.com/sdxjs/ https://third-bit.com/sdxjs/
- cdiamand 3y agoDOOM https://github.com/id-Software/DOOM/tree/master/linuxdoom-1.10 https://github.com/id-Software/DOOM/tree/master/linuxdoom-1....
- foobiekr 3y agoagreed. really any performance oriented code would be useful. god help the kids reading the trash that makes up 99% of the code out there today.
- shortrounddev2 3y agoPerformance oriented code can be hard to maintain. Writing things in unintuitive ways to try to coerce the compiler into doing fewer instructions can result in code that's harder to read.
- foobiekr 3y agoThere are degrees. I’d be happy to not see code generating millions of medium lifetime garbage objects per request.
- TrueDuality 3y agoIs there any particular language you're looking for? I've found some languages hideous until I understood them and could appreciate their respective graces. Off the top of my head the I can think of a couple of projects you and others may be interested in. The first is Jones Forth (https://github.com/nornagon/jonesforth https://github.com/nornagon/jonesforth), start with jonesforth.S and move into jonesforth.f. I really enjoyed following along with it and trying my hand at making my own stack based language. The other is Xv6, a teaching operating system from MIT (https://pdos.csail.mit.edu/6.828/2021/xv6.html https://pdos.csail.mit.edu/6.828/2021/xv6.html), not all the code or implementations are top notch but it shows you non-optimized versions (just because they're simple and more readable) of different concepts used in OS design. If you're interested in the embedded world, there is a really neat project I've been following that feels a more structured and safe (as in fault-tolerant) while still staying pretty simple (both conceptually and in the code itself): Hubris and Humility (https://hubris.oxide.computer/ https://hubris.oxide.computer/).
- avg_dev 3y agoThis is an interesting article on the subject of reading code by the coder and writer Peter Seibel (he also wrote a nice book called Coders at Work with interviews with some programmers who have worked on interesting and widely used software): https://gigamonkeys.com/code-reading/ https://gigamonkeys.com/code-reading/ I’m sure I’ve seen some HN posts about this article, but I can’t remember the content of such.
- KenArrari 3y agoSometimes it helps to look at pull requests/merges on large repos. You can see exactly what the change was, what code was touched, and discussions on those changes so that helps you get a feeel for what's good and bad.
- acaloiar 3y agoI would argue that if you find any successful open source project on Gitlab, Github, or the code forge of your choice, you've likely found some form of "good code". Any code that is used and minimally hated by a large number of people is good code in my opinion. It's valued by its users, and ultimately that is what matters. It may not be perfectly DRY, use popular abstractions, or whatever people today think of as ideal code, but successful software projects solve real problems every day. The authors have likely done a good job of balancing usability with code quality. And I think that's the best we should hope for.
- Olshansky 3y agoI’m hesitant to leave a comment because “good code” almost feels like answering “good food”, but I do have some opinions: - Ratio of code:documentation INSIDE the source code - Directory structure depth is “just right”; not too deep nor too shallow - Number of dependencies is “just right”; don’t build things yourself, but also don’t import the whole world - TTLD (Time To Local Dev); how simple is the getting started guide in terms of copy-pasta commands + automation + the right amount of context + easy-to-use tooling - Code culture; follow industry best practices and make it clear where & why you deviate My personal favorite one: `make todo_list` We use keywords (TODO, OPTIMIZE, HACK, etc…) through the codebase and make them easily searchable with make helpers. Ref: https://github.com/pokt-network/pocket/blob/main/Makefile#L525 https://github.com/pokt-network/pocket/blob/main/Makefile#L5...
- ydnaclementine 3y agoRead your own code that you thought was good 6+ months ago. Do you feel like it's still good? How could it be improved?
- gorenb 3y agoThis is… ummm… original and… ummm… a good idea.
- beej71 3y agoI'd encourage you to first be opinionated about what you think makes good code. Maybe read some articles or books on it. Don't worry about being right or wrong--someone is definitely going to disagree with you no matter what you think. And then read any code through that lens. Then read some different code and contrast it. What did you like more or less? What worked and what didn't? Where did it work and where didn't it? Remember that code that is fantastic is some ways is often horrible in others (e.g. the legendary fast inverse square root). Approaching it this way helps one consider the reasoning behind what makes certain code good, and forces one to examine the context of the code, which is also critical. And being opinionated helps you remember to apply those rules in the future.
- andrewjl 3y agoOne approach might be to find individuals whose technical acumen you respect and look over their public projects (or alternatively their public contributions to bigger projects).
- sameerds 3y agoThe question doesn't specify any language, so FWIW, I first learned "serious" programming by reading the sources for GNOME Glib, about 18 years ago. https://gitlab.gnome.org/GNOME/glib https://gitlab.gnome.org/GNOME/glib
- russellbeattie 3y agoAnd there are definitely some languages to avoid all together if one is trying to learn. I have opinions, but they'll just spark flame wars. Googling worst languages will work. The fact is someone programming languages - either by design or culture - just encourage unbelievable crap. Obviously, any code can be written well, but if one has to look for a needle in a haystack it's not worth it.
- bombcar 3y agoRead the TeX WEB source (if you can't weave tex.web yourself, you can cheat: https://rfsber.home.xs4all.nl/Tex/tex.pdf https://rfsber.home.xs4all.nl/Tex/tex.pdf ) Note that "WEB" here is not "web" as in website.
- vincent-manis 3y agoIn the early 1980s, I inadvertently agreed to produce a 100-page manual for the student programming environment I had designed and implemented at the University of BC. I stupidly decided to do it in TeX. The stupidity here was that (a) the only laser printer on campus was in another building and (b) the TeXBook didn't exist yet. All I had was a listing of a late prerelease of the Web source of TeX, along with some of Knuth's writings about TeX77, which was a substantially different system. I managed to do it, including formatting much of the manual in the style of Unix man pages (the environment itself lasted for several years, until mainframe timesharing for students went away for good). When I finally got my hands on the TeXBook, I found that I had learned much about TeX, including a few things that weren't so :). Knuth's programming style is highly idiosyncratic, and there are many points with which I'd disagree. Furthermore, the choice of Pascal required all sorts of strange compromises. That said, I highly commend reading the source of TeX, to see how a brilliant computer scientist attacked a problem that is not nicely structured, using very restricted programming tools. You will not get much that you can copy into your programs, but it is an excellent, well-documented attack on an interesting and complex problem. (By the way, Knuth's TeX was written long before modern typesetting things like Unicode, PDF, and OTF fonts; you don't want to use Knuth's TeX for modern work; I use LuaTeX. But Knuth's version remains as a useful subject of study.) Another good thing to study is Lions's commentary on Unix V6. This is interesting because it shows many of Unix's key abstractions implemented in a few thousand lines of code.
- bombcar 3y agoYes - I wouldn't recommend someone use WEB to program in unless they were already Knuth-like, but the concepts and examples of "how it is done" is worth reading. Just like if I were to write a book, it wouldn't be in the style of Plutarch's Lives, I'm still glad I read them.
- v3ss0n 3y agoFor python www.litestar.dev
- steno132 3y agoTwitter's algorithm code is canonical good Scala - https://github.com/twitter/the-algorithm https://github.com/twitter/the-algorithm
- glouwbug 3y agoBisqwit on youtube
- shortrounddev2 3y agoMost code is bad, so I think it would help to find some bad code to read
- esafak 3y agoHow would that help? You can't invert bad code to get good code.
- shortrounddev2 3y agoMost of my job involves reading bad code to understand what it's trying to do before I wedge some nugget of decency in there. The ability to understand the intentions of someone who has no idea how to express what they're trying to do is critical for maintaining other people's software
- Invictus0 3y agolichess backend
- pianoben 3y agoI learned a ton about Java and pragmatic algorithm development from reading Dagger (https://github.com/square/dagger https://github.com/square/dagger) and porting it to C#. It's small enough that you can grok it in a reasonable amount of time, but sophisticated enough that there's a lot to learn. (Yes it's deprecated in favor of Dagger 2, but the latter is a tougher slog IMO) Actually most of the big Square OSS libraries are great to read - okio, okhttp, picasso.
- bitwize 3y agoNetBSD source. Exemplary for C code and astoundingly well documented.
- PaulHoule 3y agoOne thing to look for are programs that use advanced techniques as opposed to programs that are just simply clear or well-commented. For instance, instead of learning a new programming language, you should learn how programming languages are made. Most of the secrets that computer science majors know that you probably don't were learned in compilers class. (Unfortunately many people are chasing the Holy Grail of "functional programming" and never finding it because "functional programming" is a pale shadow of what's possible when you understand how compilers work: this is how Common LISP and scheme are so much more profound then, say, Haskell) It's a little out of date but I was lately thinking up about the Scott Adams adventure games of the early 1980s that were written with a specialized interpreter which could be implemented in BASIC but was also implemented in assembly language for better performance. See https://ahopeful.wordpress.com/2020/09/13/digging-up-adventureland-scott-adams-1980/ https://ahopeful.wordpress.com/2020/09/13/digging-up-adventu... If you tried to implement a game like that directly in a language like BASIC you would be driven nuts because that kind of game is fundamentally "object oriented" in that there are a number of things like rooms and items that are all mostly the same except they are different in some ways and trying to code that with IF, THEN and ELSE is bad enough even before GOTO gets added to the mix. The thing is that GOTO becomes quite benign and even useful when it is used to implement interpreters. So back in the day you would study systems like that to stretch your skills, today I would look at compilers and related technology, like the Jena rules engine.
- vore 3y ago> Unfortunately many people are chasing the Holy Grail of "functional programming" and never finding it because "functional programming" is a pale shadow of what's possible when you understand how compilers work: this is how Common LISP and scheme are so much more profound then, say, Haskell Huh? What does this even mean? Both languages are very different from each other and the only thing they really have in common is having functions — how is one more “profound” than the other or any less worthy of being “functional programming”, for whatever that means to you?
- intelVISA 3y agoI've never seen good code, but if it exists I am sure it'd be a lisp.
- pseg134 3y agoI wonder if OP is just soliciting inputs for LLM training.
- elintknower 3y agoI've always had a hard time finding truly complex and well designed react UI code to look at. Specifically something polished that also has complex UI elements like block indicators or embedded modals.
- benrutter 3y agoThere was a blog post from Peter Seibel recently called [Code Is Not Literature)](https://gigamonkeys.com/code-reading/ https://gigamonkeys.com/code-reading/) which pointed out that although everyone seems to agree reading code is great, very few tend to do it regularly. I feel like I get a lot more out of messing with / hacking on code than I do from reading it. I'm sure people vary, but I've got loads more out of open source contributions to sometimes small projects, and not very much out of trying to do something like read the code for the Glasgow Haskel Compiler or something. So for code to read, I think having an in is crucial, at least for me. So I'd say, find a cool, maybe small open source project, look at the issue tracker if it has one, and try to implement something. You'll only really know if it's good code (or why) after you start trying to change it.
- TillE 3y agoBig agree. Tinkering with code to some specific end is gonna teach you a lot more than just scrolling through files, unless you're just curious about the basic architecture or how they implemented some specific thing. Either way, have a goal in mind when reading code. If nothing else, take notes on what you learn.
- sanderjd 3y agoI think the difficulty with this advice is that it's hard to know where the venn diagram overlaps between "having an in" and "good code". A lot of the code I read because I "have an in" is, I think, not very "good" in the sense of being enlightening in furtherance of my craft. It usually just looks like code I'd already write. I typically find the recommendations people make like "here's an example of particularly good code for this particular language / style / architecture" to be more enlightening.
- thayne 3y agoI think it depends a lot on the person. I will regularly read source code for projects I find interesting to figure out how they work.
- AndyMcConachie 3y agoIt really depends on the level that you're at in your coding ability. When I was a younger programmer I had the fortune to have a CS professor who believed in reading good code and encouraged us to do so. Nowadays if I want to learn some new thing I'll find the 'right' code to read. Someone who has done somthing similar to what I am trying to do. But when I was younger and still trying to understand more basic concepts I just wanted to read 'good' code. I wanted to know how to structure programming logic. Now I don't want to know how to structure logic unless I'm really interested in learning some new fangled concept. Typically something having to do with concurrency since there always seem to be new ways to express concurrency in programming. Most of the code I look to read these days is because I want to start using a new library and I want to see how someone else has done it.
- mushufasa 3y agoZulip is an open source chat system and has fantastic technical architecture docs, a team that cares a lot about code quality, and is very receptive to working with new collaborators. https://github.com/zulip https://github.com/zulip
- dgb23 3y agoRead code of something you use or are generally interested in! The runtime/std lib of the PL of your choice. Your text editor or a plugin that you use etc.
- ilc 3y agoReading code, is second to using it and working with it. Someone can tell you "This is good code." but good for what? Why is it good? It is fast code? Is it highly maintainable? Is it well documented and kept up to date? Is it a code that is highly reliable? Is it code that solves and important problem? My rule of thumb is: Ugly code usually comes from ugly problems. Ugly code can often be some of the most valuable code, because... it does the ugly things! It does what we want 99.9% of the time, using heuristics, and other nasty stuff. So don't judge code on if it is "good" or not. Judge it on if it does what the author intended, and if it doesn't suck too badly to read with no reason. Code bases I've worked in and have opinions on: Samba: Good code base, but you MUST understand the idioms of the codebase, or it is absolutely horrible. It also alas, has the wisdom of 20+ years of existence in it... so it isn't always pretty. Illumos/OpenSolaris: Nice codebase. Get the SmartOS distribution and you can literally type a few commands and build an entire OS and userland. FreeBSD: See above. Great codebase, ans also, it can build userland + kernel, though it takes a few more commands. I'll admit I haven't read this one in 20 years. But I always found it a good codebase to work in back when :). Grab the source for a library you use all the time, you know the useful one but the API feels a bit off... Download it and look at why the API is the way it is. When looking at code, do NOT neglect looking at the history of a given file or piece of code, it often can teach you quite a bit. :)
- javier_e06 3y agoHere: https://makelinux.github.io/kernel/map/ https://makelinux.github.io/kernel/map/
- fooker 3y agoDon't, you'll not have any useful takeaways because good practices tend to vary across domains. Instead: write code for whatever fits your fancy, and request experts to give you feedback.
- mydriasis 3y agoNot in my repos. Eek. :)
- notorandit 3y agoMinix3 kernel, if you look for C.
- 1letterunixname 3y agoYep. Also OpenBSD.
- rolandog 3y agoI recently enjoyed reading the pure Python equivalent definitions of the itertools [0] and more-itertools modules. [0]: https://docs.python.org/3/library/itertools.html https://docs.python.org/3/library/itertools.html
- krobelus 3y agohttps://github.com/mawww/kakoune/ https://github.com/mawww/kakoune/
- OliverJones 3y agoWhen I'm coding / debugging with a framework of some kind (nodejs, dotnet, jdk, wordpress, whatever I'm using to deliver value at the time) I sometimes "step into" the framework or a library to see what happens. (Of course, I need open source for the framework/lib for this to work.) It sometimes opens a window to interesting code to read that's relevant to what I'm thinking about at the time. And sometimes doesn't. Lots of source these days has auto-documentation comments. Good IDEs present that documentation, which helps guess what might be worth diving into the Step Into rabbithole. Often, from a high-quality framework / library I learn a bunch about handling weird edge cases and about writing code for long-term maintainability. And, I often learn some useful constructs and techniques. (And, it's possible to learn useful things from not-so-high quality code too.)
- benatkin 3y agoI'm impressed with Deno's code. https://github.com/denoland/deno https://github.com/denoland/deno https://github.com/denoland/deno_std https://github.com/denoland/deno_std
- softwaredoug 3y agoI would just find a heavily used, well-loved open source codebase used by lots of people in production. You need to define "good"/"bad" as actual objective qualities you can see in the world. I would look for places the code seems to be really liked by its users. Maybe its very reliable, or extensible, or fast, or something else. How do they achieve that? Why do the users say these things? How do they measure / focus / make tradeoffs to focus on those attributes? Then for painful to use software & common painpoints, why does this happen? Is it a fundamental design decision? Is it just sloppy code? Is in just intentionally slow to be more user-friendly? Or hard to read code because the focus is on speed? It's all about the tradeoffs and intentional choices...
- electrondood 3y agoAny standard library, or heavily used third party library. Just "go to definition" in your IDE and drill down under the hood.
- agilob 3y agoJDK and C# source codes
- sdwvit 3y agoI like gecko / chromium source codes. My knowledge of javascript and browser APIs helps understand browser source code even if there is no documentation.
- alphazard 3y agoMost code is not worth reading. Even well structured codebases are mostly composed of code which is not worth reading. The difference in a well structured codebase is that some of the code prevents you from having to read huge amounts of other code. All code is bad, it starts out bad just by existing, it's only redeeming quality is preventing you from having to deal with more bad code. Everyone thinks they write good "clean" code, and it's never true. Good programmers are good because of the architecture of their code, not because a single excerpt of code in isolation looks a certain way. What you really want to read about are good designs. Read APIs, models, concepts, schemas, etc. Another comment mentioned the Go standard library, and I totally agree. But stop at the APIs, if you look inside, you'll see that it's also mostly garbage. It's good because the APIs are good, and you don't have to read the rest.
- johnnyanmac 3y agoI don't know, I argue APIs and models are "code" in the informal sense. Architecture is important, but it's even harder to understand "good architecture" than code, not without the architect right there explaining it to you. Many decisions were made for some reason that you can only understand through experience.
- alphazard 3y agoThere's definitely a code component to them, but most of reading about and understanding them would come from reading the surrounding documentation or reasoning. Most of that text would be prose, rather than a language consumed by any computer system. I'm not sure what you mean by "understand good architecture." One thing that makes an architecture good is its simplicity and clarity. If it's hard to understand, it can't be that good. I can say for certain: if you understand the problem being solved but not the architecture, then it is for sure a bad architecture.
- korijn 3y agoFor me, I read code instead of docs when I need to understand a dependency or tool better. That gives me direction and focus when reading code. You learn a lot from the process.
- bob1029 3y agoThe best code is no code. I would stop chasing these kinds of rabbits and start looking harder at the actual information being processed throughout. I'd also focus more on the actual business & customers over any specific coding practice. You would hopefully find that the most compelling aspect of well-designed software systems is the data. In "data-driven" applications, 100% of the application state and configuration can be made to live in a database somewhere. In these scenarios, seeking code examples is not going to tell you much of anything. My advice is to look at a bunch of SQL schemas (ideally, ones you know to be under successful products) and compare them to the problem area they support. Think about how you would answer questions a reasonable person might ask of that business by way of a query. Then, consider how much code you just now did not write to answer a realistic business problem. Relational modeling can eliminate entire repositories worth of bullshit code that should have never existed in the first place. Do you want to train yourself to rely upon something that a true wizard can walk in and disaparate at the snap of his fingers?
- kmac_ 3y agoChromium. I don't know how it looks right now, but several years ago lots of its parts were really good. Modular, with a lot of extensibility points, easy to read. (That may have changed, so another opinion would be useful). It was quite different from Firefox code, that looked surprisingly convoluted.
- BiteCode_dev 3y agoIf you like Python, the library sortedcontainers has a clear, well documented, yet short source code that is a joy to read for a non trivial problem: https://github.com/grantjenks/python-sortedcontainers/blob/master/src/sortedcontainers/sorteddict.py https://github.com/grantjenks/python-sortedcontainers/blob/m...
- reilly3000 3y agoI would suggest starting with reading a spec for your favorite language. I got a lot of value from spending time with the Ecmascript (JS) spec, as well as the Postgres manual. Take something like Generators that may be less familiar to you, then plunk those expressions into sourcegraph or github search and find them used in real codebases. Try to understand why the developers chose to use a generator instead of another pattern. I think reading code itself is only valuable when you need to explore a specific domain. Trying to extract coding patterns from an unfamiliar domain very difficult; it comes with unseeable assumptions.
- syntheweave 3y agoMy suggestion is to focus on some of these: * Protocol implementations(e.g. TCP, HTTP, MIDI) * Smaller compilers(PUC-Rio Lua, Forth-80) * Commercial video game sources [0] When studying protocols, you can compare apples-to-apples because the protocol has to work the same way by design, but the implementation can vary. With compilers, you're getting a look into programming in its maximally symbolic form - and every strategy a compiler uses is one you can directly apply to abstract your own code. And commercial video games have another mode of apples-to-apples in that the original release - the dirty, meets-deadline stuff - often can be compared with fan remakes and patches, which have the luxury of an exact specification and no deadlines. To actually ship in industry, you have to accept and know good dirty code hacks, but it's worth comparing them to their counterparts. [0] https://en.m.wikipedia.org/wiki/List_of_commercial_video_games_with_available_source_code https://en.m.wikipedia.org/wiki/List_of_commercial_video_gam...
- Joel_Mckay 3y agoNote: Readability, coherent organization, and logical correctness are often more important than obfuscated "hold-my-beer"/Heisenbug code. In general, have a look at the Standard Template Library or Boost examples directory. Then some unit tests for simple GNU programs similar to what you are building, CLI command source like "ps" for OS interactions, and finally an OS kernel like Linux or *BSD. There are also several online classes offered by linuxfoundation.org etc. Start with a small SBC like a pi4/BeagleBoard, and learn how to snapshot disk images (you will severely damage things while learning). There are also several open syntax formatting standards published by projects (and companies like Google), that will guide you on the local ecosystem. Expect a Hazing in some places, as some folks tend to forget they were students once too. It would also be wise to spend a few days studying security-auditing-tools, as one may learn to mitigate common ways people will try to break stuff. Detection and incident-handling is arguably more important than outright prevention. Happy coding, =)
- tessellated 3y agohttps://suckless.org/ https://suckless.org/
- miki123211 3y agoAs many have already said, what you'd consider "good code" depends on what you want to learn and achieve, but here are a few recommendations: 1. Busybox. It's basically a collection of common Unix utilities, from common commands like ls or cat, to system daemons like crond and init. It's a good way to learn more about how Linux and other Unix-based systems work under the hood. Busybox applets are pretty independent from each other, so you can just take one and focus on it specifically, digging into the common library code if you need to. The utilities aren't as fully-featured as their GNU coreutils counterparts, which makes it easier to understand what they actually do. Busybox is not a toy project by any means, though, it's used in many embedded devices and leaner Linux distributions, Alpine being the prime example. However, it's written in some pretty dense C, with a fair bit of pointer magic involved, so if you don't understand things like the equivalence between a pointer and the beginning of an array, some things might not make sense. 2. The Go standard library. Unlike many programming languages, Go does not rely on much external code. Whereas Python delegates zip handling to zlib, handling of TLS connections to Openssl and so on, Go just includes all of this in the standard library, and it's all pretty readable Go code. If you want to understand many common algorithms or file formats, everything from sorting arrays to parsing JSON to sending and receiving HTTP requests or common cryptographic operations, all written in a readable style, in a language much higher level than C, just look at the Go stdlib. Go even fully implements everything needed for its own compilation, including linkers and assemblers. I haven't read these parts much, and a lot of that code is transpiled from C, so I can't say how good the code quality is. 3. Serenity OS. It's a hobby Posix-based operating system written in C++, with no external dependencies, not even libc or libstdc++. They have their own homegrown implementations of every part of an operating system, from a monolithic kernel, to common Unix utilities, archive handling, audio and video codecs, common data structures, like vectors (growable arrays), hash maps, locks, mutexes and other concurrency primitives, a custom string implementation, a window server and a GUI library, including a fully-featured event loop system, their own window manager and many common GUI widgets, to actual applications and games. They even have a custom web browser with a custom web engine and JS interpreter. As a rule of thumb, if something it's either in Busybox or in the Go standard library, there's a good chance it will also be in Serenity. Again, their utilities do much less than their non-serenity counterparts and are far less optimized, but that also means there's a lot fewer layers of abstraction to deal with and that the general principles underlying their implementation are actually easier to understand. The fact that everything is in a single repo, neatly organized, written in one language with common conventions, just makes it really pleasant to read. Their code quality isn't always the best, but the fact that it's C++ and not C does make things easier. Even though I haven't actually used the OS (because of accessibility concerns), it's one of these repos that I always have cloned on my computer, and it's the first place I look if I'm curious how a particular feature or app can be implemented. 4. If you're in any way interested in AI, everything written by Andrej Karpathy, notably Micrograd and Nano GPT. There's also Tinygrad, a bigger but still understandable take on Micrograd. Unless you're an expert, you need to watch Andrej's Youtube videos to actually understand the code, but the feeling I got when I actually understood the principle behind Micrograd is one I will never forget. I consider it to be the most beautiful piece of code I've ever seen, it basically embodies the whole principle of what a neural net is in 200 lines of code. Everything else that the big libraries do is basically just implementations of actual models, optimization and glue code, such as for loading data and such. It's often crucial optimization, optimization without which modern neural networks wouldn't be possible at all, but just optimization nonetheless. 5. Everything concerning Elixir, both the standard library, other libraries written in it, as well as open-source Phoenix web apps. Deep down, it's basically a Lisp without the off-putting parentheses. There are a lot of lessons to be learnt there, from the power of macros and the fact that things like "if" can be written in the language itself instead of being a special construct, to the power of pattern matching and the pipeline operator, to the advantages of its concurrency model and functional programming in general. To generalize beyond these specific examples, if you want to understand something, find a smaller version of it, and try understanding that. The smaller version might just be a git commit from a good few years ago, with much fewer features, but it's better if it is a different, more basic (but preferably not toy) implementation of the same app, feature or algorithm. Don't read V8, PyTorch or Postgres, read Lua, Tinygrad or Sqlite instead.
- auxbuss 3y agoThe best – and I think the only – way to discover what good code looks like is to work with it. Eventually, after working on, say, half a dozen code bases, you'll start to understand intuitively what good code is, providing you get lucky enough to find a good code base, or a code base with a significant amount of good code. It's a long old journey, but once you have the skill, it never goes away. It's like learning a musical instrument or a foreign language. (By which I mean you can read as many books as you like about it, but without application, you haven't yet begun. Nevertheless, read the books.) Warning: most developers never attain this skill, but almost all of them believe – truly believe – that they write good code; just as everyone thinks they are a good – nay excellent – driver. Warning: no one writes good code. Good code becomes good through iteration, just as good writing becomes good by iteration/editing. The reason for this is obvious; but if you don't know why, then you haven't done enough yet. Warning: everyone has biases. Learn to recognise yours and when you are applying them. Learn to ignore them and see things through a different lens. Explore with an open mind. Iterating to good code is one of the most satisfying things you can do with software development.
- smaddox 3y agoRust stdlib code is quite high quality although not particularly dense due to large amount of comments. Start from the docs, and click any source link: https://doc.rust-lang.org/std/vec/struct.Vec.html https://doc.rust-lang.org/std/vec/struct.Vec.html Sqlite is supposedly high quality C code: https://github.com/smparkes/sqlite https://github.com/smparkes/sqlite For videos of someone (Casey Muratori) writing video game code and debugging it, Handmade Hero: https://handmadehero.org/ https://handmadehero.org/ A blog post about how to write code by the same author: https://caseymuratori.com/blog_0015 https://caseymuratori.com/blog_0015 For how to implement a fairly advanced type system, Typing Haskell in Haskell: https://gist.github.com/chrisdone/0075a16b32bfd4f62b7b https://gist.github.com/chrisdone/0075a16b32bfd4f62b7b But, honestly, you're probably better off writing code yourself and learning by doing.
- svaha1728 3y agoI recently came across Beanie. A Python ORM for MongoDb. A pleasure to work with and integrates well with FastAPI, the tests document the code well, and at this point it’s only as complicated as it needs to be. https://github.com/roman-right/beanie https://github.com/roman-right/beanie
- habitue 3y agoI think code is less important to read than the design of interfaces / APIs. I've basically never been blown away by someone's function definitions or whatever, but I regularly run into well designed APIs. Maybe it's because the API is the thing that has the ergonomics, but the code is just getting things to work. Not sure.
- johnnyanmac 3y ago>don’t say GitHub Gitlab, Bitbucket. I don't really know what to expect. You want to see good production code, and the FOSS community is way way WAY better at this than some of the bubble gum you'd see in a professional setting. Your question is too general, so I can't exactly give you a specific repository. I could direct you to BGFX[1] for a decent architecture of a cross platform renderer, but if you're not a graphics programmer, that may be a bad exercise, as you'd spend more time learning jargon than studying clean code. Or it uses patterns (or lack of, given graphics programming) that don't apply to your domain. [1]: https://github.com/bkaradzic/bgfx https://github.com/bkaradzic/bgfx
- rerdavies 3y agoMy personal nomination for code you should read next: the source code for Android. The problem with with "good code" is that it tends to be code that -- more often than not -- is written by people I wouldn't trust to work on real-world large-scale software development. On the other hand, any sufficiently large project that was successfully delivered necessarily contains almost exclusively "good code", because if it didn't, it would have collapsed under the overbearing weight of "bad code". What makes the Android source code interesting reading: - It's written by some of the best software engineers in the business, by any imaginable standard. - It is an unimaginably successful project. - It is codes that deals with the gritty enduring reality of programming in the large that cannot reasonably be addressed by toy samples of "good code". That's where real "good code" lives. - As a programmer, that's the kind of scale I want to work on. Preferably as one of the principle engineers working on Android 1.0. But Android 14 wouldn't be awful. Overwhelmingly, it is exceptionally good code. Occasionally it is less than happy code. But the places where it are less than happy are almost more interesting than the places where it's good. The code is 14 years old. It's been through 14 major releases (34 minor releases). It started on phones with 320x200 displays, with megabytes of memory, and processors than could barely run a toaster. And now it runs on phones with 4k displays with 8GB of memory, on processors that are about 2.4 kilo-Crays. If you're a junior programmer, every single line is better than what you're capable of writing. If you're a senior or intermediate programmer, there is serious food for contemplation. The question that should be asked at every turn: if I was on the Android 1.0 development team, what could I have done to make this happier code? And I'd really like to see what the "Less code is better code" guru (a recent HN posting) could do with androidx/fragment/app/Fragment.java and friends. A perfect example of a "Good Code Guru" that I would not trust to work on any of my projects. --- There is no such thing as bad code; but some code is happier than other code. -- Herbie Hancock. Or what Herbie Hancock would have said if he were a programmer instead of a jazz musician.
- petabytes 3y agoStart a reverse-engineering project like I did, and you'll quickly find yourself reading 10s of thousands of lines of assembly. Or at best, decompiled generic C.
- roddux 3y agoRather than seeking an impossible ideal (>2 people who agree on what 'good' code is)-- instead read ALL sorts of code. This will then help you learn to distinguish between what is good and not good, and what makes it so. Simplicity, clarity, and lack of surprise come to mind as concepts for 'good'. Others will have different ideas.
- gorenb 3y agoThank you for everyone who responded! I’m overwhelmed by your responses and reading through each one. Getting this amount of comments means a lot for me, because I usually get something like 4 to 5 comments. Thank you.
- gorenb 3y agoI really needed to know where to find good code, and you all helped me.
- mfrw 3y agoI am big fan of Salvatore "antirez" Sanfilippo [0]. I encourage a look at `redis`, `kilo` and his other GitHub projects. [0]: https://github.com/antirez https://github.com/antirez
- edweis 3y agoHTMX project has an impressive simplicity that is worth reading: https://github.com/bigskysoftware/htmx/blob/master/src/htmx.js https://github.com/bigskysoftware/htmx/blob/master/src/htmx....
- rasso 3y agoYes, absolutely beautiful
- atomicnature 3y agoPeter Norvig's notebooks: https://github.com/norvig/pytudes https://github.com/norvig/pytudes
- t-3 3y agoWhat do you want to build? It's much easier to find code to read, and motivation to read it, when you have a goal to work towards. For example, when writing an interpreter, I read code for various interpreters. Looking at a variety of projects from different people gave me a lot of ideas and examples of different approaches to solving the same problem.
- kassian_sun 3y agoRead source code from projects that used by wide range of people. Some tiny repository might look nice at first sight, but it could be a result of limited scope, and production codebase always involves a large range of scope. Even if there're some caveats/hacks in these codebase, it might have a valid cause and you can learn something from how it evolved or how it (dirtily or gracefully) solves the issue.
- aristofun 3y agoLike with restaurants — check the bath, if it's good and clean, the restaurant is most likely to be good. Look where good tech documentation lives. Flutter is one good example of great docs. Ruby on rails is an anti example (even though the framework itself is great for its goal).
- stealthcat 3y agoGood code? Code reading is more like understanding different cultures. Read big tech codebases meta and google, to startups codebases like openai and comma.ai, you will see.