On Thu, Mar 26, 2020 at 3:29 PM David Riley <fraveyd...@gmail.com> wrote: [...]
> But: > > - You still need to import something just to print a line, and it is > confusingly (to the novice) named "fmt" > - You still need to declare a function called main(), and most brand-new > programmers don't understand functions yet, so this becomes a "wave the > dead chicken at it just right" thing > - Semicolons are still there under the surface, but they're inserted by > the lexer, and when they get inserted can be really mysterious and trip a > lot of people up > > In contrast, in Python (3, in this case), it is: > > print("Hello, world!") > to be fair, in Go, "hello world" can be reduced to: package main func main() { println("hello world") } that's usually how I start my Go-based lecture. (and then, 2-3 lectures/hands-on sessions after that, I do introduce 'import "foo"') -s > There are no functions to create (you call one, which is universal in all > these examples, but a lot easier to explain), execution just proceeds from > top to bottom, variables are created much more easily (explaining the > difference between = and := to someone who has never programmed before is > quite a task), loops are far less complex, etc. > > I'm not claiming Python is a better language, or less confusing overall. > Once it gets more complex, Python starts to get in the way a bit more (I've > never particularly liked the indent-based block structure, though actually > students got a lot less tripped up by that than by brace matching, so > there's that). But I steadfastly maintain that Go is not an ideal language > to learn as a *first* programming language, simply because the amount of > arcana you have to get right just to get simple things off the ground is > far more than other languages like Python. And I have a substantial amount > of experience with students which indicates where the trouble spots would > be that cause people to give up and decide programming isn't for them > instead of realizing that they're not starting at the right level. > > This isn't a call for Go to change, because I'm totally fine with it being > a second language after the basics of programming have been mastered. You > don't start driving in a Porsche unless you want a very expensive and > hazardous learning experience. Similarly, I think most of us could agree > that teaching Java as a first programming language should be a felony, > because it takes all these early-learning challenges and amplifies them > (not only does main() have to be a function, it has to be in a class > (what's a class?) and it has to specifically be "public static int > main(String[] args)"). > > My only contention, and my intent in answering the original question, is > that there is a great first-party Tour of Go that is going to be great if > you already know how to program, but somewhat opaque if you don't already > understand the basic concepts. Python's own first-party tutorial is the > same, actually; it's good, but it's set up as an intro to Python assuming > you already know the basics and I wouldn't recommend it to a new > programmer. Since the OP didn't specify what level they were looking for, > I provided both sides of my opinion. > > > - Dave > > > > On Mar 26, 2020, at 4:51 AM, Amnon Baron Cohen <amno...@gmail.com> > wrote: > > > > Go is not C. C programmers have to master explicit memory management, > which is a challenge to new and experience programmers alike. > > C is a beautiful language. But very low level. > > > > Having spent several years programming in Python, I would say that it is > much more complicated than Go. > > It has a large and growing number of expressive features which add to > the cognitive load of those attempting > > to get up to speed on the language. When you learn Go, you don't need to > understand dict comprehensions, > > decorators, metaclasses, asyncio etc. Compare the breathtaking > simplicity of launching a Go routine > > with the convoluted mess of python threading. > > > > The lack of strong static typing and a separate compilation phase means > that errors which in Go would > > cause a compilation error result in run-time exceptions, when a > particular code path gets executed. > > > > Python also has the "feature" that changes in invisible whitespace > characters change the programme semantics. > > I never really understood the rationale for the feature. > > > > The Go 1 compatibility promise is also helpful. This means that course > materials or online code examples written > > 8 years ago will still work today. The python community broke most > existing code when they moved from Python 2 to Python 3. > > (A decade on this transition is still ongoing). > > > > On Wednesday, 25 March 2020 23:04:58 UTC, David Riley wrote: > > It’s just my opinion, and I’m willing to be wrong. :-) > > > > But having TAed a university introductory computer science course that > was first in C and then in Python (and having had several students who > failed when it was in C retake in Python and pass with flying colors), I > will say that a lot of the elements that tripped beginners up in C which > were absent in Python are present in Go. > > > > Most of those (e.g. separate compilation, static typing, a few other > bits of arcana) are features that make Go a much more effective systems > language than Python, but I do feel like it’s probably best to “take the > bumpers off” AFTER the student knows about loops, variables, functions, > etc. > > > > Again, it’s only my point of view, and I do have some biases, but they > do have some basis. > > > > > > - Dave > > > > > On Mar 25, 2020, at 17:08, Dan Kortschak <d...@kortschak.io> wrote: > > > > > > I don't agree that Go is intrinsically harder than python as a > beginner > > > programming language. There are things that are subtle, but these can > > > largely be avoided in the beginner setting. > > > > > > Note that there have been discussions here about using Go as a > language > > > for teaching beginners, notably this one > > > https://groups.google.com/d/topic/golang-nuts/FIRSDBehb3g/discussion > > > > > > Dan > > > > > >> On Wed, 2020-03-25 at 13:34 -0400, David Riley wrote: > > >> If you are already a programmer in another language, the Tour of Go > > >> (tour.golang.org) is absolutely the best. > > >> > > >> If you are not already a programmer in another language, I personally > > >> don't recommend Go as a first language; it's an excellent language, > > >> but I feel that people will do better with it once they already grasp > > >> the fundamentals of programming and are ready for something with > > >> slightly more arcana. Python makes a pretty good first language. > > >> > > >> > > >> - Dave > > >> > > >> > > >>> On Mar 25, 2020, at 6:07 AM, Renato Marcandier < > > >>> renato.m...@gmail.com> wrote: > > >>> > > >>> Hello guys, > > >>> > > >>> What's the best course to start with Go? > > >>> > > >>> > > >>> > > >>> Regards > > >>> RG > > >>> > > >>> -- > > >>> 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 golan...@googlegroups.com. > > >>> To view this discussion on the web visit > > >>> > https://groups.google.com/d/msgid/golang-nuts/b2aa0e9a-921f-49de-a0be-729a6ca35f5f%40googlegroups.com > > >>> . > > >> > > >> -- > > >> 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 golan...@googlegroups.com. > > >> To view this discussion on the web visit > > >> > https://groups.google.com/d/msgid/golang-nuts/18B2AF64-4888-4730-B282-FCB4C00AB697%40gmail.com > > >> . > > > > > > > > > > -- > > 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. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/b43ecb5a-c043-44d4-92d6-f8c046dda7ff%40googlegroups.com > . > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/21528ED2-C49B-4785-AD12-ED28B603D44B%40gmail.com > . > -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAAV3P_CKuTvXsXivCw-onrx9yM4broTZkb55CDLoGYnSsAHjeA%40mail.gmail.com.