Program w Pythonie

Matematyka a programowanie

Nie jest łatwo zostać informatykiem. Stworzenie sprawnie działającego algorytmu rozwiązującego jakiekolwiek zagadnienie wymaga niezłej znajomości matematyki. Można jednak postawić tezę i w kierunku odwrotnym. Do twórczego uprawiania matematyki potrzebna jest znajomość programowania.

Jednym z przedmiotów, które studiowałem na pierwszym roku matematyki, były podstawy informatyki. Wtedy – w drugiej połowie lat 80-tych ubiegłego stulecia – w nauczaniu programowania triumfy święcił doskonały dydaktycznie język Pascal. Nauczyłem się w szczególności kilku rodzajów instrukcji: przypisania, iteracyjnej czy warunkowej. To pozwoliło na względnie dobry zapis algorytmów służących do obliczania różnych matematycznych wielkości. Ta umiejętność towarzyszy mi przez całe życie zawodowe. Nie wyobrażam sobie, jak mógłbym bez niej w matematyce funkcjonować.

Dla mnie matematyka jest nauką eksperymentalną. Ten obraz tworzą m. in. moje zainteresowania naukowe skupione ostatnio wokół analizy numerycznej w jej aspekcie teoretycznym. Ale duży wpływ ma na to również mój sposób wykładania matematyki studentom kierunków inżynierskich. Od pomysłu na twierdzenie do dowodu wiedzie długa droga. Zwykle mając jakieś przeczucie czy pomysł rozpoczynam od jego numerycznej weryfikacji. Dobieram różne przykłady i prowadzę obliczenia. Ich wykonanie doskonale przyspiesza komputer, więc czemu nie korzystać z dobrodziejstw techniki? Niekiedy wykonanie obliczeń opartych o program napisany w jakimkolwiek języku jest znacznie wygodniejsze i bardziej elastyczne od zastosowania arkusza kalkulacyjnego czy nawet systemu obliczeń symbolicznych. Gdy stwierdzam potrzebę posłużenia się krótkim programem, posługuję się jednym z dwóch języków: R lub Pythonem. Pozwalają one na dość szybki i sprawny zapis wspomnianych powyżej instrukcji.

Gdy dojdzie się do pewnej sprawności, można wręcz tworzyć krótkie programy na bieżąco podczas wykładów. Naprawdę pomaga to zilustrować wiele różnych aspektów prezentowanego materiału. Wciąga też studentów powodując lepszy odbiór. Wielokrotnie w takich chwilach zadaję im pytanie czy znają jakiś język. Okazuje się, że jeśli ktokolwiek uczył się programowania, to tylko hobbystycznie. Mało jest osób z zaawansowanymi umiejętnościami programistycznymi. Najczęściej kłopot sprawia już zastosowanie do obliczeń arkusza kalkulacyjnego.

Wydaje mi się, że już w szkole średniej, a także na pierwszym roku studiów inżynierskich – z założenia propedeutycznym – obok matematyki powinno się równocześnie nauczać programowania w jakimkolwiek nietrudnym do opanowania języku. Po studiach bowiem trzeba te umiejętności zdobywać samodzielnie i często bywa na to za późno. Co więcej, coraz bardziej przekonuję się, że ćwiczenia z matematyki inżynierskiej powinny być przeprowadzane w formie laboratorium, gdzie studenci, siedząc przed komputerami, samodzielnie starają się zaprogramować rozwiązania odpowiednich przykładów. Mimo wszystko nawet przeprowadzanie zajęć z użyciem komputera i pokazywanie na bieżąco obliczeń tworzonych w języku programowania to stanowczo zbyt mało dla dobrego zrozumienia. To jednak rodzaj monologu. Student musi pewne rzecz dotknąć, opukać, obadać, poczuć.

Może czas zerwać z osiemnastowieczną niemiecką tradycją szkolną i unowocześnić proces dydaktyczny? Nie mamy nic do stracenia, a wiele do zyskania…

PS. Na obrazku ilustrującym ten artykuł zamieściłem listing programu rozwiązującego metodą Eulera (w sposób przybliżony) równanie różniczkowe \(y’=x^2+y\) z warunkiem początkowym \(y(0)=1\). Można to równanie (liniowe pierwszego rzędu) rozwiązać w sposób dokładny, więc program służy do zilustrowania, jak (nie)dokładna bywa ta metoda. Lepszą dokładność zapewnia metoda Rungego–Kutty.

4 komentarze

  • Próbowałem się nauczyć R i to nie raz. Strasznie koślawy jest. Ponoć pisany przez naukowców dla naukowców, ma dużo nieintuicyjnych skrótów i tricków.

    To nie jest zły język. Po prostu… bałaganiarski 🙂

    Sam zaczynałem od QBasic i Logo. Potem też Pascal i podobna doń Modula 2, dzisiaj wszystkiego po trochu 🙂

    • Nie zapominajmy, że R jest językiem dedykowanym obliczeniom statystycznych, a dopiero później jest pełnoprawnym językiem programowania. Dla mnie robienie statystyki w Pythonie to droga przez mękę. Natomiast R wraz z nowoczesnym pakietem tidyverse wspaniale wspiera zarówno statystykę, jak i elementy data science. Przetwarzanie potokowe, selekcjonowanie kolumn tabeli, bogate mechanizmy filtrowania danych… to czyni R narzędziem porównywalnym do oprogramowania obsługującego bazy danych. A funkcje statystyczne zebrane są w jednym miejscu. Już w standardzie znajduje się wiele różnorakich testów. Ponadto R doskonale nadaje się do wspierania dydaktyki. Pomaga temu doskonałe IDE w postaci RStudio.

      To, co w R kuleje to wyprowadzanie wyników czyli słabe operacje na tekstach. Tu Python zdecydowaną górą. Dlatego jeśli chcę ładnie zaprezentować wyniki na ekranie, to używam Pythona. Jeśli mi na tym nie zależy, to R, który to język znam jednak zdecydowanie lepiej. Do tego stopnia, że miałem nawet wykład popularyzujący R.

      Ale generalnie moja myśl była taka: jeśli nauczymy się jakiegokolwiek języka, zapisanie algorytmu w dowolnym innym języku nie będzie stanowiło problemu. Tu Pascal był świetny. Zauważmy, że tzw. pseudokod w dużej mierze jest oparty właśnie na nim.

  • Witaj,
    też uważam, że powinno się więcej w dydaktyce (studentów, uczniów szkół średnich) poświęcać trochę czasu na naukę języka programowania.

    Jednak, czy w pierwszym akapicie nie nastąpiło pewne pomieszanie pojęć?
    Pierwsze dwa Twoje zdania brzmią:
    „Nie jest łatwo zostać informatykiem. Stworzenie sprawnie działającego algorytmu rozwiązującego jakiekolwiek zagadnienie wymaga niezłej znajomości matematyki.”
    Sugeruje to, że algorytmy są tworzone przez informatyków. Stworzenie sprawnie działającego algorytmu nie wymaga przecież znajomości ani informatyki ani żadnego języka programowania. Samo słowo „algorytm” podobno pochodzi od nazwiska perskiego matematyka z IX wieku (komputerów i języków programowania to wtedy oni nie znali).
    Z kolei programy tworzą programiści, nie informatycy.

    Ale może się czepiam.

    • Nie uważam tego za czepianie się. Dziękuję za wnikliwą ocenę mojego tekstu. Istotnie, metody numeryczne istnieją znacznie dłużej niż komputery. Istotnie, algorytmy tworzą informatycy, a kodują programiści. Dziś jednak każdy musi być po trosze programistą, a po trosze informatykiem. Sami przecież na swoje potrzeby zarówno tworzymy algorytmy, jak i piszemy programy.

Napisz komentarz