Code Complete stanowi, że powinieneś rozprowadzać kod w języku, a nie w nim. Przez to mają na myśli
Nie ograniczaj myślenia programistycznego tylko do pojęć obsługiwanych automatycznie przez Twój język. Najlepsi programiści myślą o tym, co chcą robić, a następnie oceniają, jak osiągnąć swoje cele, korzystając z narzędzi programistycznych, którymi dysponują. (rozdział 34.4)
Czy nie prowadzi to do stosowania jednego stylu programowania w każdym języku, niezależnie od mocnych i słabych stron danego języka?
Lub, aby postawić pytanie w bardziej zrozumiałym formacie:
Czy zaproponowałbyś, abyś starał się jak najdokładniej zakodować swój problem przy pomocy szczegółów swojego języka, czy raczej raczej ogólnie wyszukać najbardziej eleganckie rozwiązanie, nawet jeśli oznacza to, że musisz wdrożyć możliwie niezręczne konstrukcje, które nie istnieją natywnie w swoim języku?
źródło
Odpowiedzi:
Istnieje jeszcze lepsze podejście: w ogóle zapomnij o żałosnym, stałym języku programowania. Zakoduj swój problem w języku, który właśnie wymyśliłeś, wywodzącym się z samych pojęć odpowiedniej domeny problemowej, zakoduj go tak naturalnie, jak to możliwe, i dopiero wtedy pomyśl o wdrożeniu tego nowego języka programowania lub sprowadzeniu kodu do ograniczeń istniejący język.
Takie podejście nazywa się programowaniem zorientowanym na język . Istnieje wiele technik efektywnego wdrażania języków specyficznych dla domeny i jest to szczególnie gorący temat dla społeczności Ruby.
źródło
Uważam, że poprawna odpowiedź, a ta, o której mówi książka:
Programując w język, zawsze zakładałem, że będzie to wykorzystywać techniki poza normalnym stylem języka, w których przyniesie to korzyść . Jest to kluczowa różnica w stosunku do pisania jednym stylem we wszystkich językach.
Na przykład nauka języka Haskell znacznie poprawiła moją umiejętność korzystania z funkcji wyższego rzędu. Teraz, programując w języku c #, używam różnych
IEnumerable
metod, takich jakSelect
częściej, ponieważ używanie tych metod prowadzi do czystszego kodu niż pisanie w pętlach. Mam również tendencję do używania funkcji pass i use (tj.Func<int, int>
) Częściej ze względu na moje doświadczenie haskell. Z tego powodu spadło moje zastosowanie dziedziczenia i w większości przypadków wynik jest prostszy.Jednak nie używam pojęć takich jak monady lub algebraiczne typy danych w języku c #. Wynika to z faktu, że żaden z nich nie jest wyraźnie reprezentowany w języku c # i nie przynosi korzyści w zamian za wiele niejasności.
Używam więc narzędzi tego języka, aby wykorzystać umiejętności, które mam najlepiej. Uważam, że to programowanie na język.
źródło
Chodzi o to, że dobrzy programiści nie muszą się języka. Cytat z książki mówi o „narzędziach programistycznych do ich dyspozycji” - oznacza to, że jeśli znasz perla i Javę, to może powinieneś użyć perla do tej szybkiej manipulacji ciągiem. Języki programowania nie są ograniczeniami, ale narzędziami, których używamy do rozwiązywania problemów. To jest (imo) do czego zmierza Code Complete. Nie koduj w polu języka / środowiska programowania, umieść najlepsze rozwiązanie w najlepszym języku / środowisku programowania dla siebie, swojego problemu i rozwiązania.
źródło