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!
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?
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?
Upraszczając, informatyka jest nauką o liczeniu, to znaczy przetwarzaniu danych liczbowych. Jest wiele gałęzi tej nauki, a oto kilka z nich:
- 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.
- 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.
- Dane: zapoznajesz się z teorią i zaczniesz zadawać pytania, takie jak: czym jest informacja? Jakie są sposoby jej reprezentacji? Jak kształtujemy rzeczywistość?
- 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.
- 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?
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:
- 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.
- 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.
- 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…
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.
Ach, czytam twojego bloga od daaawna, ale dopiero teraz odważyłam się skomentować, więc pozwól, że pierwszy akapit będzie bardziej ogólny. Mam prawo podejrzewać, że pośrednio rozbudziłaś we mnie miłość do Pythona – nie raz i nie dwa korzystałam z twoich poleceń książek, ćwiczeń czy kursów i jestem już na tym etapie, że ufam ci w ciemno 🙂 Podoba mi się, że swoimi wpisami zaczynasz odchodzić od nauki programowania i przechodzisz do nauki algorytmów i jako takich podstaw teoretycznych, bo nie jest to wcale takie częste na blogach, które czytam.
Jeśli chodzi o tekst, który przetłumaczyłaś, to zgadzam się z nim i uważam, że ludziom zaczyna brakować takiego podejścia. Ciekawe, że oryginał pochodzi z 2014 roku (ojej, przecież ja wtedy dopiero szłam do liceum i nie wiedziałam o czymś takim jak programowanie!) i autor już wtedy widział problem – ciekawe, co powiedziałby na obecny wysyp przebranżowień i szkół programowania? Osobiście nic do nich nie mam, ale trzeba zauważyć, że uczy się tam wąskiego wycinka informatyki, no i faktycznie jest to szkoła PROGRAMOWANIA, a nie algorytmiki, myślenia etc.
Poza tym ten wpis powinien być koronnym argumentem w dyskusjach, czy na studiach informatycznych jest za mało programowania. Moim zdaniem te studia mają za zadanie uczyć nas myślenia i pokazanie różnych opcji w informatyce – okej, może nie raz przestarzałych, ale jednak poszerzających w jakiś sposób nasze horyzonty. Poza tym studia nie przeszkadzają przecież w rozwoju na własną rękę – sama studiuję informatykę na Politechnice Warszawskiej, ale nie żyję samymi studiami, bo w wolnym czasie biegam na wszystkie meetupy Geek Girls Carrots i pomagam dziewczynom w ich organizacji. Więc da się, tylko trzeba chcieć.
Będziesz jeszcze tłumaczyła jakieś inne fajne artykuły? Bo to super pomysł.
Ściskam mocno 🙂
Miło się tego czyta! (ma wyrzuty sumienia, że nadal nie skończyła wpisów kursowo-pythonowych).
* Wpis faktycznie niczego nie stracił na ważności, wręcz mam wrażenie, że to co było już „na zachodzie” u nas własnie też się stało – szkoły programowanie na każdym kroku. Też nie mam nic przeciwko jak komuś to pomaga, chociaż nie jestem zbyt entuzjastcznie nastawiona to trzaskania kursu programista w 3 tygodnie (zastanawia mnie mocno jakość takiego nauczania).
Z pozytywnych myśli – mój brat ma 14 lat, w jego szkole na informatyce jest podręcznik – przejrzałam z myślą o jaki fajny – „twoja pierwsza strona www”, „ugryź pythona”, „c++ czyli trochę o językach kompilowanych” – nawet styl uczenia powoli to się zmienia ;>
a i jeszcze co do tłumaczeń – problem polega na tym, że jest z nimi straaasznie dużo roboty, żeby zachować wierność z oryginałem, a jednocześnie czasem trzeba przystosować do rynku w Polsce. Jak trafię na coś ciekawego i uda zgadzać z autorem, wyrazi zgodę, to pewnie jeszcze jakiś artykuł tłumaczony się tutaj pojawi ^_^
A mi przykro ale nie zgadzam się z twoim artykulem po pierwsze mieszasz naukę dzieci z podstawówki z nauką na studiach lub w szkole średniej to nie jest ten sam poziom…. CoderDojo to świetna inicjatywa tak się składa że moja córka uczęszcza na te zajęcia, więc mogę się trochę więcej na temat wypowiedzieć. Dzieci są zachwycone samą możliwością zrobienia własnej gry w scratch i te zajęcia są po to by rozbudzić ich zainteresowanie pokazać, że zamiast grać w gry czy zajmować się innymi bzdetami można zrobić coś fajnego samemu. Te zajęcia nie są jakimiś bootcampami. Wymagasz od dzieci z podstawówki (bo na zajęcia można zapisać 8 latka) żeby znało podstawy fizyki i informatyki to świetny sposób żeby zniechęcić dziecko…. Jeżeli zainteresuje się na tyle żeby iść w to dalej to zgadzam się z tym co napisałaś ale jest przeznaczone dla starszych dzieci już nastolatków .
Autor wychodząc od tego wstępu w dalszej części wpisu odnosi się do nauki jednak dorosłych – nie dzieci i podejścia do nauki ogólnie – uczenia myślenia/rozwiązywania problemów
Jeśli chodzi o programowanie dla dzieci to polecam wywiad „Czy uczyć i jak uczyć dzieci programowania”: https://www.flynerd.pl/2018/05/czy-uczyc-i-jak-uczyc-dzieci-programowania.html
Rozumiem ale dziwne jest używanie inicjatywy dla dzieci żeby opisać nauke dla dorosłych to wprowadzenie czytelnika w błąd. Uważam że CoderDojo to bardzo fajna darmowa inicjatywa dla dzieci żeby mogły spróbować swoich sił w programowaniu
Jasne, ja popieram wszelkie inicjatywy darmowej edukacji 😉
Wracając na chwilę do CoderDojo czy dzieci. Raczej we wstępie chodzi o fenomen rozprzestrzenienia się nauki programowania właściwie wszędzie łącznie z tym, że trafiła do szkół.
„It seems like everyone is trying to learn to code: Code.org has celebrities like Bill Gates, Mark Zuckerberg, and Chris Bosh telling you anyone can code; CoderDojo’s are springing up all over the country; the UK has made it part of their official curriculum for all grade school kids.
I think this is slightly misguided.”
Później autor się do tego nie odwołuje i też w tekście nie krytykuje samej nauki programowania, jedynie sugeruje, że nie może się ona odbywać w całkowitym oderwaniu od uczenia rozwiązywania problemów^^
Bardzo mądrze napisane!
Sam powtarzam początkującym osobom, że nie jest ważne jaki wybrać język, którą technologię czy jaki system. Ważne by potrafili na problem spojrzeć okiem inżyniera.
Kreatywność, analityczne myślenie i odwaga w stosowaniu nieszablonowych rozwiązań to moim zdaniem klucz do bycia dobrym programistą. 🙂