Great Job on the article! I am glad to have found a vibrant and ambitious community. Before I go into details, I have to mention that I am new to the system, so I am sorry, if I am missing anything or sound pretentious and I'd be happy to be corrected. (Brace yourselves, a wall of text is coming!) A Brief Note on the State of the Art You mentioned the very important issue of "offloading cognitive burden" which deserves in-depth discussion. Before I go into details, I have to mention that I am new to the system, so I am sorry, if I am missing anything or sound pretentious and I'd be happy to be corrected. In your article you write that: *"There is virtually no cognitive load on your brain!"* While this is a highly idealized statement about Smalltalk (I'll elaborate on that), you have my opinion identified the *ultimate goal* of any development environment. I believe that Pharo is an ideal candidate to get us closer but there is much work to be done. I have to agree with Phil that "we need to provide easier entry into the system" and I'd like to extend this statement: we need an easier entry point to *every aspect* of the system. (I use the terms systems, environment and applications interchangeably). I really like the live programming workflow, the code editor and class browser but there are hundreds of classes and even more methods and it is not obvious how to perform more complex tasks (such as GUI building). While the liveliness and uniformity of the design allows exploring all corners of the running system (which really is great and a huge leap forward compared to almost all systems), it is very easy to get lost and buried in class browser windows and additional documentation. Often I forget what I was actually trying to do: the size of (my) short term memory is too limited to keep track of all the things I found out, am still trying to find out, things not working, things partly assembled and so on. Packages, Protocols and Categories are simply not enough to structure complex systems consisting of myriads of interacting objects. Suggestions A Hypermedia System for Smalltalk/Pharo What we need *is to distill the knowledge and procedures *required to perform specific tasks into the environment itself. I imagine a hypermedia system which helps me to organize my objects and to learn new things. Douglas Engelbart's conceptual framework for agumenting human intellect provides a huge source of ideas [5]. For example, it would be great to have the "Pharo by Example" book be represented in such a system. It could be a mindmap reflecting the chapter structures, some nodes might link to objects or methods that can be used directly to combine new objects. For example, by invoking a hypermedia search, I might search for "draw morph" and I might see a mindmap reflecting Chapter 11.4 "Creating and drawing your own morphs" with all artifacts needed to assemble a particular morph in the environment. It would be also great to be able to use objects as search patterns instead of strings only. Also I think it would greatly /ameliorate the problem/ of documentation: When constructing a new system or improving an old one, there is always a learning process involved. During this process, one organizes material, does research, experiments and so on. If all these steps where directly transferred into the hypermedia system, documentation comes almost for free. Other people trying to understand the system, learning new things, could enrich the already existing structures. I think Chimera [2] is a great example of such a system. More Directness I think it would be very beneficial if we also *incorporated the Look and Feel of the Self System *[1] to allow for quick prototyping and more direct interaction. This way, I could simply drag a "onDraw:" method from the handbook onto the live morph I am viewing. Also, I'd like see the references of an object in a changeable graph structure. The inspector is certainly a great tool, but compared to Self it sometimes feels clumsy. The only issue is that Self is prototype based, so there is always one layer of indirection, but it could be hidden by modifying the class when dragging an method into an object. (If this already has been done, then it should be standard environment!). Data-Flow Programming Messages that change state (as opposed to pure computations) and dynamic dispatch mechanisms are heavily used in OO systems and, unfortunately, no exception to Smalltalk. They add a lot of cognitive burden and writing event handlers, patching them together, having *invisible* message flow is certainly very taxing. Although ideas from functional (reactive) programming, to relieve some of the burden, have found its way into OO systems and languages such as Scala [3], I think there are other, more direct ways to deal with reactivity and side-effects that should be explored. Using the hypermedia kernel, events and pure computations could be linked to attributes to facilitate flow-based programming. Although only networks with a fixed topology can be effectively modeled this way, I assume that most parts of, for instance GUI systems, could be made more self-explanatory. Wouldn't it be nice to visually connect a button event to a method? Or a label to a clock? Workable examples could be of course, reachable in the hypermedia system. Memory as a First Class Citizen Further ideas are to make *memory a first class citizen*: I think that memory should be, just as an object, part of the hypermedia system, or a hypermedia system itself. Since it represents the state of the system, it should be self-explanatory. Tradtionally, memory is allocated in indivisible, incomprehensible and (inaccessible) lumps to processes. However, I think memory should not only contain data but also interpretable metadata about the contents of its cells and relationships.
From a Smalltalk viewpoint, I imagine that every attribute of an object is visibly connected to a memory location with a name (and further metadata). This way, computations running in different processes or runtime environments could simply connect to the memory, consume data and write it back. This would also make it easy to have true *heterogeneous flow-based programming*. (Conversions between data types could be just plugged in between).
Ideally, Smalltalk takes the place of current operating systems (such as SqueakNOS), running the hypermedia kernel and providing access to the *conceptual* memory. Languages such as C, C++ or Haskell could then be used to implement /pure computations/ and they could be attached to memory cells, waiting for input. Also, security policies can be expressed in a uniform way. There is also a firm theoretical foundation (the Ambient Calculus) which can be used to express hairy details about security policies. Ultimately, I think it would greatly benefit interoperability. There is also a huge potential benefit to testing: One simply has to identify the input network of the memory, and record a subset or all of the patterns occurring in the other part of the system. Then, by replaying the input, one can compare the resulting pattern with the record. Also, undo operations could be performed by changing cell values back to their recorded images. Smalltalk everywhere I imagine that every part of the computer contained such a Smalltalk hypermedia system describing the objects and relations in its memory contents. This would make it easy to browse, visualize and manipulate computer components, network infrastructure, anything really. With the vast improvement of computer hardware, in particular programmable logic, having a Smalltalk interpreter on almost every device seems quite feasible to me. The future of Smalltalk is indeed grand! (I hope I have not got delusional at this point). Atlas Project I have started working on a prototype, I am anxious to test some of the ideas I proposed. There is much uncharted territory and Pharo seems to be a great platform and vehicle to explore new ideas. Are there people willing to contribute, help? What are your opinions? [1] http://www.selflanguage.org/ [2] https://www.ics.uci.edu/~taylor/ics228/chimera.pdf [3] http://scg.unibe.ch/archive/papers/Reng09bLanguageShootout.pdf [4] http://infoscience.epfl.ch/record/176887/files/DeprecatingObservers2012.pdf [5] http://www.dougengelbart.org/pubs/augment-3906.html -- View this message in context: http://forum.world.st/The-Smalltalk-Revolution-tp4798320p4798412.html Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.