Co odróżnia programistów wyjątkowych od naprawdę dobrych? [Zamknięte]


59

Wiesz kim oni są. Są gwiazdami rocka programowania:

  • Kodują 10 razy szybciej.

  • Ich kod po prostu działa.

  • Nie tylko znają swój podstawowy język wewnątrz i na zewnątrz, ale także wiedzą, jak to działa pod maską.

  • Znają odpowiedź na większość pytań, zanim je zadacie.

  • Kilka z nich wymyśliło zasady programowania, których wszyscy używamy.

  • I są też nietypowo pokorni.

O co chodzi z tymi ludźmi? Czy jest coś w ich procesie myślowym, który zasadniczo różni się od ponadprzeciętnego programisty? A może są to po prostu bardzo utalentowani ludzie, którzy ciężko pracują?

Innymi słowy: jak mogę być taki jak oni? Wiem, co myślę, że muszę nauczyć się być tak dobrym, ale wydaje mi się, że nauczenie się tego zajmie mi następne dziesięć lat, a wtedy moja wiedza stanie się przestarzała.


49
Wyjątkowi programiści nie mają bloku try-catch wokół swojego kodu. zing

11
@John: Całkowicie się nie zgadzam, ciągle widziałem 10-krotną grę i wydaje się, że jest to prawda, niestety. Myślę, że dużym problemem jest to, że większość profesjonalnych programistów nie potrafi tak naprawdę programować, a niektórzy nawet nie potrafią programować prostych rzeczy. Nie chodzi o to, że boski programista jest 10 razy wyższy od dobrego programisty, ale raczej boski programista jest 10 razy wyższy niż najgorszy inny programista w swojej organizacji lub zespole.
Pax Noctis,

10
@fennec: Zrób lub nie. Nie ma try.
mmyers

29
18 lat doświadczenia w języku wymyślonym 15 lat temu jest naprawdę imponująca!
Ricky Clarkson,

15
@ Tjaart - Nie, to solidna liczba i badania wykazały to od lat 60. XX wieku. Oryginalne badanie zostało przeprowadzone pod koniec lat 60. XX wieku przez Sackmana, Eriksona i Granta. Przebadali profesjonalnych programistów ze średnio 7-letnim doświadczeniem i stwierdzili, że stosunek początkowego czasu kodowania między najlepszymi i najgorszymi programistami wynosił około 20 do 1; stosunek czasów debugowania powyżej 25 do 1; o rozmiarze programu od 5 do 1; i szybkości wykonywania programu około 10 do 1. Nie znaleźli związku między ilością doświadczenia programisty a jakością kodu lub produktywnością. (Dzięki Steve McConnell).
Jon Hopkins,

Odpowiedzi:


88
  • Humble: wyjątkowy programista nigdy nie twierdzi, że jego kod jest najlepszy, w rzeczywistości zawsze będzie szukał lepszego sposobu (za każdym razem, gdy go zdobędzie) .

  • Pacjent: wyjątkowy programista będzie miał nieograniczoną cierpliwość (nie oznacza to, że będą marnować dni na problem. Zobacz: Narzędzie do rozwiązywania problemów) .

  • Narzędzie do rozwiązywania problemów: wyjątkowy programista będzie w stanie rozwiązać problem w ciągu kilku minut, co może potrwać kilka dni dla przeciętnego programisty.

  • Ciekawe: wyjątkowy programista nie będzie w stanie oprzeć się próbie ustalenia, dlaczego coś się dzieje.

  • Inżynier: Wyjątkowy programista będzie raczej konstruował systemy, niż zbierał kombinacje ram (nie oznacza to, że nie będą używać ram) .


5
Podoba mi się twój punkt inżyniera!
Cedric H.

1
@Chaos - najszybszy znany mi programista zbudował własny framework internetowy. Myślę, że takie rzeczy czynią kogoś lepszym i szybszym. Dzięki za odpowiedź. To sprawia, że ​​czuję się mniej bezradna, kiedy zawsze chcę przerobić rzeczy.
orokusaki,

11
„Inżynier” to kluczowy punkt. Każda linia kodu stworzy solidne podstawy, zamiast dodawać do rozklekotanych kreacji podobnych do Jenga.
Alex Feinman,

5
Nie zrobię -1, ale jako kontrapunkt kwalifikuję się do wszystkich; i nadal jestem do dupy. (Chyba że przeciętni programiści z mojego wyjątku, z którymi porównuję, są naprawdę okropni)
Steven Evers

1
@Chaos, „Ciekawy”, ale tylko do pewnego stopnia.

28

Uderzyłeś go dużo w swoim ostatnim punkcie kuli:

„I są też nietypowo pokorni”.

Myślę, że to połączenie pokory - nie tylko na zewnątrz, ale także w ich umysłach. Akceptują się w błędzie, popełniają błąd i bardzo szybko odwracają się od frustracji. Wielu programistów spróbuje czegoś, zawiedzie, a następnie bardzo szybko zostanie emocjonalnie doprowadzone do stanu, który jest przekleństwem pisania dobrego kodu. Musisz zaakceptować fakt, że nie jesteś idealny i że masz zamiar spieprzyć (często!) I że najlepszą rzeczą, jaką możesz zrobić, to nauczyć się, jak szybko dojść do siebie po tym, jak się popsułeś. To skromny zaufanie , jak „wiem, że jadę bałagan, ale wiem też, jeśli Próbuję, będę się tam dostać w końcu.”

W NLP jest powiedzenie: „Nie ma awarii, tylko informacje zwrotne”. Myślę, że aby zostać programistą gwiazd rocka, musisz się z tym pogodzić. Nie ma nic, czego nie można kodować. Na początku możesz być powolny, ale jeśli będziesz próbować i nie będziesz chciał przestać, gdy coś zawiedziesz lub coś spieprzysz, dostarczysz. I w tym procesie poznasz wszystkie mentalne sztuczki, których potrzebujesz, aby stać się jednym z najlepszych.

Porady są oczywiście tak dobre, jak ich źródło, więc ... wszystko tylko moja opinia.


„Nie zawiodłem, znalazłem 10000 sposobów, które nie działają” - Thomas Edison
ninjalj

1
Jedynym sposobem na szybką naukę jest zaakceptowanie, że możesz się doskonalić i chcesz.

25

Bardzo dbają o swój kod.


2
Niewątpliwie prawda.
Robert Harvey

3
Czy biedny programista nie może głęboko przejmować się swoim kodem? Chociaż może to nie być tak dobre?
Walter

2
@ Walter mogli, ale po prostu nigdy tego nie widziałem. Najbliższe, jakie widziałem, to programiści początkujący, którzy bardzo dbali o swój kod, ale wciąż popełniali błędy początkujących (nikt nie jest odporny). Kiedy błędy te zostały wskazane, zostały one jednak szybko naprawione i rzadko powtarzane.
JaredPar

15

Osobiście najlepsi programiści, których znam / znałem, rozumieli podstawy i NIE byli ekspertami w żadnym języku. Po prostu mieli wystarczające doświadczenie we wszystkim. Kanoniczny „Jack of All Trades”.

To coś więcej niż nauka podstawowa, doświadczenie w rzeczywistych operacjach ma znaczną wartość. Przykłady, które rozumieją filozofię Unix, a tym samym mogłyby rozwiązać nieznane problemy za pomocą różnych narzędzi (IOW wiedzieli, gdzie szukać) znacznie przewyższają eksperta Java, który napisał rozwiązanie wątkowe i równoległe.

Wybitni programiści szanują także tych, którzy przyszli przed nimi. Nie nienawidzą relacyjnych modeli danych ani nie zbulwersują, gdy widzą SQL jako formalny interfejs API, ani nie krytykują FORTRAN w matematyce. Wiedzą, że OO to nie wszystko, a przede wszystkim rozumieją, że programowanie to SZTUKA, a nie nauka.


2
Na plik tekstowy grep, awk, sort, i uniqmoże odpowiedzieć na wiele pytań. Jeśli masz perl, jeszcze więcej!

2
Myślę, że to rękodzieło, a nie nauka czy sztuka.
Alexander Gessler,

11

Kiedy zaczynałem, pracowałem z tym facetem, który moim zdaniem był absolutnie genialny we wszystkim, co robił w zakresie programowania. Prawdopodobnie nadal tak jest, ale teraz przeniósł się na stanowisko dyrektora firmy w SE Asia.

W każdym razie utrzymywał prostotę, a proste rzeczy działają. Nigdy nie chciał pisać więcej wierszy kodu niż to konieczne, wszystko, co właśnie zrobił, działało. Przez rok grałem w łapanie, żeby zbliżyć się do jego poziomu. Inną rzeczą jest czas. Robił rzeczy o wiele dłużej niż ja w tamtym czasie i miał okazję zadawać te dokładne pytania w kółko, dopóki nie poznał (pozornie) wszystkich odpowiedzi.

Nie bał się też zadawać pytań. Myślę, że to najważniejsze.


Wygląda na to, że wszystko jest

2
@ acidzombie24 - Lub ... dopiero zacząłeś.
orokusaki,

haha orokusaki. +1

„Utrzymanie prostoty” jest jedną z zalet rozwoju opartego na testach. Nie mogę tego wystarczająco polecić.

10

Matryca kompetencji programisty

Wiele tematów, które pomogą Ci określić swój poziom tematów programowania.


Znajomość przepływu stosu: 2 ^ n: Nigdy o tym nie słyszałem O (n ^ 2): Regularnie stawia kilka prostych pytań na temat SO O (n): Stawia ciekawe pytania i jest świadomy programistów. SE O (log (n)): Góra użytkownik w witrynie SE związanej z CS. ;-)
shuhalo,

Dziękuję bardzo za ten link! Dało mi to pewność co do tego, co wiem i wskazało mi obszary, które powinienem poprawić.
oksayt,

7

Odpowiedzi na to pytanie nauczyłem się w książce o pokerze Texas Hold'em, ale dotyczy to wszystkich frustrujących przedsięwzięć. Najlepsi koderzy nigdy nie przechodzą. Aktywacja Tilt to czas, w którym coś nie działa zgodnie z oczekiwaniami, a Ty reagujesz w sposób, który powoduje wykładnicze błędy w ogólnej aplikacji. W turniejowym pokerze powoduje to, że obstawiasz złe zakłady i znokautujesz.

Podczas programowania tilt powoduje wyciągnięcie włosów i napisanie niedorzecznych łatek kodu, które działają tylko w niektórych przypadkach twojej aplikacji. Tilt powoduje, że programiści ignorują potrzeby całego projektu, chwytając się natychmiastowej satysfakcji, aby rozwiązać natychmiastowy problem. Często problem rozwiązuje się dzisiaj, ale aplikacja cierpi jutro.

Najlepsi koderzy przyjmują koncepcję przechyłu i zarządzają nią w sposób, który pozwala im zawsze patrzeć na problemy z perspektywy zewnętrznej. Jeśli to się nie powiedzie, wypij trochę kofeiny.


co sugerujesz robić jako ćwiczenie, aby przezwyciężyć „przechylenie” podczas programowania? Cały czas to rozumiem i cały czas przepisuję różne rzeczy.
orokusaki,

@orokusaki - Najłatwiejszym sposobem uniknięcia przechyłu jest zmiana fundamentalnego pytania, które programiści zadają sobie codziennie. Zadając problem, zamiast myśleć: „Dlaczego powinienem rozwiązać problem w ten sposób?” zapytaj: „Dlaczego miałbym unikać rozwiązywania tego w ten sposób?” Często odpowiedź na pytanie, dlaczego nie powinieneś rozwiązać problemu z konkretnym rozwiązaniem, daje zestaw wskazówek umożliwiających znalezienie lepszego rozwiązania.
JMC

6

Wyjątkowi programiści:

  • Dbaj o ich kod
  • Dbaj o użytkowników, którzy używają swojego kodu
  • Dbaj o ludzi, którzy utrzymają swój kod
  • Dbaj o produktywność
  • Dbaj o proces, nie tylko o produkt

Dwie rzeczy o współczynniku „10x”:

  1. Musi być stosowany od początku do końca. Nie jest dobre pisanie kodu 10 razy szybciej, jeśli testowanie, przerabianie i konserwacja trwa 10 razy dłużej.
  2. Uważam, że współczynnik „10x” jest odzwierciedleniem tego, jak biedna jest duża liczba programistów, w przeciwieństwie do tego, jak dobra jest niewielka liczba programistów.

3

większość z nich wygląda na zarezerwowanych i nic specjalnego ... niektóre z nich wyglądają na super inteligentne .. wolą sprawdzać / debugować rzeczy dwa razy ze wszystkich możliwych punktów widzenia, ich oprogramowanie jest bezbłędne na świecie: p IMO niektórzy programiści mogą działać wolniej, ale jakość jest lepsza, nawet zwykli ludzie mogą zrozumieć, jak działa ich oprogramowanie!

mam przyjaciela, który napisał swój pierwszy program ASM w wieku 10 lat, teraz ma 24 lata, nie ukończył uniwersytetu, ale to nie powstrzymało go przed założeniem własnej firmy, zarabianiem milionów :) ale z tego co widzę jest zręczny we wszystkim :)

wyjątkowi programiści najprawdopodobniej powiedzieliby, że ten kod można zakodować w inny - lepszy sposób, niż twierdzić, że jest całkowicie błędny i ma niższą reputację innych programistów :)

„O co chodzi z tymi ludźmi? Czy jest coś w ich procesie myślowym, który zasadniczo różni się od ponadprzeciętnego programisty? Czy są to po prostu bardzo utalentowani ludzie, którzy ciężko pracują?”

myślę, że urodzili się w ten sposób, jest w ich DNA: pi nie wie o swoim procesie myślowym, ale najlepszy programista, jakiego znałem, cierpiał na epilepsję


3

Niewiele rzeczy odróżnia wyjątkowość od typowego.

Wyjątkowy:

  1. Bardzo pasjonuje się swoją pracą i stara się dostarczyć arcydzieło.

  2. Wydajność i jakość są w ich oczach najważniejsze, jeszcze przed rozpoczęciem kodowania.

  3. Myślą o ciągłej poprawie po każdym wydaniu.

  4. Czuwają nad alternatywami i wcześnie przyjmują.

  5. Ich tematem w życiu zawodowym jest: „Napisz mniej, przekaż więcej”.

  6. Myślą o logicznych perspektywach, nawet gdy nie kodują.

Typowy

  1. Czasami trochę namiętnie, ale staraj się dostarczać, ponieważ w końcu jest to praca. Jeśli nie jest to arcydzieło, jest OK. Przynajmniej dostarczone na czas.

  2. Pomyślę o wydajności później, w każdym razie komputery są wystarczająco szybkie w dzisiejszych czasach.

  3. Popraw tylko wtedy, gdy nie ma już opcji zapisania zlecenia.

  4. Nie ma czasu na zagłębianie się w inne technologie. Trzymaj się tego, czego wymaga Twoja praca. Dowie się innych rzeczy, gdy zajdzie taka potrzeba.

  5. Ich temat brzmi: „Rób to, o co cię prosi i dotrzyj do domu na czas”.



0

Autopromocja i mam na myśli to w najlepszy możliwy sposób. Posiadanie pracy takiej jak programowanie, szczególnie w zespole, oznacza, że ​​nie jest od razu oczywiste, gdzie twój osobisty wkład pasuje do dużego obrazu lub kto był za co odpowiedzialny. Ludzie, o których słyszymy i o których dowiadujemy się jako „wielcy programiści”, to IMO, którzy opanowali sztukę ujawniania swojego wkładu bez wyrażania egoizmu i egocentryzmu. W wielu przypadkach dzieje się tak poprzez tworzenie narzędzi, bibliotek i oprogramowania, na których reszcie z nas polega zarabianie na chleb powszedni.


3
Być może, ale wierzę, że John Resig jest znany ze swoich niezwykłych osiągnięć w zakresie Javascript i jQuery. Jego rzeczy są szeroko stosowane, ponieważ są świetne, a nie dlatego, że John ma świetne umiejętności marketingowe.
Robert Harvey

@Robert Harvey - A może tak? Bez wątpienia jest świetnym programistą, ale być może to, co sprawiło, że stał się naprawdę dobry do „wyjątkowego”, to fakt, że jego twórczość zyskała na popularności i był ofiarą własnego sukcesu, który musiał nadążać za rosnącym popytem? Jeśli naprawdę lubisz koszulę, ale jest ona zbyt duża, nie próbuj w nią wyrastać, zanim ją kupisz. Do tego czasu zniknie. Kup, a następnie postaraj się jak najlepiej rozwinąć.
orokusaki,

Robert: Zdecydowanie. Ale gdyby tylko udostępnił jQuery kilku znajomym i w pracy, moglibyśmy nigdy o nim nie wiedzieć. Znamy go jako świetnego programistę właśnie dlatego, że miał odwagę nie tylko dzielić się jQuery ze światem, ale także aktywnie promować go jako lepszy sposób na Javascript. Chciałbym, aby więcej programistów (w tym ja) uczyło się, jak to robić skutecznie.
Gaurav,

1
-1 Chociaż może to być prawdą w oczach menedżerów, jeśli chodzi o autopromocję, nigdy nie widziałem, aby działała ona wśród innych programistów. Wśród programistów nie trzeba wcale długo zastanawiać się, kto jest dobry, a kto przeciętny, a kto do bani. Autopromocja nie jest nawet częścią równania.
Dunk

1
@Gauruv - Myślę, że programiści „rockstar” są tymi, którzy są w stanie podjąć trudne problemy i uczynić je naprawdę prostymi. Dlatego nie sądzę, że kawałek kodu jest niesamowity, gdybym na niego spojrzał i powiedział „Woah - kto to napisał”? Podczas gdy myślałem inaczej poza szkołą, doświadczenie w świecie rzeczywistym nauczyło mnie, że spryt w kodzie nie jest cnotą. Jestem pod większym wrażeniem ludzi, że nie muszę się martwić, czy ich rzeczy działają, czy nie, ponieważ już wiem, że to działa bez konieczności patrzenia na to. Ci ludzie są nieliczni i są prawdziwymi programistami gwiazd rocka.
Dunk


0

Bardzo dobry powiązany artykuł: The Free Electron (from randsinrepose.com)

Przepraszam, że nie streszczam tutaj artykułu, ale te kwestie nie są łatwe do oddzielenia od prozy.


Nie mówi wiele o tym, dlaczego. Ale tak, to są ludzie, o których mówię.
Robert Harvey

Cytując z artykułu: „Wolny elektron może zrobić wszystko, jeśli chodzi o kod. Mogą napisać kompletną aplikację od zera, nauczyć się języka w weekend, a co najważniejsze, mogą zanurzyć się w ogromną kupę kodu spaghetti, zrób to i zacznij działać. Możesz budować całe firmy wokół Wolnego Elektronu. Są tak dobre ”.
Robert Harvey

0

Programują wyłącznie intuicyjnie. Nie trzeba myśleć, że po prostu płynie .


Niewątpliwie dotyczy to osób z doświadczeniem w każdym zawodzie, nie tylko programistycznym. Co szczególnie wyróżnia wyjątkowych programistów ?
Robert Harvey

Cóż, nie jestem jednym z nich, więc zdecydowanie nie mogę odpowiedzieć na to pytanie ze 100% pewnością, ale nie sądzę, że chodzi tu o wiedzę, a raczej proces myślowy (podświadomie). Myślę, że ludzie, którzy są wyjątkowi w czymkolwiek, są w stanie usunąć wszelkie ingerencje w ich myśli i zobaczyć coś w bardzo prostej formie. Im coś jest prostsze, tym łatwiej jest go przetwarzać.
John Shaft,

3
-1 Jest to TAK NIEPRAWIDŁOWE pod każdym możliwym względem. Chciałbym móc -100. Powiedziałbym dokładnie odwrotnie. MYŚLĄ POPRZEZ i rozwiązują problem, zanim zaczną.
Dunk

@Dunk - nie zgadzam się. Z tym, co napisałeś, powiedziałbym, że robi to zwykły programista. Nie ma w tym nic wyjątkowego. Porównuję wyjątkowych programistów do wyjątkowych gitarzystów. Nie myślą o granych nutach, po prostu to czują.
John Shaft,

@Pablo - Myślę, że nasze doświadczenia się różnią. Z mojego doświadczenia wynika, że ​​normalni programiści posługują się intuicją i błędnie sądzą, że po prostu płynie. W ten sposób tworzą dużo śmieci. Wyjątkowi programiści poświęcają czas na zrozumienie, dokąd zmierzają. To, że ktoś może pokazać Ci w locie, jak powinieneś projektować swój komponent, nie oznacza, że ​​robi to z intuicji. Założę się, że albo zrobili to wcześniej, albo mają już wgląd w system, jeśli nie w dokumentacji. Tak więc to, co nazywasz postępowaniem intuicyjnym, to naprawdę przemyślany plan.
Dunk

0

Wyjątkowi koderzy mają wpływ na projekt wykraczający poza zakres własnego kodu i wykrywają problemy, zanim się pojawią, ze względu na swoje doświadczenie. Sprawiają, że wszyscy w zespole są lepsi i oszczędzają swoje projekty przed złym projektowaniem i zarządzaniem.

Stworzyli coś wyjątkowego.


0

ale wydaje się, że nauczenie się tego zajmie mi następne dziesięć lat, a wtedy moja wiedza stanie się przestarzała.

To będzie. Udało ci się już ustalić, że ci faceci są 10 razy szybsi, dlatego uczą się tego w ciągu 1 roku i zajmuje ci 10. Jeśli chodzi o poważną część odpowiedzi, myślę, że są już bardzo mądrzy (mogą odnieść sukces w cokolwiek), uwielbiają kodować i z jakiegoś powodu mają (lub znajdują) mnóstwo wolnego czasu na ćwiczenie kodowania lub pracę nad osobistymi projektami.

Jeśli zadajesz to pytanie tutaj, prawdopodobnie nie masz tego, czego potrzeba (nie martw się, odpowiadam tutaj, więc prawdopodobnie też nie mam). Nie przejmuj się, choć nadal możesz być szalony, jeśli lubisz kodować.


0

Istnieje wiele postów o dobrych intencjach na temat pokory, inżynierii, pasji, pacjenta i narzędzia do rozwiązywania problemów. IMO to wszystko jest wymagane. Opisują jednak 30% najlepszych programistów.

Myślę, że pytasz o naprawdę wyjątkowych programistów, najwyższy 1%.

Jedną z rzeczy, których zazdroszczę sporadycznym, bardzo rzadkim talentom, z którymi pracuję, jest ich zdolność do trzymania w głowie bardzo dużej ilości szczegółów dotyczących złożonego systemu w jednym czasie i aby móc szybko go przywołać. Myślę, że mogę to zrobić czasami, może raz w miesiącu, kiedy naprawdę jestem w strefie. To uczucie jest cudowne. Deweloper, o którym myślę, wydaje się być w tej strefie przez większość czasu .

Ta jedna cecha, IMO, oprócz pokory, ciekawości, inżynierii, pasji, cierpliwości i umiejętności rozwiązywania problemów, czyni je naprawdę wyjątkowymi.


0

Ogromne jest posiadanie jakości motywacji i samostanowienia, a także chęć wkroczenia w otchłań nieznanego i czucia się komfortowo przy absolutnym zagubieniu w ramach tego procesu. Nie chodzi o początkowe spryty, jak mogłoby się wydawać, ponieważ mózg staje się znacznie lepszy w rzeczach, które zawsze robi i myśli. Przyszedłem z niczego na studiach, a potem po prostu z powodu wytrwałości stałem się bardzo zamożny, nigdy się nie poddając, będąc tym facetem, który miał problem, gdy wszyscy inni mieli już dość tego, żeby to rozgryźć. Po tego rodzaju uporczywości problemy stały się coraz łatwiejsze - od noobu na studiach po zawstydzanie większości z nich w tym momencie. Sam talent nie wystarcza i czasami może spocząć na laurach.

Ponadto, Robertowi Harveyowi, nie przestajesz robić moich postów, kiedy wspominam o moim systemie CMS, który napisałem od zera. Widzisz kilka innych list, które mogą, ale nie napisały, linki. Popychasz ludzi, którzy są zmotywowani, co jest ironiczne, że to opublikowałeś. Jesteś „człowiekiem” w tym małym wszechświecie i nie czytasz rzeczy na ich zasługach, a raczej grzebię i usuwasz według własnego kaprysu. Za bardzo kochasz Gwiezdne Wojny i prawdopodobnie machasz ręką w kierunku automatycznego otwierania drzwi w sklepie spożywczym, jakbyś miał moc.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.