Computer science is not computer programming

Przeglądając aktywne dyskusje w popularnym portalu dla pracowników w grupie Functional Programming natrafiłem na ciekawy wątek dotyczący artykułu poświęconego korzyściom płynącym z rozwijania umiejętności myślenia abstrakcyjnego, szczególnie tzw. computational thinking, terminu sformułowanego przez Jeannette M. Wing w artykule Computational Thinking. We wspomnianą dyskusję włączyło się wiele osób, a wśród nich nawet Bartosz Milewski - propagator Haskella, ekspert w języku C++ oraz współtwórca języka D.

Jeannette M. Wing w swoim artykule Computational Thinking trafnie formułuje czym informatyka - computer science - powinna być, a czym na pewno nie jest. Warto zacytować kilka z nich (wyróżnienia moje):

Fundamental, not rote skill. A fundamental skill is something every human being must know to function in modern society. Rote means a mechanical routine. Ironically, not until computer science solves the AI Grand Challenge of making computers think like humans will thinking be rote.

Ideas, not artifacts. It’s not just the software and hardware artifacts we produce that will be physically present everywhere and touch our lives all the time, it will be the computational concepts we use to approach and solve problems, manage our daily lives, and communicate and interact with other people.

Conceptualizing, not programming. Computer science is not computer programming. Thinking like a computer scientist means more than being able to program a computer. It requires thinking at multiple levels of abstraction.

Mam wrażenie, że niewielu informatyków, których spotkałem dotychczas jest blisko computational thinking. Uszy więdną, gdy słyszy się, że projektowanie rozwiązania to strata czasu czy też sposób na usprawiedliwienie nic-nie-robienia. Porażające jest opaczne rozumienie technik z grupy agile jako sposobu na niekończący się refaktoring czy też programowania jako dopisywania kolejnych bloków warunkowych if. Umiejętności myślenia abstrakcyjnego, tak wartościowego w inżynierii, z pewnością nie sprawdzi też egzamin z kodowania na czas serwowany przez wielu rekruterów. Nie wspominając już o różnorakich testach z funkcjonalności języków programowania czy też konstrukcji, których żaden przytomny inżynier nigdy nie użyje w produkcji.

Do listy punktów przytoczonych powyżej z artykułu Jeannette M. Wing dodałbym jeszcze wybrane dwie z własnych zasad, które sprawdziły się w praktyce: think twice act once oraz coding is the last thing you should do. Ostatniego nie należy mylić z chorobliwym skupieniem się na zaprojektowaniu wszystkiego w teorii do ostatniej kropki, jest to raczej przeciwdziałanie tendencjom małpim i kowbojskim prowadzącym do błędnego zrozumienia i nadmiernej redukcji problemu oraz w prostej linii do katastrofy.

W UK wprowadzany jest zestaw wytycznych w nauczaniu informatyki w szkołach podstawowych, na który składa się m.in algorytmika, struktury danych a nawet elementy robotyki. Całość sygnuje słynny informatyk Simon Peyton-Jones, ekspert w dziedzinie programowania funkcyjnego. I nie jest to informatyka w szkole w polskim wydaniu sprowadzająca się co najwyżej do obsługi pakietu biurowego.

Valid XHTML 1.0 Strict