7 ms·
Experiences Using Go as a Teaching Language with Young Programmers
- zphds 11y agoThose kids must be really smart. I still have co-workers who can't get the $GOPATH foo right. :(
- schmichael 11y agoForce them to read this: http://golang.org/doc/code.html http://golang.org/doc/code.html I know it's unfortunately long, but I have yet to find someone who has read it and is still confused about $GOPATH.
- toufka 11y agoPart of it is just understanding how to set up the $GOPATH. Understanding its structure is one thing, but actually getting the 'go' to read the right directory on OSX vs Ubuntu vs other systems depending on your shell (and version of go?) and over old installations, can be a very confusing way to start using the language.
- soheilhy 11y agoThat's right. GOPATH can be problematic, but that's easy to fix with a script: https://github.com/soheilhy/goget https://github.com/soheilhy/goget
- keypusher 11y agoI'm a bit skeptical, as the author seems to be comparing to languages which are rarely used for teaching children. Comparing "go run" to makefiles, for instance, indicates that Go might be easier to teach that C, which isn't saying much. If the author was previously using a different language and it took the children 30 minutes to complete a simple task which now takes only 20 minutes with Go, that sounds great but perhaps there are other languages even better suited to teaching where they would pick it up in 5 minutes. Specifically, most of the points raised in favor of Go could be applied to Python, which seems to be the most common teaching language right now. I would be interested to know if there are reasons Go is a better teaching language than Python.
- _yosefk 11y agoThe biggest one of his points which doesn't apply to Python is static typing. The trouble is that the drawbacks and the benefits of both static and dynamic typing are almost invisible in small programs. So you might say types help kids develop their reasoning or that the lack of static types helps them get up to speed more quickly and it would sound plausible in both cases... The fact is that for toy programs it hardly matters.
- wiremine 11y ago> I would be interested to know if there are reasons Go is a better teaching language than Python. I don't know if it is _better_, but Go has a number of programming concepts you don't see in Python: - Static typing - dealing with pointers and dereferencing - building binaries vs. using an interpreter - Non-class based OOP I can see these being helpful to get under your belt sooner rather than later. Go wouldn't be my first choice, but I found the write-up helpful. I'm predisposed to think interpreted languages like Python are "easier" for kids. Good to see something that shakes that up a bit. EDIT: bullet points layout
- icebraining 11y agoYou can add the first three using Cython, which is a small step from Python. As for struct-based OOP, why would you want to teach that?
- aaron-lebo 11y agoPython is a much bigger language than Go. Metaclasses, decorators, list comprehensions. I could list feature after feature. Granted, some of these are rather advanced features, but their very existence only adds complexity. Go, because it is so (even overly) simple works really well in this domain. It's also nice because with type deduction it feels dynamic, but it still has some very C-ish features. You could easily go "up" to Python or "down" to C from Go. Even after years of Python programming, there's a lot of concepts from low-level languages which you never touch.
- pcwalton 11y ago
- krat0sprakhar 11y agoI think the usefulness of `go fmt` cannot be discredited here. I had a brief stint of teaching a few school children programming in Python and initially the most confusing thing for them was the indentation. While it was easy for me to see that this statement would not be executed since its outside the for-loop, they had trouble grasping why that statement was running just once.
- _yosefk 11y agoHow much time it took them to get it vs the time it takes to learn the somewhat more elaborate incantations you need to spell a loop in Go? I recall that dealing with parse errors, the easiest error for experienced programmers, was REALLY depressing at 17.
- nulltype 11y agoCan you give an example of those elaborate incantations? Parse errors are not the greatest, but they removed the most common error I have seen among people learning to program which is forgetting the semicolons.
- _yosefk 11y agoWell, compare Python's: for i in range(10): ...with Go's: for i:=0; i<10; i++ { } An experienced programmer might have an opinion about these syntaxes but he can certainly handle both effortlessly. However, when I first saw for loops using syntax similar to Go's, I could not, for a long while, remember exactly what I have to type, and of course the compiler errors along the lines of "expecting some gibberish after some other gibberish" didn't help at all - and not knowing that they aren't supposed to help hurt, because I stared at them, trying to decipher them, instead of guessing that I got it wrong and looking up the loop syntax. Now if you think about it, Python's incantation is very close to English ("for i in range 10" instead of "for every in the range of numbers up to 10" - you omit some words and you add 3 punctuation characters but it's close.) Go's incantation, if you try to read it, makes little sense ("for i assigned to equal 0; i less than 10; i plus plus [or i equals i plus 1]".) You mention i 3 times which is weird, because beginners actually intuitively expect DRY code (hence Java's AssWiper bill = new AssWiper [and I'm quoting from a toilet door in a CS lab] felt very weird to me for a long while.) You have those semicolons in the middle, and you're supposed to remember the order of these 3 parts - init, compare, increment. I mean, it wasn't a huge trauma but I felt dumb for quite some hours until I got it. (Note that i:=0 and then a while loop incrementing i are not nearly as arbitrary because you compose it out of sensible primitives. A Cish for loop on the other hand feels like one big blob of syntax which came out of nowhere. Of course once you memorize it, it's vastly more readable than a while loop because you pattern-match it and you translate it to "for every i from 0 to 10", and you assume that nobody fiddles with i midway through the loop; whereas if you see a while loop, you need to scan all of it because you will suspect that i is being fiddled with in some non-trivial way.) Also - omitting some parts of the for loop results in syntax which is fairly crazy actually, if you read it out loud. Like for ; i<10; i++ - what's a semicolon doing after the word for?!
- haosdent 11y agoI have to said: Python should be better as the first language.
- _ak 11y agoWhy?
- jimmaswell 11y agoI'd say it's a great learning introduction because it gets directly to the point of executing one line after another with uncluttered syntax and no boilerplate.
- CmonDev 11y agoI am glad I graduated before that. It is easier to learn a dynamic scripting language after you have learned a static one. Many types => single type. https://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/ https://existentialtype.wordpress.com/2011/03/19/dynamic-lan...
- _ak 11y agoHonestly, I'm not surprised. As Robert Griesemer, one of the core Go team members, confirmed the other week in his GopherCon talk "The Evolution of Go", Go inherited a lot of concepts from Oberon. Oberon is from the Wirth family of languages, which are generally regarded as good teaching languages. He aptly described Go as using C tokens, but having an Oberon structure.
- pekk 11y agoWhat would really be useful would be a genuinely critical study that allows a "post mortem" of what Go could have done better to support new programmers. If all we ever do is toot our own horns, nothing really gets better.
- mratzloff 11y agoI imagine it's useful on its own for educators.
- coolsunglasses 11y agoPotentially of interest is my coauthor's article, "Teaching Haskell to a 10 year old" https://superginbaby.wordpress.com/2015/04/08/teaching-haskell-to-a-10-year-old-day-1/ https://superginbaby.wordpress.com/2015/04/08/teaching-haske...
- schmichael 11y agoGlad to hear $GOPATH wasn't an issue for students. I think it's more an issue for experienced programmers who already have a personal preference for directory layout, project structure, and where things get installed on their system. I've actually gone the other way: storing all my source in $GOPATH-esque trees as it turns out to work pretty well!
- zubairsaif007 11y agohttp://googler700.blogspot.com/ http://googler700.blogspot.com/