I'm brand new to go (started on Saturday, haven't made my mind up yet) and have come over from python. I also teach kids to code (python) so thought I'd give my two cents.
Firstly, compared to languages like C, go is easy to learn, compared to languages like JavaScript and python, it isn't. In my opinion a person's first language should be an easy one. As Egon said, the early struggles are almost entirely based on problem solving and bug fixing. If you can't focus on these because the languages complexities gets in the way, the learner gets put off. In my experience kids can learn control flow in about 30 minutes. They can learn some paradigms like OO and why it's useful on maybe an hour. But they take much much longer to be able to come up with a solution to a problem by themselves. The easier it is to put the solution down in code the better. So while I think go is a relatively easy language to learn and has some place in teaching, I'm not convinced it's the best starter language - which should be as easy as possible. There are a few added complexities and a bit more inertia which more seasoned programmers won't think about (setting up specific folder structures and compilation as an example). That said I think it's a perfect second language. Personally I learn things at a high level first, and then as I dig in I find things which interest me and start slowly going more low level. Go isn't my first foray into the lower level. But I wish it was. It's easier to write and read then most. But it still teaches basic concepts like pointers, compilation and whatever else you can think of which are abstracted away in higher level languages. In short, teach something higher level first to understand basic coding concepts and to start designing solutions. Teach go next to learn more about how languages work and get closer to the hardware. As an aside: for those discussing the ability to teach a topic using your students level of understanding instead of your own more specialised perspective. The term for this is decentering. - Nick. On Wed, 20 Jul 2016, 12:07 Michael Jones, <michael.jo...@gmail.com> wrote: > My favorite introductory C/C++/Basic/Pascal books are those by Donald > Alcock—a master of progressive revelation and visual facilitation. If you > don’t know these books, you might follow the link and have a preview. > > > > > http://www.cambridge.org/us/academic/subjects/computer-science/programming-languages-and-applied-logic/illustrating-c-2nd-edition > > > > The other key thing for new students —beyond creating a visual model of > concepts—is mutable examples. The Go Playground makes this very easy. It > allows the “false” introduction of simple statements that work generally, > then later, example input that causes problems, and then based on that > motivation, code refinement to solve those problems (list size = 0, > negative surd in a cubic equation, whatever…). If you know TeX and Donald > Knuth’s TeX Book, then this is like the “Dangerous Bend” signs that he > uses. Very valuable didactic approach. > > > > *From: *<golang-nuts@googlegroups.com> on behalf of Egon < > egonel...@gmail.com> > *Date: *Wednesday, July 20, 2016 at 3:31 AM > *To: *golang-nuts <golang-nuts@googlegroups.com> > *Subject: *[go-nuts] Re: Go is for everyone > > > > > > On Wednesday, 20 July 2016 12:40:01 UTC+3, Simon Ritchie wrote: > > I taught C to second year undergraduates back in the 1990s. By this time, > they had done some COBOL (those were the days), Pascal and assembler. Two > things they had great difficulty with were pointers and multithreading. > Multithreading is not such an issue because you can avoid it while they are > learning the basics, but you couldn't avoid pointers for long. Go is, if > anything, even worse, because pretty much as soon as you introduce > functions you have to get involved in pointers, because without pointers > you can't write a function that sets data. Other languages such as Java > manage to hide pointers sufficiently well that you don't have to get to > grips with them until you have the rest of the language under your belt. > Actually, I'm guessing that there are lots of successful Java programmers > out there who have never really understood those things that Java calls > references. > > To be honest, I'm not entirely sure why pointers are such a big issue for > students who had done a bit of assembler, but trust me, for some they are. > I think one reason may be that they are one of a set of related concepts, > and you have to understand them all before any one of them makes sense. > > > > I've explained pointers in terms of arrays... > > > > var memory [1<<10]byte > > // defining a pointer > > p := 10 > > // assigning to a pointer > memory[p] = 123 // *p := 123 > > // dereference > > fmt.Println(memory[p]) // *p > > // indexing array starting at p > > fmt.Println(memory[p+8]) > > // double dereference > > fmt.Println(memory[memory[p]]) // **p > > > > Then show how you can store bigger values, structs or strings... etc. > > > > Multithreading is a different matter. I just found that many people have > great difficulty visualising several threads working at the same time. > > > > For multithreading "The Little Book of Semaphores" by A. Downey ( > http://greenteapress.com/wp/semaphores/), it has many exercises about > "how things can go wrong", which is one of the fundamentals of concurrency. > > > > > Apart from those specific issues, people new to programming have great > difficulty with the idea of (a) variables and (b) expressions. These very > fundamental and crucial ideas are actually quite hard to grasp. To a > newcomer, it all just looks very arbitrary. I have a variable called > "total", but it could just as easily be called "wibble". Why is it called > "total" then? What are the rules? This variable contains a string. > What's a string? Oh, it's a bit of text. Why would I want to store a bit > of text? Because the instructor understands these concepts very well, they > often don't appreciate how difficult some people find them at first, and > they take them at too fast a pace. > > Changing tack completely, I've also encountered a different problem. Most > people are only interested in computers when they do useful things - useful > to them. So, the instructor shows them a program that takes two numbers, > adds them together and displays the result. They can do that themselves > with a calculator. Take a list ten numbers that are out of order and sort > them. Why not just write the list in the correct order in the first > place? What's the point of all this? Many people are just not willing to > go through many hours of artificial examples on the assumption that they > might one day learn something useful. You have to convince them before you > begin that they are going to learn something useful (to them) and keep them > on board throughout. > > If you think about it, *why not just write the list in the correct order > in the first place?* is actually a fundamentally important question, > involving stuff that we are good at, and computers are bad at. We can just > look at a small list of numbers and write it down in sorted order. Why > can't the computer do that? The answer to you is probably so obvious that > it shouldn't need explaining, something on the lines of "it's not the same > problem when you have a million numbers", but then why would I be > interested in sorting a million numbers into order? > > Sorry if this is a bit vague. I've been thinking about this stuff ever > since I gave up teaching many years ago. I know what some of the problems > are, but I'm really not certain of the answers. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.