Czy programiście potrzebna jest matematyka?
Pionier informatyki, Holender Edsger Wybe Dijkstra, odbierając w 1972 roku nagrodę Turinga, powiedział między innymi, że atutem kompetentnego programisty jest zapał do matematyki. Nawet jeśli wybitny naukowiec nieco przesadził, faktem jest, że znajomość matematyki jeszcze nikomu nie przeszkodziła w programowaniu, a wręcz przeciwnie. Z drugiej strony - bycie dobrym matematykiem nie oznacza, że będzie się również dobrym programistą. Zacznijmy jednak od początku - od szkolnictwa wyższego.
Edukacja informatyczna, a matematyka
O popularności kierunków informatycznych w Polsce pisaliśmy już w artykule „Czy programista potrzebuje studiów?”. Teraz warto kilka słów poświęcić matematyce jako elementowi kształcenia przyszłych programistów. Niektóre uczelnie przywiązują do tego przedmiotu bardzo dużą wagę, inne nieco mniejszą, jednak matematyka na studiach informatycznych pojawia się zawsze, a szczególnie na pierwszych dwóch latach. Studenci zgłębiają takie przedmioty jak statystyka i metody probabilistyczne, analiza matematyczna, metody elementów skończonych, algebra liniowa, matematyka dyskretna itp. Tak czy inaczej, matematykę trzeba zaliczyć, jeśli studia chce się ukończyć.
Wiele osób twierdzi nawet, że tzw. „odsiew pierwszego rocznika” odbywa się najczęściej właśnie za sprawą matematyki. Kto nie poradzi sobie z tym przedmiotem, żegna się ze studiami. Nic dziwnego, że niejeden programista ma co najmniej ambiwalentny stosunek do matematyki. Nie ma się co oszukiwać - jeśli ktoś chce zajmować się zawodowo programowaniem, nie uniknie kontaktu z tą dziedziną nauki. Oczywiście nie oznacza to, że w każdym przypadku zagadnienia matematyczne wysuwają się na pierwszy plan.
Gdzie można wykorzystać matematykę, a gdzie jest zbędna?
Trudno wyobrazić sobie programistę bez matematycznych zdolności, a szczególnie umiejętności logicznego myślenia, która pozwala nie tylko sprawnie przyswajać wiedzę, a również wyciągać wnioski i sprawnie analizować problemy programistyczne w poszukiwaniu ich rozwiązań.
Oczywiście wykorzystanie matematyki zależy również od stanowiska, jakie się zajmuje i od wykonywanych zadań. Na przykład w dewelopmencie aplikacji webowych biegła znajomość matematyki nie wydaje się konieczna, ponieważ wiele procesów zostało zautomatyzowanych i rozwiązano praktycznie wszystkie problemy wymagające matematycznej wiedzy. W tej sytuacji developer może się skupić tylko na implementowaniu rozwiązań i na optymalizacji, a do tego matematyka nie jest niezbędna. W zasadzie wystarczy podstawowa umiejętność wyznaczenia złożoności algorytmów. Tu można spokojnie zrobić całą karierę znając tylko podstawy matematyki.
Z drugiej strony są zagadnienia, które wymagają wiedzy z obszaru matematyki. Na pewno przyda się ona przy tworzeniu gier komputerowych, gdy trzeba zaimplementować różne zjawiska fizyczne lub programować silnik graficzny do generowania obrazów 3D. Macierze i wektory wykorzystuje się przy analizie obrazu, algebra jest przydatna w kinematyce i przy kolizjach. Zagadnienia matematyczne pojawiają się także przy pisaniu bardzo złożonych programów, przy operowaniu na dużej liczbie danych, przy tworzeniu i testowaniu algorytmów. Analiza przydaje się również przy optymalizacji.
Obszarem, w którym matematyka zawsze występuje jest Data Science, bo probabilistyka i statystyka są tam często wykorzystywane. Z kolei do uczenia maszynowego bardzo przydaje się algebra liniowa. W obydwu dziedzinach, jeżeli chce się nadążać za najnowszymi trendami, trzeba rozumieć wiele zagadnień matematycznych. Nie zawsze uda się tu bazować na prostych, już wypracowanych modelach - czasem trzeba będzie sięgnąć do prac naukowych, by poznać (i zrozumieć) nowe rozwiązania. Poznajcie artykuł naukowy z Nature o Alpha Go Zero, czyli AI, które samo nauczyło się grać w Go. Przekonacie się, że bez matematyki nie da rady.
W Bulldogjob jesteśmy jednak przekonani, że wiedza jeszcze nikomu nie zaszkodziła, a tym bardziej wiedza matematyczna. Dlatego przychylamy się do stanowiska, że jednak matematyka bywa potrzebna programiście, nawet jeśli nie na co dzień. Po prostu pomaga w zrozumieniu bardziej abstrakcyjnych pojęć i zagadnień.