Fizyka w programowaniu. Przykłady z pracy programisty
Czy fizyka przydaje się w programowaniu? Jak szczegółowa znajomość fizyki jest konieczna? Jak często fizyka pojawia się w pracy programisty? Na te pytania odpowiadam na podstawie swoich kilkuletnich doświadczeń.
Może niektórych to zdziwić, ale fizyka przydaje się w pracy programisty. W dodatku przydaje się w bardzo różnych, a czasem nawet dość zaskakujących okolicznościach. Wszystko zależy jednak, w jakich dziedzinach się programuje.
Spis treści
Elektrodynamika w telekomunikacji
W branży telekomunikacyjnej przyda się znajomość pojęcia elektrodynamiki opisującej m.in. właściwości pola elektrycznego i magnetycznego oraz zależności między tymi polami. Nie oznacza to, że pracując w Ericsson trzeba znać i biegle umieć wykorzystywać równania Maxwella.
Projektując nadajniki i odbiorniki radiowe, trzeba umieć określić i dobrać odpowiednie parametry, aby sygnał mógł być przesłany, spełniając wymagane założenia. Równania Maxwella pozwalają wyprowadzić kolejne, tzw. równania falowe określające rozchodzenie się fal w danym materiale. Częstotliwość, moc, zasięg sygnału, charakterystyka jego propagacji, to wszystko kwestie, które wzajemnie na siebie wpływają. Przykładowo, im wyższa częstotliwość sygnału, tym bardziej przeszkody fizyczne takie jak budynki czy ukształtowanie terenu będą przeszkadzać w propagacji tego sygnału.
Mogłoby się wydawać, że specjaliści znający podstawy fizyki to w zasadzie nie programiści, tylko fizycy, ale to w dużej mierze dość płynna kwestia klasyfikacji. Bo przecież te fizyczne, analogowe sygnały złapane na antenę trzeba jakoś przetworzyć na postać cyfrową do dalszej obróbki. Będzie tutaj potrzebny przetwornik analogowo-cyfrowy dla odebranych sygnałów oraz cyfrowo-analogowy dla nadawanych, a także dedykowany procesor do cyfrowej obróbki sygnałów (Digital Signal Processor DSP).
To wszystko trzeba też oprogramować. Pytanie, czy zrobi to lepiej fizyk, który ma jakieś pojęcie o programowaniu, ale dobrze wie jaki sygnał pojawi się na antenie i dlaczego. A może zadanie to wykona lepiej programista, który świetnie zna niskopoziomowe programowanie DSP, ale o antenie wie tylko tyle, że można z niej dostać różne wartości napięcia elektrycznego? Mam nadzieję, że to pytanie ilustruje istotę potrzeby posiadania szerszej wiedzy naukowej o świecie.
Z kolei inni programiści bądź architekci systemu, którzy projektują serwery sterujące ruchem i kontrolujące użycie zasobów w sieci radiowej, powinni darować sobie znajomość fizyki? Czy nie wystarczy, że będą wiedzieć, ile jakiego zasobu zużywa jeden telefon (czy jakiekolwiek inne urządzenie korzystające z komórkowej sieci radiowej)? Nie jest to tak proste jak się wydaje. Właśnie z powodu fizyki, która mówi o zjawiskach takich jak odbicia sygnału, interferencja, czas propagacji czy zanik sygnału.
Programista świadomy tych zjawisk będzie wiedział, że w mieście potrzeba instalacji większej liczby anten o krótszym zasięgu niż w terenie niezabudowanym, gdzie wystarczy mniej anten, ale z dłuższym zasięgiem. Dzięki temu będzie mógł trafniej określić zasoby obliczeniowe na serwerze potrzebne do szeroko pojętego zarządzania tymi antenami i współpracą między nimi.
Dalej, przy sporej ilości anten w mieście, nie mogą one nadawać z dużą mocą, ponieważ z powodu odbić sygnału i interferencji zrobi się w eterze tylko niezrozumiały szum, z którego żaden telefon nie będzie mógł nic sensownego odebrać. Podobnie wygląda kwestia sterowania mocą przesyłu samych telefonów, za co serwer kontroli ruchu również odpowiada. Przykłady można mnożyć.
Mechanika Newtona
Spójrzmy jeszcze na inne dziedziny fizyki i programowania. Czas na bardziej namacalny przykład, mianowicie mechanika Newtona, czyli generalnie ruch ciał stałych w przestrzeni. Prędkość, czas, przyspieszenie, siła, masa, pęd. Gdzie te pojęcia można spotkać w pracy programisty? Za przykład mogą posłużyć gry komputerowe, w których przedmioty poruszają się, zderzają lub wzajemnie blokują.
Ktoś powie, że przecież animacja obiektu na ekranie to tylko zmiana jego współrzędnych i narysowanie go w innym miejscu, pod warunkiem, że po drodze nie było niczego blokującego. W dużym uproszczeniu kiedyś (początek lat 90-tych ubiegłego wieku) rzeczywiście tak było, ponieważ nie wystarczało mocy obliczeniowej na bardziej wyrafinowane metody. Dziś w wielu przypadkach kładzie się duży nacisk na jak największą realistyczność ruchu. Dzięki powszechnie dostępnej mocy obliczeniowej komputerów jest to wykonalne, ponieważ można skonstruować bardzo zaawansowane motory fizyki.
W poniższej tabeli postaram się wyjaśnić jakie efekty można osiągnąć włączając różne właściwości ruchu i materiału, do symulacji w motorze fizyki. W uproszczeniu, aby osiągnąć wymienione efekty potrzeba dodatkowo innych zabiegów programistyczno-technicznych w samym motorze fizyki oraz połączeniu tego z motorem grafiki.
W tym linku znajdziecie interaktywną symulację zachowania połączonych bezwładnych obiektów w dwóch wymiarach w polu grawitacyjnym. Mniej naukowo: to manekin, którego można złapać w dowolnym punkcie i poruszyć w dowolnym kierunku. Z moich obserwacji (nie dotarłem do opisu technicznego tej demonstracji) wynika, że przypuszczalnie będzie tu zaimplementowany mniej więcej 4 poziom z powyższej tabeli.
Tutaj dużo bardziej zaawansowany technicznie i graficznie symulator samochodu. Link prowadzi do opisu, jakie aspekty są symulowane. Istnieje również możliwość pobrania symulatora, aby wypróbować jak to faktycznie działa.
Nawiązując do wcześniej wspomnianych zaskakujących okoliczności, gdzie można się spotkać z fizyką, polecam zapoznanie się z ciekawie opisanym zagadnieniem animacji na frontendzie aplikacji.
Zacząłem od pytania o fizykę w programowaniu i gdyby sięgnąć głębiej do podstaw, to widać, że konstrukcja komputerów opiera się o półprzewodniki. Właściwości tych materiałów odkryto i zrozumiano dzięki fizyce, więc zasadniczo fizyka jest wszechobecna w informatyce. Wiem, brzmi to prowokująco i przerysowanie. Idąc jednak dalej, można stwierdzić, że przecież cały świat opiera się na fizyce. No właśnie i tu uważam leży esencja podejścia do fizyki dla informatyków.
Programista w swojej pracy prawie cały czas tworzy modele rzeczywistości. Fizyka to nauka, która tę rzeczywistość opisuje i dlatego jest przydatna, by do niej sięgnąć po już gotowe, usystematyzowane i sprawdzone modele. Pierwszy raz spotkałem się z takim podejściem na początku studiów informatyki. Miałem to szczęście, że trafiłem na świetnego wykładowcę fizyki, który rozpoczął pierwszy wykład od uspokojenia studentów i stwierdzenia, że on chce nam tylko opowiedzieć, bez zbędnych zawiłości, jak działa świat.
Mówił, że szczegółami to zajmują się ludzie aspirujący do nagrody Nobla. Teraz, 20 lat później, muszę przyznać, że wiedza, którą przekazał sprawdziła się. Pod koniec studiów, z czystej ciekawości, zapisałem się na podstawowy kurs mechaniki kwantowej i nanotechnologii, również prowadzony w tym duchu i dostosowany dla informatyków.
Mechanika kwantowa i nanotechnologia
Odpowiem od razu na pytanie: gdzie taka wiedza z podstaw mechaniki kwantowej może się przydać programiście? Na przykład w medycynie. Otarłem się kilkanaście lat temu o projekt leczenia nowotworów bardzo precyzyjnie wycelowanym promieniowaniem elektromagnetycznym. W dużym skrócie badana potencjalna metoda leczenia polegała na wprowadzeniu do organizmu substancji, która byłaby wychwytywana tylko przez komórki nowotworowe. Następnie atomy w strukturze cząsteczek tej substancji były wzbudzane promieniowaniem nieszkodliwym dla człowieka, by po chwili wyemitować promieniowanie niszczące komórki nowotworowe.
Pojawiła się tutaj kwestia współpracy oprogramowania z instrumentami pomiarowymi pod kątem wizualizacji pomiarów, a więc w jakim stopniu oprogramowanie może reagować na dynamikę sygnału pomiarowego, jak go sensownie pokazać, co można zrobić w czasie rzeczywistym, a co odłożyć do obróbki offline, jak gromadzić dane pomiarowe itd.
Na koniec jeszcze jedna refleksja. Zacząłem od obecności fizyki w programowaniu, ale można spojrzeć na tę kwestię również od drugiej strony, czyli ile programowania występuje w pracy fizyka? Okazuje się, że praktycznie nie ma dnia, żeby fizyk nie zetknął się z programowaniem, szczególnie tam, gdzie trzeba dokonać obróbki i analizy danych pomiarowych. A te ilości danych potrafią być naprawdę astronomiczne, na przykład w Large Hadron Collider w CERN. “Collectively, the LHC experiments produce about 15 petabytes of raw data each year that must be stored, processed, and analyzed.” Więcej można poczytać tutaj.
Jak widać, fizyka, która odkryła rzeczy i zjawiska potrzebne do powstania informatyki, teraz sama stała się bardzo zależna od informatyki i programowania.
Zdjęcie główne artykułu pochodzi z unsplash.com.