5 ms·
I can't help but feel there's sort of a strawman here. I'm not sure what social circles the OP hangs out in, but I don't imagine anyone I know would really lamb
by banachtarski 9y ago
I can't help but feel there's sort of a strawman here. I'm not sure what social circles the OP hangs out in, but I don't imagine anyone I know would really lambaste my choice of language to learn in my fair time (or even as my first language).
That said, I think I differ in terms of what I believe a language offers, and given the criteria prescribed in the article, smalltalk is actually probably not a good choice. For example:
> Your first programming language will never be your only programming language
Yes, but for a first language, isn't it more pragmatic to learn a language at the intersection of more popular languages? If you knew you were likely to want to speak English, French, and Italian, would you really opt to start with, say, Swahili or Korean?
> The best way to learn how to program is with a good teaching language.
His argument here doesn't make much sense. I think a "good teaching language" is less about the language and more about the availability of teaching material. The language semantics are trivial to pick up once you have a good foundation, so why not focus on the foundation (and not the language), and pivot as you like afterwards?
> There is no better way to learn about object-oriented programming (OOP).
I'm going to call shenanigans on this one. Learning good OO design isn't going to magically come as a consequence of learning _any_ language, and smalltalk being the paragon (supposedly) is a silly notion. Tons of languages have delivered new paradigms as a result. By this argument, we should just learn every language as our "first" language to learn concurrent/functional/low-level/etc concepts best
> It’s a great hobbyist language.
It depends on your hobby! If you like making console games, uhhh you're shit out of luck with small talk aren't you. Or what if you enjoy experimenting with large datasets. Do you really want to work with a smalltalk-to-tensor flow API?
For the record, I'm not saying OP can't learn smalltalk. Just that in being defensive, it's not good to pendulum to prescriptivism.
- fractallyte 9y agoSmalltalk is more akin to Latin, which is a fine choice for learning the foundation of European languages. Its simple syntax, within a logical and consistent language, makes it (in my opinion) the best way to pick up OO concepts. Being highly 'visual' is definitely an advantage that very few other languages can offer.
- banachtarski 9y agoYou're pushing my analogy too far. I don't think anyone could look at most modern syntaxes and draw an immediate connection to what smalltalk means, regardless of how simple it is. But the real point I was trying to drive home was that syntax is unimportant in the grand scheme of things, and if you feel the compulsion to split hairs over syntax, I would argue that similarity to other commonly used languages is more important.
- eesmith 9y agoIn a human language analogy, I think Algol is Latin while Smalltalk is Greek.
- jhbadger 9y agoBut as an amateur classicist, although both Latin and (ancient) Greek were once common teaching languages (and having a reading knowledge of them was often s requirement to go to university as late as the 19th century), they have quite fiddly grammars with lots of declensions which most modern Western languages have streamlined away. Neither Smalltalk nor Algol have very complicated grammars.
- eesmith 9y agoI believe your argument is that there isn't a comparison between computer languages and European languages. I agree. But if we stretch the analogy to try and make it work, then certainly Algol was the de facto language used to publish algorithms, and it is the syntactic basis of many widely-used modern languages. As for the "fiddly grammars", etc., Algol 68 did not have a simple grammar. Quoting Wikipedia's "Algol 68" page: > ALGOL 68 has been criticized, most prominently by some members of its design committee such as C. A. R. Hoare and Edsger Dijkstra, for abandoning the simplicity of ALGOL 60, becoming a vehicle for complex or overly general ideas, and doing little to make the compiler writer's task easier, in contrast to deliberately simple contemporaries (and competitors) such as C, S-algol and Pascal. and > ALGOL 68 allows for every natural language to define its own set of keywords Algol-68. As a result, programmers are able to write programs using keywords from their native language. Quoting Wikipedia's "For loop" page: > Algol68 has what was considered the universal loop allowing such constructs as FOR i FROM 1 BY 2 TO 3 WHILE i≠4 DO ... and (quoting now http://courses.cs.vt.edu/~cs3304/Spring04/notes/Chapter-7/tsld024.htm http://courses.cs.vt.edu/~cs3304/Spring04/notes/Chapter-7/ts... ): for index := 1 step 2 until 50, 60, 70, 80, index + 1 until 100 do
- gt_ 9y agoAll fine points. I don’t think I grasp the idea of a “good learning language”. I don’t consider myself experienced enough to argue about which languages are better than others, but I do know something like Windows command line is a bad language and I would say it is also a bad learning language for that reason but not because it is bad for learning. I would argue the best learning language can be determined based on: 1) Extensibility 2) Applicability - applicable to the student’s current motivation 3) Expressibility - expresses core programming concepts relevant to the student’s learning level 4) Community - community is actively inviting of those at the student’s learning level It’s popular to say Python is a great learning language for beginners in that it’s easy to read and hides much of the intermediate/advanced functionality when doing only beginner operations. But, in my experience, that characteristic led to a slightly steeper learning process when I got to that point. I learned to program with C# and have no complaints. If I had it all to do over again, I would have started with C, but this is only a retrospective view because my initial motivation required C#.
- zodiac 9y ago> The language semantics are trivial to pick up once you have a good foundation Eh, I disagree. It may be trivial to "roughly know" the semantics of most languages, but some languages have rigorous semantics that are complex enough as to prevent beginners (or even most programmers) from learning the full rigorous semantics; this means they're forced to rely on the "rough semantics". For example, many gotchas listed at https://stackoverflow.com/questions/530530/python-2-x-gotchas-and-landmines https://stackoverflow.com/questions/530530/python-2-x-gotcha... come from the "rough semantics" most people have in mind not being an accurate reflection of reality. (Not picking on python, I still think it's a great teaching language). In contrast I took a course designed to be a first CS course, taught in Racket, and while beginners will of course spend most of their time learning the "intuitive skill" of programming and knowing what a program means, it is nice to have something to fall back on when those skills fail.
- banachtarski 9y agoI think the reason we disagree is because we have different definitions of the term "good foundation." I will also say that compared to grasping the overall picture, dealing with "gotchas" in various languages (while annoying!) are pretty easy in practice... You encounter something unexpected, reason why it's unexpected (convincing yourself of it takes time inversely proportional to your grounding), look it up, and move on.