Hello again. Hope you have a nice week ;)
Links of the week
Clocks and Causality - Ordering Events in Distributed Systems
Conventional clocks have safety issues. Centralized clocks have liveness and performance issues. Logical clocks solve those issues, and are therefore used by many distributed systems, especially storage systems. Multi-leader storage systems use logical clocks for conflict resolution. Leaderless storage systems use them for repairs and anti-entropy mechanisms. Conflict-free replicated data types (CRDTs), which are cooperating data structures that can mutate data while being disconnected from each other, use logical clocks as their foundation to preemptively deal with conflicts.
Language servers are a counter example to the “never rewrite” rule. Majority of well regarded language servers are rewrites or alternative implementations of batch compilers.
Both IntelliJ and Eclipse wrote their own compilers rather than re-using javac inside an IDE. To provide an adequate IDE support for C#, Microsoft rewrote their C++ batch compiler into an interactive self-hosted one (project Roslyn). Dart, despite being a from-scratch, relatively modern language, ended up with three implementations (host AOT compiler, host IDE compiler (dart-analyzer), on-device JIT compiler). Rust tried both — incremental evolution of rustc (RLS) and from-scratch implementation (rust-analyzer), and rust-analyzer decisively won.
Sam Altman predicted this week that OpenAI could capture up to $100 trillion of the world's wealth. But what are his plans for OpenAI to distribute that wealth? I analyse all three plans, cover his financial stake, his case for UBI, a science org and the American Equity Fund. From papers and interviews released in recent days, I go over his predictions for massive inequality, which jobs will be impacted most, what tasks OpenAI thinks will be automated, recent surveys of business leaders and their plans to use ChatGPT for job replacement, the Goldman Sachs job analysis and which jobs Altman thinks will be hit first (customer service).
It’s tough for smaller languages in big enterprises. There is a huge mountain to climb just to be able to use a new language in a mature big-company environment due to the sheer number of existing systems, libraries and tools that your language has to integrate with. For example, to be able to deploy Haskell code in production at Meta we need Haskell to work with the build system, to interact with our RPC layers (Thrift), service discovery, logging, configuration, deployment systems, and so on. All of those integrations have to be built and maintained over time. Smaller companies will often be using widely-used open-source tooling and libraries for which integrations already exist, but in a big-company environment there is a lot more custom infrastructure. Moreover, the surface area that you need to integrate with tends to expand over time. All of this makes it hard to use a language that isn’t one of the main supported languages.
+10x engineers may be mythical, but -10x engineers exist.
To become a -10x engineer, simply waste 400 engineering hours per week. Combine the following strategies: …
A mind-blowing conversation with James Gosling, Java’s father
When asked to give advice to less-experienced engineers, he goes straight to the point: “have fun”. Fun is the element that made him love programming and, once you find it, your job is no longer a job一it’s a cause, and it can really drive you in.
Book of the Week
How Finance Works: The HBR Guide to Thinking Smart About the Numbers
Do you have any more links our community should read? Feel free to post them on the comments.
Have a nice week. 😉
Have you read last week's post? Check the archive.