Uwielbiam to, że pisanie Pythona, Ruby lub Javascript wymaga tak niewielkiej liczby elementów. Uwielbiam proste konstrukcje funkcjonalne. Uwielbiam czystą i prostą składnię.
Są jednak trzy rzeczy, w których jestem naprawdę zły podczas tworzenia dużego oprogramowania w dynamicznym języku:
- Poruszanie się po kodzie
- Identyfikowanie interfejsów obiektów, których używam
- Wydajna refaktoryzacja
Próbowałem prostych edytorów (np. Vim), a także IDE (Eclipse + PyDev), ale w obu przypadkach mam wrażenie, że muszę poświęcić dużo więcej pamięci i / lub ciągłego „grepowania” i czytania kodu w celu identyfikacji interfejsy. Jest to szczególnie prawdziwe w przypadku pracy z dużą bazą kodu z wieloma zależnościami.
Jeśli chodzi o refaktoryzację, na przykład zmianę nazw metod, staje się bardzo zależna od jakości moich testów jednostkowych. A jeśli spróbuję wyizolować moje testy jednostkowe poprzez „odcięcie” ich od pozostałej części aplikacji, nie ma gwarancji, że interfejs mojego kodu pośredniczącego pozostanie aktualny w stosunku do obiektu, który wprowadzam.
Jestem pewien, że istnieją obejścia tych problemów. Jak wydajnie pracujesz w Pythonie, Ruby lub JavaScript?
źródło
Odpowiedzi:
Uzyskaj lepszy edytor niż VIM.
Używam Komodo Edit.
Dobry. Myślenie jest dobre. Uważam, że „uczenie się” prowadzi ostatecznie do „pamięci”.
To jest typowe. Jeśli ich nie pamiętasz, to są zbyt skomplikowane, prawda? Czas na uproszczenie.
Proste jest trudne do stworzenia. Ale kiedy masz problemy z zapamiętywaniem, jest to objaw złego projektu.
Używam grep. Mi to pasuje. Moja Komodo Edit ma wiele fajnych wyników wyszukiwania. Podobnie jak Notepad ++
Doc Strings i
help()
funkcja działają. Używam ich. Codziennie.To nie są wiadomości. To zawsze było prawdą, nawet w języku statycznym.
W języku statycznym często stajemy się leniwi, zakładając, że - o ile się kompiluje - naprawdę może działać. To oczywiście fałszywe, ale stajemy się leniwi.
Nie są to „problemy” i nie wymagają „obejść”.
„nie znając rodzaju obiektów”? Naprawdę. Kiedy projektuję klienta obiektu, wiem, jaki typ zaprojektowałem.
Kiedy definiuję usługę, z której korzysta wielu klientów, typ „dokładny” nie ma znaczenia, gdy mam zdefiniowany wymagany interfejs
quack()
ifeathers()
.Wreszcie mam pętlę odczytu-wykonania-wydruku i inne narzędzia do określania typu „dokładnego” w rzadkich przypadkach, gdy mam subtelny problem. Tego właśnie używam na co dzień.
Nie wydaje się zbyt trudne - przynajmniej w Pythonie - odprężenie typu obiektu. Dynamiczne języki muszą mieć REPL, dzięki czemu łatwo jest zobaczyć, co się dzieje.
To nie ma większego sensu.
help()
Pracuje.A moje IDE często może zlokalizować definicję. Nie zawsze - niektóre zawiłe konstrukcje dynamiczne mogą łatwo ukryć klasę podstawową. W takim przypadku muszę pomyśleć o klasie obiektu, aby znaleźć definicję metody. Oczywiście piszę kod, więc nie ma tu żadnej tajemnicy.
źródło
Szybkie wyszukiwanie ujawniło Rfactor dla Ruby ( wywiad tutaj ) i specjalistę od naprawy rowerów dla Pythona. Nie jestem pewien, jak dobre są ... ale warto na nie spojrzeć.
źródło
Istnieje firma - JetBrains - autorzy ReSharper, TeamCity i IDEA. Niedawno zaczęli patrzeć na dynamiczne języki i już wypuścili swoje narzędzia dla Pythona, PHP i Ruby.
Jakość jest świetna. Nie są to kolejne wtyczki do twojego ulubionego IDE, ale w pełni wyposażone IDE i są całkiem dobre do refaktoryzacji / nawigacji / debugowania itp. - są jak IDEA lite.
źródło