Live data from Hacker News

Let's Not Dumb Down the History of Computer Science (2014)

cacm.acm.org

131–140 of 171 posts

Re: Let's Not Dumb Down the History of Computer Science (2014)

#131
post #98

Earlier quoted context omitted.

I'm not sure fad is the right descriptor here. Unix WMs have had virtual desktops since the 90s (80s?), MacOS got them around 2006 and Windows in 2015. Use by the non-initiated may not be that high, but that shouldn't be surprising given that user education is a very scarce resource and it's being spent elsewhere.

I meant as a default.

Aren't document tabs, eg browser tabs, an app-confined version of multiple desktops. The idea behind their are virtual screens of content you can switch between.

Every KDE I've installed (Slackware, Mandrake, Ubuntu, Fedora), to my recollection defaulted to multiple desktops.

I'm so happy Win10 has virtual desktops as in moving from Linux to MS Windows - mandated by my workplace - that was a massive pain point.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#132

Earlier quoted context omitted.

we need to run programs with less authority than the user running them, and we still lack a good conceptual model for doing that Isn't this now the standard reality for most desktop and mobile OSs? "Allow write to SD card" is far, far too powerful a privilege to grant. Granting a permission based upon user approval is never secure anyway since if they want to see the porn / flashing lights they are going to click the…

People manage permissions just fine in the real world... if you have money in your pocket, you can pick and choose what portion of it to hand to the cashier when you're purchasing something. When you had someone $3.50... you're giving them $3.50 of capability, and no matter how clever the Loch Ness Monster is, they'll never get more than that $3.50. If on the other hand, you have to give them the entire wallet... lik…

you can pick and choose what portion...

That was the old way. The new way is you give them your credit card or WeChat 'bill me' code. You get billed whatever the merchant wants to bill. Any post-facto complaint will be at the cost of your own time.

Your further analogy is factually inaccurate. Under Windows, AFAIK most programs have a partially restricted permission set, hence Run as administrator. In Linux, under modern distributions, most programs run in both a user and a cgroup context, and some under further restrictions such as chroot and caps.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#133
post #30

Earlier quoted context omitted.

Capability based security, for example was something that allowed you to run any program, with no danger to your system. It's not part of any common OS. I know, I know. Norm Hardy was really good, his system, KeyCos, worked, and few could understand him. I used to know his "explainer", Susan Rajunas. We don't even have proper "rings of protection", like Multics, any more. Although the real problem today is that we ne…

we need to run programs with less authority than the user running them, and we still lack a good conceptual model for doing that Isn't this now the standard reality for most desktop and mobile OSs? "Allow write to SD card" is far, far too powerful a privilege to grant. Granting a permission based upon user approval is never secure anyway since if they want to see the porn / flashing lights they are going to click the…

> Isn't this now the standard reality for most desktop and mobile OSs?

Not really, no. Because there isn't a comprehensive intent layer in the UI that is fully trusted and in which the user can grant capabilities.

Just a couple examples; if you download a PDF file with a mobile browser and want to open it in an app, the only option is to grant eternal (unless you manually revoke it) access to the local file system to the entire viewer app. A capability-aware UI would, at the "what do you want to do with this file?" system dialog grant a one time capability to read the particular file to the app the user picks. The capability persists as long as the app retains it. The app can't fork off a sub-process or send it to another app and clone the capability to the file; it would have to ask the user to do that. The mechanism for that trusted user request and response is where all UIs (and most CLIs) fail.

Designing a safe and useful capability desktop/mobile environment is hard. Modern UIs and CLIs are just papering over the details of actual objects in the privilege system. Icons and filenames are only a human-readable representation of objects accessible with capabilities and so there's a disconnect between UI representation, user intent, and user interactions. Solving that means replacing arbitrary custom UIs with trusted, object-aware system UIs that reveal the actual state of capabilities and objects instead of a simplified representation.

> Granting a permission based upon user approval is never secure anyway since if they want to see the porn / flashing lights they are going to click the button regardless.

The UI model would have to be significantly different with a lot of trusted components. Basically any UI element that can grant a capability to another app/process has to be part of the trusted system. That means a user-level app can't even ask for permissions to objects because it can't see them, know they exist, or refer to them in a way the system UI could grant a capability. Interaction between applications would be more like a smart clipboard; a user would open their camera app, take a picture, and grant a read capability to an app that's waiting for it.

There's a lot of 'convenience' lost in a pure capability system because there's no default trust in the good intentions of app developers.

There is a potential further development that allows convenience; formal proofs for application software that adheres to a particular data management policy. Say instagram wants to formally verify that photos taken automatically by the app (selfie button or whatever) can never be uploaded without user permission. Prove that the component for taking photos within the app drops all capabilities to the network and the main app itself before taking any photos; all it can do is fill up a particular folder/directory with new photos that are visible to the user, who can then trigger an upload (grant capability to a particular photo to the main app from a secure view of the directory) with another trusted interface. That trusted component could be granted a capability to the camera itself once the proof is verified.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#134
post #93

Earlier quoted context omitted.

Researchers might have more use for history... but day to day, in the field, programmers? not so much. I would think it's the difference between math researchers and accountants... You don't need to know history to balance a check book.

The difference is that the way to balance a check book doesn't change every five years, or these days more like every year. Maybe if programmers knew a bit more about history, they wouldn't need to reinvent it so often and could be more like accountants. But programmers don't want to be accountants , they want to use new and shiny things even when it's not the pragmatic choice, even when it would be better engineerin…

Accounting has been around for hundreds of years. The reason it doesn't change? Because it's not a "new" field.

Same for stuff like construction and cooking... stuff that's been around a very long time has become rather stable and of course it isn't going to be "reinvented every five years".

> when it would be better engineering

again... I don't need to understand history to understand Big O and which algorithm to use in the right circumstances or when procedural programming is proffered to functional.

At no point in my career have I ever NEEDED history to decide which library to use, which sorting algorithm is suitable and how to create functional apis or windows services.

History is nice to know... but still 100% not needed at any stage of the process.

I'm not sure where the disconnect is because I like history... I like learning about American history, world history, programming history... but none of that has ever been relevant in any of my jobs when it comes to day to day decisions and projects.

"don't reinvent the wheel" is a separate topic and while I can agree that many things get reinvented - computers are still a very young industry compared to stuff like accounting and architecture.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#135
post #77

Earlier quoted context omitted.

Researchers might have more use for history... but day to day, in the field, programmers? not so much. I would think it's the difference between math researchers and accountants... You don't need to know history to balance a check book.

Programmers in the field have little use for computer science in general. You don't need to know anything about cyclomatic complexity when assembling a shiny javascript widget. Until you do, of course. At which point it's clear you should've known about it years ago.

cyclomatic complexity and computer science isn't history.

Not sure where the disconnect is because at no point have I said you shouldn't learn how to do your job correctly - and understanding Big O, SOLID, YANGI, etc are all important to know... but have nothing to do with history.

So again... history isn't needed to be a good engineer. And being a good engineer and KISS programming is possible without understanding 100 years of history.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#136
post #102

> Operating Systems. I have at home Edsger Dijkstra's source code for the operating system he wrote in 1965. Nobody has looked at it, and we should. I'd love to see this. Please put it on your webpage Dr. Knuth!

I was going to say the same thing but it’s probably a cardboard box filled with paper. Somebody who understands the stuff needs to spend the time to go through it and scan it and catalog it. And given the time crunch for the test of Vol 4, not to mention the rest I don’t want Knuth doing it.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#137

Earlier quoted context omitted.

we need to run programs with less authority than the user running them, and we still lack a good conceptual model for doing that Isn't this now the standard reality for most desktop and mobile OSs? "Allow write to SD card" is far, far too powerful a privilege to grant. Granting a permission based upon user approval is never secure anyway since if they want to see the porn / flashing lights they are going to click the…

> Isn't this now the standard reality for most desktop and mobile OSs? Not really, no. Because there isn't a comprehensive intent layer in the UI that is fully trusted and in which the user can grant capabilities. Just a couple examples; if you download a PDF file with a mobile browser and want to open it in an app, the only option is to grant eternal (unless you manually revoke it) access to the local file system to…

All good points.

Clearly if reasonable security is a goal default trust should be restricted. Minimum trust thresholds should be distinct from sometimes-needed trust which should be delineated on a per-item/per-session/temporally restricted basis.

Currently the way the web works, 1st party user downloading almost any 2nd party file means a 3rd party app of user-defined identity starts and reads the 2nd party file from a 4th party server in a 5th party format running on a 6th party OS with a 7th party network, 8th party browser and 9th+ party certificate chain in an unknown filesystem context. What is wrong with this picture? You can't establish trust in this context. All you can do is establish boundaries for failure.

Modern history has shown that this tower-of-crap™ approach is the most commercially expedient means to distribute new functionality to general computing devices. I would argue that the path forward in general computing is therefore to work on processes to enhance and apply those restrictions using improved architectural decisions at the interface level combined with CI/CD processes that automatically apply them.

In short: stop asking the user, just design the system to grossly limit the scope and impact of any damage.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#138
post #120

Earlier quoted context omitted.

Well like I said... I enjoy history. but. I've never used history to solve business problems. They are related and good to know... but I don't need to know history to flip burgers, run a business or plan my next sprint. I'm not arguing history is unimportant or good to know or even possibly useful just to have ideas of what to do - or what not to do... I'm just arguing it's importance is over-emphasized.

> Well like I said... I enjoy history. It totally looks like you don't. Are you sure about this sentence? Every other sentence seems to contradict this one.

none of my statements goes against learning history.

I probably don't do as much as I could/should... but I am a successful programmer who has never needed "history" to understand basic programming principles.

I seem to consider history and good engineering to be different topics while everyone else seems to think you can't understand Big O, YAGNI, SOLID, the difference between Functional Programming and Procedural programing, etc, etc, etc without understanding the history of how assembly turned into c...

Because History is interesting... but not needed to be a good engineer and a good programmer.

Re: Let's Not Dumb Down the History of Computer Science (2014)

#139
post #78

This type of history is also crucial in the fight against overreaching patent and copyright. Talking in broad strokes about a novel solution that is later patented probably won’t get the patent invalidated. Showing the code for the implementation would.

Excellent point and also a very important one!

Re: Let's Not Dumb Down the History of Computer Science (2014)

#140

Knuth writes eloquently what I have thought for a while. Some of these early works and ideas, even and perhaps especially those that did not evolve into something successful today, are worthy of study. I strongly suspect some of them could take us in new directions. Some of those that “blocked” may now be unblocked by related developments in our field. Maybe we have to go back to forwards. https://blog.eutopian.io/th…

This this this.

We’ve sort of settled on the architecture of our “stack” mostly by historical accident. It has constantly been the local maxima for various variables throughout our short history. And because of the inertia of the mass of what we’ve built that mostly works we don’t look outside very far.

There are a lot of excellent ideas that were too early, or due to a coin toss not taken, or killed because of winner-takes-all market competition, or because they were just some footnote at the bottom of a paper some researcher wrote and never investigated. These ideas are ripe for investigation.

I’ve been reading papers and looking at source code from the early days of programming languages. There was definitely more interplay between the design of the machine’s API (the instruction set) and programming language designers than we see these days. Our ISAs are made to emulate a PDP-11 running C (a glib take I know but not entirely inaccurate). Oh yeah, we also now get an instruction that handles JavaScript floats better. :-)

Post reply on HN