Mamy wiele świetnych narzędzi, które bardzo pomagają w programowaniu, takich jak dobrzy edytorzy tekstów, IDE, debuggery, systemy kontroli wersji itp. Niektóre z narzędzi są mniej więcej „niezbędnymi” narzędziami do wykonania zadania (np. Kompilatory) .
Nadal zawsze są narzędzia, które bardzo pomagają, ale wciąż nie przyciągają zbyt wiele uwagi, z różnych powodów, na przykład, kiedy zostały wydane, wyprzedzały swój czas i teraz są mniej lub bardziej zapomniane.
Jaki rodzaj programowania narzędzie myślisz jest najbardziej niedoceniane jeden? Motywuj swoją odpowiedź.
tools
developer-tools
Anto
źródło
źródło
Odpowiedzi:
Gumowa kaczka. Tak naprawdę.
http://en.wikipedia.org/wiki/Rubber_duck_debugging
źródło
Pióro i notatnik.
źródło
Narzędzia porównywania wydają się być niewykorzystywane podczas porównywania wyników dziennika lub danych w płaskich plikach tekstowych. A może to tylko nisza? Wydaje mi się, że jest to bardzo przydatne i pomocne przy debugowaniu, aby porównać ogromne dzienniki wykonania programu i wskazać jeden lub dwa szczegóły, które uległy zmianie.
Narzędzia do profilowania wydajności są również bardzo dobre, szczególnie gdy uderzasz w krytyczne wąskie gardło, ale wydaje się, że niewiele osób je zna (i przyznaję się do pewnego stopnia w tej kategorii).
Dobre narzędzia XML są niezbędne - jeśli pracujesz z plikami XML więcej niż tuzin linii lub schematów wielokrotności. Czasami potrzebujesz czegoś więcej niż tylko podstawowej składni, która wyróżnia inne edytory. Również podczas pracy z XML nauka XSL może być bardzo przydatna. Wiele razy widzę, co można zrobić w prostej transformacji XSL wykonanej w wielu wierszach kodu aplikacji. Choć należy wyjaśnić: nie sugeruję, że sam XML jest „niedocenianym narzędziem programistycznym”; Sugeruję, że wartość dobrych edytorów XML jest niedoceniana z tego, co widziałem.
źródło
diff
jest niedoceniany. Jeśli chodzi o profilowanie, nie jesteś sam, myśląc, że muszą być przydatne, ale sam nie wiesz, jak to zrobić. Sprawdź to.<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>
Wyrażenia regularne
Są po prostu bardzo przydatne. Pomagają w wyszukiwaniu plików dziennika, analizowaniu tekstu itp. Są po prostu niezwykle przydatne.
Dziwi mnie, ilu ludzi znam, którzy nigdy ich nie używają, ponieważ wiąże się z nimi trochę krzywej uczenia się. Wiele razy widzę, że ludzie robią rzeczy w trudny sposób (uwaga: przed wyrażeniem regularnym robiłem rzeczy w trudny sposób), gdy prosty wyrażenie regularne może szybko to zrobić.
źródło
Twoi współzawodnicy. Kiedy masz ochotę na jakiś pomysł i zapominasz o włączeniu swojego zespołu, nigdy nie usłyszysz ich obaw ani pomysłów, dlaczego to nie zadziała lub dlaczego może być jeszcze lepiej.
Mówię to, ponieważ łatwo jest myśleć, że programowanie jest czymś aspołecznym, co ludzie robią w kącie ze swoimi genialnymi pomysłami. Ludzie, którzy uważają, że nie doceniają wartości zespołów i ich kolegów z drużyny, pomagają sprawić, by pomysły / projekty zatonęły / popłynęły.
źródło
Google. Istnieje bardzo niewiele problemów, które nie zostały jeszcze rozwiązane i udokumentowane. Dobrze dostrojone zapytanie Google może zaoszczędzić każdemu dużo czasu.
źródło
Zdecydowanie najbardziej niedocenianym narzędziem do znajdowania „wąskich gardeł” jest Ctrl+ Club przycisk „Wstrzymaj” w debuggerze.
Sprawdź ostatni akapit tego postu oraz ten post i ten post na początek.
Tak wiele razy widzę / słyszę ludzi mówiących: „Program jest zbyt wolny! Co mogę na to poradzić? Próbowałem profilera (jeśli tak zrobiłem), ale nie rozumiem, co to mówi. Ktoś ma jakieś domysły? Pomocy! „ Domysły są właśnie takie. To, co zawsze robiłem, podobnie jak inni, to uruchamianie, przerywanie i sprawdzanie stosu wywołań. Jeśli problem jest naprawdę poważny, bingo , jest tuż przed tobą. Jeśli problem jest tylko łagodny, zrób to kilka razy. Wszystko, co pojawia się na więcej niż jednej próbce, którego można uniknąć, jest wąskim gardłem, które można naprawić.
Tak, to przynęta negatywna, ale działa.
źródło
Kompilator.
Większość ludzi nie potrzebuje czasu, aby zrozumieć, co robi ich wybrany kompilator. Po prostu czują, że zamienia kod w program, który można uruchomić, i to jest tak daleko, jak to możliwe. W większości współczesnych istnieje kilka konfiguracji, w które można go zasilić, dzięki czemu działa tak, jak trzeba. Oto przykład, założę się, że połowa deweloperów w twoim biurze nie ma pojęcia, jak ustawić ostrzeżenie jako poziom błędów (zakładając, że faktycznie ma taki poziom). Jakie opcje musisz wygenerować symbole debugowania? Których optymalizacji (lub jakiego poziomu) chcesz dokonać. I tak dalej.
źródło
-pedantic -Wall -Wextra -Werror
... chociaż wtedy może być trudno zbudować cokolwiek: pTwój mózg. Inne narzędzia bez niego nie miałyby większego znaczenia.
źródło
Dobry stary:
Czasami użyteczny jest debugger lub profiler lub diagram przepływu UML. A czasem doprowadzają cię do szaleństwa. Zawsze wracam do używania instrukcji print (lub trace, NSLog lub what-have-you) tylko po to, aby upewnić się, że mój kod robi to, co myślę, że robi, kiedy myślę, że to robi.
źródło
Zwykłe stare skrypty ... bez względu na to, ile języków nowej generacji opracowujemy, nadal w dużym stopniu polegamy na skryptach, a większość codziennych zadań można wykonać, pisząc kilka wierszy skryptów.
źródło
Długopis i tablica.
Nie możesz pokonać technologii, gdy próbujesz coś wyjaśnić.
źródło
ack . Jest jak
grep -r
, ale został zaprojektowany do przeszukiwania twojego kodu źródłowego.źródło
Perl i inne języki skryptowe. Idealny do zadań, które są nieco zbyt skomplikowane dla narzędzi GUI, takich jak Agent Ransack.
źródło
Skróty klawiaturowe, które umożliwiają szybkie, częste i bezpieczne refaktoryzowanie. Uczenie się, jak wyciągać (lub wstawiać itp.) Zmienne, metody, stałe lub klasy za naciśnięciem niektórych klawiszy, zasadniczo zmieniło sposób, w jaki koduję. Będziesz refaktoryzować tylko często (tj. Wystarczająco), gdy koszt jest minimalny, więc uczynienie tych skrótów drugą naturą jest niezbędne, jeśli chodzi o pisanie i utrzymanie dobrego kodu.
Ogólnie używaj dobrych narzędzi (IDE / edytor) i dowiedz się, jak uzyskać jak najwięcej funkcji, które zapewniają.
Kolejne są testy jednostkowe i TDD, aby Twój kod był testowalny i aby uniknąć strachu przed refaktoryzacją.
Skorzystaj z nich, a z łatwością przejdziesz do pisania poprawnego, łatwego w utrzymaniu kodu, który jest zgodny z zasadą DRY i jest samodokumentujący.
źródło
Testy jednostkowe zapewniają następujące korzyści:
źródło
Generatory kodu
Generatory kodu mogą tworzyć dużą ilość wydajnego i wolnego od błędów kodu na podstawie prostej definicji. Zastosowania typu ORM są najbardziej oczywiste przy tworzeniu klas dostępu do danych, ale istnieje wiele innych potencjalnych zastosowań.
Obsługa generowania kodu wydaje się być jeszcze w powijakach, zarówno z punktu widzenia programisty, jak i frameworka, ale wierzę, że będzie to coś, co będzie coraz więcej. W .NET możesz rozpocząć dabbing przy pomocy CodeDOM .
źródło
Często używam AgentRansack . Jest to ogromna pomoc w bardzo szybkim przeszukiwaniu tysięcy plików. Zaoszczędziło mi to dużo czasu, ale nie znam wielu programistów, którzy wiedzą o tym lub go używają.
źródło
Metody formalne.
http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X
http://www.amazon.com/Science-Programming-Monographs-Computer/dp/0387964800/ref=pd_sim_b_1
Trudno przecenić ich znaczenie. Każda pętla i każda instrukcja if zaczyna się jako pomysł, który wymaga pewnego rodzaju „dowodu”. Większość programistów robi to w większości przypadków w swoich głowach. Pytasz, co robi instrukcja if, a oni mogą wypowiedzieć - rozsądnie i logicznie - jakie są wybory i dlaczego wybory są kompletne, spójne i wyłączne.
Ale niektórzy zdają się zgadywać losowo. Potrzebują więcej pomocy, a formalne metody mogą być potrzebną im pomocą.
To tylko algebra (i rachunek) dla kodu. Nic zbyt skomplikowanego ani wyrafinowanego.
źródło
Fizyczne wzorce projektowe, takie jak opuszczanie krzesła na szybki jogging w słońcu i świeże powietrze, utrzymują nasze mózgi w szczytowej niesamowitości.
źródło
Cóż, to Half Life 2 (wstaw tutaj swoją ulubioną grę). Jeśli mam problem, którego nie mogę rozwiązać, po prostu rezygnuję i zaczynam grać w moją ulubioną grę i nagle rozwiązanie pojawia się w mojej głowie. Szczerze mówiąc, nie jest to gra ani coś takiego, ale robienie czegoś innego . Często widzę ludzi siedzących nad problemem przez wiele godzin bez jego rozwiązania i wszystko, co powinni zrobić, to wyłączyć mózg na krótki czas.
źródło
Przepełnienie stosu - szybka pomoc eksperta, gdy utkniesz
źródło
Myślę, że to Notepad / TextPad / proste programy do edycji tekstu. Każdy ma czas, kiedy potrzebuje szybkiej poprawki, która nie wymaga otwarcia IDE i potrzebuje tylko szybkiej edycji. Wszystkie komputery mają jakiś prosty program do edycji tekstu.
źródło
Zapewnia i dobrą
alwaysAssert()
funkcję. IMHO są one ważniejsze niż testy jednostkowe, ponieważ testy jednostkowe mogą znaleźć błędy tylko w określonych przypadkach, które chciałeś przetestować. Jeśli ten sam programista napisze kod i testy, prawdopodobnie nie trafi w obu przypadkach na te same zbocza. Co więcej, czasami testowanie jednostkowe jest niepraktyczne, ponieważ środowisko, w którym funkcjonuje komponent i / lub dane, na których działa, jest zbyt skomplikowane, aby wymyślić wymyślony przypadek testowy.Piękno twierdzeń polega na ich zdolności do dokumentowania założeń i testowania ich na nieskomplikowanych danych wejściowych . Jeśli którekolwiek z tych założeń jest błędne, kod zawiedzie głośno zamiast „działać”, ale generować subtelnie niepoprawne wyniki. Nie udaje się też bliżej źródła problemu niż bez twierdzeń. W praktyce, jeśli wyraźnie podasz wystarczające założenia dotyczące fragmentu kodu i wszystkie te założenia są poprawne, wówczas kod jest zwykle poprawny.
Jednym z powszechnych problemów związanych z twierdzeniami jest to, że można je wyłączyć. IMHO każdy język lub standardowa biblioteka powinna mieć
alwaysAssert()
funkcję lub przybliżony odpowiednik, który robi to samo,assert
ale nie można go wyłączyć. Można to wykorzystać do sprawdzania założeń w krytycznych obszarach kodu, które nie są wydajne, a korzyści z wyłączenia twierdzeń są znikome.źródło
Klawisz F1. - Przydatny w przypadku programów, których nie znasz i programów, nad którymi pracujesz. (Zakładając, że jest to duża aplikacja).
Potężne do odfiltrowania problemów było zgłoszenie przez użytkowników błędów na podstawie ich interpretacji sposobu działania oprogramowania. Oczywiście możliwe, że sam projekt był wadliwy. Ale to inna historia.
źródło
Różne podstawowe narzędzia UNIX, ale przede wszystkim
find
i sporadyczniegrep
lubed
. Umiejętność znajdowania rzeczy w głębokich gniazdach plików jest nieoceniona, szczególnie gdy nagle odziedziczysz bazę kodów i musisz ją naprawić. Nawet jeśli wspomniany kod jest dobrze udokumentowany, prawdopodobnie będziesz musiał polować, a dobre zrozumieniefind
go zabije.źródło
Ciekawość
Nazwij to „zagadką programowania”. Co to jest narzędzie w porównaniu do osoby, która go używa? Chęć dowiedzenia się, jak i dlaczego coś działa lub nie działa, poszerza swoją wiedzę bardziej niż jakiekolwiek konkretne narzędzie i jest to prawdą poza programowaniem.
źródło
Oszczędność niezliczonych godzin na całym świecie!
źródło
Ogon
Program Tail może służyć do monitorowania pliku wyjściowego dziennika programu w czasie rzeczywistym. Było to bardzo pomocne podczas opracowywania systemów, które nie zapewniają innym możliwości odczytu dziennika.
Przykładowe programy to;
źródło
Połączyłem jeden raz generator wykresów wywołań Perla. Było to niezwykle użyteczne, ale wymagało od nieprocesowego kodu lub procedur spoza pliku.
źródło