Ucz się programowania, nie języków programowania - część 2

W poprzedniej części naszego cyklu przedstawiliśmy kilka aspektów architektury komputera. Stwierdziliśmy, że zarówno do sprzętu jak i do działających na nim aplikacji podchodzimy warstwowo. Warto zaakcentować jednak pewną różnicę: sprzęt jest czymś, co poznajemy natomiast aplikacje chcemy, jako programiści, budować.

Czytaj inne artykuły z cyklu:

Oznacza to pewną pokusę: stawianie lepianki jest łatwiejsze od budowy wieżowca - na tej samej zasadzie szybciej widzimy efekty tworzenia aplikacji jeżeli w mniejszym stopniu używamy abstrakcji dostarczanych przez języki programowania .

Myślenie warstwowe, które ułatwia analizę, przy konstruowaniu wydaje się balastem. Należy pamiętać, że oprogramowanie zazwyczaj stanowi model lub odpowiednik rzeczywistych zjawisk np. obiegu dokumentów. Korzystając z narzędzi, których dostarczają języki programowania, lepiej odwzorowujemy z życia wzięte algorytmy.

Innym aspektem, który poruszyliśmy w poprzednim odcinku jest fakt, że głównym zadaniem programisty jest opisywanie komunikacji procesor-pamięć. Przedstawiliśmy także dwa sposoby takiej komunikacji: harwardzki i princetoński (Von Neumanna).

Jak myśli komputer - ciąg dalszy

Wiemy więc, że procesor pobiera z pamięci dane i operujące na nich polecenia. Niezależnie od architektury procesor operuje na danych "natychmiastowych", czyli wartościach liczbowych, danych przechowywanych w wewnętrznych komórkach pamięci procesora (rejestrach) oraz na danych z pamięci operacyjnej.

Należy zwrócić uwagę na to, że procesor używa kilku "poziomów" pamięci: rejestry, pamięć cache, pamięć komputera i pamięć dyskowa (tzw. plik wymiany). Im "bliższa" pamięć tym szybszy dostęp.

Oznacza to, że warto tak zarządzać dostępem do danych w kodzie by najważniejsze informacje były umieszczone "jak najbliżej" procesora. O tym jak to zrobić powiemy w odcinku, który będzie poświęcony podprogramom.

Pod właściwy adres

Z punktu widzenia programisty, wbrew pozorom także programisty wysokopoziomowego, czyli takiego, który nie pisze bezpośrednio "w języku procesora" istnieją dwa rodzaje operacji na danych- działania na wartościach i działania używające adresów. To rozróżnienie pozwala nam wprowadzić pierwszy "byt programistyczny" występujący w większości języków programowania.

Bytem tym jest zmienna. Zmienna to "programistyczny pojemnik" lub "programistyczny adres". Adres i pojemnik to rzeczy, które nie mają ze sobą wiele wspólnego, dlatego powinniśmy umieć rozróżniać jaką rolę pełni w danym kontekście zmienna. Podajmy kilka przykładów.

Typową zmienną - "pojemnikiem" może być liczba dzieci danej osoby. Liczba dzieci może się zmienić, ale nie można jej zamienić.


Zobacz również