Can Learning Smalltalk Make You A Better Programmer?
Slashdot reader horrido shares an article that "has done more for Smalltalk advocacy than any other article in memory." It was the second-most popular article of the year on the Hewlett Packard Enterprise site TechBeacon (recently passing 20,000 views), with Richard Eng, the founder of the nonprofit Smalltalk Renaissance, arguing that the 44-year-old language is much more than a tool for teachers -- and not just because Amber Smalltalk transpiles to JavaScript for front-end web programming.
It's a superlative prototyping language for startups. It's an industrial-strength enterprise language used by businesses both big and small all around the globe... Smalltalk's implementation of the object-oriented paradigm is so excellent that it has influenced an entire generation of OO languages, such as Objective-C, Python, Ruby, CLOS, PHP 5, Perl 6, Erlang, Groovy, Scala, Dart, Swift, and so on. By learning Smalltalk, you'll understand how all of those useful features in today's OO languages came to be.
The article also argues that Smalltalk pioneered just-in-time compilation and virtual machines, the model-view-controller design paradigm, and to a large extent, even test-driven development. But most importantly, Smalltalk's reliance on domain-specific languages makes it "the 'purest' OO, and one of the earliest... It is often said that programming in Smalltalk or Python is rather like Zen; your mind just flows effortlessly with the task. This is the beauty and value of language simplicity, and Smalltalk has this in spades... Smalltalk, by virtue of its object purity and consistency, will give you a profoundly better understanding of object-oriented programming and how to use it to its best effect."
The article also argues that Smalltalk pioneered just-in-time compilation and virtual machines, the model-view-controller design paradigm, and to a large extent, even test-driven development. But most importantly, Smalltalk's reliance on domain-specific languages makes it "the 'purest' OO, and one of the earliest... It is often said that programming in Smalltalk or Python is rather like Zen; your mind just flows effortlessly with the task. This is the beauty and value of language simplicity, and Smalltalk has this in spades... Smalltalk, by virtue of its object purity and consistency, will give you a profoundly better understanding of object-oriented programming and how to use it to its best effect."
This site is becoming complete garbage. Thanks a bunch EditorDavid.
- Yes, Slashdot needs money!
- No, the editors are just awful!
- Insert CowboyNeal reference
Smalltalk, Forth, LISP, and FORTRAN.
on how far down the rope you want to go
if you want to learn the core original idea's of modern programming as some academic / archaeological adventure, yes small talk has a lot to offer as its a very influential language
if you think you are going to magically going to get 100x better at C# or java just by reading some generic summaries of how it works, then no you will not benifit in any such way ... cause the best of such an old language has already been extracted and implemented decades before hand and you already us it
I don't know of anyone that has been turned down from a customer facing job for being too multilingual.
You want me to program in PHP? Fine. Python3? Fine. Python2? Fine. C, C++, Perl, MATLAB, R, COBOL, FORTRAN, etc. Fine.
There are working tools written in all of the above languages. Most managers that value their budget aren't going to say "Eh, lets rewrite that COBOL program in Python 3".
Smalltalk was an amazing language for the 1970's and 1980's. But pretty much all of its features have been incorporated into other languages, so learning Smalltalk won't give you amazing new insights if you know or learn languages like Python or JavaScript.
Having said that, Smalltalk is fun to play around with. Fortunately, there are several excellent, faithful, and free Smalltalk implementations, including Squeak and Pharo. Just download them and play with them. Smalltalk is simple enough and similar enough to other languages that it shouldn't take you long to pick up.
C is probably the programming language that will make you a better programmer. Pretty much every other programming derived from C in one form or another. If you want to get under the hood of language, it's probably C anyway.
I was surprised, maybe shocked, by how much Smalltalk has contributed to the world[1], how far we have deviated from it[2], and how slowly we are converging to it again[3].
[1] object oriented programming, virtual machine, just-in-time compilation, test-driven development, Model-View-Controller design pattern, object databases
[2] inventing problems by trying to coerce static typed programming languages to behave like dynamic ones (Java, Go, et cetera, I'm looking at you)
[3] by slowly incorporating Smalltalk features into current popular programming languages. Ruby for instance is heavily based on Smalltalk.
The best way to predict the future is to invent it
... upon how poor of a programmer you were previously.
Rational's RequisitePro is written in Smalltalk.
I'm aware that it's possible to ship software written in Smalltalk, but also that it's not exactly a popular language.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
You're actually not much of anything, if your posting history is anything to go by.
You're just jealous that I have a posting history.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
The whole thing sounds and feels great, until you realize that thousands of two and three line methods and no methods larger then 20 lines is not that great.
Plus the tools, like for example, editors, grep, etc. all have to be written from scratch thus lag behind common tools. Though other languages are ( stupidly ) going the same way.
Something like RUby which draws a lot of ideas from Smalltalk works better.
While Smalltalk clearly has plenty of influences in later languages, from everything I've ever heard or read, the language to learn is LISP--not Smalltalk. I've heard countless stories of people saying it retrains your brain and opens your eyes to new ways of solving problems and that "It's the best language to learn that you'll never actually use." (Because it helps in your normal life.)
It's like learning Latin in school, to help you appreciate English.
Of course it is. Smalltalk is a live language. JP Morgan for instance is one of the largest users of Smalltalk.
There are companies today making a living out of writing software in Smalltalk. Even successful companies selling implementations of Smalltalk like Cincom.
Smalltalk is not a language from the past. It is the language of the future. Java held us back for years.
The best way to predict the future is to invent it
Neither is Clojure, F#, Erlang, Elixir, Elm, Dart, Julia, Rust, Kotlin. Does that mean we shouldn't use these languages?
My career started in Smalltalk in the 90s but then, thanks to a lack of job opportunities, I spent the next decade coding in Delphi, C, C++, etc. It was a shame, because I really loved coding in Smalltalk, whereas other using languages was purely to earn a living.
I've no regrets. Smalltalk gave me a grounding in OO concepts,TDD and patterns before they became de rigueur and gave me an edge when people coming from more traditional languages were struggling with the new ideas.
But honestly, everything I enjoyed in Smalltalk is available in modern languages. I've spent the better part of the last ten years earning a living coding in Ruby - and enjoying it. Going back to Smalltalk would feel retrograde.
If I were a young coder starting out today I'd be looking at languages that introduce new concepts, not stepping back in time.
Smalltalk is not a language from the past. It is the language of the future.
So is adoption actually increasing? Or is that just wishful thinking?
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
Smalltalk has been commercially used for over three decades. It’s not some esoteric, academic language but a truly practical, industrial tool. Cincom’s and GemTalk’s websites list some of the companies they’ve served from all kinds of industries, including JPMorgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Orient Overseas Container Lines, etc.
No, just Silver Bullets (TM).
Every language goes through this fad phase. It gets used for 20 years, then everyone forgets about for the next 20, then everyone jumps on the bandwagon when retro is hip again.
You see this all the time.
i.e. Hyperlink had been (re) invented two times PRIOR to Timothy Lee Burner butchering it.
Alan Kay - Normal Considered Harmful
https://youtu.be/FvmTSpJU-Xc?t...
I started off with Turbo Pascal 3-4 back in the 80's (had OO before anything else back then) then moved to Smalltalk. It was a true mindfuck at first, wasn't able to do the simplest of tasks. Where are the files? How do I get a library for X? !@#$ But eventually the fog lifted and I got productive. It was still hard to explain its virtues to everyone else and deployments were a challenge (VM? what?) but then Java came along and I moved to that in 97. Most of my contemporaries doing the same were coming from C/C++ and their experiences adapting to that were hilarious compared to what I was experiencing. In short I was the quitessential nickel-get-yourself-a-new language neckbeard, disgusted with the compromises made to entice the C community: lame syntax, files, primitive types, overstrong types, etc. Still bringing home the bacon with Java but its been painful having to watch the industry reinvent all the same core concepts over the last 20 years. Its not surprising that the GoF came from the Smalltalk community, the language effectively voids all the useless baggage that comes with other languages, forcing you to confront and identify all the core concepts in your problem domain.
One of the most interesting things I've been seeing is being able to identify the mental origins of developers who've drunk the Smalltalk Kool-Aid so long ago, it shows up clearly in their designs. All domain concepts as first class objects, no data-only structs, effective pattern use, quality name choices, tight and effective hierarchies but most of all semantic clarity. You can only beat junior devs on the head for so long in code reviews to have them put these things into practice before you realize that they're coming from a wholly different perspective. As we move into a post-OO world with functional programming I can imagine the Haskel et al folks gritting their teeth in the same manner.
I don't like most people, so I avoid conversation, including smalltalk.
If "prototyping" means making a rigged demo for suits, Smalltalk won't buy you much, But if you are trying to make an engineering sanity check to make sure you have identified all of the key parts to your proposed system Smalltalk can be awesome.
Learning *ANY* programming language can make someone a better programmer... offer them a new way of looking at how to solve certain types of problems and innovate new and elegant solutions that hadn't occurred to them previously as they learn the idioms of a new programming language.
But like any other programming language, learning it will *NOT* necessarily make you a better programmer, and there's certainly not anything unique to Smalltalk that might make becoming a better programmer after learning it especially likely.
File under 'M' for 'Manic ranting'
Its too bad the money men at Xerox at the time (who mostly came from places like Ford and didn't know the first thing about computers or technology) didn't realize just what they had with the Alto, Ethernet, Laser Printer, Smalltalk etc and actually allow the PARC guys to get it out of the lab and into the real world much earlier than they eventually did...
Though I came to Smalltalk after C++, there is no doubt it informs why all things OO are the way they are. However, who has the time to attain this insight? I programmed in C for three years before learning C++ in the early '90s and there is no doubt that my knowledge of C makes many design decisions behind C++ clear (e.g., how many "young" C++ programmers actually know why the designers of C++ foisted the Rule of three onto the language). But I was too busy keeping up with endlessly changing technologies to learn, say, BCPL, to better understand the design decisions behind C.
Run forward, nascent programmers! Your knowledge of (choose your modern language) today will inform the design behind the language you learn ten years from now.
Its a pretty bad idea, but its not uncommon for a startup to write something, realize it isn't quite what they need to do, and throw most/all of it away and rewrite it. You don't plan to do that, but you accept that it may happen.
You wouldn't normally plan to do it in another language, but you may switch frameworks or even languages if the original choices end up being a bottleneck as you scale (or a hiring bottleneck if you can't find enough programmers).
I still have more fans than freaks. WTF is wrong with you people?
Having developed applications in Smalltalk I can say it had some major failings too. Serious development absolutely required Envy Developer otherwise it was impossible to deploy into a team environment (there are no files to share).
It also was nearly impossible to deploy standalone applications. You had to strip out the development environment, and other objects not necessary for production. Take out too much and sometime later you get a "not implemented" error.
All of its deficiencies could have been fixed eventually but very few companies outside of educational incubators really bothered. The Smalltalk industry was rife with overpaid contractors.
Neither is Clojure, F#, Erlang, Elixir, Elm, Dart, Julia, Rust, Kotlin. Does that mean we shouldn't use these languages?
Not necessarily. But it's important to understand that popularity of your technology of choice - languages included - usually tends to be a positive thing. It means there's a larger community of developers, which in turn means better tools, more libraries and frameworks, and of course, it's also easier to find programmers who are already up to speed with that technology.
While it's true that any decent programmer can learn any language (I've done so several times on the job), it does takes time, meaning for projects in more niche languages, any programmer you hire is going to cost more as they learn both learn the project AND a new language.
Honestly, I've never been one for learning a programming language you don't actually use in practice. I've always felt that if you have a need to use it for a specific reason, you'll learn it, and get proficient with it. But unless you're solving significant problems with your language, I don't think you've actually "learned" it, no matter how many books you've read or toy projects you've thrown together. That's not enough to really get your claws into it, learning the good as well as the bad.
Irony: Agile development has too much intertia to be abandoned now.
Maybe not, but some smalltalk might get you laid. Get to it geeks!
Is that an attmept to be funny or are you retarded?
The fact that no other system adopted the 'image' idea of SmallTalk clearly shows how less the people writing the article and the comments in this story actually have comprehended about SmallTalk.
And Smalltalk does not use special punctuation for its syntax, you must mix it up with something other (C++/Java?)
Except for being OO â" more or less â" the other languages have not really adopted much from SmallTalk. There are still 'programmers' on /. that debate the usefulness of lambdas in Java 8 ...
The good things of SmallTalk besides being OO:
- seamless melding from runtime to language system and OO, global dictionary etc.
- all majour language constructs are represented as objects
- can be queried, augmented, inspected used in reflection etc.
- 'bytecode' can be inspected, transformed etc.
- everything is in the 'image', the IDE is included in your program, unless you strip it
- oo database included, files only used for data exchange
You don't need 'constructors' to set up a complicated UI, you simply create them in the REPL of the IDE, move them where you want them, save the whole running program as an image, next time you 'restart' it, the UI is 'just there'.
SmallTalk is still light years ahead of any other programming system ...
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
Whoa man that is soo out of date and uncool in any Silicon Valley coffee shop man.
Put Outlaw Techno Psycho itch on your laptop baby and watch the chicks and groupies sit and watch you code. Erlang is now cool and hip like what rails did to Ruby
http://saveie6.com/
Will Alcohol, LSD, or Caffeine make you a better programmer ?
It could be worse. Can you imagine a language that would require invisible white spaces as syntax to ever become popular? lol ... Oh shit wait
http://saveie6.com/
I can find lots of comments from Anonymous Coward here, including many from before you even registered.
Now whether Mr. Anonymous Coward makes those comments worth reading is an entirely different matter.
"Set a man a fire, he'll be warm for the rest of the night. Set a man afire, he'll be warm for the rest of his life."
You can also become a better programmer by learning Lisp, Prolog, and various assemblers. The more you can free yourself from a particular language's mindset, the better.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
... no.
That's a good flame right there. Almost like it's september again.
I can tell you from experience, no, no it can't.
I could write code already reasonably well in m68k assembler, x86 assembler, c, c++, c#, java etc. and it brought me nothing to build upon my prior knowledge. No new concepts, nothing.
Change is certain; progress is not obligatory.
Sure, Smalltalk is a great language to know.. if only to understand some of CS history. But it is a horrendous technology to use today, or for the past 10 years. I speak from experience. I've worked with Java and Smalltalk as a professional, and the Smalltalk experience pales into insignificance. The tools just haven't kept up with the crazy pace of technological evolution. The Smalltalk "IDE" I had to use professionally was Cincom's. I couldn't believe how primitive, clunky and programmer-hostile that system was (if you've ever spent a few years with any Java IDE). Since working professionally with Smalltalk, I've also kept an eye on the marketplace for the skill.. in Belgium (which is a small sample, I agree), the demand is very, very close to non-existent. I only know of two companies that still cling on to it, against all rational arguments.
If you have to bury the question, we all know the answer.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
lol smalltalk is like visual basic. Dead and Buried.
I wouldn't go that far, I'd say it's on permanent life support. But adoption certainly isn't increasing. Train wrecks like C# have become more popular, and fringe languages only eat one another's lunches. They don't dent the leaders.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
...limbs?
Easy with the hype :).
SmallTalk is cool - and for its time it was incredible really - but it has warts that have held it back forever (including the stupidify of the major players in the market.)
For example - algebraic precedence. When 5 + 5 * 5 = 50 - you're going to have problems with adoption.
In any case - it's a nice shiny hammer. You should have it next to all your other hammers in the toolbox.
Loading...
Object purity? You don't go to the chaste to learn about great sex.
How long have you lived in this city? Do you have any hobbies?
Yes, small talk can help you get ahead in your career. They say networking is a good thing.
The smalltalk language? Maybe, but who cares?
The important thing is to be multi-lingual. There's no special benefit to learning a specific pet language.
In spoken language, learning Latin is very educational, and helps a person understand the roots of our own language. But you can get arguable more benefit by learning a Latin-derived language like Spanish, which you can actually use in conversation with people who speak it.
No.
If you're trying to get us to socialize you can forget it!
~ People that think they are better than anyone else for any reason are the cause of all the strife in the world.
The Pharo Consortium has only been going a few years and is steadily gaining members - companies putting real money on the table. http://consortium.pharo.org/
http://onsmalltalk.com/simple-...
describes that "One of the nicest things about prototyping in Smalltalk is that you can delay the need to hook up a database during much of your development, and if you're lucky, possibly even forever."
and slightly updated... http://forum.world.st/ANN-Simp...
Smalltalk "Object-Oriented" versus C++ "Object-Oriented" versus golang types versus other languages?
It's not that simple a question really.
We all use some programming languages and related grammar mechanisms to get some sense of a solution delivered.
Smalltalk may be valid as an OO language, but I recall why I did not adopt it as my primary tool when it was first introduced.
Crazy expensive!!! Software price to acquire it was more exclusive than other offerings.
GUI apis within the ide were text-based not Windows-based which wasn't impressive compared to existing X-Window/Unix offerings with C/C++ at the time. Documentation for it was a well-kept secret behind a paywall so there wasn't any motivation for anyone to learn it even if they didn't have the means to acquire it.
GNU smalltalk only appeared much later, but no killer open-source apps surfaced that used it and smalltalk didn't attract other developers to consider using by being inspired by example source code. Not enough useful sample source code out in the wild as open-source.
As an example of a killer open-source app with a great influence for developers to flock to it: bittorrent which uses python and gtk for the gui api.
As another example of another killer open-source app with a great influence for developers to flock to it: docker which uses golang(Google Go) and virtual machine & virtualization apis. golang is my go-to programming language to get things done these days. I prefer it over c++ or java every day of the week. golang lacks UML round-trip tools found in c++ and java, but developers are still flocking to it for certain niche purposes at the moment, but eventually the depth and breadth of the golang offerings will match everything found in c++/java.
Ultimately, if a proposed programming language tool isn't open-source and free and run on every piece of existing hardware by default, it will never fly and SMALLTALK did not fly. It crashed and burned.
The continuous evolution of the Image such that it lost the ability to be recreated from scratch is a failing that the Pharo guys are working hard to fix with a bootstrapping CI infrastructure... http://rmod.inria.fr/archives/...
You are wrong. C++ is terrible compared to Objective-C.
C++ got OO wrong and introduced new problems. For instance, messages is central to the OO paradigm. If you can't see how Objective-C got that right but C++ got it wrong then you are not qualified to compare them.
Same thing for templates, virtual functions, etc. You don't need that in Objective-C because you have "duck typing", another core concept of OO that C++ got wrong.
C++ is affected by the Fragile Binary Interface (FBI) problem https://en.wikipedia.org/wiki/... while Objective C is not.
And so on...
The best way to predict the future is to invent it
No, just Silver Bullets (TM).
Every language goes through this fad phase. It gets used for 20 years, then everyone forgets about for the next 20, then everyone jumps on the bandwagon when retro is hip again.
You see this all the time.
i.e. Hyperlink had been (re) invented two times PRIOR to Timothy Lee Burner butchering it.
Butchering? Bullshit. And do you really think it is interesting that others have had the same (kind of) ideas before? Are your completely ignorant of history in general and technical history in particular?
> Butchering? Bullshit
Yes, butchering.
What part about RPC (Remote Procedural Calls) do you not understand?
Go watch Alan Kay's talk.
> And do you really think it is interesting that others have had the same (kind of) ideas before?
No, it isn't that interesting. If one has a great idea, chances are someone else will ALSO come up with. i.e. Leibniz and Newton simultaneously co-invented calculus.
> Are your completely ignorant of history in general and technical history in particular?
Hello, McFly. Why do you think I give examples of where people have repeatedly re-invented the SAME idea.
Go read Multiple discovery
Messages are fundamentally the problem with OOP. Duck typing is the very thing that makes code maintenance hard. Oh, sure, it can make code easier to get started with, but easy to maintain trumps easy to shit out code any day.
Socialism: a lie told by totalitarians and believed by fools.
Oh please... The most popular language, English, uses invisible white spaces as syntax.
ReadafewsentenceswithoutitandI'llbetyoureyeswillstartbleeding.
You have very well indoctrinated in static typing, that's fine.
Let's try an exercise. Look deeply into those "generics" and "templates" and "dynamic casts" and most of those "design patterns"[1] you have to learn. If look deep enough you will be able to see through them and find out that they are solutions to problems caused by static typing, which enable you to escape for static typing and make it more dynamic!
[1] http://www.norvig.com/design-p...
The best way to predict the future is to invent it
true, but OO is more than that.
The best way to predict the future is to invent it
Yes, but you really, really like smalltalk.
I don't care about academic arguments. I just know what sucks to maintain, and code without compile-time type checking sucks to maintain.
Sure, no argument, static typing is just the wrong choice for elegant toy programs that no one uses.
Socialism: a lie told by totalitarians and believed by fools.
Before Eclipse became Eclipse it was called Visual Age for Java, implemented in Smalltalk, and it was a joy to use. Capable of some amazing things, like recompiling pieces of a program while running it, and have that all make sense and be natural. When rewritten in Java it became the dreary, plodding thing it is today. Not useless, but soul-sucking. Implementation language had something to do with it? Funny how everything written in Java ends up awkward.
Wow, looks like some Java programmer with mod points got triggered. Why should I be surprised? Java programmers tend to have a limited perspective of the world.
When all you have is a hammer, every problem starts to look like a thumb.
Where Smalltalk went wrong is charging $5000 per seat at a time that Java was being released free of charge. That may have been sustainable for those big company clients that could afford to get their foot in the door to the Smalltalk advantages, but it missed getting mind share in the mass market.
You are exactly right. This is why MIT licensed Pharo Smalltalk is steadily gaining traction. Its still a small community, but vibrant. Here are a few examples... http://pharo.org/success A consortium is putting real money on the table to support paid engineering for those important tasks that sometimes don't get done with the "scratch you own itch" open source philosophy. http://consortium.pharo.org/
If operator precedence is the only "wart" you can mention that stops you from using Smalltalk then you can't really speak about Smalltalk with authority.
FYI, there are no operators. Just messages sent to receivers. Is your mind blowing yet? No?
There are neither conditional statements nor control structures in the *language* yet Smalltalk programmers use them all the time. How is that possible? Non-sense? Mind blowing yet?
The best way to predict the future is to invent it
I guess you missed the "for example." Rather than talk about the differences between 72, 80, and the various flavors along the way and their shortcomings - I pointed out something small but important that counters the silly article's "SmallTalk is the magic bullet!" voice.
I still think SmallTalk is cool, and in 85 it was SERIOUSLY cool (image based persistence? Awesome...) Like all other languages - it has issues.
Loading...
A hiring manager for a Java position once asked me in the interview if I knew Smalltalk. I said no. He said "Good, if you did, then I wouldn't hire you." He said that Smalltalk requires a strange way of thinking that would make you a bad developer.
It's been a long time since a language became widely used without a good generally available free implementation. Was Pascal the last widely used language that relied on people buying it?
"When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
Thanks for the link to Amber Smalltalk! I didn't know this one. It's good to hear there's something going on with client side Smalltalk.
Learning any programming language will make you a better programmer.
Is Smalltalk the most efficient option? I am not sure.