As a person who has been using Linux as my main desktop OS since 2003, unfortunately there are almost as
many impediments to the average user switching to Linux now as there was back then.
1. Although game support has gotten better, most AAA titles still don't work on Linux, even with proton.
2. There are still a lot of devices that either don't talk to Linux at all or require the kind of tinkering
that the average user is not capable/willing to do to set up: iPhones, any VR headseat that isn't the Index,
etc.
3. There are still a lot of highly popular industrial-strength applications that don't work on Linux,
even with WINE. The entire Adobe suite, AutoCAD, etc.
For these reasons (and other smaller ones), I have always needed to have a Windows dual-boot setup, and I don't
see that changing any time soon.
Not an expert on spec, but I suspect that there are a lot of data that are not representable with combinations of predicates: GADTs, rank-n types, existential types, type families, data families, and other more advanced type system features.
Either way, the tradeoff is this: statically typed languages are guaranteed to be free of type errors, but no such guarantees can be made with runtime assertions. Whether or not you use a tool like spec to help you make those assertions, the fact that they happen at runtime prevents them from making any guarantees about type safety. Even if you use spec literally everywhere, as you suggest (and no one actually comes close to doing anyway), you are still not guaranteed of type safety. Dijkstra explains why: https://www.cs.utexas.edu/users/EWD/transcriptions/EWD03xx/E...
It seems like you're arguing that dynamically typed languages are best because they don't get in the way of programmers who are good enough to pretty much never screw it up in the first place. Am I misunderstanding you?
And if you don't want to implement the option monad yourself, there's the bs-abstract library, which contains a bunch of category theory definitions and implementations. I have gotten a lot of mileage out of it even in the small amount of ReasonML I have written. That plus ppx_let offers a pretty good monadic programming experience.
I'd like to be positive about this especially considering the thought behind it, but...this is bad. I read the tutorial PDF hoping not to find BASIC-style unstructured programming. I was disappointed. QBASIC was the first language that I learned as a kid, and I regret it to this day. Learning to solve all my programming problems using GOTO in such a formative time set me back months when
I finally moved to structured programming languages. In addition to that, the syntax of this language is so inexplicably heavyweight that I feel like "SmallBasic" is an intentionally ironic name.
I'm assuming that this article is apropos of the article posted on HN earlier today about how Python is the new BASIC, as far as educational languages are concerned. I agree with the sentiment. These days, we can and should do a
lot better than BASIC as a first language for kids.
No, there really hasn't. And it's a little embarrassing. Lawyers, doctors, carpenters, electricians, engineers, etc. don't feel the need to produce countless rhetorical manifestos. I'm not sure why our profession (or craft, or whatever you want to call it) has to come with so much cultural baggage, especially when there are so many real problems left to be solved.
The Happiness Manifesto? Happiness-driven developers? Enough, already. This is an interesting time for computer programming and computer science in general. We're witnessing the coming of age of a very important profession. We owe it to ourselves to advance this profession by developing a body of knowledge based on scientific, mathematical, and engineering principles, as well as empirical observation of what has worked and what hasn't. What we don't need is cultural manifestos and middle-management buzzwords.
1. Although game support has gotten better, most AAA titles still don't work on Linux, even with proton.
2. There are still a lot of devices that either don't talk to Linux at all or require the kind of tinkering that the average user is not capable/willing to do to set up: iPhones, any VR headseat that isn't the Index, etc.
3. There are still a lot of highly popular industrial-strength applications that don't work on Linux, even with WINE. The entire Adobe suite, AutoCAD, etc.
For these reasons (and other smaller ones), I have always needed to have a Windows dual-boot setup, and I don't see that changing any time soon.