Czy programista potrzebuje matematyki?

Trzeba programować szybciej

Aby dopełnić ten artykuł i rozwiać wszystkim wszelkie wątpliwości, należy przeanalizować jeszcze jeden ważny aspekt. Trzeba odpowiedzieć sobie na pytanie: dokąd zmierza informatyka a w szczególności programowanie? Programowanie jako ważny podzbiór informatyki rozwija się nieprawdopodobnie szybko. Praktycznie nie da się nadążyć za wszystkimi nowymi językami i platformami programistycznymi. Po co one powstają? Oczywiście po to, aby było szybciej i lepiej.

Przechodząc przez programowanie od najniższej warstwy (tzw. programowanie embedded), polegało ono na operowaniu instrukcjami procesora (czyli język assembler). Później powstał nieobiektowy język C, jeszcze później – jego starszy brat hybrydowy język C++. Mimo, że był bardzo potężny, wytwarzanie oprogramowania ciągle było zbyt wolne. Zaczęły powstać języki wysokiego poziomu, czyli Java i C#. Programowanie stało się teraz ultra szybkie.

Co będzie dalej? W tzw. międzyczasie modny jest JavaScript, ponieważ jest totalnie niezależny od platformy, na jakiej się wykonuje. Do JavaScripta powstało wiele platform takich jak AngularJSReactBackboneKnockout.js. Wszystko po to aby było… szybciej! Stworzony został serwer Node wraz z setkami tysięcy gotowych modułów (sławny node_modules, który często ważą 50GB, czyli 1000 razy więcej niż sam projekt).

Wszystkim zależy na czasie, programowanie rozwija się w stronę szybkiego wytwarzania kodu. Programiści są drodzy, a pisanie systemów informatycznych trwa bardzo długo. Pisanie programów „wolno” nie ma sensu, ponieważ zanim powstaną, już stają się przeterminowane. W tym momencie pojawiają się określenia tzw. programisty oraz dewelopera.

Programista a deweloper

Na różnicę pomiędzy programistą a deweloperem nakierował mnie kiedyś wykładowca od mechaniki. Na zajęciach wywiązała się ciekawa dyskusja, na temat różnicy pomiędzy jednym a drugim. Po krótszej chwili doszliśmy do wniosku, że programista to osoba odpowiedzialna typowo za klepanie kodu. Za napisanie algorytmu, który ma działać tak i tak, który ma pobrać jakieś dane i zwrócić wynik. Programista nie zajmuje się niczym więcej. Fajnie, gdyby programista miał wysokie umiejętności matematyczne w momencie, gdy pisze bibliotekę, która będzie odpowiedzialna np. za przeprowadzanie obliczeń numerycznych.

Z drugiej strony deweloper (ang. software developer) jest osobą, na którą trzeba spojrzeć nieco szerzej. Jest on odpowiedzialny za większą koncepcję, ma wymyślić sposób, umieć połączyć kilka technologii lub kilka rozwiązań. Dla programisty z krwi i z kości ważne mogą okazać się umiejętności matematyczne/fizyczne/mechaniczne lub inne, w zależności w jakim projekcie pracuje. Dla dewelopera ważniejsze może się okazać znanie wielu technologii, umiejętność wykorzystania gotowych rozwiązań i bibliotek dostarczonych przez programistów.

Gdzieś kiedyś usłyszałem, że programista opracowuje skomplikowane biblioteki, które mają działać najszybciej jak to możliwe, a deweloper ma umieć z tych bibliotek korzystać. I tak np. pisząc gry deweloperzy korzystają z gotowych silników graficznych, którą są napisanie idealnie pod względem wydajności, i nie jest im do tego potrzebna matematyka. Z drugiej strony, nad silnikiem graficznym musieli pracować programiści, który na pewno nie mięli problemów z algebrą liniową.

Podział na programistę i dewelopera nie jest moim wymysłem. Choć w naszym kraju nie jest ten podział zbytnio respektowany, to jednak odwrotnie jest w USA. Tam stanowisko programisty (ang. programmer), a stanowisko dewelopera (ang. software developerjest po prostu inaczej definiowane, te osoby odpowiedzialne są za inne rzeczy.

ZOBACZ TEŻ:  Najbardziej absurdalne benefity pracownicze w IT

Czy można programować, nie znając matematyki?

Każdy medal ma dwie strony. Mimo że matematyka jest przydatna, oczywiście można programować bez niej. Przede wszystkim matematyka nie jest potrzebna front-endowcom (ang. front-end developer). Tworzenie szablonów, pisanie HTMLa lub reguł CSS nie wymagają żadnych skomplikowanych obliczeń. Głębszy front-end, czyli programowanie w jakimś frameworku JavaScript także nie będzie od nas wymagać matematyki. Tworząc aplikację w Angular, React lub czystym JavaScript potrzebne dane najpewniej zostaną dostarczone przez back-end.

Podsumowując artykuł powiedzmy otwarcie, matematyka niezbędna programiście (deweloperowi) nie jest. Można naprawdę dużo zarabiać i nie używać matematyki. Natomiast nie postrzegajmy matematyki jako tylko i wyłączenie obliczeń algebraicznych, bo ich jest stosunkowo mało. Patrzmy na nią jako zdolność analitycznego i abstrakcyjnego myślenia, która zawsze może przydać się projektując skomplikowane fragmenty systemu. Błyskotliwość, szybkość znajdywania rozwiązań są cechami pożądanymi w naszym zawodzie. Oto kilka ważnych wniosków:

  • w informatyce i programowaniu jest bardzo dużo matematyki – jest to po prostu dziedzina związana z matematyką i bazująca na matematyce, jeżeli sądzisz inaczej to jesteś ignorantem,
  • matematyka to nie tylko ułamki i całki – szczególnie w kontekście programowania. Doskonałym przykładem jest matematyka dyskretna, która wprowadza w świat pomiędzy matematyką a programowaniem, uczy logicznego myślenia, ukazuje mechanizmy które warto znać i umieć z nich korzystać,
  • można być dobrym matematykiem i nie umieć programować – no wiadomo, tak się zdarza, znam realne przypadki (nie znam na to wytłumaczenia),
  • można być dobrym deweloperem i nie umieć matematyki – można zajmować się np. aplikacjami internetowymi, nie pakować się w problemy, których nie umiemy rozwiązać (czyli dedykowane aplikacje bazujące na skomplikowanych obliczeniach),
  • nie można być dobrym programistą i nie umieć matematyki – ale chyba wszystko zależy od kontekstu, jak rozumiemy różnicę pomiędzy programistą, a deweloperem i czy taką granicę w ogóle uznajemy. No nie oszukujmy się, będąc matematycznym zerem, silnika do gry nie napiszemy, symulacji fizycznej nie napiszemy, biblioteki do obliczeń metodą MES nie napiszemy, biblioteki rozwiązującej całki metodą Newtona-Cotesa nie napiszemy. Możemy co najwyżej, jako deweloper, wykorzystać istniejące biblioteki,
  • wielu sławnych programistów, którzy są nieprzeciętnie dobrzy, są z wykształcenia matematykami,
  • bardziej potrzebni są deweloperzy niż programiści – jest mało projektów, które wymagają wysokich zdolności matematycznych. Nikt nie zatrudni „matematycznego zera” do pisania takiej aplikacji jak MatLab, jednak powiedzmy sobie szczerze takich stanowisk jest mniej. IT stoi mocno na aplikacjach bankowych, systemach z rodziny ERP służących do zarządzania firmami itp. Tam matematyki nie ma. Jeżeli ktoś mądry napisał bibliotekę do obsługi formatu Mp3 (dźwięk w formacie mp3 zapisany jest w postaci szeregu furiera), to każdy inny program będzie z niej korzystał. Nikt nie wprowadza swoich kodowań audio, tylko korzysta z istniejących i sprawdzonych.

Na sam koniec warto jeszcze dodać, że umiejętności matematyczne mogą przydać się podczas szukania pracy. Wierzcie lub nie, jednak na krakowskim rynku IT są firmy, które na rozmowie rekrutacyjnej dają zadania z czystej matematyki i każą je rozwiązać na kartce. Na szczęście takie firmy to odosobnione przypadki.


Artykuł został pierwotnie opublikowany na p-programowanie.pl. Zdjęcie główne artykułu pochodzi z unsplash.com.

Zapraszamy do dyskusji

Patronujemy

 
 
More Stories
Dlaczego zmieniłem zdanie o nierelacyjnych bazach danych