In "The Power of the Context" (2004) you wrote:
...In programming there is a wide-spread 1st order
theory that one shouldn’t build one’s own tools,
languages, and especially operating systems. This is
true—an incredible amount of time and energy has gone
down these ratholes. On the 2nd hand, if you can build
your own tools, languages and operating systems, then
you absolutely should because the leverage that can be
obtained (and often the time not wasted in trying to
fix other people’s not quite right tools) can be
incredible.
I love this quote because it justifies a DIY attitude of experimentation and reverse engineering, etc., that generally I think we could use more of.However, more often than not, I find the sentiment paralyzing. There's so much that one could probably learn to build themselves, but as things become more and more complex, one has to be able to make a rational tradeoff between spending the time and energy in the rathole, or not. I can't spend all day rebuilding everything I can simply because I can.
My question is: how does one decide when to DIY, and when to use what's already been built?
It really helped at Parc to work with real geniuses like Chuck Thacker and Dan Ingalls (and quite a few more). There is a very thin boundary between making the 2nd order work vs getting wiped out by the effort.
Another perspective on this is to think about "not getting caught by dependencies" -- what if there were really good independent module systems -- perhaps aided by hardware -- that allowed both worlds to work together (so one doesn't get buried under "useful patches", etc.)
One of my favorite things to watch at Parc was how well Dan Ingalls was able to bootstrap a new system out of an old one by really using what objects are good for, and especially where the new system was even much better at facilitating the next bootstrap.
I'm not a big Unix fan -- it was too late on the scene for the level of ideas that it had -- but if you take the cultural history it came from, there were several things they tried to do that were admirable -- including really having a tiny kernel and using Unix processes for all systems building (this was a very useful version of "OOP" -- you just couldn't have small objects because of the way processes were implemented). It was quite sad to see how this pretty nice mix and match approach gradually decayed into huge loads and dependencies. Part of this was that the rather good idea of parsing non-command messages in each process -- we used this in the first Smalltalk at Parc -- became much too ad hoc because there was not a strong attempt to intertwine a real language around the message structures (this very same thing happened with http -- just think of what this could have been if anyone had been noticing ...)
That is, if I have a problem that requires a library or program, and I don't know of one, I semi-simultaneously try to find a library/program that exists out there (scanning forums, googling around, reading stack overflow, searching github, going to language repositories for the languages I care about, etc) and also in parallel try to formulate in my mind what the ideal solution would look like for my particular problem.
As time goes by, I get closer to finding a good enough library/program and closer to being able to picture what a solution would look like if I wrote it.
At some point I either find what I need (it's good enough or it's perfect) or I get to the point where I understand enough about the solution I'm envisioning that I write it up myself.
There's some factors that help shift these spectra.
Configurability helps. If I can change a config to get the behavior I want, that is incredible, thank you.
Open source helps. Getting to see how they did it reduces reverse engineering work immensely if I ever have to dig in.
Modularity helps. If I can just plop in my module instead of doing brain surgery on other modules, that makes it a lot easier.
Good components help. Say I need a webscraper and know python. Imagine there was only selenium and not even urllib, but some low level TCP/IP library. I get a choice between heavy but easy or slim but high maintenance. But there's the sexy requests library, and there is the beautiful beautifulsoup4. I tell requests what to get, tell bs4 what I want from it, and I'm done.
Another great example for this is emacs. python-mode + elpy (almost complete solution), hide-show mode, electric-pair mode, and if anything still bugs me, it is fixable. If it were OOP, I'd inherit a lot of powerful functions, but I can always override anything that is wrong.
Expertise helps. If I have written a kernel module, that's another avenue to solving problems I have.
Expertise is a special case here worth more attention. It's the main thing that changes for any single programmer, and can skew this equation immensely. Expertise grows when you struggle with new things. Preferably just outside what you know and are comfortable with.
Considering that, DIY whenever you can afford to DIY (eg. pay the upfront cost of acquiring expertise), DIY whenever it is just outside what you can do, or DIY when it makes a lot of sense (eg. squarely in your domain of expertise, and there's a benefit to be had).
In concrete examples, that means don't DIY when you're on a tight deadline, don't attempt to write your own kernel after learning about variables, don't write your own parser generator when say, YACC, solves your problem just fine.
I have three questions -
1. If you were to design a new programming paradigm today using what we have learnt about OOP what would it be?
2. With VR and AR (Hololens) becoming a reality (heh) how do you see user interfaces changing to work better with these systems? What new things need to be invented or rethought?
3. I also worked at Xerox for a number of years although not at PARC. I was always frustrated by their attitude to new ideas and lack of interest in new technologies until everyone else was doing it. Obviously businesses change over time and it has been a long time since Xerox were a technology leader. If you could pick your best and worst memories from Xerox what would they be?
Cheers for your time and all your amazing work over the years :)
2. What are your opinions on Worse Is Better (https://www.dreamsongs.com/RiseOfWorseIsBetter.html)? It seems to me like you pursue the diamond-like jewel, but maybe that's not how you see it. (Just noticed you answered this: https://news.ycombinator.com/item?id=11940276)
3. I've found the Situated Learning perspective interesting (https://en.wikipedia.org/wiki/Situated_learning). At least I think about it when I feel grumpy about all the young kids and Node.js, and I genuinely like that they are excited about what they are doing, but it seems like they are on a mission to rediscover EVERYTHING, one technology and one long discussion at a time. But they are a community of learning, and maybe everyone (or every community) does have to do that if they are to apply creativity and take ownership over the next step. Is there a better way?
The flat tires come from the reinventors often not being in the same league as the original inventors. This is a symptom of a "pop culture" where identity and participation are much more important than progress...
1. what do you think about the hardware we are using as foundation of computing today? I remember you mentioning about how cool was the architecture of the Burroughs B5000 [1] being prepared to run on the metal the higher level programming languages. What do hardware vendors should do to make hardware that is more friendly to higher level programming? Would that help us to be less depending on VM's while still enjoying silicon kind of performance?
2. What software technologies do you feel we're missing?
Part of working your way back to reality can often require new hardware to be made or -- in the case of the days of microcode -- to shape the hardware.
There are lots of things vendors could do. For example: Intel could make its first level caches large enough to make real HLL emulators (and they could look at what else would help). Right now a plug-in or available FPGA could be of great use in many areas. From another direction, one could think of much better ways to organize memory architectures, especially for multi-core chips where they are quite starved.
And so on. We've gone very far down the road of "not very good" matchups, and of vendors getting programmers to make their CPUs useful rather than the exact opposite approach. This is too large a subject for today's AMA.
* Graphical programming environment (they run the queries
from pgadmin, or Postico, or some app like that)
* Instant feedback - run the query get useful results
* Compilation step with some type safety - will complain
if their query is malformed
* Are tables a "natural" way to think about data for humans?
* Job relevance
Any ideas? Can we learn from that example to make real programming environments that are more "cross functional" in that more people in a company are willing to use them? for user in table_users:
if user.is_active:
return user.first_name;
vs: SELECT first_name FROM users_table
WHERE is_active
It's unfortunate that the order of the clauses in SQL is "wrong" (e.g. you should say FROM, WHERE, SELECT: Define the universe of relevant data, filter it down, select what you care about), but it's still quite easy to wrap your mind around. You are asking the computer for something, and if you ask nicely, it tells you what you want to know. Compare that to procedural programming, where you are telling the computer what to do, and even if it does what you say, that may not have been what you actually wanted after all.http://2015.padjo.org/tutorials/sql-walks/exploring-wsj-medi...
My main reason for teaching it was that it was a skill that helped me immensely as a journalist, in terms of being able to do data analysis. Because I learned it relatively late in my career, I thought it'd be hard for the students but most of them are able to get it.
Even though I use relatively little SQL in my day to day work, it's my favorite thing to teach to novices. First, it has a similar data model to spreadsheets, so it feels like a natural progression. Secondly, for many students, this is the first time that they'll have done "real" programming and the first time that they learn how to tell a computer to do something rather than learn how to use a computer. In Excel, for example, you double click a file and the entire thing opens. With SQL, you're required to not just specify the database and table, but also each and every column...it's annoying at first, but then you realize that there is power in being explicit.
The main advantage of teaching SQL over, say R, as a first language is that SQL's declarative syntax is easy to follow AND you can do most of what you need with a limited subset of the language...for instance, I don't have to teach variables and loops and functions...which is good because I don't even know how to really do those in SQL (just haven't had the need when I can work from R or Pandas).
When a beginner student fucks up a basic Python script, there are any number of reasons for the failure that is beyond the student's expected knowledge. When a novice student fucks up a SQL query...it's easier to blame the mistake on the student (e.g. Misspelling of names/syntax)
Thats barely programming. Even by the most lenient definition what they do isn't programming.
Firstly SQL's are a little like Excel Macros, they lower the barrier to entry to basic twiddling. Got a SQL client(Toad etc?)? you can throw a snippet or two quickly. Anything beyond that gets difficult. Tricky joins, sub queries, troubleshooting big queries, optimization problems etc etc. Beyond this writing re usable code, test discipline and a range of other tasks that make code run for years is what is your everyday work as a programmer.
Sure you could saw a log of wood once a while, but don't confuse that for being a full time carpenter.
Who do you think are the people doing the most interesting work in user interface design today?
He is certainly one of the most interesting and best thinkers of today.
Previously you've mentioned the "Oxbridge approach" to reading, whereby--if my recollection is correct--you take four topics and delve into them as much as possible. Could you elaborate on this approach (I've searched the internet, couldn't find anything)? And do you think this structured approach has more benefits than, say, a non-structured approach of reading whatever of interest?
Thanks for your time and generosity, Alan!
So I think we have to put something more than randomness and following links to use here. (You can spend a lot of time learning about a big system like Linux without hitting many of the most important ideas in computing -- so we have to heed the "Art is long and Life is short" idea.
Part of the "Oxbridge" process is to have a "reader" (a person who helps you choose what to look at), and these people are worth their weight in gold ...
In a very different approach, most music and sports learning only has contact with a one on one expert once or twice a week, lots of individual practice, group experiences where “playing” is done, and many years of effort. This works because most learners really have difficulty absorb ing hours of expert instruction every week that may or may not fit their capacities, styles, or rhythms. They are generally much better off spending a few hours every day learning on their own and seeing the expert for assessment and advice and play a few times a week.
A few universities use a process like this for academics—sometimes called the “tutorial system”, they include Oxford and Cambridge Universities in the UK.
- Is there a project that is the continuation of the STEPS project?
- What is your opinion of the Elm language?
- How do you envision all the good research from the STEPS model could be used for building practical systems?
- STEPS focused on personal computing, do you have a vision on how something similar could be done for server-side programming?
- Where can I find all the source code for the Frank system and the DSLs described in the STEPS report?
The VPRI reports, and before that some of the papers on Croquet (especially the idea of "teatime" which might be described as event-driven, log-based, relative time with eventual data/world-consistency) are fascinating, and I'm grateful for them being published. Also the Ometa-stuff[o] is fascinating (if anything, I think it's gotten too little mind-share).
It seems to me, that we've evolved a bit, in the sense that some things that used to be considered programming (display a text string on screen), no longer is (type it into notepad.exe) -- it's considered "using a computer". At the same time some things that were considered somewhat esoteric is becoming mainstream: perhaps most importantly the growing (resurging?) trend that programming really is meta-programming and language creation.
ReactJS is a mainstream programming model, that fuses html, css, javascript and a at least one templating language - and in a similar vein we see a great adoption in "transpiled" languages, such as coffee script, typescript, clojurescript and more. HN runs on top of Ark, which is a lisp that's been bent hard in the direction of http/html. I see this as a bit of an evolution from when the most common DSLs people were writing for themselves were ORMs - mapping some host language to SQL.
In your time with VPRI - did you find other new patterns or principles for meta-programming and (micro) language design that you think could/should be put to use right now?
Other than the web-developers tendency to reinvent m4 at every turn, in order to program html, css and js at a "higher" level, and the before-mentioned ORM-trends -- the only somewhat mainstream system I am aware of that has a good toolkit for building "real" DSLs, is Racket Scheme (Which shows if one contrasts something like Sphinx, which is a fine system, with Racket's scribble[2]).
Do you think we'll continue to see a rise of meta-programming and language design as more and more tools become available, and it becomes more and more natural to do "real" parsing rather than ad-hoc munging of plain text?
[o] https://github.com/alexwarth/ometa-js
[s] https://docs.racket-lang.org/scribble/getting-started.html
On the "worse is better" divide I've always considered you as someone standing near the "better" (MIT) approach, but with an understanding of the pragmatics inherent in the "worse is better" (New Jersey) approach too.
What is your actual position on the "worse is better" dichotomy?
Do you believe it is real, and if so, can there be a third alternative that combines elements from both sides?
And if not, are we always doomed (due to market forces, programming as "popular culture" etc) to have sub-par tools from what can be theoretically achieved?
The real question is "does a hack reset 'normal'?" For most people it tends to, and this makes it very difficult for them to think about the actual issues.
A quote I made up some years ago is "Better and Perfect are the enemies of What-Is-Actually-Needed". The big sin so many people commit in computing is not really paying attention to "What-Is-Actually-Needed"! And not going below that.
What advice would you give to those who don't have a HARC to call their own? what would you do to get set up/a community/funding for your adventure if you were starting out today? What advice do you have for those who are currently in an industrial/academic institution who seek the true intellectual freedom you have found? Is it just luck?!
Part of the deal is being really stubborn about what you want to do -- for example, I've never tried to make money from my ideas (because then you are in a very different kind of process -- and this process is not at all good for the kinds of things I try to do).
Every once in a while one runs into "large minded people" like Sam Altman and Vishal Sikka, who do have access to funding that is unfettered enough to lead to really new ideas.
Why do you think there is always a difference between:
A. the people who know best how something should be done, and
B. the people who end up doing it in a practical and economically-successful or popular way?
And should we educate our children or develop our businesses in ways that could encourage both practicality and invention? (do you think it's possible?). Or would the two tendencies cancel each other out and you'll end up with mediocre children and underperforming businesses, so the right thing to do is to pick one side and develop it at the expense of the other?
(The "two camps" are clearly obvious in the space of programming language design and UI design (imho it's the same thing: programming languages are just "UIs between programmers and machines"), as you well know and said, with one group of people (you among them) having the right ideas of what OOP and UIs should be like, and one people inventing the technologies with success in industry like C++ and Java. But the pattern is happening at all levels, even business: the people with the best business ideas are almost never the ones who end up doing things and so things get done in a "partially wrong" way most of the time, although we have the information to "do it right".)
The question you are asking is really a societal one -- and about operations that are like strip mining and waste dumping. "Hunters and gatherers" (our genetic heritage) find fertile valleys, strip them dry and move on (this only works on a very small scale). "Civilization" is partly about learning how to overcome our dangerous atavistic tendencies through education and planning. It's what we should be about generally (and the CS part of it is just a symptom of a much larger much more dire situation we are in).
As a high school teacher, I often find that discussions of technology in education diminish 'education' to curricular and assessment documentation and planning; however, these artifacts are only a small element of what is, fundamentally, a social process of discussion and progressive knowledge building.
If the real work and progress with my students comes from our intellectual both-and-forth (rather than static documentation of pre-exhibiting knowledge), are there tools I can look to that have been/will be created to empower and enrich this kind of in situ interaction?
Let me just say that it's worth trying to understand what might be a "really good" balance between traditional oral culture learning and thinking, what literacy brings to the party, especially via mass media, and what the computer and pervasive networking should bring as real positive additions.
One way to assess what is going on now is partly a retreat from real literacy back to oral modes of communication and oral modes of thought (i.e. "texting" is really a transliteration of an oral utterance, not a literary form).
This is a disaster.
However, even autodidacts really need some oral discussions, and this is one reason to have a "school experience".
The question is balance. Fluent readers can read many times faster than oral transmissions, and there are many more resources at hand. This means in the 21st century that most people should be doing a lot of reading -- especially students (much much more reading than talking). Responsible adults, especially teachers and parents, should be making all out efforts to help this to happen.
For the last point, I'd recommend perusing Daniel Kahneman's "Thinking: Fast and Slow", and this will be a good basis for thinking about tradeoffs between actual interactions (whether with people or computers) and "pondering".
I think most people grow up missing their actual potential as thinkers because the environment they grow up in does not understand these issues and their tradeoffs....
Most things around here are not how they should seem.
Who are "humanistic technologists" you admire? Critics, artists, experimenters, even trolls... Which especially creative technologists inspire you?
I imagine people like Jonathan Harris, Ze Frank, Jaron Lanier, Ben Huh, danah boyd, Sherry Turkle, Douglas Engelbart, Douglas Rushkoff, etc....
(a) Intel and Motorola, etc. getting really interested in the Parc HW architectures that allowed Very High Level Languages to be efficiently implemented. Not having this in the 80s brought "not very good ideas from the 50s and 60s" back into programming, and was one of the big factors in:
(b) the huge propensity of "we know how to program" etc., that was the other big factor preventing the best software practices from the 70s from being the start of much better programming, operating systems, etc. in the 1980s, rather the reversion to weak methods (from which we really haven't recovered).
(c) The use of "best ideas about destiny of computing" e.g. in the ARPA community, rather than weak gestures e.g. the really poorly conceived WWW vs the really important and needed ideas of Engelbart.
A lot of the VPRI work involved inventing new languages (DSLs). The results were extremely impressive but there were some extremely impressive people inventing the languages. Do you think this is a practical approach for everyday programmers? You have also recommended before that there should be clear separation between meta model and model. Should there be something similar to discipline a codebase where people are inventing their own languages? Or should just e.g. OS writers invent the languages and everyone else use a lingua franca?
1. focus on data processing rather than imperative way of thinking (esp. functional programming)
2. abstraction over parallelism and distributed systems
3. interactive collaboration between developers
4. development accessible to a much broader audience, especially to domain experts, without sacrificing power users
In fact the startup I'm working in aims exactly in this direction. We have created a purely functional visual<->textual language Luna ( http://www.luna-lang.org ).
By visual<->textual I mean that you can always switch between code, graph and vice versa.
What do you think about these assumptions?
Like many here, I'm a big fan of what you've accomplished in life, and we all owe you a great debt for the great designs and features of technologies we use everyday!
The majority of us have not accomplished as much in technology, and many of us, though a minority, are in the top end of the age bell curve. I'm in that top end.
I've found over the years that I've gone from being frustrated with the churn of software/web development, to completely apathetic about it, to wanting something else- something more meaningful, and then to somewhat of an acceptance that I'm lucky just to be employed and making what I do as an older developer.
I find it very difficult to have the time and energy to focus on new technologies that come out all of the time, and less and less able as my brain perhaps is less plastic to really get into the latest JavaScript framework, etc.
I don't get excited anymore, don't have the motivation, ability, or time to keep up with things like the younger folk. Also, I've even gotten tired of mentoring them, especially as I become less able and therefore less respected.
Have you ever had or known someone that had similar feelings of futility or a serious slowdown in their career? If so, what worked/what didn't and what advice could you provide?
Thank you for taking the time to read and respond to everyone you have here. It definitely is much appreciated!
Maybe they did. I was too busy being frustrated with the churn of software development. All my time and energy was focused on new technologies that came out all the time. My young plastic brain spent it's flexibility absorbing the latest framework, etc.
Now that I have lost the motivation, ability and time to keep up with things like the younger folk, I can finally listen to the older folk (hopefully while there are still folk older than me to listen to).
These days I'm trying just to write code. All those young people have soared past the wisdom of their elders looking for the point. It's still there. Don't look at the new frameworks, look at what people were doing 10, 20, 30, 40, 50, 60 years ago. How does it inform what you are doing?
I hope that helps! It's a struggle for me too.
I'm not Mr. Kay, but great question!
I think we need a system, website, TV show, etc. in which experiences could be posted and rated. The best ideas and past experiences would rise to the top. You could vote and push things into view.
For example, your years of experience have realized that "yet another framework" is not the answer. We need a slower churn. But if the goal is to sell books ... well, now we are fighting capitalism.
What are the best books relevant to programming that have nothing to do with programming? (e.g. How Buildings Learn, Living Systems, etc.)?
Molecular Biology of the Cell
Notes on a Synthesis of Form
etc
I'm preparing a presentation on how to build a mental model of computing by learning different computer languages. It would be great to include some of your feedback.
* What programming language maps most closely to the way that you think?
* What concept would you reify into a popular language such that it would more closely fit that mapping?
* What one existing reified language feature do you find impacts the way you write code the most, especially even in languages where it is not available?
Certainly, in this day and age, the lack of safe meta-definition is pretty much shocking.
Do you hold much hope for our development environments helping us think?
Development environments should help programmers think (but what if most programmers don't want to think?)
I don't know what the solution is. Perhaps a language with a fundamentally different view of objects, maybe as an ancestry of deltas of state/behavior pairings, somewhat like prototypes but inheriting by versioning and incrementally changing so that state and behavior always match up but still allowing you to revert to a working version. Likely Alan has some better ideas on what sort of language we need.
Visual Studio has let you do hot code editing for over a decade now, they call it "Edit and Continue"[0]. Only works for some languages (C#, Visual Basic/C++). It also lets you modify the program state while stopped on a break-point with code of your devising.
Most browsers also let you adhoc compose and run code without modifying the underlying programs.
Thanks to hardware performance counters, profilers are now able to profile code with much less impact on performance (eg: no more adjusting timeouts due to profiler overhead). Network debuggers are getting better at decoding traffic and displaying it in a more human readable format (eg: automatic gzip decompression, stream reassembly, etc).
We met at a retreat last fall, and it was a real treat for me to hear some fantastic stories/anecdotes about the last 50 years of computing (which I have only been directly involved with for about 1/10th of). Another one of my computing heroes is Seymour Cray, which we talked about a bit and your time at Chippewa Falls. While a lot of HN'ers know about you talking about the Burroughs B5000, I (and I bet most others) would have had no idea that you got to work with Seymour on the CDC 6600. DO you have any particular Seymour Cray/6600 stories that you think would be of interest to the crowd?
Thanks again for doing this, and I hope to be able to talk again soon!
The "Chippewa OS" is too big a story for here, but it turned out that the official Control Data software team failed to come up with any software for the 6600! Hence a bunch of us from Livermore, Los Alamos, NCAR, etc. -- the places that had bought the machine -- were assembled in Chippewa Falls to "do something".
Perhaps the most interesting piece of unofficial software was a multitasking OS with graphical debugger for the 6600 that had been written by Seymour Cray -- to help debug the machine -- in octal absolute! I had the honor of writing a de-assembler for this system so we ordinary mortals could make changes and add to it (this was an amazing tour de force given the parallel architecture and multiple processes for this machine). And it was also a good object lesson for what Cray was really good at, and what he was not so good at (there were some really great decisions on this machine, and some really poor ones -- both sets quite extreme)
2. (This question is about interactive coding, as a dialogue).
Human dialogs (conversations) are interactive. I think in the past computers were limited, and computer languages had to be very small (as compared with any human language + culture) so that a programmer could learn what the computer could do. But now that services can be connected (programming as a service?), would it make sense to have a dialogue? My example is that in the 1980s it wouldn't have made sense for any programming language to have a function called double() that just multiplies by 2. There's * 2 for that.
But in 2016, it makes sense for a beginner to write "and double it" and considerably less sense for a beginner to have to learn x *= 2 if they wanted to double a number.
Human language is also ambiguous. It would make sense for an interactive language to ask:
"Did you mean, set x equal to x multiplied by 2?" which most people would select, but maybe someone would select
"Did you mean, set x equal to the string "x" appended to the string "x"?"
For these reasons: do you think it would make sense to have an interactive programming language that is connected with a server you "talk" with interactively?
Or should programmers still have to learn a fixed programming language that has no room for interpretation, but instead a strict meaning.
Among other things, this means programmers can never write "it", "that", "which" to refer to a previous thing (since the referent could be ambiguous if the compiler doesn't confirm.) But every human language includes such shorthand.
I'd love to hear your thoughts regarding a connected, interactive programming process similar to the above (or just on whatever lines).
2. Let's do a dialog about this. Note that taking the process far enough starts resembling prayer to a deity and gives rise to many kinds of hedging. Math is completely expressible in ordinary language, but instead, the attempt to make it less ambiguous leads to conventions that have to be learned.
That said, have you thought about (say) objects needing to negotiate meaning with each other?
The second question requires too long an answer for this forum.
Many of the "current best paradigms" of Computer Science are actually fads. LISP was a fad of the 1980s. Java was a fad of the 1990s. NoSQL databases are a current fad. It doesn't mean that one is better than another. It's human nature to think that new technology must be better than old technology. In fact, the programming environment on the LISP machines of the 1980s was far better than anything we had till the early 2000s, despite being "old".
We have to think about why this language is even worth mentioning today (partly I think by comparison ...)
To expand on Sutherland's point: Today's hardware does not concern itself with reflecting the realities of programming. The Commodore Amiga, which had a blitter chip that enabled high-speed bitmap writes with straightforward software implementation, brought about a whole new level in game programming. Lisp machines, running Lisp in silicon, famously enabled an incredibly powerful production environment. Evidence is mounting that the fundamental concepts we need for a new computing have to be ingrained in silicon, and programmers, saved from the useless toil of reimplementing the essentials, should be comfortable working in the (much “higher” and simpler) hardware level. Today, instead of striving for better infrastructure of this sort, we are toiling away at building bits of the perpetually rotting superstructure in slightly better ways.
The more radical voices in computer architecture and language design keep asserting in their various ways that a paradigm shift in how we do infrastructure will have to involve starting over with computing as we know it. Do you agree? Is it impossible to have time as a first-class concept in computing with anything short of a whole new system of computing, complete with a fundamentally new hardware design, programming environment and supporting pedagogy? Or can we get there by piling up better abstractions on top of the von Neumann baggage?
[1] This is from memory. Apologies for a possible misquotation, and corrections most welcome.
The problem is that distributed systems can't agree on what the time is. Remember how Google tried to fix this with atomic clocks and GPS? [1]
My hunch is that soon timing devices on distributed systems will reach instantaneous consensus by way of quantum entanglement.
[1] http://www.theverge.com/2012/11/26/3692392/google-spanner-at...
Also, how do you organize and record your ideas? Pen and paper? Some kind of software? What system do you use? I ask because I'm fascinated by the idea of software that aids in thought, collaboration, and programming - meshing them all together.
I've seen elsewhere (https://news.ycombinator.com/item?id=11940007) that you agreed that many mainstream "paradigms" should be "retired". Retiring implies that you replace. In particular, I'm curious what you would like to see filesystems or the Unix terminal replaced with?
We know you are not a big fan of web. Regardless how we got here, what is your view on how we should address the real world decentralization problems in the context of http://www.decentralizedweb.net/ ?
With containers and hypervisors now in desktop OSes (Windows, Mac OS, Linux), could an open-source research OS (e.g. KSWorld) be packaged for developers and end-users who want to test your team's experimental UIs?
Is there long-term value in "private machine learning" where some data and algos are focused on user/owner interests, with "public machine learning" providing variably-trusted signals to user-owned algos for intelligence augmentation?
There's a lot of economic pressure against building new systems. Making new hardware and software takes longer than building on the existing stuff. As time goes on, it gets harder and harder to match the features of the existing systems (imagine the effort involved in reimplementing a web browser from scratch in a new system, for example), not to mention the massive cost benefits of manufacturing hardware at a large scale.
Many people working in software realize the systems they use are broken, but the economics discourage people from trying to fix them. Is it possible to fix the economics? Or maybe we need more people able to resist this pressure?
We have a technology in which hacks are easy and can be really easily multiplied by the billions and sent everywhere. If we translate this into the world of medicine and disease and sanitation, what should we do? How far should we go?
(But it is still really hard for me to understand the nature and force of the resistance to "real objects" -- which -- as actual virtual encapsulated machines -- were invented to deal with scaling and replacement to parallel the same kinds of thinking we did for the Internet with physical objects (called "computers")
Yikes!
I see so many dev resources burnt just because people build boring UIs or persistence bindings by wiring MANUALLY in traditional languages. All this is a no-brainer when enough meta infos (objects and relations) are available and a program is reflected as data as in Smalltalk (not dead text). You can not only transform data but also your code. Pharo now makes some more additonal steps to enhance reflection (metalinks, slots, etc).
What do you see as next steps in using metadata/-infos for (meta)programming ...
What would a programming language be like if we actually took the many dimensions of scaling seriously ... ?
Q: How do you think we can improve todays world (not just with technology)? What do you think is our species way forward? How as a civilization can we 'get to higher level'? Specifically, I'm interested in your views on ending poverty, suffering, not destroying the Earth, improving our political and social systems, improving education etc. I understand that these are very broad topics without definitive answers but I'd love to hear some of your thought about these.
Thank you and I just want to mention that I appreciate your work.
One way to look at this is that the most important learning anyone can do is to understand "Human beings as if from Mars" -- meaning to get beyond our fooling ourselves and to start trying to deal with what is dangerous and counterproductive in our genetic (and hence cultural) makeups. This is quite different than what most schools think they are supposed to be about -- but the great Jerome Bruner in the 60s came up with a terrific curriculum for 5th graders that was an excellent start for "real anthroplogy" in K-5.
[1] Everyone should really take a look at the Dynabook paper: http://history-computer.com/Library/Kay72.pdf
You have an interesting reading list at http://www.squeakland.org/resources/books/readingList.jsp. However it seems that it was created long time back. Are there any other books that you would like to add to this list ?
So what should a designer or a developer be doing now, to make things better in 10 years, or 100 years?
Does this ring a bell for you? I have searched for this article recently and not been able to find it again.
I feel like the current application paradigm cannot scale, and will only lead to further fragmentation. We all have 100+ different accounts, and 100+ different apps, none of which can interact with each other. Most people seem to think that AI will solve this, and make natural languages the main interface to AI, but I don't buy it. Speech seem so antiquated in comparison to what can be achieved through other senses (including sight and touch). How do you imagine humans will interact with future computer systems?
One of the concepts I've heard you talk about before in interviews and the like is simulation. I think simulation is huge and we should be seeing products that cater towards it, but largely aren't.
http://www.scholastic.com/browse/article.jsp?id=5
http://slatestarcodex.com/2014/12/08/links-1214-come-ye-to-b...
Do you still think simulation is an important promise of the computer revolution, and are there any products you know of or ideas you have that are/would be a step in the right direction?
How do you feel about the role of computing technology in society today ? is it still important or should be work on other domains (education, medicine, ecology, and the industrial tissue that is our interface to reality nowadays).
While I'm at it, just did a MOOC about Pharo (~ex squeak) and ST was indeed a very interesting take on OO (if I may say so ;). So thanks for you and your teammates work along the years (from ST to STEPS).
I watched an OOPSLA talk where you described how tapes were used when you were in the air force. The tape readers were simple because they stupidly followed instructions on the tapes themselves to access the data. You seemed to like this arrangement better than what we have with web browsers and html, where the browser is assumed to know everything about the format. One way to interpret this is that we should have something more minimal like a bytecode format for the web, in place of html.
So I'm interested on your take: Is WebAssembly a step in the right direction for the web? (Although it's not meant as a replacement for html, maybe it will displace it over time).
I yearn to do great works of engineering and art, which I consider what you have done.
How do you come up with ideas?
You seem very disapointed and upset with the way computing has gone in the last decade. Speaking as a younger (15) and more satisfied (I still think the UNIX abstraction is pretty solid, despite what others may say) programmer, how do you not get depressed about the way technology is going?
Also, what do you propose to eliminate the "re-inventing the flat tire" problem? Should every programmer be forced through a decade of learning all of the significant abstractions, ideas, and paradigms of the last 50 years before they write anything? Because I don't see another solution.
Also, what big UI changes do you foresee in the next 10 years - or would like to see. Thanks.
1. It is known that you read a lot. Do you plan to write a book? You have been a big inspiration for me and I would love to read a book from you.
2. What is your opinion about Self programming language (http://www.selflanguage.org)? I've read „STEPS Toward The Reinvention of Programming“ pdf and this feels related, especially to with the Klein interpreter (http://kleinvm.sourceforge.net/).
I'm part of a generation who didn't grew up with the PDP but had LOGO and basic available in computers and calculators. With the Amstrad CPC it was possible to interupt a program and to change a few lines of code to make it do something else which was a great way to keep interested. And with calculator it was possible to code formulas to resolve/check problems.
But how would you teach programming today to a kid? Would you choose a particular medium such as a computer, a raspberry pi or even a tablet?
And if I may, do you recommend any reading for bedtime stories?
Thanks you, Kevin
I find it much easier to explore with a concrete copies that can be queried with inputs and outputs, even if they are far from their platonic ideals. For example, the Ometa interpreter I wrote recently was much easier to make by bootstrapping the creation of an initial tree from the output of an existing implementations of Ometa.
what do you think about interactive theorem proving (ITP)? Assuming that you are aware of it, is it something that you have tried? If yes, how was your experience, and which system did you try? If no, why not? What do you think about ITP's role in the grander scheme of things?
Computers have been a part of education in the United States for several decades, but you've argued that technology isn't used to its full potential.
1. Why has technology in schools failed to make an impact?
2. How would you design a curriculum for your children that uses technology effectively today?
Engelbart's Augmenting Human Intellect [2] Edge's annual question, How is the Internet Changing the Way you Think? [3] Carr's Is Google Making Us Stupid? [4] ...and other common criticisms of "information overload"
[1] http://www.sabbathmanifesto.org/ [2] http://www.dougengelbart.org/pubs/augment-3906.html [3] https://www.edge.org/annual-question/how-is-the-internet-cha... [4] http://www.theatlantic.com/magazine/archive/2008/07/is-googl...
Debates should have a programming language, have CI for new arguments, have unit tests to check logic, have issues tracked and collaborated on GitHub.
You mentioned Bob Barton's lecture a few times [1], emphasizing the role he played in debunking some of your (and his own) ideas about computing. Could you touch on some dogmas that haven't yet been evoked in this thread or in your videos on YouTube ? Either from the 70's or today. Let me link to Ted Nelson's remarks about the tradition of files/lumps [2] for a start.
Bullet-point may not be the ideal form for an answer but feel free to get away with that :)
Note: He mentions being inspired for that from discussions with you at Atari.
Alan, a huge and heartfelt thanks from all of us. The quality and quantity (over 250 posts!) of what you shared with the community surpassed all expectations from the outset and just kept going. What an amazing gift! Thank you for giving us such a rich opportunity to learn.
(All are welcome to continue the discussion as appropriate but the AMA part is officially done now.)
You have inspired me deeply, thank you. I love working with man's greatest invention, but I have a deep sense of dread. HN is very good about projecting a fantasy about the future, that technology can solve all problems. I would love to see a world where people use computers to compute. However, global warming is a real threat and my biggest fear is that our pop-culture will prevent us from solving our problems before the chance to solve them is taken away from us.
With such a huge threat to humanity on the horizon, do you maintain a sense of optimism here? Or will humanity forget how to "compute" the same way Europeans forgot how to make Roman concrete?
Do you think we'll ever have a programming language that isn't fully text based and gets closer to a direct mapping of our own thoughts than current systems? If so any ideas what properties this language would have?
Do you have anything to say about how your/his works tie together?
(Note that Alexander's work is perhaps even more misrepresented in software than OOP has come to be).
For example, he talks a lot about how anything that is to evolve naturally, or even properly serve the human component, must be composed of living structure.
video of C.A. addressing the software community's (mis-)application of his work at OOPSLA: https://youtu.be/98LdFA-_zfA
My understanding was that you were there at the keynote where Steve Jobs launched the iPad. From what we've heard Steve came up to you after the event and asked you what you thought (implicitly acknowledging your work on the Dynabook).
Subsequent interviews suggested you thought that the iOS range of products "were the first computers good enough to criticise".
My question is: what has to happen next for the iPad to start achieving what you wanted to do with the Dynabook?
Did you have any ideas, predictions or visions which ultimately didn't play out? (And any ideas on why?)
Thank you very much to your contributions to our industry. Anyone blessed to be working in this field today owes you an enormous debt of gratitude. You have made a dent in the universe.
And what could be done to re-spark interest in moving forward?
My gut feeling says that it would require a complete overhaul in almost every layer in the stack we use today and that there's reluctance to do that. Would you agree to some degree with that?
On the surface it's a structured editor for a type safe language in which it's impossible to write an invalid program, but the author has some pretty lofty goals for it.
I have read a lot about you and your work at Xerox.
Do you enjoy travel? What continents have you been to? What's your favorite country outside the US?
How many hours a day did you sleep per day during your most productive research years? Cos i usually wonder how very productive people seem to achieve much more than others within the same 24 hours we all have.
Greetings form Lagos Nigeria.
Imagine we have already gotten to a place where software hasn't been built like pyramids but with some serious object architecture. Let's just assume a Benjamin Franklin turned this computer science into a real science(as the good old Ben did with electricity). We're there. There are now trillions of objects within my reach, without creating a huge indexing table and depending on data, how do I reach the object I am looking for?
This was a huge problem on the internet and Google had a solution that many tolerated and even accepted. In biology you have structures and many cells compose bodies but as I understand it, the objects would be like functioning cells scattered around on the floor. Maybe give me a general and vague idea what the process for this input could look like: "discover songs that I might like but have never heard before"(I have a hard time dealing with abstractions).
Thank you!
I've heard you frequently compare the OOP paradigm to microbiology and molecules. It seems like even Smalltalk-like object interactions are very different from, say, protein-protein interactions.
How do you think this current paradigm of message-sending could be improved upon to enable more powerful, perhaps protein-like composition?
I am sometimes involved with mentoring younger people with STEM projects (arduino etc). Its all the buzz. But I heard one of my younger relatives lament about the tendency of young people to gravitate towards a quantitative field of study / training - is there too much hype?. "Learning to Code" is a general movement that is helping many youth to improve their career prospects. Do you think it's being effective in improving education on a meaningful scale.
What kind of educational initiatives would you like entrepreneurs (of all shades) come up with. Do these need to be intrinsically different in different parts of the world?
Finally, as a person who gets scared away from bureaucracy ("the school district") - what would you advise. School districts don't always make the best technology investments on precious dollars.
PS:
I once ran into you in Westwood and you invited me to check out the CDG lab. Unfortunately I missed you when I came by. I'm always tempted to try again, but I'd hate to interrupt the serious thinking of the fellows stationed up there.
What do you think will be the impact of Cognitive Computing, and AI on the way software will be built in the next 5 years.
Do you think AI may automate fully some jobs, or part of the jobs people do today in IT & Software Development?
If so what do you think is the best approach professionals should take?
Thanks in advance for the answer, and thanks for doing this AMA.
Joseph
Something that I find striking about you and your work is your cross discipline approach to hardware, software, and "humanware".
Can you speak about people and subjects which have inspired you from fields other than computer science and how they have changed you as a person and technologist.
How can we apply to join the HARC and make the Dynabook a reality?
Do you think we're yet at a position where we could catalog a set of "primitives" that are foundational to programming systems? (Where "systems" are fundamentally distributed and independent of software platform, programming language or hardware implementation)
What do you think about the different paradigms in programming?
And what do you think about type theory, etc?
Bonus question: I am trying to develop a new general programming system for children. I was inspired by Smalltalk and ELM.
http://www.reddit.com/r/unseen_programming It is a graphical system that uses function blocks connected with flow-logic. So basically it is functional, but much simpler. The function-blocks form a system, very similar to classes/objects in Smalltalk. What do you think about such a system, or what tips do you have about designing a new language?
Edit: just noticed HARC and YC-Research. I'll check it out.
Thanks!
1. Do you think the area of HCI is stagnating today?
2. What are your thoughts on programming languages that encapsulate Machine Learning within language constructs and/or generally take the recent advancements in NLP and AI and integrate them as a way to augment the programmer?
When you're working on a system, how do you approach the question, "Is this really useful, or am I spinning my wheels chasing a conceit?" Is the answer as simple as try it out and see what happens? Or do you have some sort of heuristic that your many years of experience has proven to be helpful?
You've said here a few times here that maybe "data" (in quotes), is a bad idea. Clearly data itself isn't a bad idea, it's just data. What do you mean by the quotes? That the way we think about data in programming is bad? In what context?
I've been thinking & reading about Data Flow programming & languages - datalog, lucid, deadalus/bloom etc... in the context of big data & distributed systems and the work that Chris Granger has been doing on Eve, the BOOM lab at Berkeley, etc... - and that seems like a lot of really good ideas.
What's your opinion on data flow/temporal logic - and how does that square with "maybe data is a bad idea"?
Thanks!
Dunc
I've been particularly interested lately in the works of the late John Holland, W. Brian Arthur (of PARC & Stanford), J. Doyne Farmer, Kevin Kelley, David Krakauer, and others (many of these are affiliated with the Santa Fe Institute).
In particular, they speak to modularity, technology as an evolutionary process, and other concepts which strike me being solidly reflected in software development as well. Steve McConnell's Code Complete, for example, first really hammered home to me the concept of modularity in design.
In your paper "A Personal Computer for Children of All Ages", where you introduce the concept of the DynaBook, you explicitly say that the paper should be read as a work of science fiction. I understand that you're a big fan of science fiction. Do you draw any inspiration from science fiction when inventing the future?
Thanks,
Kevin
Related: I've given a talk on "What Computer Scientists can Learn From Science Fiction":
https://docs.google.com/presentation/d/1CaieHjx9j24UFXq0GwmC...
I understand this is not the right place to discuss these matters, but I know it's highly likely that this message will be read here, I am happy to take this topic elsewhere.
Thank you for spending some of your time here and writing your thoughts.
I would like to ask you for some advice.
The idiom "Everything old is new again" is currently picking up steam, especially in the hardware and software scene.
Amazing stuff is happening but it is being drowned in the mass pursuit of profit for mediocrity in both product and experience.
What would you say to those who are creating wonderful (and mostly educational) machines but finding it difficult to continue due to constraints and demands of modern life?
Most don't have the privilege to work at a modern day Xerox PARC. Then again there is no modern day Xerox PARC.
Thanks for all the inspiration!
Can you confirm that a message is a declarative information sent to a recipient which can (or can not) react to it? And what is your opinion about inheritance in OOP? Is it absolutely essential feature in an OOP language?
1. Do you have any recommended books to read?
2. Why do you think current programming paradigms are bad?
3. What changes to current operating systems need to happen?
[2] My view is you want to pass terse but informative information to a compiler in order for optimizations to take effect and there are three roads programming languages take: abstract away by layering which burdens the programmer to unravel everything (C++), abstract away from the hardware so much that specifics are hidden (most high level languages) or something similar to C.
You've been a long-time proponent for creating educational software (e.g squeak etoys) helping teach kids how to program and have been fairly critical of the iPad in the past. What are your thoughts on Apple's new iPad Swift playground (http://www.apple.com/swift/playgrounds/) in teaching kids how to learn how to program in Swift?
Do you think UI aesthetics are important in software for kids?
I realize I am replying a bit after the fact, so I am writing more on the off chance that you may read this rather than further the dialog. It seems unlikely that I will have an opportunity to directly collaborate with you given the present realities of my existence, but I deeply appreciate your contributions to the field of computing and education and for sharing your knowledge and wisdom.
Kind regards and sincere thanks.
| グ レ ェ
1. Would you suggest going into a popular field that excites me but already has lot of brilliant students? (for example AI and ML)
Or rather into a not-so-popular field where maybe I can be of more help? (for example computational biology)
2. If I had to choose between studying my current favorite field at an average research group, or another still interesting field with a top group, would you suggest going with the latter for the overall learning experience?
You've been involved in visual programming environments like GRAIL and Etoys for kids. What do you think of the current state of visual programming for both kids and adults?
Do you think that any factors that were significant back then are going to be difficult to reproduce now, as HARC gets started? Conversely are there novel aspects of today's environment that you wished for at PARC?
Especially we are losing the initial generation of programmers.
Do you imagine a future where there would be just several programming languages semantically using a lot more bidirectional "syntax skins"?
From your comments, it's clear that you are not happy with the state of programming languages as it stands.
You mentioned that the current languages lack safe meta-definition and also that the next generation of languages should make us think better.
Apart from the above, could you mention more properties or features of programming languages, at a high level of course, that you consider should be part of the next generation of languages?
What is the best interface for computer programming? I have settled on the keyboard with an emacs interpreter for now, but I'm curious if you believe voice, gestures, mouse or touch are or will be better ways of conveying information?
One example could be, give me money and I'll give you a computer that can translate English to Spanish.
Another example could be, Apple share holders profit from iphone sales, and the iphone UI leads naive/normal people to think texting while driving is ok.
I'm curious what you think the most interesting line of research is today in the 'computering' world.
Thanks for taking the time to do this Q&A.
Regards, Paul
I would love to hear your thoughts on how to "train" "System 1", in order to make "System 2" more powerful. Not necessarily here, due to the time factor, but if you find some time to think more deeply on this, please let me know and we can think through this together.
I came up with an idea that seems a bit like the Dynabook. It helps the user to understand design decisions. Here's a short video about it (under 2 mins):
https://www.vimeo.com/24332798
In this case it's about how to build a digger.
I'd love to know what you think about it.
Should AP's new "CS Principles" course count towards the math requirement for college admission?
What do you think about EAST paradigm which tries to revamp the original spirit of OOP you stated ?
Do you think that the machine learning community suffer from the syndrome of "normal considered harmful". Like using vendor hardware instance of designing their own (FPGA for instance)
I'm curious whether you think it might be an important/interesting direction for program editors to depart from character sequence manipulation to something along the lines of AST editors. Or is this only a red herring, and perhaps not so deep a change?
I'm curious if you've read much about Activity Theory. (in particular, Yrjö Engeström's Learning by Expanding.) I feel like it's compatible with much of what I've heard you discuss in lectures. Is it something you have an opinion on?
Logo is ~50 years old now, squeak 20 and olpc ~10. Do you know innovators who are now in their 20ies, 30ies and 40ies and who at least partly credit their mental development to childhood exposure to logo, e-toys, mindstorms, Turtle Geometry etc?
Q: I've always been a big fan both of text console accessible UI's like CLI's and REPL's as well as of GUI's. In my mind they each clearly have a different mix of strengths and weaknesses. One way a user might have a bit of the "best of both worlds" potentially is an app or client featuring a hybrid input design where all 3 of these modes are available for the user to drive. Any thoughts on that?
I'm writing a paper in my free time about some architectural ideas in this area and would love to hear your thoughts. Feel free to tell me this is a FAQ and that I should go read a particular book/paper of yours, and/or to get off your lawn. :-)
thank you!
Whats the next step to improve remote working? Face to face still seems to be so superior for relationship building and problem solving despite the wealth of video conferencing, social and collaboration tools we have. I don't want to wear goggles...
thanks!
Do you think the object ~ biological cells metaphor can be related somehow to automated programming using GP or neural networks? (I've sometimes imagined neural networks as networks of many small objects with probability-based inheritance)
Biggest thanks for helping create the modern computer and its peripherals and helping advocate programming for children! Computers is the base which I enjoy the most as a hobby and make my living off.
What is your vision for the future of computing?
Could you please answer:
1) What is your opinion about Actor Model? Does it have a potential? What is the next step for OOP?
2) Do you think software of the future should be end-user modifiable?
3) What would be the Dynabook of 2016? Smart contact lenses with a gesture interface?
Thank you very much!
I'd like to go deeper into your notion of "pop cultures" vs. "progress", in the context of innovation, but also the arts. Can you recommend some readings that might fill out those concepts?
What is your view on Literate Programming and why it hasn't taken off (yet)?
I enjoy watching your presentations, but I'm sure there are some I've missed.
What do you think about the Newspeak Programming Language (http://www.newspeaklanguage.org)?
Do you think they can act in a-la Newspeak(the 1984 Newspeak) way?
Or for another approach, how do you like HN?
What skills would your (hypothetical?) apprentice need to have?
If this were more like a partnership what would be the subject to work on?
For that matter, what are you working on now?
Comparing how you think about doing research now with how you thought when you were starting out, what is the biggest change in your thinking?
Also is there a minimal list of must know languages?
What research have you been a part of that is the most promising, yet least known, and why do you feel it failed to become more well known?
I'm old, very hard to stay on top of all the changes.
I'm a CS PhD student at Caltech. What advice do you have for young computer scientists, especially for PhD students?
Do current OO languages miss or unuse good ideas/features already invented ?
Is programming "with GUI only" a sensible for the future ?
GL
Have you ever made serious mistake? That if given an opportunity, you would start over with a different approach.
What do you think of the Pharo project?
Thanks!
What do you find most frustrating about software development at current times.
Regards, Jyoti
Tabs or spaces?
Thanks for all your questions, and my apologies to those I didn't answer. I got wiped out from 4:30 of answering (I should have taken some breaks). Now I have to. I will look at more of the questions tomorrow.
Very best wishes
Alan
Should we currently be interested in quadrillions, upper trillions, or, perhaps, larger? Once we become interested in an appropriately large number, what preparations should we be taking so that we can operate at that level? Do we just start putting product out there and collect the value on the open markets, or, do we need to segment markets to maximize value? Can you tell us about any other mistakes you feel Xerox might have made in realizing the value of PARC?
Most people are mediocre at everything they do and will always be. Most likely that includes you. We live in a culture that doesn't just tell everyone that they can easily outgrow mediocrity, no, this culture tells people they are above it from the very start.
The following advice doesn't apply to geniuses or those who can be, but it applies to the majority who will read this:
The best you can do is look back on your life and see if there is only mediocrity. If there is, you have to be honest with yourself and recognize if it's so because of factors that you can still change, or not. For most people reading this the latter will be the case, which means you simply have to live with it and stop trying to influence the world, because everything you end up doing is going to make things worse (for you, and everyone else).
Really? Because I quite enjoy my "Wasted" time. I can't imagine what situation you could possibly be in that not only is it not enough for you not to "waste" time being happy, but you need other people to do the same. You are whats wrong with the world.