Nie ucz się programować. Naucz się myśleć!

Ostatnio pojawiło się tutaj kilka postów na temat algorytmiki, a nie o nauce programowania. Zastanawiam się – czy każdy może nauczyć się programować?. Inżynier oprogramowania, Yevgeniy Brikman, nie zgadza się ze stawianiem pytania w ten sposób. Uważa, że istnieje ogromna różnica pomiędzy programowaniem, a uczeniem się informatyki. Co jest cenniejszą umiejętnością? Dziś na blogu macie okazję przeczytać artykuł "Don’t learn to code. Learn to think".

Nie ucz się programować. Naucz się myśleć!

Wygląda na to, że wszyscy próbują nauczyć się programowania: portal Code.org podaje przykłady takich sław jak Bill Gates, Mark Zuckerberg czy Chris Bosh mówiąc, że każdy może programować, CoderDojo to organizacja ucząca kodzenia na terenie całej Wielkiej Brytanii, a lekcje programowania są uwzględnione w oficjalnym programie nauczania dla szkół podstawowych.

Moim zdaniem jest to lekko nietrafione. Nie zrozumcie mnie źle – uważam, że świat byłby lepszy, gdyby wszyscy mieli jakąś znajomość programowania, ale programowanie same w sobie nie powinno być celem. Komputery i kod to tylko narzędzia. Są środkiem do osiągania celu.

Prawdziwym celem powinno być nauczenie ludzi nowego sposobu myślenia. Innymi słowy powinniśmy uczyć Informatyki (jako dziedziny Computing Science), a nie samego kodowania.

W czym tkwi różnica?

Jeśli bardziej niż słowo pisane przemawia do was obraz, gorąco polecam wspaniały wykład Simona Peytona Jonesa zrealizowany przez TEDx talks, który stanowił inspirację do stworzenia tego wpisu:

Wolicie jednak poczytać? Świetnie. Zacznijmy od próby odpowiedzenia sobie na pytanie, dlaczego właściwie programowanie czy informatyka są ogóle takie ważne?

Celem uzyskania odpowiedzi udajmy się na krótką wędrówkę.

Witaj w prawdziwym świecie!

nauka informatyki
Prawdopodobnie czytasz ten wpis w przeglądarce Chrome, Firefox (może Internet Explorer?), a na komputerze masz wgrany system Windows lub OS X, korzystasz z telefonu, laptopa, albo PC. Zapewne spędziłeś/aś dzisiaj trochę czasu przeglądając wpisy znajomych na Facebooku i oglądając filmiki na Youtube. Znaczna część twojego życia zapisała się w sieci: informacje o Twoim zdrowiu znajdują się w medycznej bazie danych, istnieje twój profil zawodowy na Linkedin, sprzedajesz swoje usługi i produkty dzięki Google oraz Facebookowi, a kupujesz na Allegro. Rozliczasz się z podatków przez Internet, przez Internet obsługujesz także konto bankowe, a może interesują Cię kryptowaluty.

Teraz oderwij się od komputera i sprawdź, czy masz w kieszeni smartfona. Jest? Super. Pewnie oprócz tego, że jest wyposażony w GPS, aparat fotograficzny, ekran dotykowy, masz zainstalowane mnóstwo aplikacji. Jeśli jesteś w swoim salonie, możliwe, że masz telewizor LCD, odtwarzacz DVD, VOD, może nawet Smart TV, Xboxa lub PlayStation. Do wyboru, do koloru, o każdej porze dnia i nocy – filmy, muzyka i gry, a wszystko to efekt cyfrowego przetwarzania dźwięku czy grafiki komputerowej.

Chodźmy na zewnątrz. O, czy to twój samochód? Współczesne samochody są projektowane komputerowo przy użyciu specjalnego oprogramowania, na podstawie projektów konstruowane w fabryce pełnej robotów i naszpikowane elektroniką, także w postaci komputera. Będąc w trasie możesz użyć map Google, aby wybrać drogę. Z pomocą TripAdvisor znajdziesz restaurację czy miejsce na nocleg.

Teraz spójrz w niebo: gdzieś nad tobą leci zdalnie sterowany samolot posiadający pokładowe Wi-Fi czy inne formy rozrywki dla pasażerów, samolot pozostający w stałym kontakcie z innymi samolotami, kontrolerami ruchu, a nawet wysyłający raporty do producenta. Gdzieś jeszcze wyżej satelity i stacje kosmiczne krążą wokół Ziemi – fotografują, dokonują pomiarów pogodowych i przekierowują połączenia telefoniczne.

Komputeryzacja zdominowała świat. Ale to dopiero początek. Zanim się zorientujesz, będziesz nosić inteligentne ubrania, zamykać drzwi za pomocą skomputeryzowanego systemu, będziesz używać robotów, które dostarczą zakupy czy posprzątają dom. Wkrótce zaczniesz budować własne drukarki 3D, które wydrukują Ci wszystko od mebli po jedzenie. Przed nami życie w wirtualnej rzeczywistości, podróżowanie samojezdnymi samochodami i latanie w kosmos!

Żyjemy w Matrixie?

programowanie a nauka informatyki
To wszystko ma jakieś wbudowane oprogramowanie. Każdym aspektem twojego życia rządzi jakiś kod. A w przyszłości będzie tego jeszcze więcej.

Z drugiej strony, mimo, że technologia jest wszechobecna, nie oznacza to, że będziesz uczyć się jej w szkole.

Przykładowo, każdy może polecieć samolotem, ale uzyskanie licencji pilota nie jest w podstawie nauczania. Jednak pewne mechanizmy, które pozwalają samolotom latać, są zawarte w obowiązkowej edukacji szkolnej:

  • Fizyka i matematyka pomagają zrozumieć działanie grawitacji, siły, ciśnienia, prędkości, tarcia.
  • Na biologii uczysz się, co dzieje się na dużych wysokościach, kiedy dysponujesz ograniczoną ilością tlenu i zmagasz się z ekstremalnie niskimi temperaturami.
  • Historia opowiada, jak ewoluował świat, jak przebiegały ważne podróże, szlaki handlowe i wojny.

Zanim skończysz szkołę średnią, właściwie poznajesz ułamek wiedzy, ale ten ułamek pokazuje czym samolot jest, jak działa i jak używać go bezpiecznie. Zajęcia ogólnokształcące takie jak fizyka, matematyka, biologia i historia uczą myślenia o różnych kwestiach, w tym także o samolotach. Zupełnie inaczej niż nauka jak używać konkretnego narzędzia np. kurs pilota określonego typu samolotu.

Właśnie dlatego powinniśmy skupić się na nauczaniu informatyki, a nie programowania. Informatyka da nam uogólniony sposób myślenia i pozwoli wybrać czego używać, podczas, gdy język programowania jest konkretnym narzędziem.

Przyjrzyjmy się informatyce, aby zrozumieć to lepiej.

Czym jest informatyka?

czym jest informatyka
Upraszczając, informatyka jest nauką o liczeniu, to znaczy przetwarzaniu danych liczbowych. Jest wiele gałęzi tej nauki, a oto kilka z nich:

  1. Rozwiązywanie problemów: nauka algorytmów, czyli ogólnych strategii rozwiązywania problemów, takich jak słynne dziel i rządź, rekurencja, podejścia heurystyczne, czy przeszukiwania – one pozwolą ci modelować, rozkładać na prostsze i rozwiązywać wszelkiego rodzaju problemy.
  2. Logika: używanie precyzyjnych i sformalizowanych metod myślenia, w tym myślenia abstrakcyjnego, algebry, teorii liczb i teorii mnogości, dzięki czemu możesz łatwo i szybko rozwiązywać problemy.
  3. Dane: zapoznajesz się z teorią i zaczniesz zadawać pytania, takie jak: czym jest informacja? Jakie są sposoby jej reprezentacji? Jak kształtujemy rzeczywistość?
  4. Systemy: w jaki sposób zaprojektować i skonstruować złożone systemy, które spełnią szereg wymagań i ograniczeń? Inżynieria systemowa jest kluczową sprawą w bardzo wielu przypadkach biznesowych.
  5. Myślenie: jednym z najlepszych sposobów zrozumienia ludzkiego umysłu jest próba jego ponownego odtworzenia. Tematy takie jak sztuczna inteligencja, uczenie maszynowe, rozpoznawanie obrazów i przetwarzanie języka naturalnego pozostają w czołówce tematów nie tylko z zakresu informatyki, ale także biologii, psychologii, filozofii i matematyki.

Zauważ, że powyższa lista w ogóle nie wspomina o programowaniu, ponieważ to tylko narzędzie, które pozwala wykonywać obliczenia: samo w sobie nie stanowi informatyki.

Informatyka nie jest nauką o komputerach, tak samo jak astronomia nie jest nauką o teleskopach, a biologia o mikroskopach czy chemia o zlewkach i probówkach. Informatyka nie traktuje o narzędziach.

– Michael Fellows i Ian Parberry

Okazuje się, że istnieje jeszcze jedno narzędzie, na którym polegamy nawet bardziej jeśli chodzi o usprawnianie obliczeń: mózg! Celem informatyki jest nauczenie twojego mózgu nowych, powszechnie stosowanych sposobów myślenia. Ponieważ technologia jest wszechobecna, ten nowy sposób myślenia stanie się równie ważny jak fizyka, matematyka, biologia i historia.

Jednak samo myślenie to za mało: musimy wiedzieć, jak zastosować je w praktyce. W fizyce przeprowadzasz eksperymenty ze skalą, pryzmatami i magnesami, w biologii można użyć probówek, roślin i szalek Petriego, w informatyce zaś – programowania.

Czym jest programowanie?

czy uczyć się programować

Programowanie lub pisanie kodu to sposób, w jaki wydajesz instrukcje dla komputera, aby wykonał jakąś operację. Jeśli nigdy wcześniej nie pisałeś kodu, prawdopodobnie przywykłeś do standardowego używania komputera, poprzez klikanie w ikonki istniejące w obrębie danej aplikacji. Pod zewnętrzną warstwą widoczną dla użytkownika, aplikacja kryje kod informujący komputer o tym, jak wyświetlić aplikację, gdzie przechowywać dane lub skąd je pobierać oraz jak odpowiadać na klikanie.

Programowanie opiera się na zasadach informatyki, o których była mowa powyżej. Wart odnotowania jest fakt, że ten sam zestaw pojęć – logika, algorytmy, dane, inżynieria systemów – może być wykorzystany do skonstruowania każdego programu, od przeglądarki internetowej, dzięki której czytasz ten wpis, aż do oprogramowania autopilota samolotu. Chociaż programowanie wymaga w znacznej części matematyki i w podobnej ilości stosowania różnych struktur, jest także niezwykle twórczym ćwiczeniem: dajesz życie nowym produktom, linijka po linijce.

Nauka programowania w ramach lekcji informatyki przynosi wiele korzyści:

  1. Zrób to sam: jeśli umiesz programować, możesz zbudować własną aplikację. Zacznij od najprostszych rzeczy: utwórz skrypt, który pozwoli grupowo zmienić nazwy zdjęć z podróży lub formułę w Excelu, która pomoże rozliczyć podatki. A później spróbuj zrobić coś bardziej kreatywnego: stwórz stronę internetową, na której przedstawisz swoje portfolio, albo aplikację mobilną dla swojej firmy. Stwórz grę komputerową, w którą zagrasz ze znajomymi.
  2. Rozwiązywanie problemów: gdy już samodzielnie napiszesz kilka aplikacji, zrozumienie funkcjonowania innych będzie dużo łatwiejsze. Kiedy przestaniesz bać się nieznanego – czyli: komputera – osiągniesz poziom mistrza w dziedzinie wsparcia technicznego. Ponieważ technologia ma związek z każdym aspektem twojego życia, umiejętność kierowania nią stanie się równie użyteczna i ważna, jak umiejętność czytania.
  3. Kariera: celem nauki informatyki nie jest wyszkolenie cię na profesjonalnego programistę. Wszyscy uczymy się matematyki, fizyki i chemii w szkole, ale nie wszyscy stajemy się zawodowymi matematykami, fizykami i chemikami. Jeśli jednak odkryjesz w sobie pasję, szybko zauważysz, że inżynier oprogramowania jest jednym z najbardziej docenianych, najlepiej płatnych i najszybciej rozwijających się zawodów.

Podsumowując…

informatyka czy programowanie różnice
Przypomnijmy:

  • Informatyka – stanowi całkowicie nowy sposób myślenia. Schematy, które w niej obowiązują, są przydatne każdemu w świecie wypełnionym technologią.
  • Programowanie – jest istotną częścią nauki informatyki poprzez wykorzystanie nowego sposobu myślenia. Samo programowanie nie jest jednak jej głównym celem.

Mylenie tych dwóch koncepcji przyczynia się do powstawania problemów związanych z nauką kodowania. Slate opublikował artykuł zatytułowany „Może nie każdy powinien uczyć się kodowania”; Atlantic zaś pisał: „Czy akademie dziennikarstwa wymagają od adeptów tej sztuki nauki kodowania? Nie”; Jeff Atwood przestrzegał: „Proszę, nie uczcie się programowania”, a w swoim tekście zadał pytanie, które dobrze podsumowuje całe to zamieszanie:

Czy Michael Bloomberg mógłby być lepszy w wykonywaniu swojej codziennej pracy, która wszak polega na zarządzaniu największym miastem w USA, gdyby pewnego ranka obudził się jako programista Javy?

Jest to oczywiście źle postawione pytanie. Jest wynikiem kampanii, które sugerują, że nauka programowania, w przeciwieństwie do nauki myślenia, jest celem końcowym. Skoro nawet Jeff Atwood, doświadczony i szanowany programista, dał się na to nabrać, to przeciętna osoba nie ma szans, żeby to zrozumieć. Pytanie, które powinno się zadać, brzmi:

Czy Bloomberg – albo ktokolwiek inny – wykonywałby swoją pracę lepiej, gdyby poprawił swoje zdolności myślenia poprzez naukę logiki oraz nowych strategii rozwiązywania problemów?

Odpowiedź jest chyba dosyć oczywista. Ponieważ świat naprawdę zostaje zdominowany przez wpływ technologii, myślę, że staje się nawet jeszcze bardziej oczywista. I właśnie dlatego należy postawić na naukę informatyki jako całości, a nie tylko programowania.


O autorze:

Yevgeniy Brikman
Yevgeniy Brikman
Yevgeniy Brikman uwielbia programować, pisać, przemawiać, podróżować i podnosić ciężkie rzeczy 😉 Jest współzałożycielem Gruntwork, firmy dostarczającej rozwiązania DaaS (DevOps as a Service). Jest także autorem dwóch książek wydanych przez O’Reilly Media: "Hello, Startup" oraz "Terraform: Up & Running"