Co powinien wiedzieć każdy programista, niezależnie od zastosowanego języka (języków) programowania, systemu operacyjnego lub środowiska, dla którego opracowuje.
Niektóre tło:
Chcę zostać najlepszym programistą. W ramach tego procesu staram się zrozumieć to, czego nie wiem i bardzo by mi to przyniosło korzyść. Chociaż istnieje mnóstwo list w stylu „n rzeczy, które powinien wiedzieć każdy [wstawić język programowania]”, muszę jeszcze znaleźć coś podobnego, co nie jest ograniczone do konkretnego języka.
Oczekuję również, że te informacje będą interesujące i przynoszą korzyści innym.
language-agnostic
skills
Matt Lacey
źródło
źródło
Jak myśleć jak użytkownik, a nie jak programista-geek.
źródło
Kiedy prosić o pomoc, a kiedy NIE prosić o pomoc.
źródło
Jak czytać kod innych osób.
źródło
Znajomość systemów kontroli wersji. Nie musi to być każdy, ale podstawowe pojęcia, które można zastosować do wszystkich z nich, powinny być znane.
źródło
Oto moje 10 bitów:
źródło
Może to zbyt subtelne, ale myślę o tym jako o „wiedzeniu, który problem rozwiązać”. Wielu programistów (i normalni ludzie) marnuje ogromny wysiłek na rozwiązywanie rzeczy, które po prostu nie są bardzo ważne; lub tworzą rozwiązanie z dużą ilością dodatkowej pracy, która nie do końca jest potrzebna.
źródło
Jak się zrelaksować. To sekret wydajności.
W końcu siła woli i kofeina nie wystarczą. Ten ciągły skurcz, który wywołujemy, jest bardzo szkodliwy.
To wielka sprawa.
źródło
Podstawowe typy danych i teoria algorytmów. Rzeczy takie jak notacja Big O, tablice, kolejki itp.
źródło
Jak wybrać odpowiednie narzędzie do właściwego zadania i nie brać udziału w głupich płonących wojnach o jego ulubione narzędzia programistyczne.
źródło
Cóż, oto moje .02 $:
źródło
Nie można przetestować jakości produktu.
źródło
Każdy programista powinien zrozumieć wzorce projektowe .
źródło
Trochę się spóźniłem, ale pójdę z wiedzą podaną przez Edsgera Dijkstrę:
Jeśli nie możesz napisać dobrego akapitu, prawdopodobnie nie możesz również napisać dobrego kodu.
źródło
if (BlowUpTheSystem = 1)
. To prawda, że przy odpowiednich testach jednostkowych prawdopodobnie zaoszczędzisz tylko czas. Ale czas jest bardzo ważny.Nie angażuj się zbyt emocjonalnie, przywiązany ani religijny na temat jakiejkolwiek technologii, systemu operacyjnego lub języka - żaden z nich nie jest idealny - na dłuższą metę prawdopodobnie skończysz z marzeniem, aby stworzyć własną kartę ala carte z tego, co masz jak o każdym innym.
Pomyśl o tym jak o samochodach - być może wcześniej nie jeździłeś konkretnym samochodem, ale wszystkie mają kluczyki, kierownice, pedały przyspieszenia i hamulce - powinieneś być w stanie wsiąść do jednego i szybko odjechać po ustaleniu, gdzie jest. Traktuj systemy operacyjne i języki w podobny sposób i skup się na poznawaniu podstawowych pojęć leżących u ich podstaw, nawet jeśli masz ochotę poznać specyfikę danego wystąpienia.
Z czasem staraj się zrozumieć i docenić pochodzenie, dziedzictwo i cechy wspólne różnych technologii, które pomogą ci zachować perspektywę. Uświadom sobie na przykład, że podczas gdy drzewo ewolucyjne aktywnie rozgałęzia się i jest pełne ślepych zaułków, z czasem technologia często zbiega się wokół „najlepszych praktyk” i „korzyści skali” ( np. Zauważ, że Mac nie jest aż tak różny od Komputer pod maską w dzisiejszych czasach ...).
Na koniec pamiętaj, bez względu na to, jak dobrze się bawisz z tym wszystkim, technologia zasadniczo stanowi niedoskonały obiektyw między tym, co twój umysł może sobie wyobrazić, a tym, co faktycznie produkujesz. Daj z siebie wszystko, naucz się uczyć i pozostań elastycznym ...
źródło
Jak programować w C.
źródło
Dzień, w którym przestaniesz się uczyć, powinien być dniem, w którym nie jesteś już programistą.
źródło
Testowanie i debugowanie jednostek.
źródło
Zostało to wspomniane wcześniej, ale myślę, że zasługuje na własną odpowiedź.
źródło
Nikt nie chce używać oprogramowania. Chcą rozwiązania problemów.
źródło
Kawa i IntelliSense są twoimi najlepszymi przyjaciółmi.
źródło
Jak obserwować duży skomplikowany obiekt i rozkładać go na małe proste obiekty, które wciąż wykonują to samo zadanie po ponownym złożeniu.
źródło
Nigdy nie ufaj użytkownikowi ( zwłaszcza jeśli aplikacja jest publiczna!), Często zrobi wszystko, co w jego mocy, aby złamać twoją aplikację w taki czy inny sposób.
Spraw, by był przyszłościowy i rozbudowy - nigdy nie wiesz, kiedy chcesz go rozwinąć za kilka lat i zdajesz sobie sprawę, ile wysiłku wymagałoby ponowne kodowanie źle utworzonego kodu.
źródło
Że programista nie wie wszystkiego i powinien zawsze starać się uczyć nowych języków / technologii itp.
źródło
Podstawy dobrego projektowania interfejsu użytkownika i projektowania komunikacji (aka grafiki) .
Widzę wiele aplikacji i projektów zrujnowanych przez zły projekt lub słabą użyteczność. Już sama nauka podstaw może zmienić świat. Plus wizualne techniki rozwiązywania problemów (tj. Wizualne komunikowanie koncepcji) są stymulującym wyzwaniem, które powinno otworzyć oczy na nowe sposoby widzenia, które z kolei powinny mieć wpływ na kod.
Zalecaną książką jest The Non-Designer's Design Book autorstwa Robin Williams
Oto, co mówi o tym Joel Spolsky :
źródło
Każdy programista powinien umieć szybko się uczyć. Wiele razy wchodzisz do pracy i będziesz proszony o opracowanie technologii, której nigdy nie używałeś. Mogą dać ci tydzień na wstanie (jeśli masz szczęście), zanim zostaniesz poproszony o napisanie kodu jakości produkcyjnej.
źródło
Kontrola wersji. Cytując moją przyjaciółkę: „Nie chcę tylko, żebyś zmywał naczynia, chcę, żebyś to lubił !”
źródło
Wymagania się zmieniają, twój kod będzie musiał się dostosować i to Ty możesz go nie dostosować.
Pojawiło się tutaj kilka pytań związanych z tematami, których to dotyczy.
źródło
Z czubka mojej głowy:
Bardzo niewiele problemów programistycznych wymaga matematyki poza dodawaniem, odejmowaniem, mnożeniem i dzieleniem. Jeśli zastanawiasz się nad użyciem rachunku różniczkowego do rozwiązania problemu, dokładnie zapoznaj się z alternatywami.
Za każdym razem, gdy zastanawiasz się, jak coś powinno działać, robisz to źle. Telepatyczne nie jest twoim zadaniem.
Osoba podająca specyfikację rzadko wie wszystko, czego chce, dopóki tego nie rozwiążesz.
Ponad połowa bycia świetnym programistą pochodzi z kontaktu z ludźmi. Połowa interakcji z zespołem, zarządzanie menedżerem i kłopoty z końcowym użytkownikiem.
Dobry kod jest pisany do odczytu przez ludzi tak samo, jak do odczytania przez kompilator.
Najlepsze praktyki i rzeczywistość praktyczna będą w konflikcie bardziej niż myśli programista, ale mniej niż kierownik. Kiedy wydają się być w konflikcie, to do ciebie należy wytyczenie i zrozumienie konfliktu, a następnie poddanie się praktyce. Subtelne i sprytne rozwiązanie jest lepsze tylko od brzydkiego, brutalnego rozwiązania, jeśli na dłuższą metę jest bardziej opłacalne.
Świetne narzędzia nie potrafią zrobić wspaniałych programistów, ale złe narzędzia sprawiają, że jesteśmy równie okropni.
Nigdy nie patrz w dół na technologię, ale zawsze szukaj najlepszej alternatywy.
Im więcej języków znasz, tym lepiej będziesz w tym, którego używasz.
Nie przeszkadza ci powolne wkradanie się myśli programistycznych w codzienne życie. Nawet gdy nie jesteśmy przy komputerze, wszyscy cierpimy z powodu ograniczeń przepustowości, ponosimy kary wydajnościowe za przełączanie zadań i musimy ładować rzeczy z magazynu kopii zapasowych. Komputery mają naśladować ludzką myśl, a analogi są wszędzie.
źródło
Czytanie kodu innych ludzi nie zepsuje twojego mózgu, ale raczej zrozum, dlaczego nie zrobiłbyś tego w ten sposób (jeśli jest to lepsze czy nie, to inne pytanie).
To daje ci programowanie gedankeneximent , a czasami możesz znaleźć kogoś, kto wdraża coś znacznie lepszego! Jakby o wiele lepiej.
Ta odpowiedź w naturalny sposób rozszerza się na czytanie własnego kodu, dlatego rozszerza się na użycie kontroli wersji i DIFF, a tym samym na 42.
źródło