Personal Computing: A Call to Arms
Humans should never have to write strange punctuation to make their computers obey them. The computer should interact with humans in ways they understand: visual diagrams and standard English sentences.
The goal of this project is to provide a visual & plain English 1 programming environment.
!Important: This probably isn’t for you 2.
It is highly doubtful than any experienced software developers will find this useful in day-to-day development.
The goal here is not to:
- make the latest whiz-bang programming language to churn out yet another lead submission tool for your sales team
- replace javascript/ruby/java/c++/haskell/lisp/whatever
- build an app, a website, a script, or a bot
The goal is to:
- change how normal people work “on” their computer, instead getting them to work “with” their computer.
- enable normal people to build tools to automate their digital lives
- give the power of truly general purpose computing to the masses
This programming environment likely won’t be the fastest, most efficient, or most scalable way to get things done.
Vision: A day in the life of a Personal Computer
You open up the app. You see whatever you were working on yesterday. It appears to be a small spreadsheet-like grid showing a list of contacts.
- You click the arrow in the headers to sort the list.
- You click again to reverse the sort. So far, nothing that you couldn’t get from Excel.
Then you click the ellipsis at the start of one of the rows.
- You get a custom view of that person’s data.
- You see a profile picture, pulled from linked social accounts.
- You see their address, with a map.
- You see a preview of recent tweets and facebook posts.
- You see emails this person has sent you.
You have heard they started a blog.
- You click the plus icon
- You paste the link to their latest post in the popup that appears
< [fancycats.blog/2018/11/04/mr-scruffles-goes-to-the-pub]
> Processing...
> This appears to be a blog article. One moment...
> I see this contact's name in the footer of the blog.
> Is this their blog? [Yes]
> Great! Any further details? [No]
- The popup disappears
- You now see previews of all the recent blog posts.
You want to stay current with the blog…
- You click the ellipsis next to the list of blog articles
- You select
Add Action
, thenOn New Post
from the list of default options. - You select
Display on Dashboard
- You see several default rules generated from this action.
- You click the default rule “Display
until
read” - You edit it to read “Display
until
read,or
7 days
have passed”, because you are a realist. - You click the default rule “Display
default tile
” - You edit it to read “Display
default tile
withfirst paragraph
astext
.- This shows more of the article in the preview, instead of the default first couple sentences.
You decide to set aside some time to read it, so you don’t fall behind.
- You add another action to the
On New Post
section. - You select
Create an event
- You click in the highlighted
title
placeholder. - You type
Read the blog post title
and hit enter. - It is annotated: “Read
the blog post title
”. - On the next line, in faded text, you see an example title using the latest article:
Read "Mr Scruffles Goes to the Pub"
- You click in the highlighted
date
placeholder. - You type
if after 5 PM then tomorrow
and hit enter. - The text is annotated
if (posted) after 5 PM,
- The phrase
then tomorrow
drops to the next line and is annotated:tomorrow (the following day after the new post)
- An
or ...
prompt appears on the line below, and you click it - You fill in
today
- It is likewise annotated:
today (the same day as the blog post)
- You consider in the highlighted
time
placeholder. - You drag the
if (posted) after 5 PM,
phrase into thetime
spot. - A
then ...
prompt appears below, and you click it. - You fill in
then after coffee
and hit enter - A tooltip pops up: “You don’t have time for an average blog article (15 minutes) before your next appointment.”
- There is an option to view your calendar.
- You see that you have to leave only 10 minutes after your coffee to get to work.
- You push the blog reading to
then during lunch
. - You fill in
or after dinner
on the next line.
You review the actions, which are summarized in plain English:
When a new blog is posted:
- Display it on the dashboard.
- Display the default tile, with the blog's first paragraph as the tile text.
- Display until read, or until 7 days have passed.
- Create an event.
- The event title will be: Read `the blog post title`
- If the blog is posted after 5PM, create an event during lunch the following day.
- If the blog is posted before 5PM, create an event after dinner the same day.
Finished, you back out of the action screen, the profile page, and even the contact list. You are back on your dashboard, and you click the latest article to go read it.
Summary
Spreadsheets are currently the best we developers have come up with for making personal computing approachable.
This is a sad fact, but it is true. Might as well leverage the paradigm whenever we have lists of data to display/edit.
But we can do better, right?
- We can give a WYSIWYG UI editor, and let people plug in data to various controls.
- We can make it easy to connect to common web services, caching copies of data locally for better indexing and faster display.
- We can add actions on common events, customized by data source, with reasonable defaults and easy to specify required inputs.
- We can do very basic natural language parsing to extract if/then/else keywords, dates, times, etc.
- We can make reasonable guesses at meaning
- Like:
tomorrow
in the context of an action on a new blog post, and
- Like:
- We can provide detailed documentation of where we have made these inferences
- Like:
tomorrow (the following day after the new blog post)
.
- Like:
- We can do basic collision detection to prevent error states (double booking), and provide a way for the user to fix their own problems if we can’t suggest a reasonable alternative.
In short: we can make it not just possible, but easy to have the computer work for a normal person instead of the person having to work around the computer (which is frankly what most apps do today).
Call to Arms
This tool (probably) isn’t for you.
I mean, it would be kind of nice to use an app like what we just described, right?
It’s not like we have that today…
You will (eventually) be able to pitch in by:
- Testing, finding, and fixing bugs
- Writing plugins, like painlessly connecting to twitter…
- Writing logic, like detecting overbooking on a calendar…
- Writing story based tutorials like the one you just read.
- These are interactive, and must be flexible enough to work around user input
- These have a main “quest” (import a blog) with many sub-quests (add actions)
- We need to teach first principles in a way that isn’t overwhelming.
Note about our users
Remember these are regular people. They aren’t professional programmers. They don’t understand:
- algorithmic complexity
- code reuse
- code organization
- safety!!!
And honestly, they shouldn’t.
We should make a system that is
- fast enough
- reusable enough
- organized enough
- completely safe
If we want to optimize common user generated algorithms, that is great.
If we want to recommend users keep a shared “recipe book” for common strategies, that is fantastic.
If you want to offer APIs (“integrations”) that do some voodoo with user data… that is not gonna happen.
We have too many APIs with too many points of failure and silos already on the internet. This project is about users working on their own systems with their own data (or their own local caches of web data).
We
fight for the Users
. Don’t ever forget that.
1 At some point, we will tackle localization and/or translation. But it is too big of scope for now. ↩
2 You are, after all, likely reading this blog on github pages, and are therefore likely already a software developer ↩