I want to love Swift, but the funny thing is that as they solve more problem with Swift they also add so much complexity that you wonder if all the problems they solved just added new problems.
4,574 karma · joined July 1, 2019
I want to love Swift, but the funny thing is that as they solve more problem with Swift they also add so much complexity that you wonder if all the problems they solved just added new problems.
Britain famously use juries. That is where the US gets it system from. In. All Nordic countries have had them. In Norway we phased it out years ago, but it isn’t one judge but several. Some are picked by citizens others are professionals. They determine guilt together.
A key reason identified was that juries don’t have written statements giving the reasoning for their judgment.
The jury system ended several years ago and nobody miss it. A panel of judges professional and selected among citizens akin to jury duty determines guilt.
Not right now as packages, larger communities etc need to be developed. But long term solutions the potential is obvious. A friendly, powerful and high performance dynamic language ought to have a very broad appeal.
They are just not accustomed to seeing libraries being that small. That is possible in Julia because it is all native Julia code which means interfacing with other Julia code works seamless and allows you to mix and match many small libraries very easily. You can reuse much more functionality which means individual libraries can be kept very small.
For PyTorch and TensorFlow e.g. activation functions have to be coded specifically into each library. In Julia these can just be reused for any library. Each ML library doesn't need to reimplement activation functions.
That is why you get these bloated monoliths. They have to reinvent the wheel over and over again. So yeah there is a cost which is constantly paid.
Every time you need to extend these libraries with some functionality you are paying a much higher price than when you do the same with Julia.
You needed much less stuff supported out of the box when Python first came on the scene. Today expectations have gotten much bigger. A minimal viable language has far more requirements.
But this is of little practical consequence. What I find more bizarre is how conservative the US is around its constitution and political system. Norway may be a Monarchy but has gone through far more modernization in terms of how the political system works, elections and government than the US for instance.
I look at how voting and representation works in the US today and it is basically Norway in the 1880s or something. Back when we also had a two party system of liberals and conservatives. When there was a winner take all system. Censuses had to be done semi regularly as citizens were not fully and completely registered and kept up to date on a continuous fashion.
I would bet Britain in quite a number of ways is more modern in its constitution than the US. E.g. they don’t have å gerrymandering problem. That got reformed and fixed long ago.
I think generally in Europe people think in terms of landmarks rather than fixed directions.
The problem is that so much of the time when you are building something you don't really have a clear idea of what you are doing, but you build and understanding as you experiment and iterate.
I do writing professionally now and have much the same experience. It is hard to plan exactly what you will write in detail. So much of the greatest ideas materialize as you write. Both writing and coding is IMHO a thinking process.
On the other hand I fully accept that us developers are all different in how our brains work. But I have seen when working with people much smarter than me how much they get stuff wrong and waste time by trying to excessively plan before fully understanding the problem. Stuff I notice I solve easily by taking an experimental and iterative approach.
One small concession: I think JavaScript is awful and Ruby projects tend to end up as a mess. I am mostly a Julia, Lua and Go fan. So I kind of learn towards languages which are a bit in between dynamic and static.
The extension system is exactly why I would call RISC-V the return of RISC. It is what allows you to keep the CPU significantly simpler because you only add what you need for the system you are designing.
For instance if you want really strong vector processing capability you can design very small cores with only vector processing instructions and the most necessary scalar operations. All the stuff you need typically to run a multi-user OS (handle privilege levels) can be thrown out.
That is exactly what Esperanto Technologies doing. They got got four fat Out-of-Order cores with all the instructions you typically would want in a modern CPU running Linux, while there are 1088 small in-order cores with support for RISC-V vector extension. Vector processing actually adds very few transistors if the core is in-order rather than out-of-order.
I would say this is all quite RISCy in that you are making simple tailor made chips rather than making huge complex monoliths to do everything, which is the CISC way IMHO.
Intel btw is realizing their approach was kind of dumb when then tried making their big-little core design. To keep the small cores small they had to throw out the complex AVX-2 instructions.
This is what I argue in this article as well but I reach a different conclusion from him and I think that is in large part because the rise of RISC-V has made the RISC and CISC distinction more relevant again.
https://itnext.io/risc-vs-cisc-microprocessor-philosophy-in-...
When John wrote that article RISC processors had gotten very complex. Then it was a lot about complex address modes. But the last decades complexity stems more from lots of SIMD instructions.
RISC-V has aimed to reverse that trend and create å significantly smaller ISA. The RISC counter-trend to complexity is thus still alive and kicking.
I wrote an article about this stuff for anyone interested:
https://erik-engheim.medium.com/how-fjords-made-norway-rich-...
But I suspect it is a difference in attitude. I think in Scandinavia we are generally far more enthusiastic about new things.
It is not exactly a K&R style book but I did write it to appeal more to regular programmers than academics. The Julia world is very dominated by researchers which is reflected in how it is often presented.
It isn’t meant to show directly applicable code examples but focus more on things which could be fun and interesting to implement: such as simulate rockets.
In my mind it also removes a lot of cases where I need major restructuring and and refactoring in typical OOP languages. Getting type hierarchies and code organization wrong is so much easier with OOP and much harder to de-tangle.
Not always easy to explain with examples. Once you used MD for a while and try SD again you really start noticing how clunky SD makes code writing.
Sorry, I am teasing but I want to highlight that the problem with pre-selected candidates is a widespread problem undermining democracy in many places. Same applies to Hong Kong were China heavily influenced candidate selection.
A revolution is not about agency. You make a mockery of the whole idea. Agency implies what the majority wants. That is what they had with democracy which the US ruined. They took away Iranian agency. The revolution later happening is not a good example of agency. A revolution rarely express the popular will. Instead it gives power to those people most capable of using violence.
Democratically inclined and freedom loving humanitarians will frequently lose in a civil war as they lack the violent behavior to win.