Dwa rodzaje programistów

Oryginalny post: The Two Types of Programmers

Autor: Jeff Atwood

W przeciwieństwie do mitu, nie ma czternastu rodzajów programistów. Są tylko dwa, jak przypomniał nam Ben Collins-Sussman.

W świecie tworzenia oprogramowania istnieją dwie "klasy" programistów: nazwę ich 20% i 80%.

Kolesie z grupy 20% to Ci, których możnaby nazwać programistami "alfa" -- liderzy, pionierzy, prekursorzy, typy kolesi, na których punkcie firmy takie jak Google czy Fog Creek mają obsesję. Oni byli jednymi z pierwszych, którzy zainstalowali Linuxa w domu w latach 90; ci ludzie piszą kompilatory LISPa i uczą się Haskella w weekendy "dla zabawy"; aktywnie udzielają się w projektach open source; zawsze są świadomi najnowszych i najfajniejszych trendów w programowaniu i narzędziach.

Kolesie z grupy 80% stanowią większość branży tworzenia oprogramowania. Nie są głupi; są tylko zawodowcami. Chodzili do szkoły, nauczyli się wystarczająco Javy/C#/C++, dostali pracę, która polegała na pisaniu wewnętrznych aplikacji dla banków, rządów, biur podróży, firm prawniczych, itd. Świat zazwyczaj nie zauważa ich oprogramowania. Używają jakichkolwiek narzędzi, które im da Microsoft -- zazwyczaj jest to VS.NET jeśli piszą w C++, albo IDE takie jak Eclipse czy IntelliJ jeśli piszą w Javie. Nigdy nie używali Linuxa i nie są tym zainteresowani. Wielu z nich nie używało nigdy kontroli wersji. A jeśli już, to tylko za pomocą narzędzi Microsoft (jak na przykład SourceSafe) bądź bardziej starożytnych narzędzi, które im się podsunie. Wiedzą wystarczająco dużo, aby wykonywać swoją pracę, pójść do domu i w weekend zapomnieć o komputerze.

Jako iż zawodowo pracuję z zespołami programistów, powala mnie przepaść pomiędzy tymi 20% a resztą świata. Podział między obozami open-source i Microsoft to przy tym płytki rów.

Wstrząsające oświadczenie nr 1: Większość przemysłu oprogramowania składa się z programistów grupy 80%. Tak, większość świata to warsztaty tworzące oprogramowanie na platformę Windows, albo małe firmy zatrudniające własnych programistów. Większość firm posiada trochę gości z 20% i oni zazwyczaj lobbują przeciwko beznadziejnym szefom, aby zmienić zasady, zaktualizować narzędzia bądź zmienić system kontroli wersji na bardziej rozsądny.

Wstrząsające oświadczenie nr 2: Większość maniaków alfa zapomina o wstrząsającym oświadczeniu nr 1. Ludzie, którzy pracują nad oprogramowaniem open-source, biorą udział w pasjonujących debatach o kryptografii na Slashdot bądź ściągają najnowsze wydanie GITa, najprawdopodobniej przestaną zauważać, że te "80%" w ogóle istnieje. Podniecają się tylko najnowszymi dystrybucjami Linuxa, AJAX toolkitem albo rozproszonym systemem SCM i spędzają cały weekend nad tym, a potem piszą o tym na swoim blogu... a potem są wprawieni w zakłopotanie tym, że nie mogą namówić swojego biura na używanie tego.

Być może nie jest to dla mnie tak wstrząsające, ale mimo wszystko jest to doskonałym i ważnym upomnieniem dla każdego.

Często myślę, iż tracimy swój czas na pisanie blogów, które w większości są czytane przez tę samą grupę 20%. Moje doświadczenie podpowiada mi, że istnieje mały, cenny interwencjonizm pomiędzy programistami alfa i resztą. A jeśli jest, to trwa dziesięciolecia. I jeśli naprawdę chcesz zmienić status quo tworzenia oprogramowania, jeśli chcesz, aby zmiany zaszły jeszcze w tym roku, musisz pomóc nam dotrzeć poza naszą małą, odizolowaną grupę programistów alfa i wpłynąć na pozostałe 80% świata. I to jest o wiele, wiele trudniejsze niż propagowanie tego wśród tych 20%. To dlatego właśnie doceniam ludzi takich, jak Scott Mitchell, ponieważ on rozumie wagę dotarcia do tych 80%:

Lubię programowanie i dobrze bawię się przy ASP.NET. Myślę, iż interesujące i fajne jest to, że w zasadzie z niczego, w zaskakująco szybki sposób można stworzyć aplikację webową, pełną informacji, która może być używana przez ludzi z całego świata. Co więcej, chcę rozprzestrzeniać ten entuzjazm wśród ludzi. Chcę powiedzieć tym, którzy nigdy nie programowali, albo tym co używają innych technologii, albo tym co dopiero zaczynają - "Przyjdź tutaj i spróbuj ASP.NET. Patrz, pokażę Ci, co możesz dzięki temu zrobić!" Właśnie dlatego uczę (na czym zarabiam grosze w porównaniu z konsultingiem). To dlatego piszę (na czym da się więcej zarobić niż na nauczaniu, ale nadal nie tak dużo jak na konsultingu). To dlatego udzielam darmowych prelekcji w lokalnych grupach i konferencjach sponsorowanych przez społeczności w południowej Kalifornii. Aby głosić słowo!

Jak dla mnie, mówienie, że tytuły typu Naucz się X w 24 godziny zubożają rzemiosło jest równoznaczne z powiedzeniem, "Nasz klub jest już pełny. Idź sobie." To nie jest, "Powitajmy świeżaków i sprawmy, aby podekscytowali się tą technologią." To raczej, "Świeżaki są spoko, ale muszą najpierw uświadomić sobie jakie to trudne, jak ciężko pracowaliśmy i o ile więcej wiemy niż oni." Takie uczucie ze strony społeczności może wydać się tym ludziom pompatyczne, a powinno być serdeczne.

Chciałbym, żeby to było dla mnie łatwiejsze, ponieważ zgadzam się ze Scottem. Jestem fatalny w tych rzeczach, które opisuje. Myślę, iż prawdziwą miarą nie jest to, jak wielu maniaków alfa jesteś w stanie zaabsorbować. Jest nią to, do jak wielu typowych, przeciętnych programistów dotarłeś, o ile w ogóle. Jeśli naprawdę troszczysz się o sztukę tworzenia oprogramowania, też nam pomożesz budować most pomiędzy tymi 20% a 80%.

Data publikacji oryginału: 25 listopada, 2007

21 komentarze:

Anonimowy pisze...

To jest cholernie smutna prawda :( Sam mam teraz taką sytuację, że jako maniak linuxa i programowania muszę robić dla takiego człowieka, który jest na bakier z technologią a każdą nowinkę techniczną traktuje jako zło i herezje.

Poprosiłem go ostatnio o dostęp do svna (a dokładnie do shella i svna), bo tak mi się lepiej wrzuca poprawki na sewer, oczywiście odpowiedź "svn nie wchodzi w grę", spytany dlaczego nie umiał mi do końca udzielić odpowiedzi- chyba uraziłem w jakieś sposób jego ego i podważyłęm autorytet- nie wiem.

Niestety jako człowiek traktujący swoją prace jako pasję i to że każdy kawałek kodu muszę dopieścić do granic możliwości nie zarabiam tyle żeby mi to starczyło na życie i muszę dorabiać u takich ... 80%

Pozdrawiam wszystkich czytających

rafek pisze...

Jak Waszym zdaniem można zaszczepiać entuzjazm do programowania u innych? I czy w ogóle warto? Jakie są Wasze doświadczenia w tym temacie?

Anonimowy pisze...

A ja uważam, że prawda jak zwykle jest gdzieś pomiędzy i nie do końca zgadzam się z tym, że istnieją 2 rodzaje programistów.

Problem leży raczej w sposobie w jaki ludzie zdobywają wiedzę. Polecam przeglądnięcie poniższej prezentacji: http://www.infoq.com/presentations/Developing-Expertise-Dave-Thomas

Wynika z niej, że większość ludzi (może nawet te 80%) nie chce rozwijać swoich kompetencji, ponieważ jest im wygodnie tam gdzie są. Większe kompetencje to większa odpowiedzialność a nie każdy chce być za coś odpowiedzialny. Poza tym ludzie lubią podążać wyznaczonym schematem - pracować według algorytmu. To powoduje, że po pierwsze nie są obarczeni odpowiedzialnością (gdy coś zchrzanią zawsze mogą powiedzieć "tu tak było napisane" albo "on mi tak kazał zrobić") a po drugie nie muszą się zbytnio wysilać i wymyślać rozwiązań (a człowiek to istota z natury leniwa jest).

Dochodzi tutaj także fakt, że ludzie z natury boją się zmian. Nie chcą przechodzić na coś czego nie znają gdy jest im wygodnie w tym w czym pracują. Jest to poniekąd spowodowane tym, że nie są oni świadomi tzw. bigger picture. Ale to wynika z tego co napisałem wcześniej, ludzie nie koniecznie chcą powiększać swoje kompetencje.

Szczerze polecam prezentację pod linkiem który wkleiłem.

batman pisze...

Ciekawe wnioski, jednak nie mogę się z nim zgodzić. Przede wszystkim dlatego, że jest jeszcze trzecia grupa programistów, do której należę.
Interesują mnie nowinki, znam nieco Linuxa (niestety), interesuje mnie poznawanie nowych rzeczy, ale nie jestem zaślepiony jakimś programem/usługą, że świata poza nią nie widzę i nie uważam ludzi, którzy z tego nie korzystają za idiotów.

Z 80% mam w sobie to, że jeśli mam okazję, to wyłączam komputer i nie uruchamiam dopóki nie muszę. Wolę spędzić czas z żoną, a nie z blaszakiem.

Programowanie jest dla mnie przede wszystkim pracą, którą zarabiam na życie, a nie życiem samym w sobie.

Tomasz Kowalczyk pisze...

Bardzo ciekawy artykuł, moim zdaniem także "tylko dwa" rodzaje programistów to małe spłaszczenie tematu, ale dobrze pokazujące trend, jaki panuje w branży. Z jednej strony mamy ludzi, którzy starają się być coraz lepsi, cały czas szukają nowych metod tworzenia / optymalizacji / zarządzania oprogramowaniem, z drugiej strony są Ci, którzy albo wyklepią albo wyklikają jakiś skrypt i cieszą się, że działa - mając gdzieś siedzące "pod maską" algorytmy.

Osobiście chciałbym być postrzegany, jako ten "20%", ale tutaj też uważam, że jak z pojęciem "hakera" - jeśli ktoś konkretny uważa cię za takiego, to nim jesteś, jeśli sam tak uważasz, to sorry. Nie sądzę, żeby można było tutaj coś zmienić w skali globalnej, bo ludzie są zbyt leniwi, żeby się cały czas uczyć. Z drugiej strony to tylko lepiej dla tych 20% - większa specjalizacja, lepsza praca, większa kasa. Tylko najpierw trzeba się przebić. ;]

Anonimowy pisze...

@batman
"Programowanie jest dla mnie przede wszystkim pracą, którą zarabiam na życie, a nie życiem samym w sobie."

Nie wiem czy przeglądałeś prezentację, którą wkleiłem, ale między innymi właśnie wspominane jest o osobach takich jak Ty. I jest z was zdecydowana większość.

Nie dla każdego programowanie jest pasją, nad którą spędza wieczorami długie godziny. Są ludzie którzy traktują to jak zwykłe rzemiosło. I dlatego ja nie zgadzam się, że są 2 rodzaje programistów, bo grup jest raczej więcej.

Nie jest złe bycie w żadnej z tych grup. Jest się tam gdzie jest nam dobrze i nie każdy chce być świadomy tego big picture, nie każdy chce być ekspertem jak i nie każdy chce ponosić odpowiedzialność. Każdy z nas jest inny i ma inne potrzeby.

Co jeszcze ciekawsze ludzie z tych różnych grup nie potrafią ze sobą rozmawiać. Eksperci mówią na zbyt wysokim poziomie abstrakcji aby nowicjusze mogli ich zrozumieć. Często też nie rozumieją dlaczego inni nie rozumieją tego co oni mówią i często mają takich ludzi za idiotów.

Ja nikogo nie uważam za idiotę tylko dlatego, że jest na innym poziomie zaawansowania w danej dziedzinie niż ja (pewnie są takie w których on jest zdecydowanie lepszy ode mnie).

Najważniejsze to zdawać sobie sprawę z tego z kim się rozmawia i w jaki sposób należy to robić. W tej prezentacji jest pokazane bardzo ciekawe ćwiczenie na to.

Poza tym to nie narzędzia programują, nie IDE, nie frameworki, nie języki programowania, nie metodologie a ludzie! I doprawdy ciekawa jest tendencja ludzi związanych z IT do prowadzenia świętych wojen na temat różnych technologii (ciekawe czy ktoś machnął jakąś pracę naukową na ten temat :)).

batman pisze...

Oglądanie godzinnego filmu, na którym można zobaczyć hiperaktywnych ludzi, zaliczam do czynności, od niewykonania których nie skończy się świat. Innymi słowy - za długie i za nudne.
Nie zrozum mnie źle. Programowanie jest dla mnie pasją, tak samo jak poznawanie nowych rzeczy. Jednak nie jest na tyle ważne, by poświęcić na to życie rodzinne, przyjaciół, czy ogólnie pojmowany wolny czas.

Racje masz pisząc, że grupy programistów nie potrafią ze sobą rozmawiać. Doskonale widać to na forach linuxowych, gdzie użytkownicy "pr0" wyśmiewają "n00b-ów", a jak udowodni im się, że są idiotami, czują się wielce obrażeni.

Nie mogę się jednak zgodzić, że ze wszystkimi rozmawiać. Są ludzie z klapkami na oczach, do których żadne argumenty nie trafiają i nic na to nie poradzisz. W takiej sytuacji zostawiam ich samym sobie. W końcu wymrą.

KonradKubiec.com pisze...

W opisanych kategoriach, zaliczam się do jeszcze bardziej wąskiej grupy 20%. Chociaż nie uważam ten podział za trafny, jedynie za punkt do rozpoczęcia dyskusji.

Dlaczego wąskiej?. Bo filtruję informacje i ograniczam działania. Nie muszę mieć najnowszej dystrybucji Linuksa. Nie muszę głosić zdobytej wiedzy jak religii. Ja udostępniam ją podatnemu na rozwój osobisty gruntowi i taki tworzę w moim otoczeniu. Sam korzystam z tego co chcę i co daje mi frajdę.

Promuję i działam aby zmienić mentalność "80%" i tej ważnej reszty nie będącej programistami(!). To ta reszta podejmuje decyzje i ją też trzeba edukować - inaczej niż programistów. Stąd opisywane problemy ze zmianą podejścia. Wiele osób stwarza pozory wiedzy. Trzeba ich zapewnić, że jej brak nie jest niczym złym i warto ją uzupełnić by na tym zyskać. Wizja zysku motywuje i pomaga przełamać bariery.

KonradKubiec.com pisze...

Jeszcze słowo komentarza do zagadnienia niezrozumiałych ekspertów. Nie każdy Super-Programista jest Super-nauczycielem. Dużo jest ekspertów, którzy nie uczą się jak rozmawiać, tylko stają się specjalistami monologu.

Na szczęście są też tacy, którzy uczą się na swoich błędach i znajdą z rozmówcą wspólny język.

I ostatni komentarz do zmian. Każdy ma prawo rozwijać się w takich kompetencjach w jakich chce. Pisze to by nie zostać posądzony o wciskaniu na siłę wiedzy. Ja daję sposobność zobaczenia "zysku" i pomagam w osiąganiu celu, który sam sobie wytyczysz.

Anonimowy pisze...

@rafek, wg. mnie, nie warto i nie należy tego robić pod żadnym pozorem. Bo i po co? Programowanie to rodzaj aktywności i aby by być w nim wybitnym, potrzeba pasji i tego czegoś. I ci, którzy to mają są entuzjastami per se, często od dziecka. A że oprócz pasji jest też przemysł, biznes, i konkretne pieniądze, programistów z grupy 80 nigdy nie zabraknie.

Paweł Ryznar pisze...

jak mowa o typach to jeszcze taki artykuł ze wczoraj można przeczytać http://www.makinggoodsoftware.com/2010/01/27/types-of-programmer-or-%E2%80%9Cwhy-can%E2%80%99t-we-be-friends%E2%80%9D/

koziołek pisze...

@batman, masz rację. Jest jeszcze grupa pośrednia. Nie jesteśmy "tru masta goorooo", którzy dla jaj piszą moduł kernela (jajecznie wyszło), ale jednocześnie "ograniamy" nowinki, jesteśmy na bieżąco z różnymi systemami i oprogramowaniem narzędziowym. Bardzo często też płaczemy, że w biurze nie chcą nam w końcu zainstalować linuxa. Za to w domu Windows to tylko płyn do mycia okien.
Autor trochę za bardzo spłaszczył temat. Jakieś takie dziwne wrażenie odnoszę, że to kolejny filozoficzny artykuł, w którym używane jest podejście binarne bez próby dokładniejszej analizy.

Pozdrawiam

rafek pisze...

A ja myślę, iż przejaskrawienie jest celowe. Nieważne ile tych grup jest. Na pewno istnieje ta grupa 20%. Problemem jest to, że grupa ta jest często hermetyczna. Wymiana wiedzy odbywa się zazwyczaj w tym samym gronie. Należy pamiętać, że mimo iż my z dnia na dzień stajemy się coraz lepsi/mądrzejsi/obyci, to każdego dnia "rodzi się" gdzieś nowy programista, który zaczyna wszystko od początku -- dopiero wstępuje do klubu. "Nie wiesz co to wskaźnik? To wróć, jak będziesz wiedział!"; "Zerknij do dokumentacji.. nie umiesz angielskiego? To żaden z Ciebie programista!"...

Anonimowy pisze...

Podział na Linuksiarzy i resztę jest subiektywny.
Chodziło chyba o podział na ludzi którzy lubią eksperymentować i na tych, którzy wolą bezpieczną posadkę. Ja lubię poznawać nowe języki programowania, algorytmy, przeglądarki itd.. ale szkoda mi czasu na kompilacje jądra, instalowania patcha do schedulera, konfigurację karty dzwiękowej czy Wifi. To po prostu ma DZIAŁAĆ. BTW - Linuxowcy (i organizacje typu GNU) sami się wsadzili na minę - wymuszając kompilację softu na platformie docelowej mimochodem przyczynią się do popularyzacji .NET i JVM na platformach Unixo-podobnych (bo one umożliwiają binarną zgodność programów z więcej niż jedną dystrybucją).

Anonimowy pisze...

no-lify - inteligentni ludzie.

hackerzy - programiści

super-programmers - coders

programiści - rzemieślnicy

Temat się już przewijał wiele razy. Sprawa się przeważnie rozbija właśnie o to co dana osoba robi w weekend... Ja po całym tygodniu przy kompie chce odpocząć,a niektórzy nie znają odpoczynku innego niż zgłębianie nowej technologii. I linuxa używam (i bardzo lubie) od 17 roku życia, ale znam też c# itd... Troche to nie do końca tak.

Stronnice Chlebika pisze...

Zreszta jezeli wyroznikiem tych 80% ma byc nieznajomosc linuxa i systemu kontroli wersji to ja zle wroze programistom w USA (bo wszak na gruncie tamtejszych doswiadczen powstal ten tekst). W Polsce jest inaczej, i pewnie daloby sie znalezc szereg ludzi, ktorzy o SVNie nie slyszeli, a o linuxie maja wiedze na poziomie "cd" i "ls -al" to istnieje tez olbrzymia grupa posrodku. I nie jest to wina samych tylko programistow, ale tez rynku, ktory potrzebuje takich, a nie innych ludzi. I jest tam miejce i na mastahow, na tych posrodku i na tych co przychodza, klepia kod i wychodza.

Merlin pisze...

Hm, ja bym powiedział, że jest jeszcze 20% ludzi, którzy zajmują się biznesem/designem/multimediami, ale znają podstawowe narzędzia programistyczne, które służą im w pracy.

Te sekretarki, które robią makra w excelu, graficy, którzy poprawiają drobiazgi w PHP Joomli, ludzie od multimediów projektujący interakcję w Processing, no i cała rzesza informatyków, którzy poszli pracować do biznesu, ale mają wiedzę.

To, co Ty wymieniłeś to odpowiednik "early adopters" i "normal users", to o czym ja mówię, to "late adopters" :)

Anonimowy pisze...

Nie zgadzam się z tym postem. Ludzie są zbyt różni, aby szufladkować ich na 2 grupy... na 100 grup to może szybciej.

Nie mówiąc już o bzdurach typu >szaraki używają Eclipsa lub SourceSafe'a<. Rozumie się, że pro pisze programy w notatniku, i zawsze używają git'a bo nie lubią udogodnień? Lepiej skupić się na poleceniach dla systemu wersji i samemu robić wcięcia w kodzie niż skupić się na pisaniu logiki?

BTW: SS nie lubię, ale w dużych systemach to klient (nie szef) narzuca infrastrukturę. Tak często było u nas (raz SS, raz ClearCase).

Anonimowy pisze...

Programowanie to rzemioslo - bez znaczenia czy spedzasz na tym wieczory czy nie.
Uzywanie narzedzi ze stajni Microsoftu czy innych wspomnianych nie znaczy, ze ktos nie jest pasjonatem i ze jest kiepskim programista. Programista przede wszystkim rozwiazuje problemy, w najprostszy mozliwy, a zarazem efetywny sposob. Uwazam, ze ludzie tacy jak autor (nie znam osobiscie, ale zakladam ze wywyzszanie sie i szufladkowanie jest czyms poparte) sa napewno technicznie dobrzy, ale podejscie maja fundamentalnie zle. Sam uzywam git huba i svn dlatego, ze sa darmowe i jak narazie wystarczajace dla zastosowan mojej firmy, ale uwazam, ze Team Foundation Server jest o wiele lepszym narzedziem. Nie ma nic zlego w tym ze narzedzie takie jak TFS czy Visual Studio ulatwia nasza prace, bo przeciez o to wlasnie w tym zawodzie chodzi. Jezeli ktos tego nie rozumie, to nie moze byc dobrym programista, nawet jezeli wymiata od strony technicznej.
Ja sam napewno nie naleze do tych 20%, ale jestem pasjonatem, interesuje sie nowosciami i staram sie (z uzyciem zdrowego rozsadku) uzywac nowych technologii. Programuje od ok. 5 lat i poznalem w tym czasie programistow, ktorych autor zaliczylby pewnie do tych 80% chodciazby dlatego, ze uzywaja niewlasciwych narzedzi (Visual Studio, ASP.net itp), a mimo to sa najlepszymi programistami jakich kiedykolwiek spotkalem (a spotkalem ich wielu). Poznalem tez kilku fanatycznych zwolennikow open scource, linuxa itp. i niestety musze przyznac, ze zaslepienie sprawialo, ze programistami byli naprawde kiepskimi.
Moim zdaniem, najwazniejsze jest korzystanie z narzedzi wlasciwych dla danego problemu, bycie obiektywnym i nie popadanie w skrajnosci. Do tego odrobina skromnosci tez nikomu jeszcze nie zaszkodzila.

Anonimowy pisze...

"Rozumie się, że pro pisze programy w notatniku, i zawsze używają git'a bo nie lubią udogodnień?"

Uzywaja Vima i Gita bo lubia FAKTYCZNE usprawnienia i pracuja w ten sposob wielokrotnie szybciej niz w ciezkim Eclipse czy NetBeans.

Anonimowy pisze...

OK, no to zaliczam się do80% tylko dlatego, że programowanie to dla mnie praca.
Dzielenie ludzi na grupy nie jest dobre, zresztą w tych Twoich boskich 20% znam niejedną porażkę.

Prześlij komentarz

Related Posts with Thumbnails