Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 21,834 posts.
Source of the famous “Now you have two problems” quote (2006)
As I mentioned in my previous post , my Mastering Regular Expressions book was just reviewed on Slashdot . One thing that struck me in reading all the resulting comments was the (several different copies of an) apparently famous quote that goes something like:
Types as Interfaces
For the past few days, I have been toying with an idea for a board game. To test it out, I wanted to write a simple implementation of it. Here’s an example of a type we might need in a critical phase of the game.
Why do most top performers have the highest count of commits and pull requests?
It’s largely known that counting commits and pull requests as a measure of engineering productivity is a bad idea.
Evil, or why Douglas Crockford is harmful to Free Software
Yesterday I received a new serious bug report against Mono in Debian. For those not in the know, “serious” severity is release critical, and can trigger removal of a package from the di…
Why TDD isn't crap
After my recent vitriol about unit testing, a couple of people sent me Why TDD is Crap as a thorough debunking of TDD and unit testing. As someone very interested in software correctness, I ended up writing a debunking of his debunking. Transcriptions will be in quotes, my responses below. Some important notes: From…
Paving the on-ramp to Java
Java is one of the most widely taught programming languages in the world. Tens of thousands of educators find that the imperative core of the language combined with a straightforward standard library is a foundation that students can comfortably learn on. Choosing Java gives educators many degrees of freedom: they can…
Error handling in Rust
A blog, mostly about programming
Goroutines: The concurrency model we wanted all along
Goroutines are the single feature that distinguishes Go from other languages. They look very much like threads, but they are cheap to create and manage. Go's runtime schedules goroutines onto real threads efficiently so you can easily create lots of goroutines.
What can be learned from studying long gone development practices?
Current ideas about the best way of building a software system are heavily influenced by the ideas that captured the attention of previous generations of developers. Can anything of practical use be learned from studying long gone techniques for building software systems?
Software should be designed to last
And why I am trying to minimize my dependence on external libraries (whenever possible).
V8 release v7.2
V8 v7.2 features high-speed JavaScript parsing, faster async-await, reduced memory consumption on ia32, public class fields, and much more!
Proposals for Go 1.15
For Go 1.15, we propose three minor language cleanup changes.
History of Spring Framework and Spring Boot
Spring framework is arguably one of the most popular application development frameworks used by java developers. It currently consists of a large number of modules providing a range of services. These include a component container, aspect oriented programming support for building cross cutting concerns, security…
The Maddest My Code Made Anyone
I was lucky enough to grow up through the early 2000’s, during the golden age of Half-Life mods. Industry classics like Counter-Strike (CS) had just been invented, every month brought new mods to try, and files were too big to download on a dial-up connection so you’d leech them off a server at a big local LAN party…
Scala 3 Migration: Report from the field
April 30, 2024. I decided to dedicate a week to migrate our main project at work (a multiplayer mobile game server in production for over 4 years) from Scala...
Why split lexing and parsing into two separate phases?
“lex and yacc” are two terms that are used together so often that they can seem indivisible. lex takes a string as input and divides it up into lexemes (roughly speaking “words”) and yacc takes a sequence of lexemes and parses them. Since some parsing approaches such as recursive descent parsing unify these phases…
The Go Compiler Needs to Be Smarter
One of my favorite languages is the Go language. I love its simplicity. It is popular and useful in a cloud setting. Many popular tools are written in Go, and for good reasons. I gave a talk on Go last year and I was asked for a criticism of Go. I do not mind that … Continue reading The Go compiler needs to be smarter
Go: The Good, the Bad and the Ugly
This is an additional post in the “Go is not good” series. Go does have some nice features, hence the “The Good” part in this post, but overall I find it cumbersome and painful to use when we go beyond API or network servers (which is what it was designed ...
Hundred Year Mistakes
My manager and I got off on a tangent in our most recent one-on-one on the subject of the durability of design mistakes in programming languages. A particular favourite of mine is the worst of the …
“Safe C++ Subset” Is Vapourware
Robert O'Callahan. Christian. Kiwi. Software guy. All content human-authored unless otherwise noted.
Differences with other Lisps
This information is provided for programmers familiar with Common Lisp or Scheme.
Client libraries are better when they have no API?
fsspec is secretly everywhere, and boss
How Changing WebFonts Made Rubygems.org 10x Faster
WebFonts are awesome and here to stay. However, if used improperly, they can also impose a huge performance penalty. In this post, I explain how Rubygems.org painted 10x faster just by making a few...
R.I.P. Ruby Hash Rocket Syntax 1993-2010
Trusted by 23,000+ organizations, Pluralsight is the online tech learning platform for building AI, cloud, data, and security skills with courses and labs.
We use GitHub Actions to build GitHub
From automating builds and releases to taking care of large-scale regression testing, here are a few ways we use GitHub Actions to build GitHub.