8 ms·
I 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 mos
by krat0sprakhar 11y ago
I 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?!
- jerf 11y agoThree-element for loops are the exception. The modal Go for loop is for idx, elem := range someSlice { } Sometimes with idx replaced by _. (Or at least, that's the modal for loop if you're doing it right.) I wish I could make for x := range someSlice { default to iterating on values rather than indexes... I do have rather a lot of for _, val := range someSlice { but, meh. Personally I'd unhesitatingly introduce that version and pull out the three-element version once someone needs it. People should learn value-based iteration as the default. I have to admit when I'm doing an interview and I see someone pull out the 3-element for loop in a language that does value-based iteration, I mentally dock a point for choosing a dangerous construct when an easier, safer construct is readily available. (Before someone jumps up and yells, I readily admit... no, advocate for... Python's for idx, value in enumerate(something): when available. I really don't like the 3-element for loop.)
- _yosefk 11y agoWell, yeah, but if you want to iterate over integer ranges, don't you use the for ;; {} form? (If not why is that form even there?) I'd expect the TFA's Mandelbrot set example to need iterating over integer ranges (while most code I'd actually write myself would iterate over elements of sequences.) All I'm saying is, it's a lot of syntax to inhale, there are plenty of kinds of for loop. I certainly don't mind, and I'd be happy enough with "the modal for loop" being DRY and compact. I just recall that my former self had trouble memorizing grammar cases. Python's for loop always does for value in sequence, so there's less syntax.
- pcwalton 11y agoRight, you do use the C-style for loop for numeric iteration. The reason why a more succinct form for numeric iteration isn't there is that Go has no generics, therefore no generic interfaces, therefore no Iterator interface, therefore no iterators. So Go had no choice but to build all syntaxes that look like iterators directly into the language.
- jerf 11y ago
- acomjean 11y agoWe had a few programmers back at a previous job that used the "grasp" editor because it highlighted not just loops but control structures. I would occasionally use it to help make sense of some complex legacy code, but as day to day editor I found it lacking. I do like the concept. The editor appears to live on as "jgrasp" http://www.jgrasp.org/csd.html http://www.jgrasp.org/csd.html
- fao_ 11y agoI like the concept in theory, but the execution (just looking at some of the screenshots on the site) looks poorly done. The interface is unbelieveably cluttered and hairy. I don't think I could code in that at all. :/
- acomjean 11y agoYeah its a little cluttered. To me it looks a little like eclipse does today, with older styled buttons. And it looks like a university side project. We had a hpux or solaris X-windows native version which lacked the button party bar. Since its us Gov funded it would be nice if they posted the source.
- Retra 11y agoIt just needs a little color coding and dynamic contrast, really.