Zawsze uważam te debaty za interesujące. Nie tyle za intelektualną dyskusję na temat zalet i wad różnych dostępnych języków, ale dlatego, że zazwyczaj można ustalić czyjąś postawę na ten temat w oparciu o pracę / doświadczenie / obszar zainteresowania. To właśnie tam, z argumentami „przedwczesnej optymalizacji”, w których specjaliści CS i programiści cytują Knutha w lewo i prawo, a ci, którzy pracują w prawdziwym świecie, w którym liczy się wydajność, uważają, że wszyscy są szaleni (jestem członkiem tej ostatniej grupy Aby być uczciwym).
Na koniec dnia możesz opracować doskonałe oprogramowanie w C lub C ++ lub wstawić tutaj język . Wszystko sprowadza się do możliwości programisty, a nie języka. Bycie ekspertem w języku jest zwykle wymagane tylko wtedy, gdy wybrałeś niewłaściwy język na początku, a teraz musisz go wypaczać w celu rozwiązania problemu, w większości przypadków są to jedyne sytuacje, w których musisz zagłębić się w niejasne funkcje lub kompilator sztuczki, aby osiągnąć cel.
Często słyszę, jak ludzie rozpoczynają te argumenty: „Jestem ekspertem w języku X i bla bla”. Szczerze od razu zdyskredytuję tych ludzi, ponieważ moim zdaniem podeszli już do problemu z niewłaściwego punktu widzenia, a wszystko po nim jest skażone poprzez chęć użycia narzędzia do rozwiązania problemu i pokazania, jak „fajne” jest.
Tak często obserwuję, jak programiści najpierw wybierają zestaw narzędzi, a następnie próbuję zgiąć go do drugiego problemu, co jest całkowicie błędne i skutkuje bzdurnymi rozwiązaniami.
Jak wspomniałem w komentarzu do innej odpowiedzi, te wojny językowe często przekształcają się w argument, że język X pozwala programiście robić bardziej głupie rzeczy. Mimo że zabawne są do przeczytania, wszystkie te stwierdzenia naprawdę oznaczają, że masz problem z zatrudnieniem dobrych programistów i musisz bezpośrednio rozwiązać ten problem, zamiast próbować pomóc w tej sytuacji, nadal zatrudniając złych programistów i wybierając narzędzia, które mogą zrobić tak mało uszkodzenie jak to możliwe.
Moim zdaniem dobrzy programiści, niezależnie od tego, czy zajmują się tworzeniem oprogramowania, czy sprzętu, badają problem, projektują rozwiązanie i znajdują narzędzia, które pozwalają im wyrazić rozwiązanie w „najlepszy sposób”. Nie powinno mieć znaczenia, czy wymagane narzędzie jest czymś, z czego nigdy wcześniej nie korzystałeś, po tym, jak użyjesz 3-4 języków / narzędzi programistycznych w projektach, które wybierają nowe, powinno to mieć minimalny wpływ na twój czas programowania.
Oczywiście „najlepszy sposób” jest pojęciem subiektywnym i należy je również zdefiniować na etapie badań. Należy wziąć pod uwagę wiele problemów: wydajność, łatwość wyrażania, gęstość kodu itp. W zależności od danego problemu. Z tego powodu nie umieściłem konserwacji na tej liście, nie dbam o to, jaki język wybierzesz, jeśli wybrałeś odpowiednie narzędzie i poświęciłeś czas na zrozumienie problemu, który powinien pojawić się „za darmo”. Trudny w utrzymaniu kod jest często wynikiem wyboru niewłaściwego narzędzia lub złej struktury systemu, co powoduje brzydki, zepsuty bałagan, aby działał.
Twierdzenie, że jakikolwiek język jest „lepszy” niż jakikolwiek inny, jest głupie bez definiowania konkretnego problemu. Podejście obiektowe nie zawsze jest lepsze niż podejście funkcjonalne. Istnieją pewne problemy, które bardzo dobrze nadają się do paradygmatu projektowania obiektowego. Jest wiele takich osób. To samo można powiedzieć o wielu funkcjach językowych, z których ludzie wydają się lubić czerpać przyjemność.
Jeśli spędzasz ponad 20% swojego czasu na problemie z pisaniem kodu, prawdopodobnie produkujesz bardzo słaby system lub masz bardzo słabych programistów (lub nadal się uczysz). Powinieneś spędzać większość czasu z góry na schematowaniu problemu i określaniu, w jaki sposób różne elementy aplikacji wchodzą w interakcje. Umieszczenie grupy utalentowanych programistów w pokoju z tablicą znaczników i problemem do rozwiązania i powiedzenie im, że nie wolno im pisać żadnego kodu ani wybierać żadnych narzędzi, dopóki nie poczują się dobrze z całym systemem, aby zrobić więcej, aby poprawić jakość wydajność i szybkość rozwoju niż wybór jakiegokolwiek nowego, gorącego narzędzia, które gwarantuje skrócenie czasu rozwoju. (spójrz na rozwój scrum jako odniesienie przeciwnego bieguna do mojego argumentu)
Często niefortunną rzeczywistością jest to, że wiele firm może mierzyć wartość dewelopera tylko na podstawie liczby zapisanych wierszy lub widząc „namacalne wyniki”. Widzą 3 tygodnie w pokoju z tablicą jako utratę wydajności. Deweloperzy są często zmuszani do przechodzenia przez fazę „przemyślenia” lub są zmuszeni do korzystania z narzędzi określonych przez pewne problemy polityczne w firmie: „Brat mojego szefa pracuje dla IBM, abyśmy mogli korzystać tylko z ich narzędzi”, tego rodzaju śmieci . Albo, co gorsza, otrzymujesz stale zmieniający się zestaw wymagań od firmy, ponieważ nie są oni w stanie przeprowadzić odpowiednich badań rynku lub nie rozumieją wpływu zmian na cykl rozwoju.
Przepraszam, że jestem trochę nie na temat tego zdania, mam dość mocne opinie na ten temat.