[HN Gopher] Teaching D from Scratch: Is it a viable first langua...
       ___________________________________________________________________
        
       Teaching D from Scratch: Is it a viable first language? (2021)
        
       Author : AlexeyBrin
       Score  : 66 points
       Date   : 2024-01-20 13:08 UTC (1 days ago)
        
 (HTM) web link (dlang.org)
 (TXT) w3m dump (dlang.org)
        
       | zem wrote:
       | this bit from the article surprised me
       | 
       | 8<-------------
       | 
       | I spend an inordinate amount of time helping the kids set up
       | their build environments, and having this built-in to the IDE or
       | dub would be immensely helpful for using D for learning.
       | 
       | 8<-------------
       | 
       | it does seem to have worked out in the end, but I would
       | personally not have considered anything where building was not
       | one click of a button in an ide; build toolchains add a
       | tremendous amount of complexity to learning a new language, and
       | especially if this is also an intro to programming I would
       | consider it a fatal lack.
        
         | jpgvm wrote:
         | I ended up teaching a friend to program using Kotlin. The
         | downside was just telling them to just accept what the IDE
         | wizard lays down as gospel first but the advantage was that
         | running code from main() or tests was always a fully IDE
         | integrated experience. Explaining the build system boilerplate
         | became natural when it came time to start adding dependencies
         | to the project.
         | 
         | Don't underestimate how important that integrated experience
         | is. Within their first month or so they were already using a
         | real graphical debugger which is something I didn't pick up
         | until much later because of where I started.
        
           | p0nce wrote:
           | As a D cultist, I don't see why D would be any more viable
           | rather than PureBASIC, microStudio, or Basic4GL if we're
           | talking about kids that want an immediate result in an
           | integrated IDE.
        
       | Simon_ORourke wrote:
       | Time to apply Betteridge's Law of Headlines here, namely, that
       | any headline which ends in a question mark can be answered by the
       | word 'no.'
        
         | kitd wrote:
         | That certainly works for clickbaity headlines. This one seems
         | like a genuine question.
        
         | asimpletune wrote:
         | Imagine a headline "Is Betteridge's Law of Headlines True?"
        
           | eviks wrote:
           | Would still hold in this case!
        
           | eadler wrote:
           | Related:
           | 
           | 1. James M. Cook & Dawn Plourde. (2016). Do scholars follow
           | Betteridge's Law? The use of questions in journal article
           | titles. Scientometrics, 108(3), 1119-1128.
           | https://doi.org/10.1007/s11192-016-2030-2
           | 
           | 2. Boris Peon. (1988, August 4). IS HINCHLIFFE'S RULE TRUE?*.
           | Annals of Gnosis.
           | 
           | 3. Stuart M Shieber. (2015, June). Is This Article Consistent
           | with Hinchliffe's Rule? Annals of Improbable Research, 21(3),
           | 18-19. https://improbable.com/airchives/paperair/volume21/v21
           | i3/Con...
        
       | eviks wrote:
       | > I am confident that D can be a viable first language
       | 
       | Not sure what this confidence is based on, the basics are broken
       | (toolchain, basic syntax errors you shouldn't even need a compile
       | step to figure out, the squiggly error underline should be right
       | there in your editor!), and what does sticking to "Vanilla D"
       | offer as a benefit vs. some other language?
        
         | j16sdiz wrote:
         | What stop schools giving out pre-installed virtual machine
         | images?
         | 
         | Most people don't setup their own environment for their first
         | language....
        
           | hutzlibu wrote:
           | "Most people don't setup their own environment for their
           | first language...."
           | 
           | Since most people probably try out js as their first language
           | (often without knowing what js is) - setting upt the
           | environment and IDE is as simple as open dev tools ..
        
           | NavinF wrote:
           | Sure they do. You can tell anyone to "just install IntelliJ"
           | or "just install Xcode" and they'll have a working
           | environment with zero effort. All the popular languages don't
           | require handholding
        
             | Mathnerd314 wrote:
             | I would attribute that to the language/company putting in
             | the effort for an easy install. I am sure it is easy to
             | install Swift on Mac but I was trying to guide my friend
             | through it on Windows and he gave up because it was too
             | complex and the installer didn't work immediately (some
             | library path error).
        
               | NavinF wrote:
               | SwiftUI and all the other Apple frameworks that allow you
               | to do more than read and write text to a console don't
               | work on Windows. Beginners should just use an IDE. If one
               | isn't available for their language/platform, that's a
               | sign of things to come
        
         | lmpdev wrote:
         | I'm not sure that the choice of the language matters a great
         | deal for an intro course to be honest
         | 
         | There's no way students can wrap their heads around advanced
         | topics to the point where language selection matters _that_
         | much
         | 
         | Of course toy languages like Brainfuck, low level stuff like
         | pure assembly or archaic languages like COBOL would be
         | detrimental to learning. But any mainstream language from the
         | last forty years or so will have major crossovers with most
         | others
         | 
         | I fail to see how D is that extreme compared to most other
         | languages or any reason it should be pedagogically dismissed as
         | a first language
        
           | teleforce wrote:
           | It really does matter at least according to this paper [1].
           | However I think the paper missed one major sin of not having
           | a GC for introductory programming language. D actually avoids
           | most of these sins and it is GC by default.
           | 
           | [1] Seven Deadly Sins of Introductory Programming Language
           | Design:
           | 
           | https://users.monash.edu/~damian/papers/PDF/SevenDeadlySins..
           | ..
        
             | _a_a_a_ wrote:
             | Not sure I agree. GC is essential in industry (well, I'd
             | argue that! Ignoring embedded anyway) but I think the
             | programmer has to understand the real cost, and that means
             | allocating and de-allocating, and if that is hidden by the
             | GC then they're not learning that.
        
               | TwentyPosts wrote:
               | This is something much, much more easily learned with
               | your second, or maybe even third programming language
               | rather than with your first.
        
               | brabel wrote:
               | True, but you don't need to get them to write C (or
               | similar) in order for them to get to that point later on,
               | once they can write basic stuff. In that regard, D is
               | excellent because it does allow you to write code without
               | the GC once you've mastered the basics, so it may be a
               | (very) advanced part of a course to optimize some
               | algorithm by manually managing memory, and seeing how
               | much difference it makes.
        
           | eviks wrote:
           | Well, syntax and intuitiveness of composition of programming
           | basics matters, and those are different
           | 
           | But D's "extreme" is in its unpopularity, so student
           | exploration is very limited
        
             | kitd wrote:
             | In what way are they different?
             | 
             | "Different" for me is Lisp or Haskell. D is a crossover
             | between C++ and Java in my (albeit limited) experience.
        
           | bitcurious wrote:
           | > I'm not sure that the choice of the language matters a
           | great deal for an intro course to be honest
           | 
           | Huge disagreement from me! The choice might not matter for
           | the already motivated students who were going to learn to
           | code no matter the language, but for folks on the fringe of
           | CS the language matters immensely. There are arguments to be
           | made about frustration, developer experience, grokability,
           | but imo the most important is distance between code and gui.
           | It's very motivating to build something you can interact
           | with. It's very demotivating to work on contextually-
           | meaningless algorithm problems.
        
             | mylons wrote:
             | agreed -- i really like python a lot for a first (and long
             | term lang). it reads like english compared to C or Java and
             | you could toss up a website or something like that very
             | quickly with it.
        
       | cb321 wrote:
       | BASIC and Pascal used to be "teaching languages", though Python &
       | JS seem to have displaced them and teaching sure can be hard.
       | This tries to use Nim:
       | https://www.nimprogrammingbook.com/book/nimprogramming_adoc-...
        
       | mogoh wrote:
       | "The D Blog" came to the conclusion, that D is a good language
       | for kids.
        
         | sitzkrieg wrote:
         | no one could have saw this coming! they cant keep getting away
         | with it
        
       | 8A51C wrote:
       | I think Scratch makes a great introduction to programming because
       | of the playfull assets which are bundled with it, sprites,
       | sounds, backgrounds etc. This significantly lowers the bar to
       | making something productive and visually stimulating, something
       | which I believe is necessary to engage when competing with modern
       | games, phones etc.
       | 
       | There is no text based language (please correct me if I have
       | missed one) that makes any attempt to bridge this gap by
       | providing a library of assets on tap. Yes there are places you
       | can find sprites etc, but they are not just there, included. I
       | feel this has been the biggest stumbling block for my daughter
       | moving on from Scratch. To produce something in a text based
       | language that even comes close is so much more work, anything
       | that is achievable just isn't stimulating enough.
       | 
       | We have looked at Roblox, I agree with the article this has
       | potential, making a moving platform in an obby for example, but
       | this hasn't stuck with her. We have had more traction with custom
       | ents in Minecraft, creating in Blockbench then messing with the
       | configs to alter the behaviour, but this is just Mineraft
       | specific.
       | 
       | I should hope to do more with js/ts scripting in Minecraft, but
       | using bedrock this is in it's infancy so there isn't much out
       | there for inspiration, hacking around with or tutorials for her
       | to look at herself. In this regard, D is no better a first
       | language than any other.
        
         | growingkittens wrote:
         | We need another BASIC.
         | 
         | How far into Minecraft modding have you gotten?
        
           | jacquesm wrote:
           | JS and Python have taken up that mantle.
        
         | speeder wrote:
         | The "Visual" series of IDEs used to exist. Also the "Builder"
         | series from Borland.
         | 
         | It was the reason why Delphi (a kind of Visual Pascal Builder?)
         | Was so stupidly popular. Same thing for Visual Basic.
         | 
         | I used to look down on then but now I realize they being gone
         | is a bad thing.
        
           | LeFantome wrote:
           | Delphi still exists. So does Lazarus ( open source version ).
           | 
           | For BASIC, there is GAMBAS.
           | 
           | There is also OpenXava for Java.
           | 
           | The lack of popularity is not just because they do not exist.
        
         | giancarlostoro wrote:
         | One of my favorite professors was using Processing, which was
         | confusing for some, but it really helped that the students got
         | to visually see results.
         | 
         | I have to wonder if we allowed people to learn programming
         | significantly better when RAD IDE languages were more common
         | like VB6 and Delphi. Something about visually seeing what
         | you're building vs just seeing text on a screen. I guess it
         | would only affect SOME people learning to code this way,
         | because we have plenty of brilliant minds who had even less
         | than a terminal at one point or another.
        
           | jrochkind1 wrote:
           | > Something about visually seeing what you're building vs
           | just seeing text on a screen.
           | 
           | When i learned programming as a child, the programs i wrote
           | just produced text on a screen -- but text on a screen was an
           | actually encountered everyday UX on the Apple IIe or
           | Commodore 64 too.
           | 
           | I think it does make a difference how quickly you see
           | yourself as making something that could actually be useful,
           | and it's maybe harder to do that in 2023.
        
             | giancarlostoro wrote:
             | I think everyone learns different, so maybe the biggest key
             | is seeing something familiar to what you're used to seeing
             | right before your eyes?
        
         | growingkittens wrote:
         | I found this while looking for the name of the (multiple)
         | Minecraft mods that involve programming: https://mcreator.net/
         | 
         | It seems to be a Minecraft mod maker that simplifies the
         | process of building a mod.
         | 
         | There's a page specifically about education:
         | https://mcreator.net/education
        
       | junon wrote:
       | I don't know, man. I am in a few casual programmer circles and I
       | know two people who have stuck with D like their life depends on
       | it, and they are constantly facing issues with weird language
       | quirks making it impossible to write good, safe code. Through
       | their fandom, I've made the personal decision to just stay away
       | from it.
        
       | jbandela1 wrote:
       | If you want a compiled language with strong types, Swift actually
       | is a very nice language for learning. It has very nice
       | ergonomics, and the Swift Playgrounds iPad apps are really nice
       | and engaging.
        
         | nmz wrote:
         | The last thing you want is types when you're a beginner.
         | TCL/Shellscript, for all its defects, just has strings, which
         | means you have expr num OPERATOR num. you also just have
         | commands. I've seen beginners try to set a variable from
         | whatever is printed, so the concept of a return type is a
         | tricky one. funny, now that I think about it, php is actually a
         | great introductory language because it just prints everything
         | to stdout.
        
       | graemep wrote:
       | Pretty much anything can be a viable first language. My first
       | language was 1980s BASIC, starting with very limited version
       | (ZX80 and then Grundy Newbrain). I do not think that was a good
       | first language though. It did not teach good habits, and it
       | lacked a lot of concepts I had to start learning later.
        
       | rollcat wrote:
       | My first program was in BASIC. I was 6, and had other things to
       | do before I got back on that journey, but the next one was in
       | PHP.
       | 
       | By conventional wisdom and common proverbs, my mind should've
       | been mutilated beyond any hope of recovery. (And maybe it is, who
       | knows.) But this conventional wisdom tends to ignore the barrier
       | to entry.
       | 
       | The C64 not only booted straight into BASIC, it also came with a
       | book, and that first program that I copied from the book was not
       | some silly "hello world" or a fizzbuzz, it was a piano. It
       | demonstrated to me, that a computer is a means of expressing
       | yourself creatively, and it did so in a form that was digestible
       | to a 6yro.
       | 
       | The best first language is the one that comes pre-installed on
       | your computer, with enough example code to get you hooked. (Which
       | is why the iPad / Swift Playgrounds fills me with both hope and
       | dread. But, considering where I came from, mostly hope.)
        
       | asylteltine wrote:
       | But why? Why use esoteric languages no one knows?? Why teach
       | someone a language they can't use at work? Just teach Go it's so
       | simple and teaches you actually good practices unlike Python.
       | Senior devs hate it and junior devs love it for the same reason.
        
         | falserum wrote:
         | I think "esoteric" is meant for brainfuck, maldbrot and
         | similar. D, nim and co, are quite traditional in language
         | design languages, just not popular (yet).
        
           | yau8edq12i wrote:
           | > esoteric
           | 
           | > 1. understood by or meant for only the select few who have
           | special knowledge or interest; recondite
           | 
           | > 2. belonging to the select few
           | 
           | Just because some people give special meaning to the phrase
           | "esoteric programming language," doesn't mean that people who
           | don't know about it should be chastised for not knowing
           | the... esoteric meaning of the phrase. This reeks of "my club
           | uses this adjective only for this occasion, you're not using
           | it right, you don't belong to the club, go away".
        
         | munchler wrote:
         | > Why teach someone a language they can't use at work?
         | 
         | Not everything is about work, especially for children.
        
           | asylteltine wrote:
           | If you don't teach children to succeed at work and get ahead
           | you are knowingly putting them at a disadvantage. If I knew
           | programming when I was much much younger I would be in an
           | even better position than I am now, and I'm in a great
           | position.
        
             | mftrhu wrote:
             | You _can 't_ teach _children_ how to succeed at work by
             | having them learn whatever language is trending in the
             | industry, if only because things will have changed and they
             | will be remembering very little of it by the time they will
             | be _adult_ and joining the workforce.
             | 
             | You _can_ teach children _programming_ by using _any_
             | language. You can do so even more effectively by teaching
             | them _many_ languages, to make them learn _how to program_
             | rather than _how to write code in language X_.
        
             | nmz wrote:
             | Then they probably should have taught them rust.
        
             | munchler wrote:
             | Do you have any actual children? This is lousy advice. A
             | parent's job is to love their children and provide
             | opportunities for growth, not to teach them to "succeed at
             | work". I can't think of anything more dreary than that, in
             | fact.
             | 
             | (Source: Raised two children to adulthood.)
        
       | hasperdi wrote:
       | This is roughly the same as teaching Esperanto to child as his /
       | her first language.
        
       | omoikane wrote:
       | > After half a year we moved on to our second language: Lua,
       | specifically in the video game system Roblox. I almost wish we
       | had skipped this one because it was a bit too advanced for these
       | students
       | 
       | I wonder if they meant Lua or its integration with Roblox was too
       | advanced. I would think Lua is a simpler and easier to learn
       | language relative to Javascript and D.
        
         | giraffe_lady wrote:
         | Lua's simplicity is a liability for someone new to programming.
         | The tiny standard library means you need to write by hand a lot
         | of things you could just _use_ in another language. Arguably
         | good for learning fundamentals, but in practice just a good way
         | to kill momentum and smother that learning spark that is the
         | best resource of a novice.
         | 
         | Similarly the best way for a learner to stay motivated is to
         | make something they are personally invested in, which usually
         | involves integrating with _something_. With lua you need to get
         | your hands into the toolchain and distribution stuff very early
         | to do that, which has nothing to do with programming per se and
         | is frustrating and disorienting for a newcomer.
         | 
         | I've taught people to code from scratch and lua is a worse-
         | than-average language for it. It's a small language but that
         | doesn't help a total novice very much. It's the core concepts
         | of programming that is difficult for them, not memorizing
         | language features. The only situation where I would use it is
         | if they have a specific motivating goal that uses it, usually
         | yes roblox.
        
         | jay_kyburz wrote:
         | My 10 year old loves programming and has a fair number of hours
         | in Scratch and Roblox.
         | 
         | I've noticed when messing around with Scratch, he quickly
         | progressed from leaning the language to using the language to
         | solve his own problems. He moved from following tutorials to
         | creating his own games and ideas quickly.
         | 
         | When playing with the the Roblox editor he would follow the
         | Youtube tutorials, but never made the leap to making his own
         | games. Roblox scripting is fairly wordy, you spend a far amount
         | of time binding methods to long event handlers. There is a lot
         | of text you have to type, and spell correctly, and remember. 10
         | year olds are very slow typists. I also spend a fair amount of
         | time helping him fix small syntax errors which slowly sapped
         | his enthusiasm.
         | 
         | The drag and drop, and drop downs in Scratch really helped him
         | move quickly from learning the language, to using the language
         | to make games.
        
       | AstroJetson wrote:
       | > After half a year we moved on to our second language: Lua,
       | specifically in the video game system Roblox. I almost wish we
       | had skipped this one because it was a bit too advanced for these
       | students, and I was not familiar with the language and the system
       | to begin with.
       | 
       | Teaching something, like a programming language, that you don't
       | know is really hard. But in this case there are 100's of Lua
       | tutorials around Roblox. I would think that they could have done
       | that.
       | 
       | While it's $15 per learner, an alternate could be Pico-8
       | https://www.lexaloffle.com/pico-8.php Lots of tutorials and lots
       | of demos to look at.
        
       | dang wrote:
       | Related:
       | 
       |  _Teaching D from Scratch: Is it a viable first language?_ -
       | https://news.ycombinator.com/item?id=29711800 - Dec 2021 (74
       | comments)
        
       | chkas wrote:
       | Something I've been tinkering with for a few years now - a
       | learning programming language that runs in the browser and makes
       | it easy to draw on the screen.
       | 
       | https://easylang.dev/ide/
        
       | mgaunard wrote:
       | Teaching is best done with Python, which is incidentally the
       | world's most popular programming language.
        
       | todd8 wrote:
       | I've taught hundreds of people programming. For one year, at my
       | first real job, I was tasked with teaching the programmers within
       | a big company Pascal. All of them were already professional
       | programmers using Fortran, COBOL, or assembly language. The
       | company had a commitment to modernize their software development
       | practices and one facet of this was to introduce a more modern
       | language--Pascal at that time (circa 1976).
       | 
       | I enjoyed that year and, for the most part, my "students" were
       | easy to teach, and Pascal held up well. They were all programmers
       | already, so I didn't have to go slow through the basics and
       | introducing ideas like recursion (absent in Fortran, COBOL, and
       | assembly language of the period) kept the classes new and
       | interesting to the students.
       | 
       | Unfortunately, standard Pascal isn't really a good choice for a
       | first programming language today, even though modern Pascals have
       | removed many of early Pascal's limitations (packages, batteries
       | included libraries, etc.)
       | 
       | So, how can we decide if a language is a viable first language?
       | Employing the wisdom of crowds, here are the top 30 languages in
       | the 2023 IEEE Spectrum rankings:
       | 
       | 1-10: Python, Java, C++, C, Javascript, C#, SQL, Go, TypeScript,
       | HTML.
       | 
       | 11-20: R, Shell, PHP, Ruby, SAS, Swift, Dart, Rust, Kotlin,
       | Matlab.
       | 
       | 21-30: Scala, Assembly, Perl, Visual Basic, Objective-C, Lua,
       | Fortran, Verilog, Groovy, Julia.
       | 
       | I contend that we should limit our choice of first-languages to
       | some language in the top 30. This rules out many languages that I
       | consider important, but we should stick with a language that is
       | likely to benefit the student more than others as a first-
       | language. That means not teaching Lisp or Racket or Ada or Ocaml
       | or Prolog or even D for that matter as a first language.
       | 
       | To narrow our top 30 down to a handful of alternatives, I'm going
       | to use my own subjective difficulty rating and remove C++ and
       | Rust and Scala from the list because they will be too hard for
       | beginners.
       | 
       | Furthermore, let's remove languages that aren't general purpose;
       | this knocks out SQL, HTML, R, Shell, PHP, SAS, Matlab, Assembly,
       | Visual Basic, and Verilog.
       | 
       | Some languages require more complex build or execution
       | environments; I would remove Java, Dart, Kotlin, and Groovy from
       | our list for this reason.
       | 
       | Finally, there are some languages that are not as easy to use
       | outside of specific hardware or operating systems; I consider
       | these languages C#, Swift and Objective-C to be ruled out.
       | 
       | For good measure, I'm removing Perl from the list (a bit too
       | irregular) and Fortran (not widely used outside of some important
       | areas).
       | 
       | Our condensed list now look like this:
       | 
       | Possible first languages: Python, JavaScript, Go, TypeScript,
       | Ruby, and Julia.
       | 
       | To narrow it down even a bit further we can observe that one
       | should learn JavaScript before learning Typescript. (Is this
       | opinion shared by HN?)
       | 
       | Ruby and Python seem like close cousins with Ruby being a bit
       | prettier and Python being much much more popular.
       | 
       | Julia is a bit specialized and a bit harder than the others so
       | now we are left with just three: Python, JavaScript, and Go.
        
         | bastijn wrote:
         | On point but C# is now widely available on any OS under .NET
         | (core) iso .NET Framework. It should be included in the
         | shortlist in my opinion.
        
           | jacquesm wrote:
           | It's available but not in common use, and where it is used it
           | is used mostly as a portability option (though it is very
           | well possible that is no longer the dominant use, I just
           | haven't seen it used any other way outside of the Microsoft
           | eco-system).
        
         | AstroJetson wrote:
         | I missed why you tossed Lua from your list.
         | 
         | I can see why people think the tool chain may be hard for
         | adults, but if the focus is on children learners, you can get
         | Lua with the batteries included.
        
         | jacquesm wrote:
         | I think you tossed VB for the wrong reason. It's definitely a
         | general purpose language but it's mostly limited to one
         | platform so that's handled a few lines lower and it would still
         | have led it to be tossed out. I agree with JS over TS for first
         | learning because of the complete lack of a toolchain but later
         | on you probably want to move to TS. Python agreed on as well,
         | Go requires a lot of other knowledge and is a far more advanced
         | eco system already so I'd have ruled out that one as well.
        
         | samatman wrote:
         | I would say of your four contenders, you eliminated Julia too
         | quickly, it's perfect.
         | 
         | For one reason: it's a dynamic language with types. It's good
         | to have types in a first language, they're too important to
         | neglect. But with Julia, you just introduce them later.
         | 
         | Also, 1 based indexing is easier on anyone who hasn't already
         | gotten used to 0 based indexing, and it's the only language in
         | your last paragraph where zero isn't false.
         | 
         | But it depends more on why they want to learn than anything
         | else. If they want to make web apps, for some reason, obviously
         | JavaScript, and if they like games, it should be Lua. Data and
         | numerics stuff, AI? Julia obviously ;)
        
         | mike_hock wrote:
         | There are various reasons to rule out JS. It's a scripting
         | language for browser engines, it's about as general-purpose as
         | GLSL or ActionScript. Node grabbed it and forced it into a
         | general-purpose suit it wasn't made for, but that's not a good
         | reason to learn it as a first language. It's also simply a
         | poorly designed language.
         | 
         | On the other hand, the reason given for excluding Java is
         | seriously reaching. The JVM isn't "complex" from the student's
         | point of view, and hello world (and other exercises) can be
         | compiled with a simple javac invocation.
        
       | jacquesm wrote:
       | No.
       | 
       | Sorry but it just isn't. Nor are a whole pile of other
       | interesting and useful programming languages. You need something
       | that offers instant gratification, preferably an interpreted
       | language or a language organized around an interactive prompt.
       | 
       | If I had to teach someone programming today I'd pick JS because
       | it is available everywhere and it doesn't need any tooling at
       | all. It's far from a perfect language but availability and ease
       | of use trump language elegance and correctness. Even if that
       | might mean you have to learn new concepts later and/or unlearn
       | bad habits.
        
       ___________________________________________________________________
       (page generated 2024-01-21 23:01 UTC)