... jak mogę rozwinąć umiejętności programowania, które można zastosować do wszystkich języków zamiast tylko jednego?
Kluczem do tej kwestii jest, aby wznieść się w język i pomyśleć nie języka jesteś kodowania.
WAT
Doświadczeni programiści polyglot myślą w abstrakcyjnym drzewie składni (AST) własnego modelu mentalnego języka. Nie uważa się, że „potrzebuję pętli for”, a raczej „muszę coś zapętlić” i tłumaczy to na odpowiedni dla iteratora lub rekurencji dla tego języka.
Jest to podobne do tego, co widzi się podczas nauki języka mówionego. Ludzie, którzy mówią wieloma językami, płynnie myślą o znaczeniu , które pojawia się w danym języku.
Pewną wskazówkę dotyczącą tego AST można znaleźć w dwóch filmach o śledzeniu wzroku Kod Zrozumienie ze śledzeniem oczu i Eksperymentowanie z kodem oka (nowicjusz), w którym obserwuje się ruchy oka początkującego i doświadczonego programisty. Widać, że doświadczony programista „kompiluje” kod do swojego modelu mentalnego i „uruchamia” go w swojej głowie, podczas gdy początkujący musi iterować kod słowa kluczowego według słowa kluczowego.
Zatem kluczem do pytania o rozwijanie umiejętności programowania w odniesieniu do wszystkich języków jest nauka wielu języków, dzięki czemu można zdystansować się od modelu mentalnego jednego języka i rozwinąć zdolność do samodzielnego generowania AST dla problemu w język główny, który jest następnie tłumaczony na dany język.
Gdy ktoś ma już umiejętność używania AST w głowie, nauka innego języka w ramach podobnej szkoły myślenia (przejście do Befunge jest trochę skokiem z Jawy, ale nie tak bardzo z Forth ) staje się znacznie łatwiejsze - to „tylko” przetłumaczenie AST na nowy język, który jest o wiele łatwiejszy od trzeciego, czwartego i piątego (itd.) czasu, w którym jest to zrobione.
Jest klasyczny artykuł: Prawdziwi programiści nie używają Pascala . Część tego brzmi:
... zdeterminowany prawdziwy programista może pisać programy Fortran w dowolnym języku
Są też bity, dla których nie możesz po prostu użyć mentalnej AST - musisz także myśleć w języku. Zajmuje to trochę czasu (wciąż jestem oskarżany o pisanie kodu Perla w Pythonie, a mój pierwszy kod Lisp został sprawdzony pod kątem „To bardzo dobry program w języku C.”).
W tym celu muszę wskazać artykuł opublikowany przez ACM, Jak nie pisać Fortran w żadnym języku . Trzeci akapit tego artykułu (który nie prowadzi do cytatów) bezpośrednio odnosi się do pytania:
Istnieją cechy dobrego kodowania, które wykraczają poza wszystkie języki programowania ogólnego przeznaczenia. Możesz zastosować dobry projekt i przejrzysty styl w prawie każdym kodzie, jeśli się do niego zastosujesz. To, że język programowania umożliwia pisanie złego kodu, nie oznacza, że musisz to zrobić. A język programowania, który został zaprojektowany w celu promowania dobrego stylu i designu, nadal może być używany do pisania okropnego kodu, jeśli programista jest wystarczająco kreatywny. Możesz utopić się w wannie z calem wody i możesz łatwo napisać całkowicie nieczytelny i niemożliwy do utrzymania program w języku bez gotosów i numerów linii, z obsługą wyjątków i rodzajami ogólnymi oraz wywożeniem śmieci. Niezależnie od tego, czy piszesz Fortran, Java, C ++ lub Smalltalk, możesz (i powinieneś) wybrać dobry kod zamiast złego.
Nie wystarczy mieć AST - trzeba mieć AST, którą można przetłumaczyć na inne języki. Posiadanie Fortran AST w głowie i pisanie kodu Fortran w Javie nie jest dobrą rzeczą. Trzeba także znać język i jego idiomy, aby móc myśleć w tym języku (pomimo tego, co powiedziałem na samym szczycie).
Widziałem kod Java napisany przez kogoś, kto nie przestał pisać kodu C. Był jeden obiekt z główną metodą. W tym obiekcie znajdowało się kilka metod statycznych wywoływanych przez main
prywatne klasy wewnętrzne, które miały pola publiczne (a zatem wyglądały bardzo podobnie do rozpórek). Był to kod C napisany w Javie. Wszystko, co zostało zrobione, to przetłumaczenie składni jednego języka na inny.
Aby przejść przez ten punkt, trzeba nadal pisać kod w wielu językach, nie myśleć w tych językach podczas projektowania kodu, ale myśleć w nich, tłumacząc projekt na kod, aby poprawnie pracować z idiomami języka.
Jedynym sposobem na osiągnięcie tego - możliwość rozwijania umiejętności programowania, które można zastosować we wszystkich językach - jest kontynuowanie nauki języków i utrzymanie elastyczności tego mentalnego języka programowania, a nie powiązania go z jednym językiem.
(Przepraszam ChaosPandion za ciężkie pożyczenie od pomysłu, który przedstawił ).