Jaka jest najważniejsza, pożyteczna lub pouczająca rzecz, której nauczyłeś się w ciągu ostatnich 12 miesięcy? [Zamknięte]

14

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?

FinnNk
źródło

Odpowiedzi:

18

Dowiedziałem się, że zepsucie całego projektu wymaga tylko jednego zgniłego menedżera, ale wielu dobrych programistów musi potem posprzątać.

Martin Wickman
źródło
Martin, głosowałem za tym, ponieważ twoja wiadomość sprawia, że ​​uśmiecham się w ten deszczowy i zimny sobotni poranek, ale nie odpowiadasz na pytanie;)
Dodano „Nauczyłem się, że ...”
Martin Wickman
+1, ponieważ jestem jednym z tych programistów w tym miesiącu. Ponad 70 godzin w zeszłym tygodniu == „moja kolej w beczce”.
Dan Ray
Rozpoznaję to! To powinno być cytat! „Wystarczy tylko jeden zgniły menedżer, aby zepsuć cały projekt, ale potem wielu dobrych programistów posprząta bałagan”.
Amir Rezaei
12

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 .

Joonas Pulakka
źródło
+1 Zgadzam się. To smutne, że Java ma tak złe wsparcie dla programowania funkcjonalnego.
Jonas
Od dawna interesuję się FP (moja pierwsza praca dotyczyła seplenienia) i myślę, że to bardzo ekscytujące, że w ciągu ostatnich kilku lat w końcu staje się dość „powszechnym” paradygmatem obok OO itp.
FinnNk
Java 7 powinna mieć przynajmniej lepsze zamknięcia. A używanie sprytnych bibliotek, takich jak lambdaj, może zdziałać cuda, aby naprawić braki w samym języku.
Joonas Pulakka
Chciałbym mieć lepszą obsługę rekursji ogona w Javie / JVM.
Jonas
1
Metoda @Helper: pierwsze dwa linki w mojej odpowiedzi to artykuły na temat FP z Javą. Nie znam żadnych książek na ten temat. Myślę, że najlepszą metodą „zdobycia go” jest nauczenie się prawdziwego języka FP, a następnie po prostu zacznij używać więcej niezmiennych obiektów w kodzie Java.
Joonas Pulakka
10

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ć.

Frank Shearar
źródło
Daję ci wirtualną +1, ponieważ Martin już sprawia, że ​​uśmiecham się z podobną odpowiedzią;) Czy czytałeś Dead March? to jest książka o tym, o czym mówisz
(Przekształcam głosowanie wirtualne w górę na prawdziwe)
9

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.

Macneil
źródło
8

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
Zauważ, że nie znalazłem sposobu na powiązanie „Uruchom ponownie najnowszy test jednostkowy” z kluczem. To sprawiło, że było to trochę nudne.
5

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.

Joeri Sebrechts
źródło
3

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.

FinnNk
źródło
3

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.

Peter Stuifzand
źródło
1
Czy masz przykład takiego?
Mark C
W książce Element of Programming znajduje się przykład, który wykorzystuje funkcję, która oblicza moc i niektóre rzeczy fibonacciego, która oblicza fib w czasie O (log n). Myślę, że przykład można znaleźć tutaj cpp-next.com/archive/2010/03/eop-ch3-preview , ale ta strona internetowa odpowiada wewnętrznym błędem serwera.
Peter Stuifzand
3

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 ... :-)

dr Hannibal Lecter
źródło
To jest na moim radarach na przyszły rok, trochę zagłębiałem się w testach jednostkowych js, ale jeszcze nie w prawdziwym projekcie. Nie wiedziałem, że dostępne jest narzędzie pokrycia!
FinnNk
2

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.

stakx
źródło
2

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ę”.

wassimans
źródło
Fakt, że zawsze trzeba uczyć się nowych rzeczy, jest dla mnie jednym z największych apeli tego zawodu. Systemy informatyczne często polegają na tym, jak najlepiej radzić sobie z rosnącą złożonością i uwielbiam odkrywać nowe teorie i koncepcje w tym kierunku. Z drugiej strony wszystko to może być czasami frustrujące, ponieważ konieczność nadążania za najnowocześniejszymi rozwiązaniami może przypominać ciągły wyścig.
stakx
1

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.

bedwyr
źródło
0

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ą.

Junior M.
źródło
0
  • 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!)

Vaibhav Bajpai
źródło
0

Nauka wzoru MVVM pomogła mi stać się mniej hackem.

bufferz
źródło
-1

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.

Watson
źródło
1
Naprawdę - -1? Chcesz to dla mnie rozpakować - ludzie nie myślą, że VIM jest pouczający lub przydatny?
Watson