Follow Slashdot stories on Twitter


Forgot your password?
Check out the new SourceForge HTML5 internet speed test! No Flash necessary and runs on all devices. Also, Slashdot's Facebook page has a chat bot now. Message it for stories and more. ×
Programming Python

Can Learning Smalltalk Make You A Better Programmer? 343

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."
This discussion has been archived. No new comments can be posted.

Can Learning Smalltalk Make You A Better Programmer?

Comments Filter:
  • Well rounded. (Score:3, Insightful)

    by Anonymous Coward on Saturday December 31, 2016 @10:00PM (#53586779)

    Smalltalk, Forth, LISP, and FORTRAN.

    • These are quite nice and powerful languages, although I'd personally like Forth more if it was a bit less low-level. For startups, I recommend CommonLisp (SBCL).
    • Well learning any language makes you a better programmer. Each prorgramming language approaches solving problems differently. After learning that language you now have a new approach to solving a problem under your belt. Then even if you are coding in a different language and you come across a problem that the other language was strong at solving. You know to structure your fictions and procedures in a way to mimic that other language behavior.
      So I may be doing OOP but I come across a problem that is ea

      • by lgw ( 121541 )

        Well learning any language makes you a better programmer.

        Only if you're totally new to programming. Once you have your head around the basics: pointers, recursion, and lambda, you're not going to learn much from just toying around with a language.

        The only breadth that's useful to a professional is depth multiple times. Spend 3-5 years getting to know the ins and outs of a technical stack, everything the common libraries have to offer, how maintainable code really is, vs what looked cool at the time.

        Then do it all again with another tech stack. And another. Th

  • by Osgeld ( 1900440 ) on Saturday December 31, 2016 @10:03PM (#53586787)

    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

    • Re: (Score:3, Interesting)

      by Darinbob ( 1142669 )

      You probably will learn why newer languages are trying to emulate Smalltalk but also failing and how they could have done better. Smalltalk is a high bar that very few other languages can reach. Smalltalk works because it never started life with the implicit goal of being compatible with older languages or paradigms. C++/C#/Java all screw up because they attempted too hard to be C-like, to be familiar to existing programmers, and to not rock the boat too much. Other scripting languages seem better at thi

      • C++/C#/Java all screw

        What do you think C++ screws up? I like C++, so I already have a very long list of my own, but nonetheless, 99.9% of "C++ killers" prove to be an appallingly bad replacement.

        • C++ is basically not very object oriented, especially with later incarnations which focus on generics instead of real objects. And because it explicitly wants to be compatible with C, you're stuck with a machine oriented model, memory management (too hard to bolt this into a language that has pointers), and so forth. Trying to be a C++ killer is the fault of those languages, C++ generally gets used in area that Smalltalk is not used for. Smalltalk is great for rapid prototyping, C++ gets used by people w

          • by geoskd ( 321194 )

            C++ is basically not very object oriented

            That is *not* a bad thing. OO is not a good solution for every problem. Neither is procedural programming, nor functional programming. A good language is whichever one allows you to solve the problem at hand in the most optimal way. The kinds of problems that Lisp is good a solving, C is not. The kinds of problems that C is good at solving, Smalltalk is not, etc. C++ is an extremely capable language because, while it is not optimal for solving most types of problems, it is workable, and not badly suboptimal

    • on how far down the rope you want to go

      I used to program in BASIC, then assembly on an Apple ][

      30 years later I've regressed to making new CPU instructions.

      In another 30 years I've be making new types of logic gate I guess.

  • 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 enoug

  • 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.
    • by Santana ( 103744 )

      You are terrible wrong.

      C has its place as a low level language but it is definitely, without any doubt, not the best language to become a good programmer. If you really believe what you are saying then you are missing a lot about programming.

      • by Santana ( 103744 )

        I meant *terribly*

      • by creimer ( 824291 )

        If you really believe what you are saying then you are missing a lot about programming.

        That's probably true. I've learned computer programming at the community college and went into IT support upon graduation. I'm currently working my way through an old book to create a Pascal compiler from C (circa 1986). A double challenge to translate old C into modern C and learn Pascal at the same time. The reason I'm learning C is to write Python C extensions and embedded code.

        • by Santana ( 103744 )

          I see where you are. I'm sure I don't need to tell you this but: keep being curious. It will be a long and very exciting trip.

    • by Z00L00K ( 682162 )

      C is a good learning language - you will make all your mistakes there and then you know what you shouldn't do to avoid stack overwrites etc. Shoot yourself in the foot 25 times and you will learn how you shouldn't do, then you can continue with a better language.

    • I thought you were a professional software developer.
      Did you not say so in older posts?

      Sorry, but this idea that any language has borrowed from C (except C++) is idiotic. Considering that most languages predate C anyway ...

      I guess you are the prime example for a developer who can learn great deals about programming if you would learn SmallTalk, Lisp and/or Prolog.

      C does not make you a better programmer. It is useful. And that was it.

  • Mind blowing (Score:5, Insightful)

    by Santana ( 103744 ) on Saturday December 31, 2016 @10:30PM (#53586853) Homepage

    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.

  • ... upon how poor of a programmer you were previously.
    • by Kjella ( 173770 )

      It depends upon how poor of a programmer you were previously.

      While perhaps not so blunt, that sort of mirrors my thinking. It has to be a really fucked up language to make you worse then before, sure you pick up bad habits but if you're willing to learn you're willing to unlearn. If you're not you're kinda fucked either way. It's another question entirely if it's an efficient way, like could you learn functional or object-oriented programming or some design pattern faster by another language. I'm sure every language has something similar to for example the singleton

      • by doom ( 14564 )

        I'm sure every language has something similar to for example the singleton pattern, like what do I do if I only want one instance with a global state

        I can remember back when we just called those "global variables".

        Ah, how far we've come.

  • 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.

  • Uh... (Score:5, Interesting)

    by Chris Katko ( 2923353 ) on Saturday December 31, 2016 @10:44PM (#53586889)

    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.

    • Re: (Score:2, Interesting)

      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.

      I think you're right on the mark here. AI seems to be the way of the future for coding. LISP is a brilliant language for learning about core ideas in that domain - or many other domains for that matter. The analogy with Latin, and the implicit understanding of grammar and structure, is a good one.

      • Re: (Score:3, Insightful)

        by Anonymous Coward

        > LISP is a brilliant language for learning about core ideas in that domain

        Actually that has not been true for a while now.

        Lisp was innovative back in the day for its ability to easily manipulate data structures. After all, Lisp's homoiconic syntax and macros meant that you were essentially manipulating thinly disguised ASTs. AI back then was symbolic in nature (think natural language processing), so Lisp fit the bill really well.

        However, the symbolic school of AI has not been dominant for years -- the c

    • It's like learning Latin in school, to help you appreciate English.

      And much like Latin, it probably encourages large numbers of people to inappropriately coerce things into an inappropriate mould. For example insisting on things like not splitting infinitives.

    • If learning something that has had a lot of influence makes us better at a language, presumably we should all be learning Anglo-Saxon, to make us better at English. And maybe it would make us better at English (though I doubt it), but is it the most effective way to make us better?

  • 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
  • by robert bitchin' ( 765408 ) on Saturday December 31, 2016 @11:35PM (#53587015)
    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.
    • by Cederic ( 9623 )

      no data-only structs

      Hasn't that war already been lost? I thought RESTful APIs pretty much killed it off.

      No data-only structs is a beautifully purist vision but also pigeonholes all data into a specific object type. Separating data from the code that does the work with the data means you can easily do different work with the same data.

      Shit, look at the whole Big Data arena. Wrap all that data in behavioural constructs and you'd flounder.

      I went through this whole design debate/cycle between 1998 and 2000, and haven't looked back

    • by faragon ( 789704 )
      Turbo Pascal 3/4 had not object oriented stuff. "Object Pascal" was introduced in Turbo Pascal 5.5 (link []).
  • I don't like most people, so I avoid conversation, including smalltalk.
  • by mark-t ( 151149 ) <markt.nerdflat@com> on Sunday January 01, 2017 @12:09AM (#53587071) Journal

    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.

  • by jonwil ( 467024 ) on Sunday January 01, 2017 @12:26AM (#53587103)

    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...

    • by Anonymous Coward

      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

  • by tgibson ( 131396 ) on Sunday January 01, 2017 @12:38AM (#53587131) Homepage

    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.

    • C mostly serves to make the stupid, annoying stuff in C++ clear, though. The rule of three doesn't come from a C background; it is part of RAII, something that C does not have.

      The C background makes clear why we have old-style casts, switch cases with implicit fallthrough, array to pointer decay, and the whole f'ing preprocessor, but we could pretty much have lived just fine without all of that. It was necessary for C++ to gain acceptance during the early days, but now it is mostly just a pain to have to de

      • by tgibson ( 131396 )

        The rule of three doesn't come from a C background; it is part of RAII, something that C does not have.

        This statement is wrong []. It is precisely because of backward compatibility with C that this is the design of the language. As C structures can be assigned and copied, so must C++ structures.

        • Your link does not, in fact, support your assertion. The ability to copy data is a vital necessity for any programming language, and hardly something that can be tracked specifically to C.

          It was a very specific design goal of C++ to support user-defined types that are indistinguishable from built-in types (Stroustrup wanted to be able to define a complex number type that acted as if it were a built-in type). For this to be possible, objects must support operator overloading, and must be able to manage their

    • by DrXym ( 126579 )
      The Rule of Three was not a design intent of the C++ language, it was an after-the-fact bodge to fix the terrible default byte copy that C++ helpfully adds whether its safe or not. Entire books are written about writing effective C++ and most of them are working around really poor, unsafe behaviour that you get by default or bad language choices. Even if someone fastidiously follows Rule of Three, it's still easy to screw up in subtle ways, such as not checking if an instance is being assigned to itself.


  • Maybe not, but some smalltalk might get you laid. Get to it geeks!
  • 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

  • Will Alcohol, LSD, or Caffeine make you a better programmer ?

    • by Z00L00K ( 682162 )

      That depends on the problem encountered. A shotgun may also be a problem solver in some cases.

  • by jcr ( 53032 )

    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.


  • by Ash-Fox ( 726320 )

    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.

  • 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 syst

We all agree on the necessity of compromise. We just can't agree on when it's necessary to compromise. -- Larry Wall