Tcl, Python). Badania wskazują bowiem, że programiści stosujący te ostatnie są prawie dwukrotnie wydajniejsi od swoich kolegów kodujących w tradycyjnych językach [10]. Przyczyna jest stosunkowo prosta. Pojedynczym poleceniom w wysokopoziomowych językach skryptowych odpowiada często wiele linii kodu w kompilowanych językach programowania. A średnia liczba błędów, jaką popełnia programista w określonej liczbie linii kodu, praktycznie nie zależy od wyboru języka. Innymi słowy, pisząc krótszy kod popełniamy z reguły mniej błędów.
Oczywiście gdzieś za ten wzrost wydajności programisty trzeba zapłacić -program napisany w języku skryptowym wykonuje się najczęściej znacznie wolniej niż jego skompilowany odpowiednik. W większości zastosowań nienaukowych to spowolnienie nie ma większego znaczenia - statystycznie program i tak większość czasu spędza na oczekiwaniu na operacje wejścia/wyjścia i tym podobne rzeczy. Jednak na pierwszy rzut oka dyskwalifikuje ono języki skryptowe do zastosowania w obliczeniach naukowych. Rzeczywiście w wielu dużych projektach szybkość wykonania jest ciągle jeszcze najważniejszym kryterium wyboru języka. Ale również wśród naukowców daje się zaobserwować wzrost zainteresowania językami skryptowymi. Po pierwsze, nie każde zadanie obliczeniowe to od razu program wykonujący się miesiącami na wielkich superkomputerach. Istnieje wiele nietrywialnych zadań (np. aproksymacja danych doświadczalnych, poszukiwanie miejsc zerowych funkcji, różniczkowanie numeryczne, wyznaczniki macierzy), w których czas napisania programu jest dużo ważniejszy od czasu wykonania programu. Po drugie, języki skryptowe łatwo się integrują z językami kompilowanymi. Dlatego nawet w dużych projektach znajdują one zastosowanie, np. do tworzenia interfejsów użytkownika, podczas gdy cały silnik obliczeń działa w C++ bądź w Fortranie.
Języków skryptowych jest bardzo dużo. Jedne zostały stworzone do konkretnych zadań, inne stanowią pełnoprawne języki programowania o uniwersalnym przeznaczeniu. Wśród tych ostatnich jednym z bardziej interesujących jest Python [11], który może przydać się w codziennej pracy (nie tylko początkującym) numerykom.
W skrypcie tym do każdego rozdziału dołączyłem przykładowe programy w C++, Fortranie i Pythonie, a także GNU Octave, o którym mowa będzie w paragrafie 1.4. Wybór C++ powinien być jasny - to „naturalny” język naszego instytutu. Mamy wieloletnie doświadczenia i sukcesy w nauczaniu go i każdy student fizyki komputerowej zaczynając kurs z metod numerycznych powinien się nim w miarę sprawnie posługiwać.
Programiści C++ mogą potraktować Fortrana jako ciekawostkę. Gdyby jednak komuś „nie leżało” C++, bo akurat nie planuje kariery programisty i własne programy tworzy raczej sporadycznie, być może zainteresuje go właśnie ten język. Z moich doświadczeń wynika, że składnia Fortrana nie przeszkadza aż tak mocno niewprawionym programistom w rozwiązaniu problemu jak składnia C”l—(- i łatwiej wraca się do tego języka po dłuższych przerwach w programowaniu. Równie ważne jest, że początkujący programista Fortrana jest w stanie bez większego wysiłku napisać wydajny program, podczas gdy z C-ł—ł- bywa pod tym względem różnie.
Python powinien przydać się każdemu. To doskonałe narzędzie, aby szybko przeliczyć jakieś zadanie, które z jednej strony jest zbyt trudne, aby zrobić to samemu na kartce, a z drugiej - na tyle proste, aby wynik obliczeń na komputerze otrzymać prawie natychmiast (znalezienie wyznacznika macierzy 10 x 10 jest tu dobrym przykładem). Inny obszar zastosowań, w którym Python sprawdza