> But perhaps I'm just a sucker for quality and maintainability and I'm barking up the wrong tree.
I don't think that you will find many people here who don't think that code quality and maintainability are important. But I would disagree with the implicit assumptions that code that "passes" a linter is of high quality and that code that "fails" the linter is of poor quality >From my limited readings of the Go source code, I would say that the Go team's judgement of code quality is far beyond that of any linter I have seen. On Wednesday, 14 December 2022 at 23:07:24 UTC marc...@gmail.com wrote: > > > Sorry, but I didn't state (and so does the linter) that any code is > deficient. > Normal usage of a linter is not to satisfy a linter, but to do some basic > code review. > (Most new linters can skip certain code lines these days too.) > > I know that the number of lines in a single function is just a matter of > taste. > But I also know that a function with too many lines is also harder to > maintain. > If you study those functions that are "too long", you will find that it > could probably be split up in a more readable and maintainable way. > > The only worry I have is that complex code is very hard to maintain, > perhaps only by a single person. > What happens if that person isn't available anymore? The best time to > maintain code to a more maintainable version, is at the moment of creation > or not much later, > because only then it lives still "in the mind" of the creator. A linter > can help detect those "blindspots" of a developer and can point out where > those are. > > With the new guidelines, one can expect to see the Go code as an example > of those guidelines. > (one of them being maintainable software) > > Does anybody have to fix all of it now? Of course not, but perhaps when a > developer is touching one of those functions and understands what it does, > then it is still the ideal time to rewrite it a bit. > > But perhaps I'm just a sucker for quality and maintainability and I'm > barking up the wrong tree. > I very much want Go to survive, so for me that means that people should > not be afraid to maintain parts of the code. > (and that's why I said not to touch all those high complexity parts, > because I find it highly confusing; so i'm not fit for that job.) > > Op wo 14 dec. 2022 om 23:33 schreef Amnon <amn...@gmail.com>: > >> This long discussion started with the question why the Go source is not >> linted. >> But I think the OP has answered his own question by providing us with a >> list of 963 places >> where the linter has decided that the code is deficient. >> But what is notable, is that he has not given a single example where any >> of these 963 warning has any value. >> He has not taken even one of these warnings and show how "fixing" it >> leads to better code. >> 411 of these warnings are for functions which are longer than the 150 >> lines which are "allowed". >> So I would ask: "allowed by whom?" >> I am a big fan of short functions, as are the authors of the Go standard >> library. But surely the optimal length of a function depends >> on the context. I am not too bothered, about the length of functions in >> the output of code generation, for instance. And I am OK with >> code with a very regular structure - like a switch statement handling >> many cases to take many lines. >> Some of these linters do seem to be quite bureaucratic - imposing >> arbitrary rules irrespective of whether they make sense in the actual >> context. >> Code written in corporations (because it usually is in corporations) >> where these linters are imposed, have a particular smell, with all kinds >> of convolutions and ugliness designed to appease the linter. >> If you see code where every line begins with >> >> _, _ = >> >> Or where you always see >> >> defer func() { _ = res.Body.Close())() >> >> rather that >> >> defer res.Body.Close() >> >> you know that this is the product of a programmer toiling under the >> dictates of a linter. >> Because if you are discussing some code with a knowledgeable reviewer, >> you can defend your decisions. >> You can explain why writing to a byte.Buffer can not fail (unless we are >> out of memory, in which case any error >> handling will fail too). But if you are told off by a linter, there is no >> appeal. The linter has no discretion. >> It is not open to discussion. It will not consider your arguments. Your >> job is to do what the linter tells you. >> Because the linter is always right. Because the computer is always right. >> And you, as a mere human, are always wrong. >> >> I would say that go vet is an exception - its warnings almost always >> point to real problems in the correctness of code, >> or unnecessary complexity. I often also run staticcheck on my own code. >> It often makes useful observations, some of which >> lead to useful changes. But beyond these two, linters often do more harm >> than good. One very high quality linter with >> few false positives is far more valuable that a large number of linters >> which make nonsensical complaints. >> golangci_lint is particularly bad in this respect - making it easy to run >> loads of low quality linters, which cry wolf all the time and >> train programmers to ignore warnings. >> >> So I would appeal Ian and the rest of the Go team, to resist the pressure >> to adopt these "great linters" - not to invest months of work >> "fixing" these 963 "problems" identified by these linters. And focus on >> carrying on doing what you are doing - producing, >> rocks solid releases, well thought out enhancements, and code which can >> serve as a template we can all emulate >> to produce good, clear, idiomatic code. >> >> >> On Tuesday, 13 December 2022 at 22:18:14 UTC marc...@gmail.com wrote: >> >>> I have no complaints, let me be clear about that. Just advice, for all >>> I've learned in my cariere is that maintenance is happening more than the >>> first version of something creative. >>> But I've still got hope that one day I might understand some complex >>> coding that I didn't write myself. >>> >>> I'm happy to help, if an author of something "complex" can guide me. The >>> only thing I can do now, is be a messenger. >>> >>> >>> Op di 13 dec. 2022 om 20:52 schreef Ian Lance Taylor <ia...@golang.org>: >>> >>>> On Tue, Dec 13, 2022 at 2:31 AM Brian Candler <b.ca...@pobox.com> >>>> wrote: >>>> > >>>> > With that in mind, I'd respectfully suggest that your starting point >>>> should be to pick one of these "over complex" functions, understand it >>>> fully, and rewrite it in what you consider to be a simpler/clearer way >>>> which does not break any functionality, *and* which does perform any worse >>>> than the original code (*). Then you can submit it as a pull request for >>>> review. Rinse and repeat. >>>> >>>> With respect, I'm going to suggest not doing that. If code is working >>>> correctly, then changing it, even to simplify it, may cause it to stop >>>> working correctly. In fact, this is more likely to happen if the >>>> original code is complex. The best approach to complex working code >>>> is to only change it if there is a good reason to do so: because the >>>> requirements have changed, or because there is some way to make it run >>>> measurably faster, or because it is a regular source of bugs. >>>> >>>> Also I hope we can all agree that blind adherence to any specific >>>> definition of complexity is misguided. For example, a function that >>>> is basically a big switch statement with a bunch of cases is often >>>> easier to understand as a single function rather than a collection of >>>> different ones. I hope we can all agree that reducing the number of >>>> code complexity reports to zero is not a goal. I'll note that the >>>> list of complaints here seems to me to be biased toward breaking up >>>> large functions into smaller functions. In some cases that can make >>>> the code easier to understand. In other cases it does not. Judgement >>>> is required. >>>> >>>> Ian >>>> >>>> -- >>>> You received this message because you are subscribed to a topic in the >>>> Google Groups "golang-nuts" group. >>>> To unsubscribe from this topic, visit >>>> https://groups.google.com/d/topic/golang-nuts/MM3W5oNw4-0/unsubscribe. >>>> To unsubscribe from this group and all its topics, send an email to >>>> golang-nuts...@googlegroups.com. >>>> >>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/golang-nuts/CAOyqgcXGWbAEVy89cMFXmwS-%3DPYZ%3D6NEYQ-i6NnzyfMmZ8W7MA%40mail.gmail.com >>>> . >>>> >>> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "golang-nuts" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/golang-nuts/MM3W5oNw4-0/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> golang-nuts...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/59fb5c6e-346c-4a3a-b1b4-b59b3b3510a2n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/59fb5c6e-346c-4a3a-b1b4-b59b3b3510a2n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- 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/11483ec0-bd26-4b9d-b430-9da54c160f5cn%40googlegroups.com.