That is a conditional statement, not a biconditional. Which is why for every single successful innovator, we can often find thousands of nutcases, inventing floating shoes, helmet mounted rifles, and Forth (just kidding, mostly). Therefore, an unconventional person should be especially careful that they do not find themselves on the wrong side of the thin line between genius and insanity.
Forth is number 1 on my list of greatest languages -- and I've been coding Lisp full time for years. If you want to have your mind blown, take a look at what Moore has done recently with Color Forth. It's tricky to piece together the story from bits on the internet, but the resulting language is enlightened in a way no other languages can claim.
"What can be said of this? If, in order to 'really' enter a programming culture, I need to both 'be solving a significant real problem in the real world' and exercising 'the freedom to change the language, the compiler, the OS or even the hardware design', then there are very few options for entering this culture indeed. The requirement for 'real world work' is almost by definition incompatible with 'the freedom to change the language, the compiler, the OS and the hardware design'."
Only part way through that article you linked to, but it is fascinating. The part that includes Moore's rant against local variables crystallized an idea that had been bubbling around in my subconscious for some time. Very often the only reason I find I am writing a local variable is to make an expression with several sub-parts easier to see the sub-expression values in gdb. This wouldn't be quite so necessary if the debugger had a syntax for saying "list the sub expressions of this statement" and for saying "print sub-expression #N". For instance, with the debugger stopped just before a line like x = foo(bar(a,b), blat(c,d)); "list subs" -> "0: bar(a,b), 0.1: a, 0.2: b, 1: blat(c,d), 1.1: c, 2.1: d." then just typing something like sub0 would print the value of bar(a,b)."
Of course lacking such a facility I just end up scattering extra locals even though I end up feeling like the output is rather archaic. a = ...; b = ...; c = f(a,b);
The real problem is that it's hard to distinguish "best" practices from conventional practices. Innovators are necessarily unconventional, but the ones we care about are also necessarily demonstrably good (in some sense). So there is this claim from the innovator side that "unconventional" is not a valid argument.
This claim only makes sense in the presence of an "unconventional" judgment -- i.e. that this creative work is necessarily deficient simply because it is unconventional.
Now, of course, no critic would put it so bluntly. But I think it illustrates the underlying dynamic.
That is a conditional statement, not a biconditional. Which is why for every single successful innovator, we can often find thousands of nutcases, inventing floating shoes, helmet mounted rifles, and Forth (just kidding, mostly). Therefore, an unconventional person should be especially careful that they do not find themselves on the wrong side of the thin line between genius and insanity.