Ponieważ informatyka (patrz poniżej), a nawet programowanie komputerowe, to matematyka stosowana.
Ed Dubinsky, nauczyciel matematyki, który kiedyś był sam profesjonalny programista powiedział:
Wiedza matematyczna danej osoby to jej skłonność do reagowania na określone rodzaje postrzeganych sytuacji problemowych poprzez konstruowanie, rekonstruowanie i organizowanie procesów umysłowych oraz przedmioty do wykorzystania w sytuacjach.
Na nieco mniej ogólnym poziomie zastanów się, czym jest matematyka. Wybierasz lub tworzysz język, w którym możesz wyrażać pewne idee, a następnie manipulacje symboliczne zgodnie z zestawem reguł, które również wybrałeś lub stworzyłeś, aby stworzyć bardziej poprawne stwierdzenia w tym języku, zgodnie z tymi zasadami. Jeśli nie będziesz uważać, aby zrobić to poprawnie, możesz otrzymać nieprawidłowe oświadczenia. Wyniki, które uzyskasz, mogą mieć jakieś zastosowanie w „prawdziwym świecie” (np. Mogę używać języka i reguł „liczb całkowitych”, aby śledzić to, co ludzie są mi winni, a ja im zawdzięczam) lub mogą być po prostu pomocą lepiej rozumiesz, w jaki sposób możesz używać języka i reguł oraz w jaki sposób mogą one być pomocne w dalszym ich stosowaniu.
W wielu dziedzinach matematyki używamy określonych symboli zwanych „liczbami” i mamy dużą bibliotekę często wspólne reguły i języki z tym związane, ale są inne obszary matematyki, które w ogóle nie używają liczb (np. teoria kategorii) lub, chociaż można je zastosować do liczb, tak naprawdę nie dotyczą liczb per se (grouptheory, struktury algebraiczne, wiele innych).
Jeszcze zanim zaczniesz studiować lub używać określonych algorytmów i tym podobnych, pisanie programu komputerowego jest w zasadzie tym, co opisałem powyżej. Wiele z „najprostszych” pojęć w programowaniu komputerowym, których używamy na co dzień, takich jak idea funkcji, to koncepcje czysto matematyczne.
Jak już widzieliście, jest całkowicie możliwe zaatakowanie świata rzeczywistego
problemy z tymi narzędziami matematycznymi w sposób nieregularny i uzyskanie użytecznych wyników. Zazwyczaj wyniki nie będą w pełni poprawne (tj. Twoje programy będą zawierały błędy), ale będą one „wystarczająco poprawne”, aby wykonać zadanie. (W przypadku dobrze napisanego programu przemysłowego możesz nigdy nie natknąć się na sytuacje, które wykazałyby, że jest on nieprawidłowy). Na tym polega dyscyplina inżynierii: uzyskiwanie wyników, które działają wystarczająco dobrze w prawdziwym świecie przy akceptowalnych kosztach.
Ale nawet jeśli zajmujesz się inżynierią, wiele z tego, co robisz, działa dobrze tylko dlatego, że ktoś wykonał wystarczająco dużo matematycznego podnoszenia ciężarów, aby dać Ci koncepcje i narzędzia, których możesz użyć do tego. funkcja lub obszar jest, ale twój język programowania lub system bazy danych działa, ponieważ ktoś je wymyślił.
A ludzie, którzy wykonali tę pracę, to informatycy.
Wszystko to zostało znane i od dawna poważnie rozważane. Myślę, że jest to szczególnie dobrze pokazane w komentarzu w klasycznym artykule PeterLandina z 1966 roku ["The Next 700 ProgrammingLanguages"] [landin66]:
Najważniejszym wkładem LISP-a nie było przetwarzanie list ani alokacja pamięci, ani notacja, ale we właściwościach logicznych leżących za notacją. tutaj ISWIM niewiele ulepsza, ponieważ oprócz kilku drobnych szczegółów, LISP nie pozostawił nic do zrobienia. Istnieją dwa równoważne sposoby określenia tych właściwości.
(a) LISP uprościł relacje równoważności, które określają zakres, w jakim fragmenty programu mogą być wymieniane bez wpływu na wynik.
(b) LISP przyniósł klasę jednostek, które są oznaczone wyrażeniami, które programista może zapisać, bliżej tych, które powstają w modelach systemów fizycznych oraz w systemach matematyczno-logicznych.
Jeśli to rozumiesz (co prawdopodobnie wymaga przynajmniej intuicyjnego zrozumienia rachunku lambda lub podobnego), ty
prawdopodobnie zdajemy sobie sprawę, że wiele problemów, z którymi mamy do czynienia dzisiaj, to wciąż te same, zasadniczo matematyczne problemy, które badano w latach 60., kiedy po raz pierwszy poważnie badaliśmy, czym naprawdę jest i czym jest „język programowania”.
O programach roboczych
Można również spojrzeć na to z węższego punktu widzenia: „Chcę tylko napisać program i upewnić się, że działa”. Nawet tutaj staje się to matematyką, jeśli potraktujesz jako ograniczenie „Naprawdę chcę, najlepiej jak potrafię, upewnić się, że działa”. EWD303 Dijkstry, „O niezawodności programów”, przedstawia ten argument szczegółowo. Jego podsumowanie:
Obawy o niezawodność zmuszają nas do ograniczenia się do programów, które można zarządzać intelektualnie. Stajemy przed pytaniami: „Ale jak radzimy sobie intelektualnie ze złożonymi strukturami? Jakie mamy pomoce umysłowe, jakie wzorce myślowe są skuteczne? Jakie są wewnętrzne ograniczenia ludzkiego umysłu, które lepiej szanowaliśmy?”. Bez wiedzy i doświadczenia odpowiedź na takie pytania byłaby bardzo trudna, ale na szczęście nasza kultura posiada wielowiekową tradycję dyscypliny intelektualnej, której głównym celem jest zastosowanie efektywnej strukturyzacji do złożoności niemożliwej do opanowania w inny sposób intelektualnie. Ta dyscyplina nosi nazwę „Matematyka”. Jeśli weźmiemy istnienie imponującego zbioru matematyki jako eksperymentalnego dowodu na opinię, że dla ludzkiego umysłu metoda matematyczna jest rzeczywiście najskuteczniejszym sposobem radzenia sobie ze złożonością, nie mamy już wyboru: powinniśmy przekształcić naszą dziedzinę programowania w taki sposób, aby ich metody rozumienia stały się równie przydatne, ponieważ nie ma innych środków.
O "Informatyce" i "Informatyce"
Niektórzy z nas, w tym University of Alberta, uważają, że bardziej popularna nazwa dyscypliny jest nieco myląca i zamiast tego
wolą nazywać to Informatyka Science. Jak powiedział Keith Smillie w „Computing Science at the University of Alberta, 1957-1993”:
Wybór nazwy „informatyka” zamiast bardziej powszechnej „Informatyka” została celowo wskazana, aby wskazać, że informatyka, a nie komputery, miała być podstawą tej dyscypliny.
Myślenie o tym, z czym się zmagamy, jako o „komputerach”, a nie „komputerach” „sposób może pomóc ci zapamiętać, że całe oprogramowanie działające w dzisiejszym świecie jest znacznie bardziej zależne od narzędzi matematycznych, których używamy do skutecznego i dokładnego modelowania naszych problemów i świata, niż od sprzętu, na którym działa.