Dlaczego programiści nie potrafią.. programować

devblogi

Oryginalny artykuł: Why Can't Programmers.. Program?

Autor: Jeff Atwood

Tłumaczenie: Rafał Legiędź (z www.devblogi.pl)

Popadłem w zdumienie, gdy przeczytałem następującą obserwację Reginalda Braithwaite'a:

Tak jak i ja, autor ma problemy z faktem, iż 199 na 200 aplikantów do każdej programistycznej pracy nie potrafi w ogóle pisać kodu. Powtarzam: nie potrafią pisać żadnego kodu.
Autor, do którego się odnosi, to Imran, który najwyraźniej odrzuca wielu programistów, którzy nie potrafią napisać żadnego programu:
Po stosownym okresie prób i błędów odkryłem, iż ludzie, którzy borykają się z programowaniem, nie mają problemów z wielkimi problemami, czy trochę mniejszymi (jak na przykład zaimplementowanie listy). Z trudem radzą sobie z najmniejszymi problemami. Podjąłem się zdania, aby opracować pytania, które potrafiłyby zidentyfikować ten rodzaj programisty i otrzymałem pewną klasę pytań, które nazywam "Pytaniami FizzBuzz" po grze, w którą dzieci w Wielkiej Brytanii często grają (albo grały) w szkołach. Przykładem pytania FizzBuzz jest:
Napisz program, który wypisuje liczby od 1 do 100. Ale dla wielokrotności trójki wyświetl "Fizz" zamiast liczby oraz dla wielokrotności piątki wyświetl "Buzz". Dla liczb będących wielokrotnościami trójki oraz piątki wyświetl "FizzBuzz".
Większość dobrych programistów powinno być w stanie napisać taki program na papierze w przeciągu kilku minut. Chcesz poznać coś strasznego? Większość absolwentów informatyki nie potrafi. Widziałem również samozwańczych starszych programistów, którym napisanie rozwiązania zajęło więcej niż 10-15 minut.
Dan Kegel miał podobne doświadczenia podczas zatrudniania programistów bez stażu:
Zadziwiająco spora część aplikantów, nawet tych z tytułem magistra oraz doktora w dziedzinie informatyki, oblewała podczas rozmów kwalifikacyjnych, kiedy została poproszona o rozwiązanie prostych programistycznych zadań. Na przykład, osobiście przesłuchiwałem absolwentów, którzy nie dali sobie rady z zadaniami typu "Napisać pętlę, która liczy od 1 do 10" albo "Jaka jest następna liczba po F w systemie szesnastkowym?" Mniej trywialnie, przesłuchiwałem wielu kandydatów, którzy nie potrafili użyć rekurencji do rozwiązania prawdziwego problemu. To są podstawowe umiejętności; ktokolwiek komu ich brakuje, prawdopodobnie nie programował zbyt dużo. Wypowiadając się w imieniu inżynierów oprogramowania, którzy muszą przesłuchiwać przyszłych pracowników, mogę śmiało powiedzieć, iż jesteśmy zmęczeni rozmowami z kandydatami, którzy nie mają programistycznej siły przebicia. Jeśli potrafisz z powodzeniem napisać pętlę za pomocą dowolnego języka programowania wymienionego w Twoim CV, która iteruje od 1 do 10 bądź potrafisz wykonywać proste operacje arytmetyczne bez pomocy kalkulatora, albo użyć rekurencji do rozwiązania prawdziwego problemu, to jesteś już na czele grupy.
Tak jak Reginald, Dan oraz Imran zaczynam się niepokoić. Jestem bardziej niż chętny, aby dawać więcej luzu świeżo upieczonym programistom na początku ich kariery. Każdy musi gdzieś zacząć. Ale jestem zaniepokojony i przerażony faktem, iż tak zwany programista mógłby starać się o pracę bez umiejętności napisania najprostszych programów. To policzek w twarz kogokolwiek kto zarabia programowaniem na życie. Rozległy podział na tych, którzy potrafią programować i tych, którzy nie potrafią jest dobrze znany. Założyłem, iż ktokolwiek aplikujący o pracę jako programista ma już za sobą tę różnicę. Najwyraźniej nie jest to rozsądne założenie. Najwyraźniej badanie w stylu FizzBuzz jest wymagane, aby nie marnować czasu przesłuchujących na rozmowy z programistami, którzy nie potrafia programować. Abyś nie pomyślał, że test FizzBuzz jest za prosty -- a jest absolutnie i celowo prosty -- osoba komentująca wpis Imrana odnotowuje jej skuteczność:
Nie cierpię osób przesłuchujących, którzy lekceważą [FizzBuzz] test z powodu, iż jest za łatwy - z mojego doświadczenia zdumiewającym jest, jak wielu kandydatów nie jest w stanie poradzić sobie z najprostszymi programistycznimi zadaniami.
Może rozpoczynanie rozmowy kwalifikacyjnej z programistą bez uprzedniego patrzenia na jego kod nie jest mądre. W Vertigo wymagamy kawałka kodu jeszcze przed etapem rozmowy odbywającej się przez telefon. A etap rozmowy odbywający się na miejscu, zawiera małe programistyczne ćwiczenia. Nic trudnego, bądź tego świadom, tylko podstawowe ćwiczenie na zbudowanie małej aplikacji krok po kroku w około godzinę. Mimo iż były tylko jeden czy dwa wybuchy gniewu, w większości ta strategia była dla nas dobra. Pozwala nam skupić się na inżynierii oprogramowania podczas rozmowy, bez uciekania się do nudnych, zagadkowych pytań. To wstyd, iż musicie przeprowadzać tak wiele badań wstępnych, aby mieć luksus prowadzenia rozmów kwalifikacyjnych z programistami, którzy rzeczywiście potrafią programować. Byłoby to śmieszne, gdyby nie to, że jest cholernie załamujące. Nie jestem fanem certyfikacji, ale zastanawiam się, czy Steve McConnell miał coś w zanadrzu mówiąc o tworzeniu prawdziwej profesji inżynierii oprogramowania.
Jeśli spodobał Ci się ten artykuł, zajrzyj na www.devblogi.pl, gdzie regularnie zamieszczamy tłumaczenia najpoczytniejszych blogów o tworzeniu oprogramowania. Wszelkie prawa do zamieszczonego tłumaczenia są zastrzeżone; prawa autorskie do tłumaczenia zachowuje tłumacz.
Napotkałeś/aś na problem podczas codziennej programistycznej pracy? Nie możesz znaleźć rozwiązania? Serwis devPytania.pl jest dla Ciebie!

Pozdrawiam,
Rafał Legiędź


4 komentarzy

w Pythonie z pętlą for odliczającą od 1 do 10 jest prosto

for i in range(1,11):
print i

No nie wierzę. Mnie to zajęło 3 minuty w C++.

wystarczy modulo... mniej niż 5 min

5 minut, ale musiałem szukać jednej funkcji w pomocy.