Wiele osób w społeczności programistów mówi o ciągłym doskonaleniu, celowej praktyce itp. - Ale kiedy mówią o swoich obecnych praktykach, to prawie tak, jakby „wyrosły w pełni uformowane z lędźwi Zeusa”, ponieważ nie słyszysz o tym, jak ich opinie zmieniały się z czasem lub tego, czego się ostatnio nauczyli.
Od czasu do czasu chodzę na rozmowę, czytam książkę lub rozmawiam z kimś, a oni otwierają się jeszcze bardziej i okazuje się, że dużo się uczę z tych spostrzeżeń.
Więc jeśli musiałbyś wybrać jedną rzecz z ostatnich 12 miesięcy, którą nauczyłeś się, co to będzie?
learning
self-improvement
FinnNk
źródło
źródło
Po poznaniu Clojure zacząłem zdawać sobie sprawę z przydatności programowania funkcjonalnego , a mój styl kodowania Java był pod silnym wpływem tego. Wbrew powszechnemu przekonaniu funkcjonalny język programowania nie jest absolutnym warunkiem wstępnym do wykonania niektórych funkcji programowania.
Możliwe jest włączenie kilku elementów programowania funkcjonalnego do imperatywnego języka, takiego jak Java, i nawet jeśli nie zawsze jest to idiomatyczne, może być bardzo korzystne w niektórych problemach. Na przykład anonimowe klasy są mniej więcej równe zamknięciom, jak opisano w wikipedii . Leniwa ocena powinna być raczej normą niż czymś niezwykłym. Niezmienność nie może być nadużywana. Po prostu zapomnij o (prawie) przestarzałym pomyśle, że budowanie nowych obiektów zamiast mutowania istniejących jest kosztowne z powodu zużycia GC i sterty - w 99,9% przypadków jest to po prostu nieistotne. W rzeczywistości przetwarzanie równoległe może odwrócić nawet argument dotyczący wydajności na odwrót: tworzenie nowych niezmiennych obiektów może być tańsze niż mutowanie istniejących, ponieważ pozbędziesz się blokowania.
Więcej informacji na temat robienia FP w czystej Javie tutaj , tutaj , tutaj i tutaj .
źródło
Nawet jeśli masz wspaniały zespół i kompetentne kierownictwo tego zespołu, twoja praca wciąż nie jest bezpieczna. Wyższe kierownictwo może nadal robić głupie rzeczy, takie jak rozwiązanie całej dyrekcji.
W skrócie: polityka ma znaczenie, a czasami polityka, która na ciebie wpływa, nie możesz kontrolować.
źródło
Dowiedziałem się, że celem testowania oprogramowania jest znajdowanie błędów . To jest nie do zweryfikowania, czy system jest poprawny.
W grę wchodzą ważne czynniki psychologiczne: jeśli Twoim celem jest wykazanie, że program jest „poprawny”, przejdziesz do testów, o których wiesz, że przejdą pomyślnie. Ale jeśli Twoim celem jest znalezienie błędów, będziesz dążyć do testów, które naprawdę pchną twój system do granic możliwości.
Nastąpiła nawet ważna zmiana w używanym języku. Jeśli test wykryje błąd, nazywasz go sukcesem . Jeśli test się nie powiedzie (program się powiedzie), nazywasz go nieudanym . Złapałem się na myśleniu „weryfikacyjnym”, co robi dużą różnicę.
Ten efekt psychologiczny omówiono bardziej szczegółowo w The Art of Software Testing , klasycznej książce, którą bardzo polecam. Autor, Myers, zaleca również, aby ten, kto testuje program, nie był autorem, ani nawet w tym samym łańcuchu zarządzania. Możesz to zrobić, jeśli kodujesz sam, więc wymaga dyscypliny.
źródło
Programowanie oparte na testach od samego początku dostawy od klienta, aby sprawdzić, jak wpłynie to na jakość kodu, i uruchamianie tylko z poziomu programu uruchamiającego JUnit w Eclipse. Zaowocowało to lepszym produktem.
źródło
Prawdziwa wartość programowania bez ego.
Na pewnym poziomie zawsze wiedziałem, że ego i programowanie nie mieszają się, ale nigdy nie do końca rozumiałem konsekwencje. Pomysł, że musisz aktywnie analizować i znajdować błędy we własnych praktykach, jest czymś, co zacząłem realizować dopiero w zeszłym roku. Uczę się również aktywnie szukać krytyki moich projektów (zarówno w interfejsie użytkownika, jak i kodzie).
Szczerze mówiąc, wciąż uczę się, jak porzucić ego i prawdopodobnie będę się tego uczył przez resztę mojej kariery programistycznej.
źródło
Oto moja odpowiedź na moje pytanie:
Około rok temu kliknęło, że automatyczne testy akceptacyjne musiały być nieautomatycznymi wersjami testów, które nasi testerzy wykonaliby ręcznie. Skoncentrowanie się na testach w oparciu o pojedyncze specyfikacje, zamiast starać się trafić jak najwięcej w jednym przebiegu, sprawiło, że testy są znacznie prostsze, łatwiejsze do odczytania, a także pomagają zachęcać do dostarczania przyrostowego.
źródło
Dowiedziałem się, jak pojęcie matematyczne, takie jak Semirings, stosuje się do algorytmów. Dzięki temu możesz pokazać, jak niektóre algorytmy są takie same, z wyjątkiem użycia innego semierowania. Dla mnie jako programisty nie powinno to być takie dziwne, ale głowa mi się zawaliła.
źródło
Oprócz polityki, o której wspomniał Frank Shearar , niedawno odkryłem QUnit i JSCoverage, które sprawiły, że mój dzień. I miesiąc Nigdy nie myślałem, że możliwe będzie jednostkowe testowanie JavaScript z pokryciem kodu, ale jest ... :-)
źródło
Moje trzy pierwsze podziękowania za ostatni rok programowania zostaną przekazane następująco (w kolejności malejącej według ważności i wdzięczności):
funkcjonalny paradygmat programowania, który pozwala mi otworzyć się na inne, często bardziej eleganckie i zwięzłe sposoby wyrażania pomysłów i algorytmów w kodzie. Wydaje mi się, że moje ogólne umiejętności programowania znacznie się poprawiły w bardzo krótkim czasie dzięki funkcjonalnym pomysłom programistycznym.
(Moje osobiste podziękowania należą się Tomášowi Petříčkowi za jego doskonałą książkę Programowanie funkcjonalne w świecie rzeczywistym .)
zarówno wstrzykiwanie zależności, jak i testowanie jednostkowe nauczyło mnie, że kompozycja obiektów jest prawdopodobnie najlepszym sposobem na tworzenie złożonych (obiektowych) systemów (i że dziedziczenie klas nie jest tak ważne, jak myślałem). Oba nauczyły mnie i zmusiły do zastanowienia się, jak najlepiej komponować systemy i jak pisać komponenty, które są łatwe w użyciu, a jednocześnie wystarczająco elastyczne, aby można je było ponownie wykorzystać.
(Gdybym miał wspomnieć o dobrych zasobach dydaktycznych, powiedziałbym, że sztuka testów jednostkowych Roya Osherove'a ).
Wszystkie razem wzięte powodują, że piszę kod, który generalnie ma mniej błędów niż poprzednio, ponieważ teraz piszę kod, który jest znacznie łatwiejszy do zrozumienia i pomyłki niż to, co wcześniej opublikowałem.
źródło
Bez względu na to, co zmienia się w szybko rozwijającym się przemyśle oprogramowania, krzywa uczenia się jest zawsze dostępna. „Gdyby był tylko sposób na naukę bez poświęcania czasu na naukę”.
źródło
Dowiedziałem się, że sprzedaż nowej firmie może rzeczywiście poprawić twoją pracę. Moja organizacja została zakupiona od naszej starej firmy w maju i wydaje się, że sytuacja się poprawia. Nowa firma oszczędza niewiele / nie ma kosztów w naszym nowym biurze, zastępuje nasze przestarzałe maszyny programistyczne sprzętem XXI wieku, wykazuje elastyczność w zarządzaniu naszymi projektami i ogólnie sprawia, że wszyscy czujemy się mile widziani.
Trochę przygnębiające jest sprzedawanie się (trochę jak niewolnik mający nowego pana feudalnego, ponieważ jest przywiązany do ziemi, która zmieniła ręce), ale końcowy wynik był znacznie lepszy niż się spodziewałem.
źródło
Powiedziałbym, że przy użyciu testów jednostkowych Microsoft w Visual Studio 2010.
Naprawdę łatwo było mi debugować określoną metodę testową.
Mógłbym uruchomić w dowolnym momencie mój projekt testowy, aby sprawdzić, czy aplikacja warstwy biznesowej działa dobrze. Proces testowania gwarantuje, że mój zespół nie powinien mieć problemów z wdrożeniem kompletnego rozwiązania dla odwiedzających naszą stronę internetową.
źródło
Nauczył się podstawowego języka Python (czasami używa go do pisania szybkich skryptów)
Zainstalowałem ArchLinux na VM (wcześniej miałem Ubuntu na VM, mój komputer jest teraz szybki!)
Rozpoczął od MATLAB (szczególnie do drukowania wykresów i szybkich kontroli numerycznych)
Przełączono na Mercurial (z SVN) (rozgałęzianie i scalanie!)
źródło
Nauka wzoru MVVM pomogła mi stać się mniej hackem.
źródło
Musiałem zacząć utrzymywać aplikację internetową Python - więc zdecydowałem, że to dobry moment, aby nauczyć się Vima . Teraz używam wtyczki IdeaVim dla Intellij do programowania Java i Flex i zdecydowanie wierzę, że dzięki temu pisanie było szybsze i bardziej wydajne.
źródło