Umiejętność myślenia, aby być dobrym programistą [zamknięte]

10

Programuję od 15 lat ze stopniem innym niż CS. Głównym powodem, dla którego zająłem się programowaniem było to, że lubiłem uczyć się nowych rzeczy i stosować je w swojej pracy. Byłem w stanie znaleźć i naprawić błędy programowania i ich przyczyny szybciej niż inne. Ale nigdy nie znajduję się w roli guru ani eksperta, może z powodu mojego nie-CS-dur. Kiedy zobaczyłem świetnych programistów, zauważyłem, że są bardzo dobrzy, znacznie lepsi ode mnie, oczywiście, w rozwiązywaniu problemów.

Jedną z umiejętności, które znalazłem w mojej karierze w połowie kariery, jest myślenie o wymaganiach i zadaniach w odwrotnej kolejności i abstrakcyjnie. W ten sposób widzę, co naprawdę muszę zrobić bez szczegółów i mogę szybko znaleźć części rozwiązania, które już istnieją.

Zastanawiam się więc, czy istnieją inne umiejętności myślenia, aby być dobrym programistą. Postępowałem zgodnie z poniższymi pytaniami i pytaniami i faktycznie przeczytałem niektóre polecane tam książki. Ale tak naprawdę nie mogłem wyłapać dobrych metod bezpośrednio stosowanych w mojej pracy programistycznej.

Jakie książki nieprogramowe powinien przeczytać programista, aby pomóc rozwinąć umiejętności programowania / myślenia?

/software/44654/skills-and-habits-to-develop-to-be-good-at-programming-im-a-newbie

Tae-Sung Shin
źródło

Odpowiedzi:

10

Dzięki za wskazówki do istniejących pytań. Odpowiedzi na te pytania różnią się raczej od tego, co rozumiem, że chcesz. Dam ci kilka sugestii z własnego doświadczenia. Mój własny stopień naukowy to fizyka, czy doszedłem do tego pola z lukami w zakresie formalności, poprawności / weryfikacji, analizy algorytmów, programowania dynamicznego, systemów baz danych, a na początku w dużej mierze, wyboru struktur danych i algorytmów. Najbardziej oczywiste luki (np. Struktury danych i algorytmy) wcześniej zamknąłem, ale wciąż czytam książki w tym obszarze, aby pogłębić zrozumienie, zobaczyć alternatywne prezentacje i odświeżyć pamięć. (Mam około 40 lat, więc książki dla mnie działają :)

Oto lista lektur (w żadnej innej kolejności niż w kolejności, w której przyszli na myśl).

  1. Programowanie pereł (Jon Bentley)
  2. Więcej pereł programistycznych (Jon Bentley)
  3. Sztuka programowania komputerowego (Donald Knuth)
  4. Algorytmy w C ++ (Robert Sedgewick)
  5. Podręcznik projektowania algorytmów (Steven Skiena)
  6. Praktyka programowania (Kernighan i Pike)
  7. Elementy programowania (Stepanov)
  8. Jak to rozwiązać (Polya)
  9. Struktura i interpretacja programów komputerowych (Abelson i Sussman)

Dużo czerpałem także z pisania Solid Code, gdy czytałem go w połowie lat 90. Ale nie ma go na liście, ponieważ tak naprawdę nie ma silnego związku z umiejętnościami myślenia jako takimi (dotyczy bardziej projektowania interfejsów API, aby zminimalizować ryzyko przypadkowego niewłaściwego użycia - a przynajmniej to było moje główne odejście od niego).

Jako nastolatek wiele zyskałem także od Gödela, Eschera, Bacha (Hofstadter), ale jest to już wspomniane w odpowiedziach na pytania, które już wskazałeś. Jest to książka do czytania dla przyjemności, a nie bezpośrednio do rozwijania umiejętności informatycznych.

Pracuję z dość dużą liczbą utalentowanych programistów i niemal powszechnie są fanami Programming Pearls . Z pewnością chciałbym, aby więcej kandydatów, z którymi rozmawiałem, przeczytało rozdział 4 tej książki.

James Youngman
źródło
4

Pierwszy; dla każdej dyscypliny zawsze znajdzie się ktoś lepszy w jakiś sposób. Nie martw się o tę część.

Następnie; dyplom CS jest fajny i tak dalej, a wiedza teoretyczna, którą ci daje, jest z pewnością przydatna, ale w żadnym wypadku nie oznacza, że ​​ktoś jest dobrym programistą. Niektórzy z najlepszych programistów są samoukami i wierzcie mi, świat jest pełen absolwentów CS, którzy nie mogli zaprogramować wyjścia z mokrej papierowej torby. Więc nie martw się o tę część.

Co do tego, jak zostać dobrym programistą: Myślę, że dwie rzeczy są niezbędne. Jednym z nich jest to, że musisz umieć podchodzić do problemów w ściśle formalny sposób i myśleć na pewnym poziomie abstrakcji. Jeśli rozumiesz wskaźniki i rekurencję, najprawdopodobniej jesteś dobry na tym froncie. Drugim jest poświęcenie i wytrwałość. Podobnie jak w przypadku innych jednostek, programowanie zajmuje dziesiątki tysięcy godzin dedykowanej, skoncentrowanej praktyki, nie odbywa się to w nocy. Osiągnięcie mistrzostwa w taki czy inny sposób zajmuje co najmniej dziesięć lat. Jeśli jesteś pasjonatem, poświęcenie czasu, skupienie się i znalezienie nowych wyzwań będzie łatwe; jeśli nie, myślę, że nadal jest to możliwe, ale nie będzie to przyjemna jazda.

tdammers
źródło
2

Pamiętaj, ilekroć zaczniesz uczyć się języka programowania Najpierw naucz się Koncepcji i od razu przetestuj, to znaczy zrób to praktycznie po wykonaniu tego ćwiczenia, nie zapomnisz pojęć i ich zastosowania.

Następnie dobrze znana „praktyka czyni mistrza”, która ma również zastosowanie w programowaniu. Im więcej grasz kodem, uruchamiasz kod, czytasz istniejący kod, aby go poprawić, nie byłbyś dobrym programistą, ale gr8.

Chitrank Dixit
źródło
0

Są dwie książki nieprogramowe, które uważam za kluczowe.

Pierwsza to „Lady or the Tiger” Raymonda Smullyana. Jest to świetny zestaw łamigłówek logicznych, który podstępnie obejmuje rodzaj teorii automatów. Sprytne rzeczy.

Drugi to „Godel, Escher, Bach: An Eternal Golden Braid” Douglasa Hofstadtera, w którym myślisz o rekurencji i teorii języka.

Jeśli chcesz dobrych nawyków dla nowicjusza, przeczytaj „Wzory praktyk” Hoovera i „The New Programmers Survival Manual” Cartera. Obie książki mówią o tym, jak rozwijać swoje umiejętności i jak rozwijać karierę. Stosują różne podejścia, ale dobrze ze sobą współpracują.

filozofodad
źródło
0

Interesuje mnie, jak oceniasz umiejętności innych programistów.

Myślę, że konkretna, mająca zastosowanie wiedza daje znacznie bardziej imponujące wyniki niż umiejętności ogólne. Jeśli masz już duży kontekst i być może widziałeś już podobne problemy, być może będziesz w stanie bardzo szybko znaleźć przyczynę problemu. Jeśli wiesz już, jak korzystać z zestawu odpowiednich narzędzi, możesz bardzo szybko budować rozwiązania. Jeśli nie masz jeszcze tej wiedzy, ale masz niezbędne umiejętności, zdobycie potrzebnej wiedzy zajmie ci więcej czasu. W takim przypadku pokonanie dłuższego dystansu zajmuje więcej czasu, co niekoniecznie oznacza, że ​​jesteś wolniejszy.

Oczywiście, jeśli zdobędziesz wiedzę i nauczysz się korzystać z narzędzi, które pomogą ci później, da ci to przewagę. Uważam, że poznanie trochę szerokiej gamy tematów pomaga tutaj, ponieważ pokrywają się one więcej, niż się spodziewałem, a sama wiedza, gdzie szukać potrzebnych informacji, może zaoszczędzić dużo czasu. Ale może to tylko ja.

Vincent Povirk
źródło
0

Lubisz uczyć się nowych rzeczy i szybko naprawiać błędy. Oznacza to, że masz dwa kluczowe elementy, aby zostać guru: entuzjazm i umiejętności. Ale myślisz, że nigdy nie znajdziesz się ekspertem, może potrzebujesz jeszcze dwóch rzeczy: skupienia i czasu. Na przykład, kiedy Linus Torvalds po raz pierwszy wydał Linuksa w 1991 roku, nikt nie uważał go za guru. Nadal pracuje na Linuksie codziennie i jego dziennik scalania można obecnie zobaczyć w repozytorium Git jądra systemu Linux. Jego koncentracja czyni go najbardziej znanym guru w dziedzinie Linuksa. Czas jest pojęciem abstrakcyjnym, oznacza utrzymanie aktualności, zdobywanie doświadczenia poprzez ciągłą praktykę, dzielenie się wiedzą z innymi ludźmi i doskonalenie się z perspektywy czasu.

Mam z tobą tę samą sytuację. Programuję od 15 lat z wykształceniem innym niż CS (EE) i zawsze jestem zdezorientowany moją ogromną luką w stosunku do guru w mojej dziedzinie. Ale marzę, aby zostać guru i zacząłem uczestniczyć w projekcie open source. Umiejętności myślenia pochodzą z praktyki i doświadczenia. Niektóre książki mogą być pomocne, ale ich znaczenie ma głównie charakter instruktażowy. Umiejętności myślenia należące do ciebie pochodzą z twojego własnego doświadczenia. Zacznijmy od teraz!

Ucz się codziennie
źródło