Greetings from Gothenburg, Sweden! I started coding in Amiga Basic as a 10-year old, and professionally since 2000, mostly web, C++ and graphics. Although I always loved programming, I also always strongly felt that there has to be a better way than the status quo. Frustratingly, my teachers, colleagues & peers didn't seem to care. When I finally found Bret Victor's work, it felt like a huge validation - "I'm not alone, I'm not crazy, someone else gets it too!"
Consumed the Future of Coding site in "read-only mode" for years (thanks for the great content, Steve!), but I didn't join the community in read-write mode until now that I have something substantial to contribute - coming soon in the #CCL5VVBAN channel.
Interested in everything, but with a special focus on:
* Visualization - as in revealing the shape and size of abstract things clearly, not just giving bar charts a sci-fi look
* User interface design - really unhappy with current mainstream trends, UIs ought to empower users rather than dumbing things down
* Pipe dreaming of redesigning OSes, the internet and the web stack from scratch with the benefit of hindsight
* ... but also charting realistic incremental improvements
* Green/environmental issues - neither hardware nor CPU cycles are free, make sure they carry their weight
👋 17
🍺 1
d
Dan Cook
02/20/2021, 9:57 PM
Awesome to have you here, and really looking forward to what you will share!
Welcome! You seem like someone who will bring great energy to what we're doing here. I'm glad you've decided to switch modes, and I look forward to seeing you around!
👋 1
f
Florian Cäsar
02/21/2021, 1:32 PM
I'm very interested in all of your focus points, so looking forward to catching up on your videos & discussing your ideas. Welcome!
👋 1
b
bmitc
03/04/2021, 11:22 PM
Pipe dreaming of redesigning OSes, the internet and the web stack from scratch with the benefit of hindsight
Got anymore thoughts on that?
I've long thought about new computing systems (including some new OS but can communicate via standard protocols) for dedicated duties might be a way to go or at least start. For example, I do a fair amount of embedded systems, and everything is just super complicated. So I would love a new embedded OS and chip that I could then interactively develop on a desktop computer that is also running a new desktop OS purpose built for designing, implementing, and debugging embedded systems. Same thing for graphics programming and other things.
I don't have much beyond those "ideas" though. Curious about yours.
e
Emil H
03/07/2021, 1:25 PM
Whew, I'm not sure where to begin. I have assorted complaints and ideas on various levels of the stack, but I haven't put in the time to gather them into something coherent yet. If I write about it now, it'll be a badly researched stream-of-consciousness rant with bad english, so bear with me. I should probably also admit that I'm not very knowledgeable about hardware or kernels, so I might suggest unrealistic changes to them. Once we get up to the user level, I'm a bit more confident about what's possible.
This is one of the best talks I've seen about the hardware and OS problems at the bottom of the stack:
https://youtu.be/kZRE7HIO3vk▾
- The Thirty Million Line Problem, Casey Muratori
Security and privacy need to be built into the design from the start, instead of tacked-on later in a patchwork. All apps should be sandboxed by default. The user should be able to grant permissions in a fine-grained way, for example let the app read one specific file, but not write. This would instantly disable 99% of the danger of ransomware. Also resource limits like CPU, memory consumption, ports, network bandwidth etc. I know this is mostly already possible in various OSes today, but only for very advanced users. It needs to be designed for everyone. There should be one place to get an overview of all permissions granted to all apps. Even something like sound volume can be changed there. The iphone OS is half right in this regard, but also half wrong because Apple holds all the power. The user should hold all the power!
Config files in plain text format should die, because they enforce a single linear / one-dimensional order, and because they're unstructured data. That data should be stored in a structured way, similar to how many people here wish for code to be stored in a structured way. So do I prefer the windows registry over plain text config files? No, that's not what I want either. I want the best of both worlds.
Speaking of which, settings in the OS interface can be thought of from several "angles".
1. "I want to change the volume of something", so you open the sound settings, and the next question is "For which app or output device do I want to change it?"
2. The opposite. You start in a list of apps, you open one of them, and think "Given this app, I want to change the volume."
3. You start in a list of attached devices (printers, speakers, headphones, keyboards), you open one of them, and think "given these headphones, what do I want to configure about them? Volume!"
All 3 ways of approaching the problem make logical sense and should be valid paths. OS interfaces today are mostly structured like trees, where there's only one path to a node, but they need to be structured like graphs instead. However, graphs are more disorienting than trees, so the design needs to communicate well to compensate.
Speaking of which, all user interfaces, without exception, should be searchable with fuzzy string matching and synonyms. Mac OS is good here, all settings in the menu system are automatically searchable, but this is undermined by the fact that we spend most of our time inside the web browser, and website interfaces are not searchable, and things move around with every damn update, and today's cryptic icon design trends don't exactly help. These people have the right idea: https://blog.repl.it/clui
There should be no such thing as "installing" an app. Apps simply exist in a global address space. The first time you use one, it's automatically downloaded and cached locally. Kinda like web apps? Yes! But the web sucks in other ways. The web browser is a behemoth. No one can make a new one from scratch to compete with Google's dominance. I've seen suggestions for a new, better architecture, but I can't seem to find the talk again right now.
And the layout model in CSS is an overcomplicated mess. The Subform team invented the best alternative I've seen so far, beautifully simple: https://www.deconstructconf.com/2017/kevin-lynagh-choosing-features
Today, for non-technical users, the filesystem is on its way out. Most information they use is stored in silos per app, or maybe stored in the filesystem but never accessed that way in practice. On Windows, each user is given a single folder which is supposed to be their own, like C:/Users/Emil/, and the rest of the disk is full of crap which they don't understand. And even the user folder is full of crap placed there by apps. No wonder people don't learn to use the filesystem. The consequence is that they lose data often. Full backups are super complicated because each app does it differently. This is completely backwards. The filesystem should primarily serve the user! Let's tuck away all "app-generated" crap in a single folder, and give users full control of the rest, let them own it and organize it.
Speaking of which, the filesystem needs to become more like a structured database than a tree of opaque blobs. I know people have tried this already, like https://en.wikipedia.org/wiki/WinFS and I know the approach hasn't been very successful yet, but I still believe it's possible, and the potential benefits are huge.
Letting programs communicate with each other, like with piping in the linux shell, is a great feature, but can we please get rid of the plain text format? Command-line programs should produce and consume structured data. I know this already exists in some dusty corner, but it needs to become dominant. The most common structures (1d lists, 2d tables, trees, graphs) should have a specification which everyone follows, so that there can be competing, intercompatible visualizers of such data.
It needs to be much easier to send stuff between two computers or smartphones in the same room. Today, sending files over a local network is an "expert" feature, while the simplest way is often to upload it to some cloud service and download again on the other device - that's ridiculous! I might be sending stuff across the atlantic ocean! The exhaustion of the IPv4 address space, and the widespread use of NAT, probably contributed to the success of the "send via a central server" business model. I wish the advent of IPv6 can help make direct peer communication more viable again.
Most corporate firewalls block UDP traffic by default. That's crippling! So even when UDP would be a better fit, app developers send data over TCP instead because that's what all the simple frameworks support. I've met many web developers who have no idea what UDP does. The only way to send such data inside a web browser is through WebRTC which is complex and hard to learn. This post says it better: https://www.gafferongames.com/post/why_cant_i_send_udp_packets_from_a_browser/
Always blows my mind that even huge companies with huge budgets produce UI designs which are easy to misunderstand. Maybe there's no amount of "reinventing the stack" that could prevent bad design from occuring, but maybe a stronger set of primitives and guidelines could help a little bit. I mean primitives like checkboxes, radio buttons, scrollbars etc. And maybe just a culture of calling out bad design when we see it. So let me do that now. Some examples I encountered personally:
1st pic. I want to share my screen in Google Meet in the Chrome browser. Why is the share button disabled? Answer: because you first have to select which screen you want to share. But when you only have 1 screen, it's very confusing.
2nd pic. I got on this train with a ticket for seat number 250. Should I go left or right?
3rd pic. The controls for my combined fridge & freezer. The fridge is on top, the freezer in the bottom. If I want to make the fridge cooler, which knob do I turn? The symbols try to illustrate it, but they're black and white. Does the black area symbolize the thing I'm changing, or the white area? Most people will probably guess correctly, but we shouldn't have to guess at all!
The knob is almost symmetrical. Which side of it is the "pointer"? Answer: the slightly thinner side. But it's subtle and hard to see.
What does "max" mean? Max effect, or max temperature? Answer: max effect. But it's not obvious.
I'll take a break here. Each point I brought up ofc has a ton of caveats and deserve a full-length essay. 😅
f
Florian Cäsar
03/08/2021, 9:06 AM
Interesting stuff, thanks for sharing. I would definitely read those essays.
Beyond rewriting the whole stack, what can we do to get closer to what you described? There's a lot of ground to cover; from accessibility, UX design, interoperability, performance, developer friendliness..
Of course, each of us can (and should) try their best to make better things, but that will only get us so far.