Jeśli tak, czy możesz mi powiedzieć, w jaki sposób nauka nowego paradygmatu zmieniła twoje podejście do rozwiązywania problemów programistycznych, nawet jeśli problem dotyczy innego paradygmatu / języka / technologii?
Naprawdę docenię Jeśli możesz mi powiedzieć w konkretny sposób, w jaki sposób twoje umiejętności programowania w X (tj .: JAVA / C # / C ++) poprawiły się poprzez naukę Y (tj .: Scheme / Prolog / Lisp).
Jakie paradygmaty sugerujesz najbardziej, aby stać się dobrym programistą?
Moje doświadczenia są tylko ustrukturyzowane - OOP, konieczne - proceduralne, i do pewnego stopnia meta-programowanie szablonów, ale moim celem nie jest nauka innego języka, ale raczej nauczenie się różnych metod rozwiązywania problemów.
Dzięki!
Odpowiedzi:
Staram się uczyć co najmniej 1-2 nowych języków każdego roku. Najbardziej zyskałem na nauce języka funkcjonalnego (F #), który zmienił sposób, w jaki patrzę na rozwiązywanie problemów - I = teraz próbuję powiedzieć maszynie, co mam robić, a nie jak to robić, zwłaszcza w C #, gdzie intensywnie używam Linqa i niezmienne przedmioty, kiedy już wiem, jakie korzyści płyną z ich używania. Bardzo często używam funkcji wyższego rzędu (metody jako parametry), w wyniku czego mój styl kodowania zmienił się (poprawił).
źródło
Absolutnie. Każdy język programowania, którego się uczysz, będzie miał inny sposób robienia pewnych rzeczy. Niektóre rzeczy doprowadzą cię do szaleństwa, niektóre pokochasz, a inne będą powoli na tobie rosnąć.
Nauczenie się przynajmniej podstaw nowego języka nigdy nie jest stratą czasu.
źródło
Ok, oto przykład, z którym się spotkałem.
Nauczyłem się stosunkowo starego języka (VB6) dla projektu na jakimś starym kodzie, który mieliśmy.
Język jest bardzo zorientowany na okna, ale nie ma tylu potężnych klas wysokiego poziomu, jakie mamy w frameworku .Net.
Musiałem wykonać kilka operacji na obrazie, co wprowadziło mnie w funkcje Windows API do manipulacji obrazem.
Po tym, jak dowiedziałem się, że pozwoliło mi to lepiej zrozumieć klasy GDI .Net. I zrozumienie, że czasami korzystanie z Windows API będzie znacznie szybsze (mniej zawijania funkcji).
To pokazuje, że nawet kiedy uczysz się starego kodu, nadal możesz się uczyć i uzyskać inną perspektywę.
źródło
Z mojego doświadczenia wynika, że zdecydowanie tak. Posiadanie kilku różnych sposobów atakowania problemu jest jak paleta narzędzi. Pewnego dnia będziesz (tak jak ja) używał tych innych narzędzi. A może nie. To wszystko zależy. Niektóre przykłady:
Języki na ogół nie są samodzielne, mają środowisko. Spędziłem trochę czasu ucząc się dziwnego języka znanego jako awk . Opiera się na dopasowaniu wzorca za pomocą „wyrażeń regularnych”. Próbując nauczyć się C ++ STL (niezbyt udany) dowiedziałem się o mapach. Łącząc te dwa koncepcje, mogłem bardzo szybko napisać narzędzia do przekształcania tekstu w Pearl (jedynym języku dostępnym na platformie).
Głównie dla zabawy próbowałem nauczyć się Erlanga (niezbyt udane). Posiada bibliotekę funkcji znanych jako OTP, implementujących między innymi sposób obsługi błędów, czasem zwanych „pozwól mu zawieść” i monitor uruchomi funkcje ponownie. Użyłem tego pomysłu w niektórych obszarach, czasami po prostu pozwalając, by coś zawiodło zamiast przeprowadzać niekończące się testy.
Próba nauki Haskella (znowu niezbyt udana) naprawdę otworzyła mi oczy na inne sposoby atakowania problemów. Programowanie funkcjonalne (moim zdaniem) zaczyna się od pisania kodu, który mówi, jaki wynik chcesz osiągnąć, a nie od pisania kroków, które trzeba osiągnąć. Uważam, że to naprawdę pomogło mi w pisaniu lepszego kodu SQL.
Ostatnio próbowałem trochę javascript. I znalazłem środowisko zwane węzłem. Nie potrzeba kodu do stworzenia małego serwera automatyki domowej.
Mówiąc z perspektywy czasu, większość moich rozmów w różnych językach była (i jest) na dość płytkiej pogoni, głównie po to, aby poczuć, o czym ludzie mówią. Jest bardzo niewiele języków, w których faktycznie mogę być produktywny.
źródło
Przez długi czas wiele się nauczyłem, posługując się językiem funkcjonalnym. Jednak to, co wyciągnąłem z tego, było mniej robienia rzeczy odmiennych od języków imperatywnych, a raczej tego, jak ułatwić współbieżność. Można go zastosować równie łatwo w języku imperatywnym, jak w języku funkcjonalnym, ale z jakiegoś powodu większość przykładów, które spotkałam w językach imperatywnych, była bardziej skomplikowana. (Inne rzeczy okazały się znacznie bardziej skomplikowane w językach funkcjonalnych.)
Kolejną rzeczą, której nauczyłem się z nowego języka, były dodatkowe wzorce programowania. Czytałem o wielu z nich, ale zobaczenie i użycie kilku naprawdę dobrych ich implementacji ułatwiło zrozumienie i naprawdę sprawiło, że ich przydatność i kiedy były odpowiednie, były dla nich łatwiejsze.
źródło