[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)