9 ms·
Design Principles Behind Smalltalk (1981)
- chadcmulligan 4y agoI've always liked smalltalk and its ideas, but you can't use it to make shrink wrap software, at least last time I looked at it, maybe you can now. I've always thought this was a deficiency, same as Java early on.
- igouy 4y agoYou can't shrink wrap because …?
- musicale 4y agoRequiring megabytes for a base system image (although it could be stripped and compressed) the Smalltalk runtime was once considered too large to be shipped with individual apps, and apps tended to be slow and unresponsive compared to compiled C apps. There may also have been licensing issues with shipping a runtime environment. Fast forward to 2022. Compared to current app sizes, it's laughably small. Compared to Electron/web apps, it's probably faster and more responsive. And the licensing issues have been solved with open source versions.
- igouy 4y agoiirc Stripping the vendor's development tools avoided "the licensing issues". iirc Dolphin Smalltalk used windows controls and packed to exe. iirc Smalltalk/X " translates the input file into temporary c-source file and calls the standard C-compiler cc to create a binary object module." https://live.exept.de/doc/online/english/programming/stc.man.html https://live.exept.de/doc/online/english/programming/stc.man...
- musicale 4y agoThose sound like nice systems and stepstones to where we may be today: - fully free/open source implementations - native widget integration (or we don't care anymore because we're used to crappy web apps) - the resource usage and responsiveness gap between commonly deployed apps (such as JavaScript and web apps) and Smalltalk apps has either evaporated or is less of an issue because of faster hardware and more memory But as you may be implying, I think that there are additional barriers to Smalltalk being used more commonly, such as unusual syntax, a different workflow compared to Java/Python/Javascript/etc., lack of type safety (note that even Python and Javascript have typed versions while typed Smalltalk doesn't seem to have caught on) and the fact that it's neither considered a web technology, nor is it promoted by influential platform companies. I suspect that the Pharo people might think that Smalltalk has a bad reputation (or something) so they never say "Smalltalk." I tend to think that not calling it Smalltalk leads to a bad outcome of confusion and fragmentation.
- igouy 4y ago> … lack of type safety… Smalltalk is type safe & not statically checked. "Type safety is the property that no primitive operation ever applies to values of the wrong type." page 263 "Programming Languages: Application and Interpretation" [pdf] https://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04-26/plai-2007-04-26.pdf https://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-0...
- sebastianconcpt 4y agoEpic. This one gets me every time: Personal Mastery: If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual. That combined with instant feedback can make you feel like a rockstar coder. And Smalltalk delivers.
- igouy 4y agoPerhaps "to serve the creative spirit" of the coder is not what most software development should be about?
- tgvaughan 4y agoPerhaps we need to get rid of this artificial distinction between users and programmers.
- smegsicle 4y agothink i've seen the term 'operator' used in this context?
- ryukafalz 4y agoPrecisely. Every barrier in place between using a system and programming it serves to elevate the decisions of its designers over those of its users. The greatest power of computers is their ability to be reshaped to meet whatever need the user has, but we mostly lock that power away from them.
- dgb23 4y agoThere's a subsection of people who are very well served by that. And it has already been happening. SQL, Python, HTML/CSS/JS are all things that people use who are not primarily programmers. Applications like Unity, Excel, some Adobe stuff also blur the line here. But let's not forget that there are a ton of people (many more than the above) who are constantly overwhelmed by computers even though they only use very few features. There's people who can't use ATMs and smartphones. Most computer users only ever use the most common applications (browsers, music/video players etc).
- _benj 4y agoI’ve been playing around in Pharo [0] and it’s such an immersive experience! My first reaction was to compare to eMacs in that the editor/environment is the program and it can be edited, customized, extended… but Pharo/Smalltalk takes it to the next level of ease of use, discoverable and fun! [0] <https://pharo.org/ https://pharo.org/>
- AlanYx 4y agoIf you like the emacs-like aspect of Pharo, the Glamorous Toolkit project (which is built on top of Pharo) is worth checking out too. They recently released a digital notebook tool called Lepiter that has a lot of similarities to org-roam/org-babel: https://lepiter.io/feenk/introducing-lepiter--knowledge-management--e2p6apqsz5npq7m4xte0kkywn/ https://lepiter.io/feenk/introducing-lepiter--knowledge-mana...
- _benj 4y agothanks for the suggestion! will take a look
- carapace 4y agoDid they release it? The blog is about it but there's no link. This seems to be the site https://lepiter.com/ https://lepiter.com/ but it's just a form where you can give your email to "Register for fresh news."
- AlanYx 4y agoIt's released. It's not a separate download -- it's in the Glamorous Toolkit download (which makes sense from a Smalltalk perspective but may be weird if you're not used to it).
- smegsicle 4y agolol don't spell emacs like that https://en.wikipedia.org/wiki/EMac https://en.wikipedia.org/wiki/EMac
- projektfu 4y ago(1981)
- deleted 4y ago[deleted]
- dgb23 4y ago> Operating System: An operating system is a collection of things that don't fit into a language. There shouldn't be one. I like this one especially. It rings true if you imagine a world where you have complete control over your machine, you don't worry about possibly external code breaking or extracting your stuff and so on. But lets just pretend we don't need to worry about these things for some reason. It would be so powerful. And I don't mean you have 'root' privileges, I mean your programming environment owns, controls and _is_ everything that happens. No black boxes, no overhead, nothing. Just _one_ runtime that is integrated all the way down with the expressive power of a Lisp/Smalltalk/Self or similar. It's sad that this doesn't seem like a viable option.
- mch82 4y agoPeople just need to start chipping away at it. Eventually it’ll exist. My favorite inspiration for “chipping away at it” is https://ephtracy.github.io/ https://ephtracy.github.io/ who has been slowly building up the coolest 3D art tools one commit at a time.
- AnimalMuppet 4y agoThe problem with environments like that is that they are never perfect. There's always something that at least some users need that they left out. But, since they're trying to be everything, they don't leave you any way to leave their world to go get something from the real OS, or the bare metal, or wherever "outside" is. So, if you're trying to build an "everything" environment, sure, try to get everything in. But know that you will fail. And therefore, don't trap people. Leave them a way to get "outside".
- Jtsummers 4y agoPast discussions: https://news.ycombinator.com/item?id=23496800 https://news.ycombinator.com/item?id=23496800 - 2020, 87 comments https://news.ycombinator.com/item?id=17825747 https://news.ycombinator.com/item?id=17825747 - 2018, 30 comments https://news.ycombinator.com/item?id=13611222 https://news.ycombinator.com/item?id=13611222 - 2017, 54 comments https://news.ycombinator.com/item?id=1758057 https://news.ycombinator.com/item?id=1758057 - 2010, 1 comment https://news.ycombinator.com/item?id=1643098 https://news.ycombinator.com/item?id=1643098 - 2010, 4 comments
- aaroninsf 4y agoAfter my last foray through Squeak, I haven't followed subsequent evolution of the language/environment; I'm wondering: has anyone taken on integration of an idea of something like a native notion of modules/versioned package management? I enjoyed the premises of working with changesets and a monolithic image, to a point; but it always seemed it would not be that hard to integrate a contemporary notion of modularity... I'd love an environment which allowed me to develop in Smalltalk, debug in an image, yet freeze the dependencies, with smart ephemeral compilation and the like, and...
- Jtsummers 4y agoIceberg for Pharo: https://github.com/pharo-vcs/iceberg https://github.com/pharo-vcs/iceberg Monticello: http://www.wiresong.ca/monticello/ http://www.wiresong.ca/monticello/ I haven't used the latter, but the former is easy to use and based on libgit. Create a new repository, select the packages that go into it, make the initial commit. After that it'll tell you when the changes don't match the repo. You can select down to the method level since it's aware of the language's syntax and semantics. The generated repository looks like the Iceberg repo itself, a collection of directories for the packages and then .st files for the classes and their contents.
- igouy 4y ago> I'd love an environment which allowed me to develop in Smalltalk, debug in an image, yet freeze the dependencies, with smart ephemeral compilation and the like, and… Once upon a time, back in the day: https://www.google.com/books/edition/Mastering_ENVY_Developer/ld6E19QIMo4C?hl=en&gbpv=1&dq=envy+developer https://www.google.com/books/edition/Mastering_ENVY_Develope...
- spindle 4y agoHaver for Cuis - and Cuis is in any case my favourite Smalltalk. http://haver.klix.ch http://haver.klix.ch
- andsoitis 4y ago> The point here is that the human potential manifests itself in individuals. What does this mean?
- ModernMech 4y agoThink of "human potential" as a class, and "individuals" as instances of that class.
- andsoitis 4y agoI think there are additional levels of human potential that express not at the individual level but at aggregates. Perhaps a MOP* for human potential? * meta-object protocol
- mbrodersen 4y agoIt is stating a simple obvious truth as if it was a profound deep discovery.
- mbrodersen 4y agoTo the downvoter(s): How is the statement not an obvious trivial tautology?
- deterministic 4y ago> If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual. Not true at all. For example, artists using Photoshop are typically not programmers and don’t understand the system at all. That doesn’t stop them from creating world class art. A great creative system hides all the complexity from the artist and frees them to express themselves in a way that is natural to them. Also, understanding the complete system, from software to hardware etc. is pretty much impossible for an individual. So your “low level understanding” of a system will always be a simplified model of what is really going on. I have seen this kind of thinking before and IMHO it leads you down the wrong track. Abstractions are there for a reason. Smalltalk is a good example of this. Yes it allows you to manipulate lower levels of the stack (compared with most languages). But that hasn’t resulted in creative outcomes demonstrating the value of being able to do this. Smalltalk failed in the programming language market place.
- deleted 4y ago[deleted]
- roeles 4y agoIn some talks, Alan Kay mentioned something like the user understanding a simplified model in his head. I believe he mentioned the user should be able to understand a modern car through the mental model of a Ford model T. Edit: Alan Kay sometimes also mentions "slogan land", where you state things too black and white, so that management types understand the essence. Perhaps that applies to these rules too.
- mbrodersen 4y agoI am pretty sure very few people driving cars understand how a Ford T works. Can they explain how a combustion engine works? Can they even explain the run cycle of a single cylinder? I doubt it. The mental model people use for driving cars is extremely simple compared with how a Ford T model actually works.
- mbrodersen 4y ago> Uniform Metaphor: A language should be designed around a powerful metaphor that can be uniformly applied in all areas. Nope. Not true. Not if you want to create a successful programming language. All successful programming languages used in the real world are multi-paradigm languages.
- deleted 4y ago[deleted]
- deterministic 4y ago> Good Design: A system should be built with a minimum set of unchangeable parts; those parts should be as general as possible; and all parts of the system should be held in a uniform framework. That would be nice but it is pretty much impossible in practice. No uniform framework exists that is optimum for all situations and special cases. There is a reason why we still have many different programming languages and programming environments.
- deleted 4y ago[deleted]
- mbrodersen 4y ago> Purpose of Language: To provide a framework for communication. Programming languages are tools used to solve problems. They are not “frameworks for communication”. Except in the narrow case of a programmer reading source code. COBOL is an example of a programming language designed with this idea in mind (Readable by non-programmers). Enough said.
- deleted 4y ago[deleted]
- zupa-hu 4y agoI think your comment is missing a crucial point or the principle, which is that "a computer can be viewed as one of the participants". Thus writing a program is communicating your intent to the computer. I see that hard to dispute.
- mbrodersen 4y agoIn that case it is a trivial obvious observation not worthy of elevating to a “principle”.
- deterministic 4y ago> Storage Management: To be truly "object-oriented", a computer system must provide automatic storage management. That’s a bad idea. A single one-size-fits-all storage solution that works for all problems in all scenarios doesn’t exist. There is a reason why we use many different storage solutions as technologies to solve problems.
- deleted 4y ago[deleted]
- mbrodersen 4y agoFor the down voter(s): please enlighten us by giving us an example of a one-size-fits-all storage solution that works in all cases in all scenarios. Good luck with that.
- mbrodersen 4y ago> Messages: Computing should be viewed as an intrinsic capability of objects that can be uniformly invoked by sending messages. I disagree. A much simpler, and more general model is to view computing as data + data transformations. The OO thinking is a more complicated subset of this.
- deleted 4y ago[deleted]
- retcon 4y agoIndeed. Since much earlier in the article the author says, [Edit wrong paste before sorry] >In designing a language for use with computers, we do not have to look far to find helpful hints. Everything we know about how people think and communicate is applicable. Taking grammatical structures as the principal guide, I'd say that functional language design is the goal.
- jrvarela56 4y ago"Any barrier that exists between the user and some part of the system will eventually be a barrier to creative expression. Any part of the system that cannot be changed or that is not sufficiently general is a likely source of impediment. If one part of the system works differently from all the rest, that part will require additional effort to control." Ironically, Smalltalk drives what the Clojure/DOP crowd considers the cause of this: custom languages. Creating classes means you have to know specific method names (a new language) to interact with a specific object. Eventually you can't wrap your head around it - but Smalltalk offers an env where you can come up with custom visualization to compress all this knowledge. Another approach is DOP: your programs are all mixes of {} and [] and your functions mostly transform data. I guess the question here is which approach represents your problem-solution with less concepts? Classes and method names? Or keys (as in {}) and functions? You'll still end up with namespaces that contain all your abstractions, but it seems like DOP minimizes accidental complexity as the building blocks are simpler. What Smalltalk brings that other systems lack is the visual environment for building different representations. Clojure (my DOP example) has the REPL and data browsers but these lack the expressiveness of the Smalltalk VM.