Czy programista potrzebuje matematyki? Devdebata

– Programista musi znać matematykę, nie da się od niej uciec. Dopiero jednak w trakcie pracy okazuje się, jakie elementy matematyki programista musi znać. Niektórzy cyfrowo całkują, niektórzy liczą przekątne okna, aby strona dobrze się mieściła, ale bez matematyki, nie da się tego zrobić – powiedział nam Wojciech Potentas zapytany o to, czy każdy programista potrzebuje matematyki.

W jakich sytuacjach matematyka przydaje się w pracy programisty? Czy poziom jej znajomości różni się dla juniora, mida i seniora? W jakich branżach matematyka to podstawa pracy developera? Na te i na wiele innych pytań odpowiedzieli goście:

  • Wojciech Potentas. 4G RAN Performance Management Product Guardian w Ericsson. Inżynier Systemów Informatycznych na Wydziale Elektrotechniki, Elektroniki, Informatyki i Automatyki Politechniki Łódzkiej. Innovation Coach w Ericsson Garage Poland. Rowerzysta, narciarz, żeglarz, modelarz, nałogowy uczestnik forów dla profesjonalistów, były kaskader, lubi ciężkie brzmienie. Najwięcej czasu po pracy poświęca żonie i dwójce dzieci.
  • Paweł Miry. Programista języków skryptowych (Python, Perl, Bash) oraz Operative Product Owner w Ericsson. Magister inżynier Fizyki Technicznej na Wydziale Fizyki i Informatyki Stosowanej AGH. Szkoleniowiec programowania. Po pracy zajęty rolą męża swojej żony i opiekuna psiej córeczki.
  • Monika Wolak. Track and Flow Manager w Ericsson. Magister inżynier Informatyki Stosowanej na Wydziale Fizyki i Informatyki Stosowanej AGH. Posiada doświadczenie testerskie, scrumowe i związane z prowadzeniem szkoleń. Obecnie pracuje przy Continuous Integration. Prywatnie żona Tomasza i mama czteroletniego Mikołaja.

1. Na jakim etapie nauki programowania (załóżmy, że jesteśmy juniorami) najlepiej przypomnieć sobie prawa matematyki?

Odpowiada Wojciech Potentas:

Programowanie pochodzi od matematyki, ale adept wcale nie musi tego dostrzegać. Algorytmy – kroki rozwiązania jakiegoś problemu – równie dobrze mogą pochodzić od przepisów kulinarnych. Programista jednak napotyka w którymś momencie potrzebę nabycia innych kompetencji niż algorytmika i programowanie – wiedzy o produkcie – czy to wymyślonym przez siebie, czy zastanym, gdy podjął się jakiegoś zadania. 

Potrzebne będzie także zrozumienie systemu binarnego, przypomnienie potęg dwójki, w grach może być pomocna teoria gier, macierze, liczby pseudolosowe, wielomiany, fraktale. Gdy zaczynałem: do gry, którą chciałem napisać potrzebna była znajomość zasad dynamiki Newtona, a to miało wejść w szkole dopiero za kilka miesięcy, wymyślałem więc fizykę po swojemu, gra i tak była całkiem ciekawa. O strzałce, której kierunkiem można było sterować i “dodawać gazu”.

Odpowiada Paweł Miry:

Obserwacyjnie, najbardziej na etapie początkowym i “dorosłym”, najmniej na średnim. Nauka każdego języka rozpoczyna się od mnóstwa prostych przykładów matematycznych: funkcje obliczające pola figur, pisanie własnych kalkulatorów, liczby zespolone jako przykład obiektów, łapanie wyjątków dla dzielenia przez zero, itd. Potem tych odniesień jest nieco mniej. Poznaje się frameworki, biblioteki, nieco więcej praktycznych i funkcjonalnych zastosowań samego języka. A na etapie seniorskim pewne kwestie ponownie wracają – zaczynamy zastanawiać się jak lepiej zoptymalizować kod, czy dany algorytm jest szybszy, zwracamy większą uwagę na problemy brzegowe, choćby przy testowaniu. To wszystko matematyka w różnej postaci.

Odpowiada Monika Wolak:

W tej kwestii częściowo zgadzam się z Wojtkiem: programowanie, jako przedmiot ścisły wywodzi się z matematyki. Matematyka stanowi podstawę wszystkich języków programowania, a może nawet wszystkich języków? Przypomina mi to anegdotę z liceum, jak nauczycielka języka angielskiego mówiła nam, klasie matematyczno-informatyczno-fizycznej, że ona woli uczyć umysły ścisłe, bo łatwiej im przychodzi nauka innego języka. Dlatego uważam, że już w momencie nauki danego języka programowania podstawy matematyki są kluczowe. 

W dalszych etapach rozwoju, bywa różnie. Czasem wystarczą podstawy a czasem trzeba być ekspertem w danej dziedzinie matematyki, żeby w ogóle zrozumieć na czym polega dane zadanie.

2. Czy poziom znajomości matematyki różni się dla juniora, mida i seniora?

Odpowiada Wojciech Potentas:

Matematyka wiąże się ze znajomością produktu. Antenowcy mogą potrzebować funkcji trygonometrycznych, liczb zespolonych, transformat Fouriera i Laplace’a, macierzy, kryptografowie metryk, liczb pierwszych, automatyzatorzy analizy danych równania Markowa, algorytmu wstecznej propagacji sygnału itd.

Odpowiada Paweł Miry:

Z pewnością juniorzy pamiętają więcej ze studiów, z uwagi na krótszy okres od ich ukończenia niż w przypadku seniorów. Zależy to mocno od specyfiki pracy – jak już wspomniałem, na każdym etapie jest to inny rodzaj matematyki, od prostego dodawania i mnożenia po szacowanie złożoności obliczeniowej.

Odpowiada Monika Wolak:

To jaki poziom matematyki jest nam niezbędny podczas programowania, zależy jedynie od tego, co piszemy. Jeżeli jesteś juniorem, który ma zabezpieczyć wrażliwe dane, to potrzebujesz na poziomie bardzo wysokim znać się na szyfrowaniu danych i kryptologii. Z kolei, gdy zajmujesz się przetwarzaniem obrazów, podstawą programowania są działania na macierzach. Z drugiej strony będąc seniorem, który tworzy produkt końcowy, bazujący na już istniejących bibliotekach i komponentach, nie potrzebujesz wiedzieć, jakie algorytmy zostały w nich użyte i jak zaimplementowane, tylko to, w jaki sposób możesz je najlepiej wykorzystać.

3. Czy każdy programista potrzebuje matematyki?

Odpowiada Wojciech Potentas:

Matematyka to szkielet naszego kosmosu. Moim zdaniem to ten Duch Święty, który w Księdze Rodzaju unosił się nad wodami. Gdyby niektóre stałe w naszym wszechświecie były inne, nie byłoby tej rozmowy (nadal piszę o naszym wszechświecie), ani żadnych programistów, “kamienie by mówiły”, ale nie miałby kto słuchać. Kto wie, ile takich wszechświatów bez istot rozumnych istnieje, tylko dlatego, że przy projektowaniu matematyki podjęto inne decyzje. 

Oczywiście, że programista musi znać matematykę, nie da się od niej uciec. Za to w trakcie pracy okazuje się jakie elementy matematyki programista musi znać. Niektórzy cyfrowo całkują, niektórzy liczą przekątne okna, aby strona dobrze się mieściła, ale bez matematyki, nie da się tego zrobić.

Odpowiada Paweł Miry:

Każdy musi się z nią zetknąć i co najmniej część polubić. Przede wszystkim bardzo przydaje się matematyka na etapie liceum i początku studiów – po pierwsze, aby się na dobre studia dostać, a po drugie, aby ich zbyt szybko nie skończyć. Każdy kierunek techniczny związany choć trochę z IT zawiera w sobie bardzo dużo matematyki. Niektórzy programiści twierdzą, że nawet za dużo i matematyka ciągła (całki czy pochodne) nie przydaje się w realnej pracy, w odróżnieniu od matematyki dyskretnej. Dyplom jednak trzeba jakoś zdobyć. 

Ale tak jak już wszyscy powiedzieliśmy, matematyka jest też potrzebna do początkowych przykładów z poznawania składni języka – to są bardzo proste rzeczy na poziomie szkoły podstawowej, umiejętność sprawnego posługiwania się wzorami przyspiesza jednak naukę.

Odpowiada Monika Wolak:

Matematyka jest podstawą pracy w projektach. Potrzebna jest na każdym etapie pracy z projektem, nie tylko w czasie pisania kodu. Zaczynając od momentu planowania kosztów: ile osób i jak długo będzie pracowało nad danym projektem tak, aby spełnić oczekiwania klienta, co do produktu (jakość, wydajność, funkcjonalność) i terminu jego dostarczenia. A kończąc na planowaniu sprintów, czy nawet daily stand-upach, gdzie każda osoba decyduje czy jest w stanie zrealizować dziś wybrane zadania.

4. W jakich branżach matematyka to podstawa pracy każdego programisty?

Odpowiada Wojciech Potentas:

Data Science, gry, sterowanie fizycznymi urządzeniami, symulacje, Information and Communication Technology także.

Odpowiada Paweł Miry:

Wszystko, co związane z grafiką, tworzeniem gier komputerowych, przetwarzaniem obrazów i sygnałów oraz szeroko pojętymi badaniami naukowymi. W przypadku gier 3D pojawia się mnóstwo pojęć z pogranicza matematyki i fizyki, trzeba mieć dobre wyobrażenie przestrzenne i nagle cała geometria i stereometria ze szkoły średniej zyskuje na znaczeniu – w końcu cały świat jest oparty na trójkątach odpowiednio ułożonych w przestrzeni. 

Kolizja obiektów = przecięcie w przestrzeni, systemy cząstek = prawdopodobieństwo i wzory znane z elementarnej fizyki, nakładanie tekstur = algorytmy interpolacji do resamplingu. Przy przetwarzaniu obrazów (medycyna!) mamy do czynienia z filtrami macierzowymi, operacjami na wartościach pikseli, schematami kolorów – to wszystko w zasadzie dodawanie i mnożenie liczb całkowitych oraz zaokrąglenia, ale cała praktyka z matematyki wyższej się na nich opiera. 

Wreszcie badania naukowe – nawet jeśli nie są związane z obliczeniami, to większość z nich wymaga policzenia statystyk czy rysowania wykresów. A jeśli ktoś tworzy symulacje, to przydaje się umiejętność przechodzenia z dziedziny ciągłej na postać skwantowaną i zastosowanie metod numerycznych do komputerowego obliczenia wartości całek. 

Odpowiada Monika Wolak:

Zaryzykowałabym stwierdzenie, że we wszystkich branżach przydaje się matematyka. Tylko w zależności od branży i projektu, mamy do czynienia z innym poziomem z różnych dziedzin matematyki. W biometrii ważna jest na przykład analiza i przetwarzanie obrazu, a więc podstawą jest praca na macierzach i złożonych algorytmach, czyli analiza matematyczna i algebra. W bankowości do ochrony danych wrażliwych potrzebna jest matematyka dyskretna, a dokładniej kombinatoryka i kryptografia. Wymieniać można w nieskończoność.

5. Możesz podać przykład, w którym matematyka znacząco ułatwiła Twoją pracę?

Odpowiada Wojciech Potentas:

Mnie przydał się układ regulacji nadążnej z teorii sterowania (prawa cybernetyczne) do wynalazku.

Odpowiada Paweł Miry:

Oczywiście przyspieszało naukę kolejnych języków – młodzież męczy się na przykładach z geometrią, dla mnie była to sama przyjemność. A jeśli chodzi o pracę, miałem do czynienia z matematyką w przypadku nawet prostego web developmentu. Jeśli trzeba ułożyć na stronie setki różnych wskaźników i kontrolek, to nawet pojęcia “margin” czy “padding” w CSS i przeliczanie pikseli zyskują na znaczeniu. 

Odpowiem też przeciwnością – przy nieznajomości matematyki 100 razy dłużej debugowałbym bezskutecznie skrypty, zanim znalazłbym prosty błąd z wyjściem poza zakres tablicy.

Odpowiada Monika Wolak:

Cały czas mi ułatwia pracę, mimo że już praktycznie nie programuję (nie zawodowo). Wiedza z matematyki wyższej najbardziej mi się przysłużyła, gdy dwa lata temu potrzebowałam bardzo szybko zrozumieć działanie algorytmu machine learningowego do selekcji testów. Dzięki wysokiemu poziomowi matematyki, jaki udało mi się poznać podczas studiów, mogłam wykonać zadanie na czas.

6. Na którejkolwiek z rozmów rekrutacyjnych byłeś/-aś pytany/-a o znajomość matematyki?

Odpowiada Wojciech Potentas:

Taki test, w trakcie rozmowy wszedł administrator sieci i powiedział, że potrzebuje kilometr przewodu, ile mogę mu szybko sprzedać? Odpowiedziałem, że dostanie okrągłe 1024 metry za 256 złotych. Oczywiście to żart, ale kiedyś ktoś zapytał także o teorię sterowania, a konkretnie o kryteria jakości. Na jednej rekrutacji na CEO firmy zasypano mnie pytaniami matematycznymi na czas, potem powiedziano, że na ich CEO się w tym półroczu nie nadaję, ale mają mnóstwo możliwości aplikacji na developera. Nie skorzystałem, ale ubaw miałem po łokcie.

Odpowiada Paweł Miry:

Kiedyś byłem na rozmowie, na której kazano mi rozwiązać prostą całkę i policzyć coś z prawdopodobieństwa – tak w ramach sprawdzenia “wiedzy ogólnej”. Na pierwszych latach studiów rzecz banalna, ale kilka lat później już nie tak oczywista i trzeba było sięgać do dawno nieużywanych obszarów pamięci. Na pierwszej rekrutacji w obecnej firmie również dostaliśmy testy, w których było kilka zadań matematycznych – nic z matematyki wyższej, ale takich “na myślenie”: geometria, kostki, klocki w przestrzeni, niczym z konkursów matematycznych w szkole podstawowej. Trzeba być przygotowanym na takie zadania, kiedy się startuje do branży IT.

Odpowiada Monika Wolak:

Nie bardzo pamiętam, ponieważ ostatnią rekrutację jaką miałam, odbyła się prawie 8 lat temu. Ale z tego co sobie przypominam: to miałam tylko zadania z logicznego myślenia, żadnych typowo matematycznych, szczególnie z programu studiów.


Zdjęcie główne artykułu pochodzi z unsplash.com

Zapraszamy do dyskusji

Zapraszamy do dyskusji
  1. Troche mnie dziwicie panowie (Lukasz i Marcin) w tych komentarzach, @Lukasz, nikt nie kwestionuje w tym artykule potrzeby znajomosci innych dziedzin nauki/zycia. Pytanie brzmialo „Czy programista potrzebuje matematyki?”, a nie „Czy potrzebuje tylko i wylacznie matematyki a reszty moze nie znac.” Nikt nie postawil tezy, ktora, skadinad slusznie, uwazasz za krzywdzaca, ani nie zaprzeczyl, ze wymienione inne dziedziny nie sa wazne.
    Nie widze tez zwiazku tematycznego ze wskazanym przez ciebie artykulem. W samym abstrakcie widac, ze dotyczy on nauki jezykow programowania. Tutejsza dyskusja w praktycznie tego tematu nie porusza. No niech bedzie, ze prosta matematyka jest uzywana w przykladach przy nauce jezykow, ale latwo chyba dostrzec, ze nie tu lezy srodek ciezkosci dyskusji? Nikt nie stawia tezy w stylu „tylko matematyka gwarantuje sprawne i skuteczne uczenie sie jezykow programowania.”

    @Marcin, wlasnie jest bardzo konkretna dziedzina, matematyka, czytales w ogole? 🙂 a jak ci szkoda czasu, to pewnie komentarz tez niewiele wniesie i za konstruktywny nie bedzie. To moze lepiej sobie darowac?
    Tutejsza dyskusja moze cos wniesc, chociazby do swiadomosci ludzi wybierajacych sie na studia informatyczne itp. Widzialem wiele osob ktore nie majac rzetelnej wiedzy o potrzebach matematycznych na takich studiach, blednie je wybraly, a potem z nich wypadly. Prawdopodobnie marnujac czas, pieniadze i wysilek swoj i wykladowcow.

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Patronujemy

 
 
More Stories
Humanista w IT. Jak zostać UXowcem?