@LukeJL:
Widzę to trochę inaczej. Nie widze nic złego w podpowiadaniu ... to jest po prostu logiczna konsekwencja czegoś co jest od dawna w każdym większym IDE - zamiast zakuwać 20000 funkcji bibliotecznych i tych napisanych przez kolegów używamy podpowiadania. Normalka. Tu wchodzi na kolejny poziom, bo podpowiadane są całe kawałki kodu.
To, że takie kawałki mogłyby być czasem wydzielone do osobnych funkcji to ... przeważnie nieprawda, a nawet jeśli prawda to nie będzie działać. Z 2 powodów.
Powód pierwszy. Nasze języki oprogramowania obsysają po całości i wiele funkcji nie da się wyrazić w sposób generyczny, tylko trzeba klepać.
(czuje się jak idiota za każdym razem jak pisze w Kotlinie odpowiednik sequenceA
https://hackage.haskell.org/package/base-4.15.0.0/docs/Prelude.html#v:sequenceA).
Zresztą ta miernota jezyków urosła wręcz do rangi osobnej dziedziny - znanej pod nazwą design patterns
.
Drugi problem to ograniczona pojemność ludzkich mózgów. Co z tego, że zrobisz miliony funkcji bibliotecznych jak nikt nie będzie nawet wiedział jak i gdzie ich szukać.
(nazywa się compressZip
, a może zipCompress
, a może compress
, a może shrink
, shrinkZip
, crunch
? i w ogóle jaka to biblioteka?)
Jeszcze gorzej jest z patternami.
Większość programistów codziennie klepie kawałki kodu typu:
List<Customer> allCustomers = new ArrayList<>();
for( group: customersGroups) {
allCustomers.addAll(group.getCustomers());
}
zamiast użyć generycznego fold
. A fold nawet nie jest jeszcze najbardziej ogólnym rozwiązaniem. Bo można to jeszcze bardziej uogólnić i używać cata
.
Tylko wtedy na twarz dostaje się pojęcia typu F-algebra, Functor itp. (w zamian za to można używać całej gamy tzw. recursion schemes
).
Wychodzi na to, że aby nie pisać pierdołowatych pętli to trzeba spędzić rok z teorią kategorii, a potem jeszcze wywalić javę (czy np. kotlina) bo takie abstrakcje
w tych językach są nie do wyrażenia (sensownego). Mało komu będzie się chciało. Użyjemy patternu
- czyli copy/paste tylko z mniej śmierdzącą nazwą.
Podpowiadanie pozwoli też czasami uniknąć typowych błedów (kto notorycznie zapominał o index++
w pętli while - ten wie)
Dlatego jednak takie toole mają sens. Jak któregoś dnia AI zaczną podpowiadać: widzę, że robisz hylomorphism, pozwól, że zrobię Ci to w jednej linijce
(czyli czyszczenie kodu)- to będzie już zupełnie dobrze.