Jaka jest najbardziej skuteczna rzecz, którą zrobiłeś, aby poprawić swoje umiejętności programowania?

876

Patrząc wstecz na moją karierę i życie jako programista, było wiele różnych sposobów doskonalenia umiejętności programistycznych - czytanie kodu, pisanie kodu, czytanie książek, słuchanie podcastów, oglądanie screencastów i wiele innych.

Moje pytanie brzmi: jaka jest najbardziej efektywna rzecz, którą zrobiłeś, która poprawiła twoje umiejętności programowania? Co poleciłbyś innym, którzy chcą poprawić?

Spodziewam się tutaj różnych odpowiedzi i nie ma jednej odpowiedzi „jeden rozmiar dla wszystkich” - chciałbym wiedzieć, co zadziałało dla różnych osób.

Oded
źródło
18
Ćwicz, ćwicz, ćwicz. I nigdy nie zadowalaj się pierwszą rzeczą, jaka przychodzi ci na myśl.
Mark Ransom
2
+1 dla Marka Ransoma ... Trudność pojawia się, gdy wciąż nie jesteś zadowolony ze 100. rzeczy, które przyszły ci na myśl!
Stimul8d
5
Nie marnowanie mojego czasu na stronie Program Exchange Stack Exchange pomogło mi znacznie poprawić swoje umiejętności kodowania.
Job
3
@Mark Trapp, jak to nie jest konstruktywne?
prawej
1
@WTP - Przeczytaj opis. „To pytanie nie pasuje do naszego formatu pytań i odpowiedzi”. - jako ktoś, kto zadał to pytanie, zgadzam się. Zapytano go w bardziej zrelaksowanych czasach.
Oded

Odpowiedzi:

753

Bez określonej kolejności ...

  • Praca z ludźmi o wiele mądrzejszymi ode mnie

  • Zawsze słuchając tego, co mają do powiedzenia inni, niezależnie od tego, czy są młodsi, średniozaawansowani, starsi czy guru. stanowisko nie ma znaczenia.

  • Uczenie się innych frameworków / języków i sprawdzanie, jak oni to robią, i porównywanie tego do rzeczy, które już znam

  • Czytanie o wzorcach, najlepszych praktykach, a następnie badanie moich starych rzeczy i stosowanie tych wzorców w razie potrzeby

  • Programowanie w parach

  • Nie zgadzam się ze wszystkim, co mówi Joel. ;)

cranley
źródło
41
Wiem, że wydaje się to naprawdę nieuzasadnione i potencjalnie szarpanie reputacją, ale jeśli podzielisz te elementy na jedną na odpowiedź, ludzie będą mogli głosować za tymi, z którymi się zgodzili, pozwalając na bardziej szczegółowe „rozwiązanie” tego pytania.
117
Zobacz, jak mądrzejsi ludzie radzą sobie z błędami - wtedy najlepiej się od nich uczę
82
jeśli jest to lista w dowolnej kolejności, to czy nie powinna to być lista nieuporządkowana, a nie uporządkowana? : P
Jon W
3
Zgadzam się z mmyerami - tylko dlatego, że nie zgadzasz się z kimś, nie oznacza, że ​​je ignorujesz. W rzeczywistości jest odwrotnie - aby się z nimi nie zgodzić, zwracasz na nie uwagę.
Cristián Romo
15
Nie zbaczam z tropu, nie zgadzam się ze wszystkim, co mówi Joel, myślę, że większość czasu ma on do powiedzenia kilka interesujących rzeczy. Mój komentarz był zdziwiony. Jest wiele rzeczy, z którymi zgadzam się, jeśli chodzi o Joela, ale mniej więcej raz w miesiącu każe mi kręcić głową i pytać „Co? Mówisz poważnie ?!”. Które uwielbiam, ponieważ uważam te najtrudniejsze rzeczy, które zmuszają mnie do naprawdę sprawdzenia mojej pozycji i tego, w co wierzę.
557

Decydując DO być „Jack-o-all-handlu”

Dość wcześnie w swojej karierze byłem ekspertem w zakresie konkretnej bazy danych i języka programowania. Niestety, ta konkretna baza danych straciła „wojny baz danych” i odkryłam, że moje opcje kariery były… ograniczone. Po tym świadomie zdecydowałem, że nigdy więcej nie pozwolę się tak zamknąć. Studiowałem więc wszystko, co mogłem zdobyć: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL itp. Bez względu na to, jakie narzędzia i technologie są nowe lub nietypowe, ja został „idącym do faceta” - „Zapytaj Craiga, jeśli tego nie wie, nauczy się”. W rezultacie pracowałem nad wszelkiego rodzaju projektami, od systemów wbudowanych do telemetrii środowiskowej po systemy dowodzenia i kontroli obrony przeciwrakietowej.

Jedyny problem, jaki kiedykolwiek miałem, to firmy, które nalegają, aby zrobić dziurę w specjalności, kiedy moją specjalnością jest generalizacja. [EDYCJA: Znany również jako Polymath lub Renaissance Man lub multi-specjalista. ]

O czym należy pamiętać ... jaki jest okres półtrwania wiedzy w zaawansowanych technologiach? Śledzi to według prawa Moore'a: połowa wszystkiego, co wiesz, stanie się nieaktualna za 18-24 miesiące. Ekspert, który wybierze niewłaściwą dyscyplinę, może łatwo zostać podważony przez technologię; generalista musi tylko dodać trochę więcej umiejętności i pamiętać o lekcjach z przeszłości w stosowaniu tych umiejętności.

Craig Trader
źródło
224
„Jack wszystkich zawodów, mistrz żadnego, choć często lepszy niż mistrz jednego”. -Adam Savage
jms
9
Znakomita rada, głosowałem. „Osieroconą technologią” w mojej przeszłości było moje 8-bitowe Atari, które przegrało z C64. Doszedłem do tego samego wniosku - cytując Heinleina, „specjalizacja dotyczy owadów”.
17
Zawsze występują kompromisy, a dziennie jest tylko 86 400 sekund - musisz zdecydować, w jaki sposób chcesz je wykorzystać. W moim przypadku postanowiłem spędzić dodatkowe godziny (ponad godzinami „pracy”), aby nauczyć się rzeczy, które moim zdaniem były interesujące lub będą poszukiwane w przyszłości; musisz dokonać własnych wyborów.
Craig Trader
74
„Specjalizacja dotyczy owadów”. - Heinlein
Kelly S. French
31
Gdzie jest Twoja odznaka „Generalistyczna”? ^^
Arnis Lapsa
459

Zawsze myślałem o sobie jako o programatorze pracującym na gorąco. Potem do naszego zespołu zatrudniono nowego faceta, nazywającego go Aaron. Aaron był oczywiście znacznie lepszy ode mnie w większości dziedzin. On też był młodszy ode mnie. Uświadomił mi, że tak naprawdę niewiele się poprawiłem w ciągu ostatnich lat. Byłem hakerem ad hoc i przeciętnym.

Zaalarmowało mnie to, że świadomie próbuję poprawić siebie, a zwłaszcza jakość kodu, który piszę.

Aaron poprowadził mnie do nauki wielu rzeczy. Nauczył mnie, w jaki sposób większość kodu, który piszę, będzie musiała być utrzymywana i rozszerzana przez co najmniej kilka lat, więc powinienem o tym pisać. Powinienem napisać automatyczne testy dla mojego kodu. Aaron zawsze mówił o tym, jak nigdy nie powinienem zatrzymywać się przy pierwszej działającej wersji, ale ulepszaj i dopracowuj, dopóki kod nie będzie elegancki. Odkryłem, że języki i narzędzia, których używałem, miały wiele miejsca na ulepszenia.

Najważniejszą rzeczą, której nauczyłem się od Aarona, było to, aby nigdy nie przestawać się uczyć.

Po kilku latach Aaron opuścił firmę. Czułem się pusty. Ostatnie lata spędzone z nim podniosły mnie na zupełnie nowy poziom umiejętności i zdałem sobie sprawę, że jestem teraz znacznie lepszy niż reszta zespołu. Wciąż pisali zły kod i popełniali te same błędy, co wcześniej. Próbowałem ich uczyć, ale oni nie byli zainteresowani nauką. W rzeczywistości denerwowało ich, że ktoś byłby tak arogancki, aby powiedzieć im, jakie popełniają błędy.

Kilka miesięcy później opuściłem firmę. Przeprowadziłem się do mniejszej firmy z bardzo utalentowanym zespołem. Wszyscy tam chcieli dowiedzieć się więcej i bardzo mi się podobało.

Cieszę się, że poznałem Aarona. Bez niego pewnie nadal pracowałbym w starym towarzystwie ze starym gangiem, nigdzie się nie wybieram i zbyt dużo o sobie myślę.

Ville Laurikari
źródło
54
To zwykle działa w obie strony. Przyszedłem do kilku firm jako „Aaron” i przekonałem się, że gdy tylko podniosę napięcie innych programistów, zaczną mnie ścigać o swoje pieniądze i zachęcą do podwojenia moich wysiłków. Wspaniały post!
28
+1 za „Aaron zawsze mówił o tym, jak nigdy nie powinienem się zatrzymywać przy pierwszej działającej wersji, ale przerób i dopracuj, aż kod będzie elegancki”
17
„nigdy nie przestawaj przy pierwszej działającej wersji” ??? - kiedy masz wykonać resztę swojej pracy? :)
4
Próbowałem być Aaronem, czasem to działa, ale czasem się mylę. „Ci, którzy nie mogą uczyć się na historii, skazani są na jej powtórzenie”. Dobrze jest mieć otwarty umysł na nowe pomysły, ale źle jest słuchać n00b nad tymi, którzy już popełnili błędy. Każdy potrzebuje trochę sceptycyzmu, ponieważ uczymy się od zadawania pytań sobie i innym.
27
Problemem jest to, że zbyt wielu ludzi myśli, że są „Aaronem”
cinqoTimo
257

Dwie rzeczy:

  1. Przeczytaj kod napisany przez różne osoby.
  2. Napisz dokumentację do kodu napisanego przez inne osoby.

Pisanie kodu jest niezwykle łatwe; każda inna osoba, którą znam, może to zrobić. Ale odczytanie kodu innej osoby i ustalenie, co ona robi, było dla mnie zupełnie nowym światem.

Swati
źródło
42
I jeden z najlepszych sposobów, aby dowiedzieć się, czego NIE robić :)
AviD
9
Możesz zobaczyć, jak coś robią. Może robią to lepiej niż ty?
4
Musiałem przekopać się do naprawdę starego i całkowicie nieudokumentowanego projektu, udokumentować go, naprawić niektóre błędy i przenieść go do nowego systemu. Dużo się nauczyłem i nie wszystko było tym, czego nie robić. Chociaż nauczyłem się wartości komentarzy.
A podczas pisania dokumentacji możesz dla niej napisać kilka przypadków testów jednostkowych (jeśli nie istnieją). Wtedy będziesz także wiedział, jak korzystać z kodu.
dhable
Tak, to była najtrudniejsza część mojej pracy przez długi czas.
199

Regularnie chodź na siłownię.

Poważnie, mój mózg działa o wiele lepiej, gdy jestem w formie. Problemy stają się łatwiejsze i mniej przytłaczające, wygłupianie jest znacznie mniejszą pokusą, a praca nad krokami krok po kroku nie wydaje się tak trudnym zadaniem.

Rozpoznać
źródło
30
Smutny fakt, że większość ludzi nie ćwiczy, a nawet nie ćwiczy regularnie, stanowi ogromny problem w dzisiejszym świecie.
Sneakyness,
5
Rozszerzę to, jeśli mogę, na dowolną ilość wycieczek fizycznych. Czasami, kiedy przez jakiś czas nie wykonuję dużo pracy fizycznej, zaczynam pragnąć fizycznego zmęczenia. Jest to trochę powieść, kiedy jesteś przyzwyczajony do wyczerpania psychicznego i pomaga się oderwać, gdy tylko myślisz w kółko.
Stimul8d
1
tak, to jest dzisiaj duży problem. nie mamy czasu, szczególnie w Pakistanie, gdzie godziny pracy są o wiele więcej
maz3tt
2
+1 jako przypomnienie dla siebie, aby uzyskać więcej ćwiczeń.
SingleNegationElimination
Uważam, że sport jest świetną motywacją - dla mnie to koszykówka.
Adel
181

Programowanie. Praca nad ciekawymi projektami. Nie ma NIC takiego jak wejście i praca nad rzeczami. Zwłaszcza pod presją. Zawsze mówię każdemu, kto pyta mnie, jak programować - po prostu znajdź fajny projekt (nawet jeśli musisz go wymyślić) i popracuj nad nim.

użytkownik13276
źródło
4
Zgadzam się. Brudzenie rąk w projekcie było prawdopodobnie największym czynnikiem przyczyniającym się do mojej poprawy. ; )
Mike Grace
1
Dokładnie. Najlepszym sposobem na uzyskanie lepszego kodera jest kodowanie. Możesz nauczyć się wszystkiego, czego chcesz od książek, podcastów i współpracowników, ale musisz to zastosować, zanim naprawdę to zrozumiesz. Koduj więcej i koduj więcej różnych rzeczy. Ponieważ nie uczysz się wiele z powtarzania tej samej starej sztuczki.
Wybór trudnych i intrygujących projektów do zrobienia. Myślę, że walka o wyjście poza strefę komfortu naprawdę przyspiesza twoje umiejętności. Nie poszli na księżyc, ponieważ było to łatwe.
Kim Jong Woo
172

Podjąłem pracę w niepełnym wymiarze godzin, ucząc studentów CS na moim uniwersytecie. Naprawdę zmusza cię do zrozumienia czegoś na zupełnie innym poziomie, kiedy musisz wyjaśnić to komuś innemu.

Bill jaszczurka
źródło
1
Mogę za to ręczyć.
1
Instruktor uniwersytecki powiedział mi o otwarciu, kiedy jeszcze byłem studentem. Zostałem przez prawie rok (pół etatu) po ukończeniu studiów.
Bill the Lizard
29
Jak pisze Douglas Adams w „Holistycznej agencji detektywistycznej Dirka Gentleya”: „najlepszym sposobem jest wyjaśnienie tego komuś innemu. To zmusza cię do wyjaśnienia tego w umyśle. Im bardziej powolny i tępy uczeń, tym bardziej tym bardziej musisz dzielić rzeczy na coraz prostsze pomysły ”.
2
Zbyt prawdziwe. Nauczanie fotografii uczyniło mnie lepszym fotografem. Niewiele koderów :(
CAD bloke
9
mutuo ista fiunt et homines dum docent discunt - Seneca
135
  1. Jestem wielkim fanem systemu „ucz się jednego języka programowania każdego roku”. Jeden rok daje ci wystarczająco dużo czasu, aby przejść przez „okej, znam składnię, więc teraz znam język” i zmusza cię do pójścia trochę dalej i zrozumienia, co jest korzystne w tym języku, i programowania w stylu natywnym dla ten język (Rozumiem przez to, że nie kończysz pisać aplikacji Java przy użyciu składni Ruby). Każdy język zmieni sposób myślenia o programowaniu - wiedziałem, jak korzystać z rekurencji, ale myślenie w rekurencji nie miało miejsca, dopóki nie wziąłem lekcji prologu (wyobrażam sobie, że funkcjonalny język, taki jak ML, miałby taki sam efekt).

  2. Rozpocznij projekt zwierzaka. Moje osobiste równanie dla dobrego projektu zwierzaka to coś, z czym masz doświadczenie + coś, czego nie = aplikacja, która byłaby dla Ciebie przydatna. Na przykład Migratr (mój własny projekt z kofeinowym weekendem, który zakończył się w toku) zaczął jako „Wiem c #, ale nigdy nie kodowałem w sieci Web API. Chcę przenieść wszystkie moje zdjęcia do Zooomr”. Równie łatwo mogłoby to brzmieć „Kodowałem wcześniej w interfejsie API internetowych, ale nie znam C #”

Publikowanie projektu twojego zwierzaka jest samo w sobie niesamowitym doświadczeniem edukacyjnym. Nagle wszystkie rzeczy praktycznie nikt nie uczy, ale wszyscy powinni wiedzieć (dla mnie było to konfigurowanie własnego systemu testowego, jak najlepsze wykorzystanie systemów kontroli wersji, jak zadbać o siebie, gdy nikt inny nie określa twoich terminów, jak wchodzić w interakcje z twoim użytkownicy i jak wiedzieć, kiedy powiedzieć „nie”, aby polecać funkcje), to wszystko powoduje wypychanie bąbelków na powierzchnię i zmusza do samokształcenia na poziomie, w którym nie byłeś wcześniej - przynajmniej przez bezczynne czytanie flamewars na dzone o zalety / wady sposobu robienia rzeczy „foo” vs „bar”.

Wykonanie tych dwóch czynności obejmuje oba końce spektrum. Nauka nowego języka sprawi, że będziesz lepszym programistą. Projekt zwierzaka sprawi, że będziesz lepszym programistą: P

Callingshotgun
źródło
Mogę tylko się zgodzić; „projekt zwierzaka w nieznanym wcześniej języku” jest dobry, mogę potwierdzić
Bardzo dobra sugestia, aby nauczyć się czegoś w połowie znajomego.
Świetna sugestia „coś, z czym masz doświadczenie + coś, czego nie masz”! Dzięki
sica07
Potrzebuję teraz zwierzaka.
Adel
118

Nauczyłem się montażu. Czy to na starym układzie 6502, gdy miałem 13 lat? 14? Za dawno. Ale nie mogę wymyślić niczego, co poprawiłoby twój rozwój bardziej niż zejście do poziomu bitowego.

Uczenie się w assemblerze daje wgląd w sposób, w jaki komputery „myślą” na zasadniczo niższym poziomie, a elegancja na tym poziomie jest zaskakująca ... nie ma zmarnowanych ruchów, nie „pozbywa się” danych. Rozwój na tym poziomie nauczy Cię wydajności i doskonali umiejętności krytycznego myślenia i logiki. To również wyleczy cię z wszelkich niedbałych nawyków, które masz dość szybko!

Układ 65xx miał trzy rejestry (akumulator, X i Y) i brak instrukcji poziomu maszyny do mnożenia lub dzielenia. Pamiętam, jak kodowałem procedurę obliczania zniszczeń w bitwie, przeglądałem książkę i nagle uświadomiłem sobie, że będę musiał napisać własną bibliotekę matematyki. Spędziłem kilka tygodni, zapisując cyfry 1 i 0 w całym moim notesie, próbując dowiedzieć się, co tak naprawdę oznaczają „dzielenie” i „miejsca dziesiętne”.

Od tego czasu studiowałem C ++, pascal, .NET, wiele innych ... ale żaden z nich mnie tak nie nauczył, nie zaintrygował ani nie pozostawił poczucia „wow”, które zrobiło moje stare komodore .

snogfish
źródło
16
Muszę zagłosować za przywróceniem wspaniałych wspomnień! Może nawet trochę się rozerwałam :)
Charlie Flowers
3
Nadal mentalnie tłumaczę C / C ++ na język asemblera 68K. To niesamowite, jak pomaga to pisać efektywny kod dla dowolnej platformy.
Bob Murphy,
1
Ah, 6502, przywraca wspaniałe wspomnienia. Nauczyłem się bardzo dużo z asemblerem na tym układzie.
5
KAŻDY student programowania powinien mieć dogłębną ekspozycję na asemblerze na wczesnym etapie edukacji!
2
Zrobiłem to samo, co młodzieniec. Naprawdę nauczył, jak działają komputery, bardziej niż kiedykolwiek język wysokiego poziomu.
CAD bloke
110

Patrząc wstecz na stare rzeczy, które napisałem, i zdając sobie sprawę, jak złe były.

Grant Johnson
źródło
Po drugie, z trudem mogę nawet przeczytać niektóre z moich starych rzeczy.
Unkwntech
28
Kiedy przeglądam moje stare rzeczy, mam prawie nieodpartą potrzebę usunięcia całego pliku. Czasami cały katalog.
Christopher Mahan
+1 za obiektywizm. Przejrzenie starego kodu nie powie ci, jak ulepszyć, tylko jeśli poprawiłeś i jak - lub odwrotnie, jeśli tego nie zrobiłeś.
Zrobiłem to - napisałem cały interpreter skryptów w VB6, napisałem go przez dwa lata; mógł tworzyć okna, obsługiwać ich zdarzenia itp. Stał się tak duży i wymknął się spod kontroli, że nie mogłem już do niego dodawać bez zepsucia wszystkiego. To była ostatnia rzecz, którą napisałem, zanim porzuciłem programowanie książek o programowaniu. Teraz jestem o wiele lepszy, uff . Czytanie tego potwornego projektu uświadamia mi, jak daleko zaszedłem
Carson Myers,
3
@Christopher Mahan: A przy naprawdę złych okazjach cały tom.
Thanatos
93

Czytać

  • książki, nie tylko strony internetowe
  • do samodoskonalenia, nie tylko w przypadku najnowszego projektu
  • o poprawie handlu, nie tylko o najnowszą technologię
  • czytaj kod, nie tylko nad czym pracujesz.

Po prostu rozwijaj apetyt na czytanie.

lamcro
źródło
2
Plus, pieprzenie, 1. Zaczynałem się zastanawiać, gdzie był ten wybór.
Thanatos,
87

Programowanie.

Poważnie, są książki, są kata kodujące, są takie strony, ale uważam, że najlepszym sposobem na ulepszenie jako programisty jest praca nad prawdziwym projektem, z prawdziwymi zmiennymi klientami o rzeczywistych, ciągle zmieniających się wymaganiach z prawdziwą inżynierią problemy. Nic nie zastąpi doświadczenia.

Fishtoaster
źródło
8
Jeśli chcesz coś poprawić, nie ma nic lepszego niż robienie tego.
Jeff Siver
4
+1 - To przypomina mi Finding Forrester : „Pierwszym kluczem do pisania jest ... pisać”
Wizard79
2
Nie ma innej odpowiedzi. Naprawdę nie możesz powiedzieć, że wiesz, co robisz, dopóki nie napiszesz nietrywialnego stosu kodu i nie utkniesz z nim przez kilka iteracji produktu z biznesmenami + klientami. Nie wiesz / naprawdę / jak dobry jest twój kod, dopóki nie nadejdzie czas, aby go zmienić, aby spełniał nowe wymagania.
blucz
1
Zdecydowanie najlepszą rzeczą, jaką zrobiłem, aby poprawić swoje programowanie, było znalezienie pracy.
Matt Ellen,
1
Domyślam się, że pytanie sugerowało „oprócz programowania” ...
UncleZeiv,
81

Myślę, że najważniejszą rzeczą, jaką możesz zrobić, jest świadomy wysiłek na rzecz poprawy. Nie ma jednej srebrnej kuli, musisz ciągle szukać nowych źródeł informacji, nowych doświadczeń i więcej praktyki.

I drugą najważniejszą rzeczą, zastanów się, co robisz, dlaczego to robisz i jak możesz to zrobić lepiej. To samo z poprzednimi projektami. Spójrz wstecz na to, co zrobiłeś i jak teraz możesz to zrobić inaczej. Pomyśl o tym, co można było zrobić lepiej lub gdzie można to jeszcze poprawić.

Codziennie widzę dwa świetne tego przykłady. Mam jednego współpracownika, który uwielbia się uczyć i chce być najlepszym programistą, jakiego potrafi. Wykorzystuje wszelkie przestoje, aby czytać blogi, czytać książki, omawiać techniki programowania i zadawać mnóstwo pytań. Poprawił się także w ciągu ostatniego roku. Inny współpracownik wykonuje swoją pracę i robi to całkiem dobrze. Ale to wszystko, co robi. Trzyma się tego, co wie, nie stara się wiele ulepszać, nie pracuje nad żadnymi projektami poza swoimi istniejącymi, a po 4 latach ma dokładnie taki sam zestaw umiejętności i umiejętności programowania, jakie miał, kiedy się poznałem mu.

Christopher Cashell
źródło
7
I prawdopodobnie ma mniej umiejętności, ponieważ część jego wiedzy stała się przestarzała.
72

Wiele osób sugerowało pisanie kodu. Muszę powiedzieć, że czytanie kodu innych osób jest znacznie bardziej korzystne.

baudtack
źródło
11
połączenie dwóch jest tak naprawdę dla mnie najlepsze; odczyt kodu innych ludzi i refactoring to aby uczynić go bardziej czytelnym jest doskonałym ćwiczeniem
Czytanie dobrego kodu oczywiście ... i rozumienie go. I modyfikowanie go lub pisanie testów.
4
Czytanie kodu jest interesujące, ale tak naprawdę nie dostaje się pod twoją skórę, dopóki tego nie zrobisz.
Musisz to zrobić, aby się tego nauczyć. To jak jazda na rowerze ...
70

Programowane parami z bardzo różnorodnymi i opiniotwórczymi ludźmi

Granice zdrowia
źródło
Jedyne „doświadczenie” w programowaniu parami to chwile, kiedy muszę pomóc innym kolegom. Programuję o wiele bardziej, gdy jest ze mną inna osoba, aby omówić problemy, które napotykam i jak je rozwiążę.
mhitza
67

Podstawowe rzeczy, które pomogły mi jako programistom:

  • Nauczyłem się pisać na klawiaturze.
  • Nauczył się pokonywać nieśmiałość i zadawać pytania.

Wpisanie dla programisty jest niezbędne. Każdy miał współpracownika „programisty”, który pisał na klawiaturze dokładnie dwoma palcami i musiał wszystko sprawdzić na klawiaturze. Nie śmieszne. Nauka obsługi dotyku znacznie zwiększa produktywność programisty.

A jeśli nie zapytasz, nikt ci nie powie.

Nasir
źródło
15
Pisanie dotykowe jest najważniejszą umiejętnością. Największe przestępstwa w programowaniu popełnili ci, którzy próbowali uratować kilka naciśnięć klawiszy.
5
To, moim zdaniem, przewyższa wszystkie inne odpowiedzi. Wpisywanie pozwala zaoszczędzić mnóstwo czasu, co oznacza, że ​​możesz poświęcić więcej czasu na wprowadzanie kodu i wypróbowywanie go. Oznacza to, że możesz wpisać przykłady w książce zamiast kiwania głową, poruszania się i zapominania. Próba bycia programistą z polowaniem i dziobaniem jest jak próba bycia pianistą koncertowym, łaskotając stopami kości słoniowej.
Kyralessa
2
Widziałem, jak ludzie uderzali 15 strzałami w górę, aby odzyskać polecenie 2 postaci. Dość smutne. To jak niektóre dzieci bez IDE ... całkowicie niekompetentne.
7
Przeciwnie, nigdy nie nauczyłem się dotykać pisma. Raz spróbowałem się uczyć, ale natychmiast zacząłem odczuwać ból w nadgarstkach, kładąc je na biurku, aby przyjąć, że prawidłowe ułożenie dłoni wywiera nacisk na najważniejszy tunel nadgarstka. Tak więc myślę, że pisanie na klawiaturze ma przynajmniej pewne zalety ergonomiczne. Robię to od tak dawna, tylko sporadycznie spoglądam na klawiaturę, więc nie tracę realnej wydajności. Większość czasu i tak nie spędzam na wpisywaniu znaków, spędzam na czytaniu kodu i zastanawianiu się, jak najlepiej rozwiązać pojawiające się problemy.
Eloff,
2
Pozycje rąk nie są ważne - ważne jest, że możesz pisać bez konieczności patrzenia. Na laptopie nie spoczywam na nadgarstkach.
56

Udział w projektach typu open source był dla mnie zdecydowanie najważniejszy.

użytkownik13643
źródło
53

Możesz przeczytać wszystkie książki, kod i projekty open source, które ci się podobają, ale musisz zrozumieć aspekt rozwoju oprogramowania dla użytkownika końcowego. Musisz wyjść z komory echa. Zajmę się więc kilkoma nietechnicznymi kwestiami, które pomogą twojej karierze technicznej.

  1. Odsuń się od klawiatury i wejdź w interakcję z użytkownikiem końcowym i zobacz, jak widzą, jak korzystają z oprogramowania. Użytkownicy końcowi zazwyczaj nie są techniczni, więc widzą oprogramowanie jako magiczną pracę, a oprogramowanie jako logiczny zestaw kroków. Dwa światy są zupełnie inne. Więc to, co wydaje się łatwe i logiczne, może wydawać się tajemnicze i zastraszające dla innych.

  2. Test, test, test. Wiele programów, które widziałem w dużych korporacjach, wykorzystuje przypadki testowe. Do diabła, używają JUnit, xUnit i wszystkich innych dostępnych języków testowania jednostek. Problem, który widziałem, polega na tym, że większość programistów nigdy nie widzi, jak wygląda ich oprogramowanie w środowisku produkcyjnym. Dowiedz się, w jaki sposób użytkownicy (lub systemy, jeśli są to zadania wsadowe) wchodzą w interakcję z aplikacją, biblioteką lub interfejsem, aby dowiedzieć się, jakiego rodzaju odrażające informacje na nich rzucają. Pomoże Ci to wygenerować dobre przypadki testowe i przestaniesz zakładać, że Twój program zawsze będzie otrzymywać poprawny zestaw danych.

typowe
źródło
Prawdziwe. Możesz przetestować swoją (do tej pory) ostateczną wersję, pozwalając grupie osób, które znasz nietechniczne, wypróbować ją i usłyszeć ich komentarze (koniecznie wybierz osoby, które nie powiedzą „To dobrze!”, Ponieważ to wściekle nie pomaga ci w najmniejszym stopniu.)
48

Nauczył się programu.

mbishop
źródło
Tak, to też było dla mnie duże. Znaczące były także pisanie dotykowe i programowanie par.
46

Pisanie kodu i dużo.

Oded
źródło
Wszyscy zaczynamy pisać kiepski kod. Jeśli napiszesz wystarczająco dużo i będziesz nad tym pracował, poczujesz się lepiej. Recenzje kodu pomagają, ale najlepszym sposobem jest przejrzenie własnego kodu.
Czytanie kodu i dużo.
Stefan
3
Czytanie i pisanie wielu kodów ... Open source jest dla nas takim dobrodziejstwem;)
Oded
45

Nauka wyrażeń regularnych.

Vhaerun
źródło
Właśnie to zrobiłem cztery miesiące temu, kiedy zacząłem uczyć się perla! Moja umiejętność korzystania z vim i unixa w ogóle gwałtownie wzrosła! Niesamowity.
sixtyfootersdude
Wyrażenia regularne są nie tylko przydatne, ale także pozwalają myśleć inaczej.
Tikhon Jelvis
+1. Całkowicie się zgadzam. Jestem zaskoczony, że ludzie często zaskakują, robiąc całkiem podstawowe rzeczy w vi, sed lub grep.
39

Rywalizacja w konkursach TopCoder Algorytm .

Paul Reiners
źródło
14
Uważam, że TopCoder jest trochę problematyczny. OK, pozwala ci to lepiej myśleć o algorytmach, ale jesteś zmuszony pracować ze złym stylem (cały kod w jednej klasie) i pod presją czasu, więc prawdopodobnie nie będziesz komentować i testować. Być może Project Euler jest lepszym wyborem.
3
Nie jesteś zmuszony do pracy w złym stylu; możesz mieć tyle zajęć, ile chcesz. Lepiej też przetestuj, jeśli chcesz konsekwentnie przejść, ponieważ rozwiązanie, które zawiedzie przypadek pojedynczej krawędzi, otrzymuje zero punktów.
2
@hstoerr - nie wspominając o tym, że konkurenci są nagradzani za utrudnianie czytania kodu (ich rozwiązanie jest trudniejsze do zakwestionowania)
Shane Fulmer
7
(przepraszam, jeśli to brzmi obraźliwie) Uważam, że ludzie, którzy nie lubią Topcodera (lub innych podobnych konkursów), próbują wymyślić powody, dla których ich wykonanie uczyni z ciebie strasznego programistę. W porządku, jeśli ich nie lubisz. Ale wymyślanie fałszywych powodów nie jest pomocne. Żaden poważny zawodnik w TC celowo nie ukrywa kodu (w rzeczywistości jest to podstawa do dyskwalifikacji, jeśli zostanie złapana). Widzę wielu ludzi, którzy nie konkurują, cały czas pisząc zły kod. Konkursy algorytmiczne nie mają na celu nauczyć dobrych nawyków kodowania (dowiedz się, że skądinąd), a raczej nauczają / rozwijają coś głębszego.
MAK
2
TopCoder to sposób na pokazanie, o ile lepiej możesz się stać.
38

Idź na całość: stwórz własny projekt, kamienie milowe, zasoby, zależności, wymagania i plan testów. Zmusi cię to nie tylko do poprawienia umiejętności programowania w zakresie określonych parametrów, ale również do podkreślenia, gdzie najbardziej potrzebujesz poprawy. Regularnie aktualizuj swoje postępy, czy to za pośrednictwem bloga, czy też bardziej formalnych aktualizacji projektu, abyś mógł dokładnie zobaczyć, gdzie byłeś i dokąd chcesz się udać.

Magsol
źródło
36

Rzuć moją ostatnią pracę.

mihn
źródło
2
Ja też! (potrzebujesz więcej znaków ...)
6
Jeśli powiesz nam dlaczego, może to być nawet odpowiedź. ;-)
2
Wspieranie projektu, który został wykonany w ramach wewnętrznych (opartych na EJB2), nie było moim pomysłem na zabawę. Żadnych nowych rzeczy, tylko stare badziewie. Perspektywy w nowej pracy nie są lepsze. :(
mihn
Byłem tam, zrobiłem to.
Allbite
+1 Powodzenia w znalezieniu pracy, która nie jest ślepą uliczką.
Tomek Szpakowicz
29

Myślę, że ciągłe kwestionowanie tego, co robisz, jest najważniejsze. Nigdy nie myśl, że Twój kod jest doskonały, zawsze staraj się go ulepszać.

Wygląda na to, że miałem 2 lub 3 razy, kiedy myślałem, że mój kod jest idealny, a potem zdałem sobie sprawę, że mam przed sobą długą drogę.

Wydaje mi się, że największą rzeczą było to, że zacząłem postrzegać mój kod jako pochłaniany przez innych programistów, a nie maszynę. Łatwo jest napisać kod, który urządzenie może przetworzyć, ale trudne jest pisanie SUCHEGO, zrozumiałego kodu.

I nie chodzi mi tylko o zrozumienie „Co robi ta linia”, mam na myśli uczynienie trywialnym zrozumienie „Jak ta klasa pasuje do wszystkich innych klas”, jednocześnie czyniąc interfejs klas tak dobrze uformowanym, że jest to praktycznie niemożliwe niewłaściwie go używać.

Bill K.
źródło
29

Mówią, że 70% dobrego kodu to sprawdzanie błędów i obsługa. Kiedy zacząłem programować w ten sposób, mój kod stał się znacznie lepszy. Myślenie o tym, co może pójść źle, a następnie natychmiastowe radzenie sobie z nim, zrobiło ogromną różnicę. To czuje się jak robi wszystko, sprawdziany dopiero się w sposób dotarcia kodu w górę i działa, ale skraca czas od początku do końca przez współczynnik 2 do 4.

Kim są ci ludzie „oni” i gdzie „oni” żyją?

Harold Bamford
źródło
28

Moje umiejętności kodowania znacznie się poprawiły, kiedy zacząłem się zastanawiać, zanim zacznę coś wdrażać, jak mam to udokumentować .

„Rzecz” tutaj powinna mieć możliwie największą ziarnistość. Od metody do całego produktu. Na przykład na poziomie metody zapobiega dodaniu metody w interfejsie API, która nie pasuje lub jest niejasna, przed jej faktycznym napisaniem. A jeśli naprawdę muszę wdrożyć metodę, której nie mogę (łatwo) udokumentować, to znak, że gdzieś jest problem projektowy ...

Automatycznie postawa „ jeśli nie potrafię tego wyjaśnić, nie piszę ” odfiltrowuje zły kod i odwrotnie, gdy wiem, jak poprawnie udokumentować rzecz, staje się prostsza i czystsza w implementacji.

kabado
źródło
28

Ciągle ucz się i ćwicz to, czego się uczysz.

Za pomocą:

  1. Projekty osobiste: Odkąd zacząłem programować, realizuję projekty osobiste. Począwszy od małych gier, przetwarzania obrazu, steganografii, wdrażania specyfikacji typów plików, wdrażania różnych protokołów od zera lub wdrażania różnych programów w czasie.

  2. Czytanie książek: W wolnym czasie postanowiłem czytać i przeglądać różne książki. Istnieje wiele dobrze napisanych książek ekspertów, którzy siedzą i czekają na przeczytanie. Głębokość, jaką można uzyskać z książki, nie ma sobie równych, na przykład czytając różne posty na forum.

Brian R. Bondy
źródło
10
+1 za wzmiankę o książkach. Dużo doświadczenia nie jest warte wiele, jeśli wszystko spędza się na robieniu rzeczy w niewłaściwy sposób.
mbillard
27

Zwykle jest to mój chronologiczny porządek uczenia się każdej nowej technologii:

  1. Regularnie czytaj dobre blogi (Atwood, Martin Fowler itp.), Bądź na bieżąco z nowościami technologicznymi, Śledź rzeczy o ciekawych nowych technologiach. Te kroki pozwolą mi zdecydować, czy znajdę coś interesującego do dalszego zbadania.

  2. Przeczytaj odpowiednią książkę lub inny materiał do nauki na swoim poziomie (np. Dla początkujących, jeśli chcesz nauczyć się wzorców projektowych, sugerowałbym „Wzory wzornictwa na pierwszym planie”). Mam również określone preferencje dotyczące książek .

  3. Za pomocą tego, czego się nauczyłem, zrealizuj projekt zabawkowy lub dwa. Nie martwię się o przydatność projektu. Moim zamiarem jest wykorzystanie mojej wiedzy. (np. projekt kalkulatora dla OOP byłby w porządku)

  4. Zobaczę, czy będę mógł użyć tego w pracy . (np. chociaż nie używamy subversion w pracy, używam go jako mojego lokalnego repozytorium, użyłem Ruby do zadania, które w innym przypadku byłoby zbyt monotonne i czasochłonne)

  5. To najlepsza część, którą, jak sądzę, większość ludzi tęskni. Sesje dzielenia się wiedzą. Daj sesję lub dwie innym członkom zespołu, na przykład. Wierzę, że nauczanie jest jednym z najlepszych sposobów, aby naprawdę nauczyć się technologii. Gwarantuję, że Twój poziom zrozumienia technologii stanie się wielorakie, niezależnie od tego, czy odbiorcy ją dostaną, czy nie. :-)

rpattabi
źródło
24

Włam się na jakiś projekt open source przez kilka miesięcy; im większy tym lepszy. Kiedy wchodzisz w interakcję z niektórymi wysoce opiniotwórczymi, zróżnicowanymi geograficznie ludźmi, którzy cię nie znają, nie możesz pomóc, ale uczyć się na własnych błędach znacznie szybciej - myślę, że to pewien czynnik zawstydzający. Ponadto, jeśli zidentyfikujesz jednego lub dwóch naprawdę inteligentnych ludzi, możesz uzyskać od nich cenny wgląd, jeśli nie czystą wiedzę.

Obrabować
źródło