oberstein
Joined 11 years ago
Joined 11 years ago
Near the end: "If mankind had to choose between a warmer or a cooler climate, humans, most other animals and, after adjustment, most plants would be better off with higher temperatures. Not all animals or plants would prosper under these conditions; many are adapted to the current weather and might have difficulty making the transition. Society might wish to help natural systems and various species adapt to warmer temperatures (or cooler, should that occur). Whether the climate will warm is far from certain; that it will change is unquestionable."
If "Foo" is just dynamic data, perhaps in a map, composed of other data, and it's values all the way down, any of those three points of time are easy ways to look at "Foo" and can generally be faster than reading a JavaDoc page or ctrl+spacing figuring out what you have access to and what it all means and what you want to do with the data and code associated with "Foo". Since you're going to be looking at the thing you want anyway, I find it very uncommon in practice that I accidentally divide a string by 2. Static typing would let me know before I run the thing that I was an idiot (maybe, see next paragraph), but I'll find out almost as quickly when the code I just worked on (either in the REPL, which is very nice, but even from the starting state) actually does what I want -- you do that regardless of static/dynamic typing, right? You don't just write code and never verify it does what you want, trusting that it compiled is good enough? Anyway when I run it, I'll immediately hit a runtime error (which can be handled in Lisp in ways way more flexible than exceptions in other languages) and realize my stupidity. So I don't find that particular situation or class of bugs very compelling.
Nor do the presence of declared types alone guarantee my safety -- I need to know about any conversion rules, too, that may let a String be converted to an int for division purposes, or if there is operator overloading that could be in play. Conversion rules and operator overloading are interesting regardless of the static/dynamic typing situation because too much or too few can lead to annoyances and bugs. Java lets you concatenate ints into strings with "+", Python doesn't, but Python lets you duplicate strings with "*".
What I have run into in both static and dynamic languages is division-by-zero errors, which, unless you go all the way to something like Shen that supports dependent typing, your type system with "int" declarations will not help you with. I've run into errors (in both static and dynamic languages) parsing string contents to extract bits of data. I've run into errors around the timings of async operations. I've run into null pointer exceptions (though much less frequently in dynamic languages, maybe once the Option type is in wider use I can rely on that too but its issue is poisoning the AST). I've run into logic errors where I thought the system should be in state C but instead it transitioned to state E. The bugs that take the longest to diagnose and fix are simply due to not understanding the problem well enough and having an incorrect routine coded, so I have to figure out if it's a logic error or an off-by-one error or simply using the wrong function because it had a suggestive name and I didn't read through the doc all the way. Rich made an interesting point in one of his talks that all bugs have both passed your type checker (if you have one) and your test suite. My point is that I'm not convinced static typing as I'm given in the languages I work in is worth it for any reasons beyond performance because I don't see any other improvements like making me more productive or writing less bugs. I'm not opposed to types and schemas themselves in general, just static typing. I'd rather see pushes towards full dependent typing and systems like TLA+ (which has seen more industry usage than Haskell) and Coq than things like core.typed in Clojure.
The last point I'd raise is that I agree with you developer efficiency is more important than code efficiency. But this has been one of the mainstay arguments from the pro dynamic typing camp for many decades, with static typing advocates conceding that yes the developer will be more productive in a dynamic language but the performance is terrible for anything serious. If you want to argue static typing was actually more efficient all along from a developer perspective than dynamic typing, you have a lot of work to do. I'm not particularly interested in that argument (at least today) but the point still needs to be raised.
Greater than any technological or Presidential initiative challenge is the challenge of culture and media. Human lives matter a whole lot more now than they did during the Apollo missions, and a disaster resulting in the deaths of astronauts is the worst thing that can happen to NASA. As long as it is subject to public scrutiny and criticism that affects its budget and goals, it will continue in the fashion of the medical industry -- accepting all the consequences of do-nothing neglect instead of doing something that carries the risk of the deaths of a few individuals. In the medical industry, hundreds of deaths some of which could have been averted with not-yet-FDA-approved surgeries or drugs; in the space industry, the always looming threat of an extinction-level asteroid or other existential threats.
I do wish I had finished a year earlier, though. It would have meant cheaper college and would have also meant starting a career sooner, which for me is above $100k/yr. It would have also increased the chance of my mother still being alive since she died right after I was hired and I think if she didn't have to work until the end because I'd have been paying her bills she'd still be around.
I'd suggest going with what your kids want. If they want to learn, go for it. If they're perfectly happy with pre-school/daycare, or have lots of friends in that age group, maybe reconsider. They'll make new friends regardless of the grade, though.
I get the point about unintended consequences with cascading problems (and cascading solutions to the new problems) (https://news.ycombinator.com/item?id=2743879) but the odds of screwing up here are much less than screwing up on AGI, whose work has already significantly started and may be completed first anyway making this whole discussion moot. Geoengineering is risky, but it's not as risky as other things, including inaction, which as the status quo guarantees loss of thousands of lives. Even if the climate change alarmists' greatest fears come true we still easily have 50 years to try things on smaller scales before time is up. Anyway I think it's a lot more feasible for a strong nation to lead a technological solution than to convince all strong nations to curb their development. Call it a plan B if you must, but at some point I expect climate change alarmists are going to say something like "China and Russia and India aren't playing ball hard enough, their emissions are still causing global warming that will end humanity in x years unless they immediately reduce to the levels of the USA and the EU whose combined efforts bought us y years but it's still not enough, so it's time for war to make them."