3,201 karma · joined October 10, 2012
First, if you want a declarative config with limited, domain-specific options, rolling your own DSL instead of using something as complex as Python is much, much easier to implement. You're not actually going to be running the code either way, at least not in the normal way, and the Python syntax tree is pretty complicated.
Second, having code that looks like Python can lead your users to believe that it is in, in fact, Python. When you're doing things like using your DSL as configuration that happens at setup time, but then actually "running" the resulting config later on, that can lead to people getting themselves into trouble - for instance, they might try to use `time.now()` and end up embedding the time of the config parser as a constant in their workflow definition.
If you want to use Python as your language, you probably want to define your "DSL" as a Python library, so that you can use a normal interpreter to work with it. Maybe you have library functions that return config objects, and a user's "configuration" is an arbitrary Python file with a standard function name as an entry point. But then when you want to introspect over types, you probably need to start playing games with decorators, which is tricky again, and you have to be very careful to have that evaluation step return meaningful errors.
Starlark (https://github.com/bazelbuild/starlark) is an example of using Python-ish as a "configuration" language. That took an absolutely massive amount of engineering to get to be well-defined, and was only arguably worth it because they wanted a language that's a loop construct away from being Turing-complete. If they had wanted a basic declarative relationship language, they probably would have used textprotos or GCL.
Google's money proto [1] has units and nanos. Any competent ad-tech system will use something similar: integer number of micro-dollars, nano-dollars, etc. You want a fair amount of precision, so just tracking whole cents isn't enough, but you want that precision to be (linearly) equally distributed across the value space so that you can make intuitive guarantees about how much error can accumulate.
[1] https://github.com/googleapis/googleapis/blob/master/google/...
The idea of LVT is to put an economic value (i.e. dollar amount) on the fact that you're preventing people from using land. It's a market correction. If you want to express that some values are actually good beyond what the market is equipped to reward, then you need to correct further. In theory, this means that the government - acting on behalf of the public good, or its citizens, or the future of humanity, or whatever your preferred vision for the social contract is - should offer its own contribution to the cost to be paid. In practice, this means there could be a significant tax credit for meaningful nature preserves, commensurate with the value of that preserve. Taken to its limit, this tax credit could mean a negative tax (i.e. subsidy) that's enough to pay for maintaining the land in its natural state, and oh look we just reinvented public parks.
The underlying principle is that land - including natural resources as a whole - is finite. It's a common good owned by humanity as a whole; or, failing that, at least in common by the nation-state in which it falls. Allowing individuals to hoard those finite resources is bad for society.
Under a land-value tax system, individuals can do whatever they want, but they're appropriately charged for their negative externalities. Just like we should have a carbon tax to disincentivize people using the shared natural resource of carbon fixing without a good reason, we should have a land tax to disincentivize people using the shared natural resource of flat, arable land without a good reason. You can choose to pay your taxes and do nothing with the land, if you have another source of wealth to make up for it - effectively, you need to express to society just how much it's worth it to you to sit on that land doing nothing, and the way that we express the strength of our convictions in a market economy is with dollars.
> There's also something very objectionable about attempting to use taxation as a tool to manipulate behavior and engineer outcomes.
The goal here is not to manipulate behavior for its own sake, it's to use the power of the state to correct for a mispricing in the market. Market forces alone are incapable of correctly pricing deals involving common goods, because most of the people who are implicitly participating in the transaction (i.e., the rest of humanity that is now deprived of that land/air/resource) are not compensated. It's a problem of negative externalities, for which a Pigouvian tax [1] is a perfectly appropriate remedy. In a democracy, the state is how the public as a whole imposes its collective will; having the state "bid" on behalf of the public interest is the most capitalist solution possible to the externalities problem.
It does at least rain in San Francisco, and I've taken Waymo in the rain. It did more than fine. Plus, you know, night time.
The other way you can tell that it's not "main" is that it's parallel to 1st Street. Most cities don't have both a Main and a 1st, they have one or the other (which is why "Second Street" is the second-most common street name in the United States behind "Main", with "First" coming in third place). If SF were using Main in the "normal" sense, it would be where 1st is, next to 2nd. Failing that, it would at least be the next block over from 1st, so that 1st was counting from it. Washington, DC, sort of works that way, where there's a "zero street" (North/South Capitol), and then 1st is the next block over. But... SF's Main St. is a full three blocks from 1st. It's just kind of in the middle of nowhere, logically speaking. And that's again because of the landfill situation - 1st St. is the first full block counting from the shoreline at the time the streets were built.
The only exceptions I can think of are where you're hiring someone specifically to work on language tooling - e.g., to work on the core C++ library team at Google, you probably need some experience with specifically C++ or C and compilers thereof. Those would be very specialized senior roles, though.
There are many people with kids who have revealed the value they place on the sustainability of the environment, democratic society, or the economy through the lifetime of their children, let alone their children's children, to be zero. Why would you assume that the childless are any more selfish, as a group? Why can one not care about the continuance and betterment of humanity without one's own direct descendents being involved?
I don't think the fact that some of the first people on the team had worked together previously makes Waymo not "created at Google". The project they worked on before, the DARPA challenge, was not a commercial product, and at the time no company was seriously investing in self-driving cars as a viable technology. This isn't like YouTube, which was a well-known brand and viable business pre-acquisition. It was Google resources that made it possible to build the rest of the Waymo team, lobby governments to allow self-driving cars on the road, work with hardware manufacturers, and leverage the rest of Google's software stack, ML expertise, street view data, and datacenter capacity to build and train the driver.
His series on making a GPT from scratch is also great for building intuition specifically about text-based generative AI, with an audience of software developers.
In terms of continued relevance - "deep learning", meaning, dense neural nets trained to optimize a particular function, haven't fundamentally changed in practice in ~15 years (and much longer than that in theory), and are still way more important and broadly used than the OpenAI stuff for most purposes. Anything that involves numerical estimation (e.g., ad optimization, financial modeling) is not going to use LLMs, it's going to use a purpose-built model as part of a larger system. The interface of "put numbers in, get number[s] out" is more explainable, easier to integrate with the rest of your software stack, and more measurable. It has error bars that are understandable and occasionally even consistent. It has a controllable interface that won't suddenly decide to blurt corporate secrets or forget how to serialize JSON. And it has much, much lower latency and cost - any time you're trying to render a web page in under 100ms or run an optimization over millions of options, generative AI just isn't a practical option (and is unlikely to become one, IMO).
I don't have a significant math or theoretical ML background, but I've spent most of the last 10 years working side by side with ML experts on infra, data pipelines, and monitoring. I'm not sure I could integrate the sigmoid off the top of my head, but that's not what's important - I've done it once, enough to have some idea how the function behaves, and I know how to reason about it as a black box component.