Jak mogę poprawić swoje umiejętności kodowania? [Zamknięte]

76

Oto trochę informacji o mnie, zanim zacznę od pytania.

Jestem studentem informatyki, Java jest moim głównym językiem programowania.

Podstawowym problemem na moim uniwersytecie są standardy nauczania. Nikt nie przejmuje się nauczaniem studentów kodowania wiedzy, a nie tylko wiedzą teoretyczną.

W rezultacie większość moich kolegów z college'u w ogóle nie rozumie programowania.

Nawet ja nie byłem w stanie wyjść z tradycyjnego środowiska programistycznego, które do pewnego stopnia ogranicza moje kodowanie.

Jakie są możliwe sposoby, dzięki którym mogę rozwijać i rozszerzać swoje umiejętności programowania / kodowania.

Czy możesz również zasugerować źródła tego samego?

Edytowano : Źródła sugerujące rozwój umiejętności kodowania.

ykombinator
źródło
13
FYI: Z mojego doświadczenia wynika, że ​​wiedza teoretyczna z pewnością pomoże ci w dalszej części
Gopi
6
Czy umiesz pływać, czytając książkę „naucz się pływać w X dni”?
pramodc84,
9
„Celowa praktyka”. Zrób coś, co jest nieco trudniejsze niż twój obecny poziom, rozwiąż to, ucz się na nim, powtórz.
7
@ pramodc84 Ale na pewno czyta książkę związaną z pływania, a następnie skacząc do rzeki z pewnością pomoże nie tylko bezpośrednio skacząc do rzeki i próbuje nauczyć pływać
Gopi
5
Tak jest na większości uniwersytetów. Stopień nie polega na byciu dobrym koderem; chodzi o poznanie stojących za tym teorii i sposobu ich zastosowania - można powiedzieć, że bycie dobrym programistą pozostaje ćwiczeniem dla absolwenta.
konfigurator

Odpowiedzi:

46

Programowanie jest jedną z dziedzin, w których liczy się doświadczenie. Dlatego, aby stać się lepszym koderem, powinieneś kodować więcej. Jednak pisanie nie jest jedyną rzeczą, którą powinieneś zrobić. Powinieneś także przeczytać kod innych programistów i nauczyć się z niego, czym jest dobry kod. Zobacz SO pytania na ten temat .

Przydadzą Ci się także książki poświęcone kodowaniu. takie jak „Kod zakończony”. Zawierają opis tego, czym jest dobry kod, co w połączeniu z twoją podstawową wiedzą może uczynić cię dobrym programistą.

P Shved
źródło
8
Code Complete to dobra lektura - jest to książka, którą najbardziej chciałbym przeczytać, kiedy skończyłem studia jako programista.
glenatron
2
Teraz ta książka jest na mojej must-readliście. :) Dzięki!
ykombinator
2
@ykombinator:(push 'code-complete must-read)
Giorgio
98

Mój ulubiony cytat pochodzi z Konfucjusza:

Słyszę, wiem. Rozumiem, pamiętam. Rozumiem.

Cała wiedza, którą zdobyłem, pochodziła z zastosowania jednej strategii:

Zawsze wybieraj najtrudniejszą ścieżkę.

Chcesz nauczyć się języka C #? Zdobądź pracę jako programista C #.

Chcesz nauczyć się włoskiego? Idź tam ze słownikiem po angielsku / włosku i porozmawiaj po włosku

Chcesz nauczyć się kodowania? Kod!


źródło
19
+1 za zawsze podążaj najtrudniejszą ścieżką. W końcu stają się łatwą ścieżką! Dobra odpowiedź.
Ryan Hayes
3
Z pewnością wydaje się to trudne zadanie, aby przygotować się na wyzwanie, ale uważam, że motywuje to do odniesienia sukcesu. Świetna odpowiedź. Języki, które znam najlepiej, to te, które najpierw rzuciłem na głowę, nie mając pojęcia, i ciągle się uczę przy każdym projekcie.
Chris
2
Najbardziej zmieniłem się przez większość wyzwań. To jest bardziej pozytywne
2
Dobre programowanie nie jest sportem dla widzów.
Incognito,
4
@Pierre, chcesz nauczyć się 1) łaciny i 2) Perla. Kod Perl w języku łacińskim: csse.monash.edu.au/~damian/papers/HTML/Perligata.html
21

Kodowanie to świetna rada, ale bez kogoś, kto udzieli ci informacji zwrotnej, po prostu powtórzysz swoje błędy. Znajdź pracę, pracuj nad projektem open source, znajdź mentora i poproś go, aby spojrzał na Twój kod.

JeffO
źródło
1
Dokładnie! To świetna uwaga. Prawdopodobnie nie mam jeszcze mentora.
ykombinator
4
Napisz kod i opublikuj go z konkretnym pytaniem na StackOverflow.com, a dostaniesz mnóstwo.
JeffO
2
Właśnie dlatego ciągle wkurzam się, żeby mieć recenzje kodu w naszym projekcie, ale „nie ma na to czasu”.
MetalMikester
1
@MetalMikester - ale zawsze jest na to czas.
JeffO
1
@JeffO Właśnie to się teraz dzieje. :(
MetalMikester
10

Oto prezentacja Dan North i QCon na temat przejścia od nowicjusza do eksperta programisty o nazwie Sharpening the Tools . Poniżej znajdują się kluczowe sugestie z prezentacji:

  1. Ćwicz podstawy: kata, kod dla zabawy ...
  2. Ucz się od innych osób: czytaj książki, blogi itp., Czytaj kod, program w parach ...
  3. Poznaj trendy: co dzieje się teraz w branży
  4. Dziel się wiedzą: najlepszym sposobem na nauczenie się czegoś jest zrozumienie i nauczenie
  5. Utrzymaj swój zestaw narzędzi: użyj „ponadczasowych” i nowych narzędzi
  6. Dowiedz się, jak się uczyć: zrozum, jak działa nauka
ysolik
źródło
8

Spróbuj napisać od podstaw kompilator dla jakiegoś prostego języka. Po drodze znacznie poprawisz swoje umiejętności (dzięki dodatkowym fajnym technikom teoretycznym z formalnej teorii języka). Próbowałem napisać prostą wersję programu Excel i jest to również bardzo miłe ćwiczenie.

Jak inni powiedzieli, jedynym sposobem na poprawę swoich umiejętności kodowania jest faktyczne wykonanie tego. Zabrudz swoją rękę przy niektórych dużych projektach. Ale w przypadku dużego programu jeszcze ważniejsze jest opanowanie technik projektowania oprogramowania, w przeciwnym razie rozmiar programu wydaje się niemożliwy do zarządzania.

Jest jeden fajny cytat z Nate Kirby:

„Źli programiści ignorują szczegóły. Źli projektanci gubią się w szczegółach”.

Zatem przełączanie między tymi dwoma poziomami abstrakcji jest umiejętnością, którą należy opanować.

Również szybkość, o ile wierszy kodu możesz pisać na godzinę, nie jest tym, do czego powinieneś dążyć. Podoba mi się cytat Davida Parnasa :

„Często słyszę programistów opisywanych jako„ ktoś, kto wie, jak szybko zbudować duży system ”. Nie ma sztuczki w szybkim budowaniu dużych systemów; im szybciej je zbudujesz, tym większe będą! ”

DL
źródło
5

Zaimplementowałem pulę zakładów lub grę Baccarat w prawie każdym języku, którego się nauczyłem.

Ten rodzaj oprogramowania obejmuje

  • Daty i godziny wraz z obliczeniami
  • Rodzaje walut i rzeczy, które można przeliczyć na walutę iz waluty
  • Dyskretny zestaw reguł, który można łatwo przetestować
  • Stany, przejście między stanami i wiele podmiotów odpowiedzialnych za przejście stanu
  • Wielu użytkowników z różnymi widokami tego samego modelu
  • Wiele warunków końcowych

Blackjack i poker dla wielu graczy również by działały.

Jednym zastrzeżeniem jest to, że w mojej codziennej pracy pracuję nad systemami finansowymi i istnieje ogromne nakładanie się rzeczy do rozważenia przy pisaniu gry losowej dla wielu graczy i systemu handlowego.

sal
źródło
4
  • Wybierz dobre projekty typu open source i przeczytaj kod.
  • Podejmij projekt średniej wielkości i zacznij pisać
    • Jeśli interesuje Cię tworzenie stron internetowych, spróbuj zbudować istniejącą witrynę od zera przy użyciu swojej ulubionej technologii; co powiesz na Twittera w Django?
    • Jeśli jesteś zainteresowany tworzeniem aplikacji komputerowych, zacznij od notatnika i zaimprowizuj go, aby obsługiwał zaawansowane funkcje (wyszukiwania oparte na wyrażeniach regularnych, na początek).
Amarghosh
źródło
4

Pomyśl o tym w ten sposób ... Tiger Woods nie stał się „najlepszym” golfistą, oglądając golfa lub czytając o nim. Osiągnął to w ten sam sposób, jak każdy inny sportowiec, studiując, ćwicząc, znajdując miejsce, w którym może poprawić swoją grę i coś z tym zrobić.

Kodowanie jest takie samo. Najlepszym sposobem, aby być w tym lepszym, jest przestudiowanie tego, co robią inni, zrozumienie DLACZEGO robią to w ten sposób, a następnie zrobienie tego dla siebie.

Muad'Dib
źródło
Tak, Tiger Woods może stać się „najlepszym” golfistą, mając wielu kochanków. :-) Więc nie jest to naprawdę dobry przykład.
DL,
4

Jak w każdej innej działalności człowieka, najlepszym sposobem na ulepszenie jest ćwiczenie wiedzy, ale do tego potrzebne są ćwiczenia. Dave Thomas , jeden z autorów książki The Pragmatic Programmer, przedstawił koncepcję Code Katas , podobną do koncepcji kata w sztukach walki.

Możesz tam zajrzeć: http://codekata.pragprog.com/

jmservera
źródło
4

Wskocz do wody, początkowo może być zimno i będziesz miał ochotę się wydostać, ale wkrótce twoje ciało przyzwyczai się i ogrzeje ponownie, a gdy poczujesz się dobrze w wodzie, możesz potem popływać Głęboki koniec.

Właśnie skończyłem studia kilka miesięcy temu, gdzie studiowałem Javę. Tak jak ty, nie miałem pojęcia, jak poprawnie kodować. Około miesiąc temu chciałem zbudować aplikację internetową w PHP. Nie wiedziałam, co robię, ale po prostu poszłam. Na początku było to zastraszające i przytłaczające, ale kiedy ćwiczysz, staje się naturalne. Aplikacja napisałem nawet wiele razy, za każdym razem upraszczając ją jeszcze bardziej. Teraz pracuję nad aplikacją od zera, ale tym razem zastanawiam się, jak to zrobić zorientowany na obiekcje i używając PEAR i jego modułu szybkiego formularza, co jest kolejną przeszkodą, którą muszę pokonać, ale mimo to zdeterminowany i podekscytowany.

Więc ćwicz. Wskocz do wody! Powodzenia :)

Jonathan
źródło
3

Proponuję nauczyć się całej składni twojego ulubionego języka. Dowiedz się, jak korzystać z funkcji wirtualnych, dziedziczenia, lambda, jeśli istnieją. itd. Jedną rzeczą, którą zrobiłem, było wzięcie dużej przerażającej biblioteki (zrobiłem to z boostem i STL dla C ++) i sprawdziłem, czy każda linia i każde słowo kluczowe ma sens.

Lub alternatywnie możesz przeczytać odwołanie do składni języka, jeśli istnieje taki, który obejmuje najbardziej aktualną wersję. Przykładem jest tutaj odwołanie do C # (nie wersja u góry. Popełniłem błąd, patrząc na popularniejszą starszą wersję, która nie miała składni, której szukałem)


źródło
3

Ogólny konsensus brzmi: „pisz więcej kodu”, z czym się zgadzam, ale dodam do tej rady, że powinieneś pisać wiele różnych rodzajów kodu. Java jest w porządku, jeśli chodzi o języki, ale zdecydowanie powinieneś pisać kod zarówno w górę, jak i w dół spektrum mocy. Oprócz Javy sugeruję wykonanie kilku małych projektów w języku niższego poziomu (C jest do tego dobry), języku skryptowym (wolę perla, ale python jest również dobrym wyborem), języku funkcjonalnym ( lisp jest tutaj ogólną rekomendacją, ale OCaml i Haskell to również dobre wybory) i przynajmniej zadowalają się czytaniem języka asemblera.

Wybierz też różnorodność typów programów, które wdrażasz. Spójrz na implementację przynajmniej graficznego interfejsu użytkownika, bogatej aplikacji internetowej, klienta i serwera sieciowego, sterownika, narzędzia do mungowania danych, ray tracera i symulacji fizyki.

Wszystkie projekty powinny mieć stosunkowo niewielki zakres, celem nie jest posiadanie interesującego programu, ale zdobycie szerokiego wachlarza doświadczeń w różnych domenach, w których możesz się natknąć, aby nauczyć się różnych rodzajów myślenia potrzebnych dla każdego z nich, i dowiedzieć się, gdzie są twoje zainteresowania.

Gdy to zrobisz, będziesz mieć dobry pomysł na program, który najbardziej Cię interesuje, i możesz znaleźć lub rozpocząć projekt open source, aby uzyskać doświadczenie w pracy z dużymi bazami kodu, zajmującymi się długo- projekty terminowe i współpraca z innymi programistami.

Cercerilla
źródło
2

Otrzymujesz kilka podobnych odpowiedzi, a moje też będą takie same. Napisz kod. Istnieją dwa dobre sposoby, aby to zrobić.

  1. Wybierz coś, co naprawdę Cię interesuje lub Cię interesuje i po prostu zacznij wdrażać. Jeśli lubisz gry, napisz grę. Jeśli interesują Cię treści internetowe, przygotuj ciekawą i oryginalną stronę internetową. Może nawet nie zdołasz go ukończyć, ale doświadczenie nauczy Cię bardzo dużo.
  2. Wybierz projekt open source, który Cię interesuje, i zaangażuj się w niego. Ucz się na podstawie istniejącego kodu i używaj go do naprawiania błędów, budowania testów jednostkowych i wdrażania nowych funkcji.

Każda z tych opcji zapewni Ci bezpośrednie doświadczenie w programowaniu, a także zaangażowanie w społeczności programistyczne, gdy będziesz się uczyć i będziesz musiał zadawać pytania, aby uzyskać z niego więcej. Popełnisz wiele błędów. To dobrze - jeśli przestaniesz popełniać błędy, przestałeś się uczyć i musisz znaleźć nowy sposób na rzucenie sobie wyzwania.

glenatron
źródło
2

Moje sugestie

  • Znajdź projekt zwierzaka i napisz go w innym języku (lyke python / c #) niż ten, który znasz. To nauczy Cię więcej, niż możesz sobie wyobrazić. Spójrz na inne projekty, które są podobne i spróbuj uzyskać z nimi parzystość funkcji. Możesz iść z tym powoli i mieć skromne cele, stale zwiększając poziom trudności dzięki nowym funkcjom. To również staje się twoim show, kiedy idziesz na rozmowę o pracę.
  • Znajdź zastosowania w swoim projekcie dla odpowiednich technologii, takich jak usługi sieciowe, javascript, ajax, geokodowanie i zasadniczo wszystko, co robi postęp w świecie oprogramowania.
  • Graj z innymi systemami operacyjnymi, takimi jak Linux / freebsd. Im większa ekspozycja na różne systemy, tym lepiej zrozumiesz myślenie i dlaczego zrobiły to, co zrobiły.
  • Kiedy skończysz z częściami kodu, wróć do niego i staraj się go ciągle ulepszać. Znajdź niedoskonałości, w razie potrzeby dodaj więcej komentarzy, spróbuj je udoskonalić.
  • Szukaj w c2.com. Istnieje wiele dobrych praktyk kodowania. Naucz się ich i spróbuj zastosować je we własnym projekcie.
  • Przeczytaj książki, takie jak pragmatyczny programista i kompletny kod, dadzą Ci wiedzę o programowaniu zahartowanym w bitwie.
  • To może wydawać się niepowiązane, ale znajdź inne hobby techniczne, jeśli nie masz takiego jak ściganie się samochodami RC, granie na instrumencie lub nauka języka obcego. Im więcej fragmentów mózgu jest w użyciu, tym lepiej i od czasu do czasu musisz się zrelaksować, ponieważ programowanie może być zbyt duże.
Tjaart
źródło
2

Recenzje użytkowników naprawdę pomagają poprawić jakość twojego kodu. Jeśli nie masz prawdziwego mentora, możesz opublikować swój kod [po zredukowaniu go do niezbędnego minimum] na StackOverflow lub RefactorMyCode lub listach mailingowych, a ludzie pomogą ci poprawić jakość twojego kodu.

missingfaktor
źródło
1

"Ćwiczyć!" To jest banał.

Powinieneś przejrzeć to, czego nauczyłeś się na lekcjach matematyki, i stworzyć programy, które zajmą się problemami. Ponadto zaimplementuj program windy, automat (obliczający zmiany monet), aby wyostrzyć swoje umiejętności logiczne. Pomyśl o wszystkim w życiu codziennym i wdrażaj je.

Ming-Tang
źródło
1

Tak, ćwiczenie jest niezwykle ważne, aby rozwijać umiejętności programowania i zachować ich ostrość. Jednak sama praktyka zabierze cię tylko do tej pory. Musisz także uczyć się od ludzi, którzy wiedzą więcej niż ty. Są techniki, o których nigdy nie słyszałeś, praktyki, których korzyści nie są od razu oczywiste, i sztuczki, których nigdy nie wymyślisz sam.

Istnieje wiele sposobów uczenia się nowych technik, zgrabnych sztuczek i przydatnych praktyk. Czytać książki. Porozmawiaj ze współpracownikami. Zadawać pytania. Przejrzyj kod innych osób i poproś ich o sprawdzenie Twojego. Czytaj blogi i artykuły na temat programowania, w tym na tej stronie. Krótko mówiąc, nie pracuj w próżni.

Aha, a jeśli nie jesteś pewien, co oznacza NP-zupełny, lub jeśli notacja big-O Cię przeraża, prawdopodobnie powinieneś wziąć trochę teorii obliczeń i klas algorytmów.

Dima
źródło
1

Powiedziałbym, że powinieneś przeczytać o wzorcach projektowych, takich jak Builder, Factory, Composite, a ostatecznie Observer, Mediator i Flyweight. Wzorce projektowe nie są ostatecznym rozwiązaniem dla rozwiązań kodujących, ale pokazują, jak wdrożyć teoretyczne koncepcje programowania obiektowego.

Tim Claason
źródło
1

Mogę tylko zasugerować to, co dla mnie zadziałało. Marzyłem, aby nauczyć się języka programowania i stworzyć z nim silnik szachowy. Zostawiłem czas na książki, artykuły i małe próbki. Postanowiłem więc sprawdzić prawdziwe projekty, które mają lepszą dokumentację dla programistów. Wybrałem jeden i zacząłem czytać projekt z dnia na dzień. Nie myśl, że mijające dni tracą czas na czytanie. To znacznie lepsze niż spędzanie czasu na czytaniu artykułów i książek. Bardzo napotkasz wiele rzeczy, które nie są jasne na pierwszy rzut oka, ale z dnia na dzień to się zmieni, jeśli będziesz cierpliwie próbował badać. Nie spodziewaj się, że zrozumiesz wszystko w ciągu tygodnia. Musisz zachować niski poziom samooceny, gdy nie rozumiesz niektórych rzeczy. Po prostu spróbuj odkryć, jak ta * niesamowita rzecz działa i sprawia przyjemność.

Wybierz istniejący projekt, który ci się podoba. Zacznij czytać kody, debuguj je i staraj się zrozumieć, jak to działa na co dzień. Skorzystaj również z projektu dla siebie. Następnie zacznij dodawać wybrane funkcje. Spróbuj nawet napisać tę samą lub podobną aplikację.

Świeża krew
źródło