Programowanie komputerów
Zarys
[edytuj]Programowanie komputerowe jest formą twórczości polegającą na pisaniu użytecznych, możliwych do przechowywania i rozszerzania instrukcji, które mogą być interpretowane (wykonywane) przez system komputerowy (komputer) do wykonywania sensownych zadań, co czyni pracę bardziej efektywną dla użytkowników systemu komputerowego. Programowanie komputera może zostać zrealizowane w jednym z wielu języków programistycznych, obejmujących od języków wysokiego poziomu (zbliżonych do języka naturalnego) do pisania bezpośrednio w kodzie maszynowym (najniższego poziomu).
Programowanie komputerowe jest częścią szerszej dyscypliny nazywanej Inżynieria oprogramowania. Inżynieria oprogramowania (Software Engineering Body of Knowledge - SWEBOK) dzieli się na poszczególne dyscypliny:
- Wymagania dotyczące oprogramowania {Software requirements}
- Projektowanie oprogramowania {Software design}
- Pisanie (tworzenie) oprogramowania {Software construction}
- Testowanie oprogramowania {Software testing}
- Zabezpieczenie oprogramowania {Software maintenance}
- Konfigurowanie oprogramowania {Software configuration management}
- Zarządzanie tworzeniem i konfigurowaniem oprogramowania {Software engineering management}
- Proces tworzenia oprogramowania {Software engineering process}
- Narzędzia i metody inżynierii oprogramowania {Software engineering tools and methods}
- Jakość oprogramowania {Software quality}
Tematyką niniejszej książki jest tworzenie oprogramowania - programowanie.
Czym jest programowanie
[edytuj]Jeśli chcecie się porozumieć z obcokrajowcem, musicie znać jego język, lub którykolwiek z języków znanych przez niego (najczęściej jest nim Angielski). Z komputerem jest natomiast podobnie - Jednak jego "mową" ojczystą jest system dwójkowy co może być problematyczne do nauki dla człowieka. On sam (procesor) nie zrozumie ludzkiego języka z całym tym bagażem wieloznaczności i braku jednoznacznej precyzji. Rozwiązaniem jest język pośredni, bazujący na ludzkim, (angielskie słownictwo funkcji) ale matematycznie jednoznaczny. Nazywamy je właśnie językami programowania. I tą właśnie "mową" pośrednią będziemy się posługiwać (najczęściej C/C++ patrz Popularność)
Zmienne
[edytuj]Tak, jak nasz świat składa się z atomów, świat komputerów składa się z informacji. Informacje (czy też dane lub jak kto woli, bajty/bity) są zawarte w zmiennych, dzięki czemu programista ma łatwy do nich dostęp. Prosta definicja:
obszar pamięci przechowujący jakieś dane. O rodzaju i sposobie prezentacji tych danych decyduje typ zmiennej.
Kod programu to instrukcje dla procesora. Niekiedy może on być jednym prostym ciągiem rozkazów, ale zwykle zachodzi konieczność podzielenia go na tzw. bloki kodu. Blok kodu można przyjąć za odpowiednik różnych rozdziałów w książce - ułatwiają czytelność kolejnych stron.
Klasy
[edytuj]Klasa służy do zdefiniowania nowego obiektu by odwołać się do istniejącego skryptu
Jeśli wyobrazimy sobie możliwą listę obiektów z gry to zauważymy coś interesującego - są bardzo podobne do innych, działają na tych samych zasadach. Na przykład każda broń strzela i zużywa amunicję. Czy do wszystkich trzeba pisać osobne funkcje, będące w praktyce swoimi kopiami? Na szczęście istnieje mechanizm, który umożliwia wykorzystanie już raz napisanego kodu dla wielu klas. Gdzie umieścić te wszystkie bronie? Możemy je schować do, tzw. "kategorii". Dla lepszego zobrazowania: tworzymy ogromne pudełko z wszystkimi odwołaniami do gry a potem tworzymy z nich "matrioszki", by odziedziczyć od niej zmienne i cały kod, dodając także własny, potrzebny tylko im.
Wybór języka programowania
[edytuj]Czego powinienem (powinnam) się uczyć?
[edytuj]Najważniejszym czynnikiem przy wyborze pierwszego języka do nauki jest to, na ile użyteczny będzie ten język w praktyce, na przykład - w przemyśle IT lub w otwartym projekcie, do którego masz zamiar dołączyć. Jeśli to ma być tylko twoja firma, taki popularny język jak C++ lub Java będzie dobrym wyborem. Jakkolwiek, są i inne czynniki, na które musisz zwrócić uwagę.
Na ile odpowiedni jest dany język dla początkujących?
[edytuj]Wiele języków programowania jest projektowana specjalnie po to, by były łatwe do nauki, np. Basic czy Pascal. Jakkolwiek są one nieraz krytykowane za obniżoną wydajność spowodowaną ograniczoną liczbą udogodnień. Jednak należy pamiętać, że podstawową funkcją tych języków jest nauka programowania strukturalnego. Dla bardziej zaawansowanych aplikacji mogą być potrzebne bardziej wyspecjalizowane i kompleksowe języki.
Niektóre języki programowania są odpowiednie dla początkujących ponieważ mają prostą składnię, np. Python. Ostatnio pojawiły się również głosy, że do celów dydaktycznych znakomicie mogą sprawdzać się języki Ada i Ruby.
Czy dany język jest dostępny lub odpowiedni na twoim systemie komputerowym?
[edytuj]Najprawdopodobniej będzie. Jeśli wybrałeś język, którego będziesz się uczyć, powinieneś poszukać implementacji do niego na twoją platformę (system). Szybkie wyszukiwanie w Internecie z uwzględnieniem języka programowania oraz systemu powinno dać w wynikach jakieś komercyjne lub bezpłatne implementacje.
Sytuacja komplikuje się, gdy będziesz zmuszony zajmować się starszymi systemami komputerowymi. Mogły one zostać napisane we wczesnych językach programowania, takich jak ALGOL, COBOL, FORTRAN, czy PL/1. Może to doprowadzić do sytuacji, kiedy będziesz zmuszony nauczyć się tych języków, by móc na przykład przeglądać kod źródłowy.
Czy pomoże ci to uczyć się innych języków w przyszłości?
[edytuj]C, C++, C#, Java są podobne, więc nauka jednego ułatwi naukę pozostałych. Z kolei nauka zupełnie odmiennych języków programowania ułatwi ci naukę nowych języków w ogóle.
Czy pomoże ci to stać się lepszym programistą?
[edytuj]Nauka akademickich języków, takich jak Prolog, Smalltalk czy Haskell może nie wydawać się warte zachodu, jeśli chodzi o przydatność w przyszłej pracy, jakkolwiek prostota tych języków zmusza cię do zmiany sposobu myślenia o programowaniu i uczy pewnych umiejętności, które możesz potem przenieść na inne języki. Niektórzy mogą powiedzieć, że programowanie w tych językach jest o tyle bardziej sprawne, że nie chce się zawracać głowy innymi, ale odkąd programowanie wymaga pracy dla innych i z innymi ludźmi, i tak będziesz musiał się nauczyć popularnych języków.
Jak praktyczny jest dany język?
[edytuj]Znów powracamy do naszego pierwszego zagadnienia przy wyborze języka programowania: na ile będzie użyteczny w realnym świecie? Teraz powinieneś wziąć pod uwagę, jak popularny jest dany język, ponieważ współpraca z innymi ludźmi jest nieunikniona, oraz jak odpowiedni jest do pracy, która cię interesuje. Dopóki nie goni cię czas, wskazane jest żeby dobrze wszystko rozpatrzyć i skupić się na dobrym nauczeniu się języka, i brać pod uwagę walory praktyczne danego języka w przyszłości.
Jako przykład języka związanego z konkretną dziedziną/zastosowaniem, język programowania MUMPS jest stosowany głównie w służbie zdrowia i bankowości. Jeśli chcesz pracować w tych działach, będzie to praktyczny język do nauczenia, mimo że ma on swoje dziwactwa.
Ucz się wszystkich!
[edytuj]Poniżej kilka wskazówek, jakich języków się uczyć. Oto one:
- Jeśli tylko chcesz zajmować się programowaniem w pracy, pomiń wszystkie oprócz języków najwyższego poziomu lub skryptowych, jak Python czy PHP
- Jeśli chcesz być w tym dobry, ucz się języków najwyższego poziomu, ale również staraj się mieć rozeznanie w C i assemblerach.
- Jeśli chcesz być mistrzem, odłóż powyższe dopóki nie połapiesz się w akademickich językach jak ML.
Ale jeśli masz inne priorytety, może bardziej zgodzisz się z:
- Jeśli chcesz być bezużyteczny jako programista, ucz się języków akademickich takich jak ML.
- Jeśli chcesz mieć mnóstwo nauki bez większych osiągnięć, próbuj języków jak C i assemblerów.
- Jeśli chcesz coś zrobić, używaj języków najwyższego poziomu (skryptowych) jak Python.
(inna dygresja innego wikipedysty) - A to inna rada. Naucz się na początek programowania strukturalnego i języka C. Dużo ćwicz. Rób zadania i wyszukuj sobie problemy, bo od samego patrzenia się nie nauczysz. Później dostosuj narzędzie do problemu. Jak piszesz aplikacje www - to PHP albo Java. Jak piszesz gry albo skomplikowane aplikacje - to C++. Jak szef każe, to jeszcze co innego. Uczenie się wielu narzędzi po łebkach prowadzi donikąd, ponieważ za każdym razem opanowuje się te same, względnie proste podstawy. Nauczenie się zaawansowanego myślenia w porządnym języku programowania wymaga czasem lat. Prawdziwe trudności zaczynają się przy opisywaniu rozwiązywanych problemów w określonym języku. Trzeba stosować odpowiednie algorytmy, struktury danych, biblioteki. Szukać na forach, czytać książki, poradniki. Przynajmniej jeśli chce się zostać specjalistą w jakiejś dziedzinie.
Jakiego języka powinienem używać?
[edytuj]Jeśli masz tylko młotek, to każdy problem widzisz jako gwóźdź. — Abraham Maslow
Powyższy cytat może być skojarzony z antywzorcem złotego młotka. Złotnik robi wszystko ze złota, młotki też. Język programowania powinien być dostosowany do problemu, który rozwiązujemy. Takie podejście jest zazwyczaj najefektywniejsze.
Co ciekawe, rozmawiamy tutaj o młotku, a zapominamy o zdolnościach młotkowego. Oprócz dyskusji o językach programowania warto także uczyć się o strukturach danych i algorytmach wykorzystywanych w danej dziedzinie problemów, o których myślimy. Często określony język wspiera pewien rodzaj problemów. PHP pozwala na łatwe tworzenie stron internetowych itp.
W latach 80-tych informatycy uczyli się programowania strukturalnego w języku Pascal, do zastosowań profesjonalnych służył język C. W obliczeniach naukowych stosowano także Fortran. Później zaczęto stosować szerzej programowanie obiektowe, weszły także wolniejsze, ale ułatwiające tworzenie prostych aplikacji języki kompilowane do kodu bajtowego(Java, C#). Powstał internet i technologie webowe (m.in. język PHP). Świat przyspieszył. Ponadto powstało multum języków akademickich, mniej rozpowszechnionych. Niektórzy chcą uczyć programowania w językach interpretowanych typu Python.
Istnieją różne szkoły programowania. Najwięcej jest języków imperatywnych, więc sensowne jest rozpoczęcie nauki od takich technologii. Przykładem jest język C. Stanowi dobrą bazę do nauki bardziej rozbudowanych języków: C++, Java, C#, JavaScript.
Generalnie - warto się zastanowić, co mają robić nasze programy. Obliczenia numeryczne, wizualizacja 3D - C, C++, czasem Fortran, MATLAB, Octave. Strony www (po stronie serwera) - PHP (małe projekty), Java (większe projekty), C++ (najszybsze projekty). Strony www (dla przeglądarki) - HTML, JavaScript. Gry - przenośne proste gierki - Java, wydajne gry 3D - C++. Wydajne aplikacje okienkowe - C, C++. Zakres zastosowań ww. języków może być szerszy a decyzje podejmie Czytelnik.
To odrobina sugestii.
Efektywność
[edytuj]Jedne języki programowania dają dużą szybkość i sprawność działania programu, inne natomiast łatwiejsze programowanie. Pisanie w kodzie maszynowym, najczęściej w asemblerze, może nawet w edytorze szesnastkowym, może dać w efekcie najszybszy i najbardziej spójny program, jak to tylko możliwe, jednak tylko jeśli chcesz poświęcić lata życia na napisanie programu, zakładając, że będzie w miarę kompletny i nie będziesz używał kodów z innych języków wyższego poziomu (co musisz zrobić, jeśli piszesz program używający biblioteki).
Assemblery mają bardzo precyzyjną składnię, co oznacza, że pojedynczym poleceniem zrobi się najmniej jak to możliwe, odkąd każde polecenie odnosi się głównie do jednej lub dwóch instrukcji procesora, jakkolwiek jest odmiana Macro Assembly Language, który łagodzi te ograniczenia. Języki wysokiego poziomu posiadają instrukcje, które odpowiadają tuzinom instrukcji, co znacznie przyspiesza pisanie, jednak musisz polegać na kompilatorze, jak przekształci te polecenia w najefektywniejszą sekwencję instrukcji. Zazwyczaj wykonuje to w miarę dobrze, co jeszcze zależy od kompilatora, ale nigdy nie są perfekcyjne, więc program będzie mniej lub bardziej wolniejszy. Z reguły (choć nie zawsze), im łatwiej zaprogramować, tym wolniej będzie się program wykonywał.
Z tego wynika, że najefektywniejsze (biorąc pod uwagę jakość programu i czas poświęcony na programowanie) są języki średniego poziomu. Jakkolwiek programowanie w assemblerze może zaowocować szybszymi programami niż języki średniego poziomu, nowocześnie zoptymalizowane kompilatory dają najczęściej lepszy rezultat niż byłby w stanie osiągnąć przeciętnie zdolny programista.
Pójdź na łatwiznę (opinia)
[edytuj]Dopóki nie będziesz miał do czynienia z programami, które muszą działać szybko (na pewno nie w przypadku, kiedy czytasz wstęp do programowania), najlepiej wybrać język, w którym programowanie jest proste. Dla początkujących jest na pewno ważniejsze napisanie programu, który przynajmniej działa, niekoniecznie szybko. Programowanie w językach wysokiego poziomu pozwoli uniknąć wnikania w szczegóły składni i ukryje wiele możliwości wdarcia się błędów do programu.
Nawet jeśli okażesz się być najlepszym hackerem kodu maszynowego, zauważ, że oprogramowanie bywa długo w użyciu i musi być uaktualniane, obojętne czy przez ciebie, jakiegoś anonimowego pracownika oddziału twojej firmy, czy jednego z milionów twórców wolnego oprogramowania. Ktoś będzie musiał przeczytać i poprawić ten kod, więc możesz równie dobrze wybrać język, który mu to ułatwi.
Poza tym kwestia szybkości jest aktualnie bardziej skomplikowana, niż przedstawiliśmy to powyżej. Praca z językami wyższego poziomu może na tyle uprościć programowanie, że będziesz mógł skupić się na poprawianiu efektywności, gdy tymczasem misterne skonstruowanie kodu maszynowego może okazać się stratą czasu w przypadku gdy (hipotetyczne) komputery kolejnej generacji pojawią się za dwa tygodnie.
Łatanie dziur (kolejna opinia)
[edytuj]Daliśmy ci jasno do zrozumienia, że programowanie w językach wysokiego poziomu jest generalnie lepsze dla twojego zdrowia. Jeśli zaś rozejrzysz się trochę, to zauważysz, że w wielu przypadkach ludzie całkowicie ignorują tą dobrą radę. Na przykład - zarówno Linux jak i oprogramowanie GNU, jak GNOME, zostały napisane w staromodnym C. Dlaczego? Ponieważ w obu przypadkach niezwykle istotna jest szybkość działania oprogramowania - jądro systemu (Linux) nie może działać zbyt wolno, gdyż musi pracować równocześnie z wieloma programami, nieraz bardzo wymagającymi, zaś oprogramowanie baz danych przetwarza ogromne ilości danych, i powolne działanie mogłoby spowodować niedrożność systemu. Ponadto programy napisane w językach niższego poziomu mają z reguły mniejszy rozmiar, i zajmują mniej pamięci operacyjnej, co w wypadku jądra systemu operacyjnego jest o tyle istotne, że pozostaje więcej zasobów dla innych programów, dzięki czemu działają efektywniej.
Popularność
[edytuj]Popularne języki programowania
[edytuj]Najczęściej używanymi językami programowania są prawdopodobnie C i C++. Oba są dosyć podobne, więc jeśli nauczysz się jednego, będzie ci dużo łatwiej nauczyć się drugiego, jednak C++ ma większą elastyczność składni i dużo łatwiej pisze się w nim duże programy. Kompilatory C i C++ są dostępne dla prawie wszystkich systemów operacyjnych. Na większości kompilatorów oba języki mogą być przemieszane, jeżeli zachodzi taka potrzeba.
Język C oraz C++ są językami kompilowanymi. Kod programu jest tłumaczony bezpośrednio na język maszynowy. Są one generalnie uniwersalne. Język C powstał pierwotnie w celu pisania systemów operacyjnych (UNIX). Wraz z rozprzestrzenianiem się systemów Uniksopodobnych (Linux, *BSD itp) jego popularność wzrosła. Język C nie należy do najprostszych. Jego składnia jest dość zwięzła. Pozwala także (o zgrozo) na pisanie wyjątkowo nieczytelnego kodu (jest nawet konkurs na najbardziej zagmatwany program w języku C - http://ioccc.org ). Język C jest minimalistyczny. Brakuje w nim np. bibliotek do obsługi bardziej zaawansowanych struktur danych (listy, drzewa itp.). Obsługa napisów jest wydajna, jednak wymaga uwagi (możliwość popełnienia subtelnych błędów). Zalet jest jednak więcej. Język C pozwala na operowanie złożonymi strukturami danych. Bardzo precyzyjnie operuje pamięcią. Pozwala o na pisanie wydajnych programów i wykonywanie zasobożernych obliczeń. Programista ma pełną kontrolę nad operowaniem pamięcią. Co do braku wbudowanych funkcjonalności - istnieje wiele bibliotek znacznie rozszerzających możliwości C. Przykładowo - C jest językiem natywnym dla systemów Uniksopodobnych. Komunikacja z systemem operacyjnym jest szybka i efektywna. Dla języka C powstała np. biblioteka OpenGL - grafika trójwymiarowa o wysokiej wydajności. Pełne wykorzystanie karty graficznej jest dzięki temu stosunkowo proste. Obliczenia na kartach graficznych - CUDA albo OpenCL - także są obsługiwane natywnie w C. Pisanie aplikacji okienkowych - biblioteka GTK+ albo GLFW są stworzone w C i dla C. Język C jest stosowany także do sterowania urządzeniami (malutkie komputery jednoukładowe - mikrokontrolery, szczególnie te mocniejsze mogą być programowane w C). Język C jest językiem profesjonalnym i stanowi swego rodzaju podwaliny (przynajmniej pod względem składni) pod nowsze języki (C++, Java, C#). Jego opanowanie wydaje się być dobrą inwestycją, a dla zwolenników Linuksa i C++ jest to pozycja obowiązkowa. Dobre opanowanie strukturalnych technik programowania pozwoli na tworzenie lepszych projektów także w bardziej zaawansowanych językach imperatywnych. Przykładowe zastosowania: systemy operacyjne UNIX, Linux, *BSD, serwery internetowe Apache, interpretery dla innych języków skryptowych (np. PHP), kompilatory.
Teraz o języku C++. Jest to także język kompilowany. Jego składnia powstała na bazie języka C. Pozwala na pisanie kodu proceduralnego oraz obiektowego. Z językiem C łączy go także pełna kontrola programisty nad zarządzaniem pamięcią. Dzięki temu język C++ pozwala na tworzenie wydajnych programów. W porównaniu z językiem C dodano obsługę obiektów. Dzięki temu można łatwiej pisać bardziej złożone (choć wolniejsze) aplikacje. Drugim ułatwieniem jest standardowa biblioteka STL (wchodzi w skład standardu C++). Zawiera ona obsługę najczęściej spotykanych struktur danych, niektóre algorytmy (sortowanie, wyszukiwanie). Dodano obiektową obsługę napisów. Dzięki temu działania na napisach mogą być łatwiejsze (choć wolniejsze). Język C++ ma dostęp do bibliotek języka C (obsługa grafiki 3D, komunikacja z systemem operacyjnym, CUDA, OpenCL itd.). Istnieją także specjalne biblioteki dla języka C++. Jednym z nich jest zbiór bibliotek Boost. Stanowi on duży zbiór narzędzi do obsługi zaawansowanych struktur danych, obliczeń rozproszonych i wielu innych. Pisanie aplikacji okienkowych w C++ jest możliwe dzięki bibliotekom wxWidgets albo Qt. Teraz o zastosowaniach języka C++. Język C++ jest bardzo profesjonalny. Stosowany jest tam, gdzie konieczna jest duża wydajność. Typowe zastosowania to gry komputerowe, oprogramowanie do obliczeń inżynierskich i naukowych, zaawansowana wizualizacja 3D (rozrywka, medycyna, przemysł, nauka), aplikacje internetowe o wysokiej wydajności (banki, giełdy itp.), inne wydajne programy komputerowe (przeglądarka Mozilla Firefox), nowsze kompilatory.
Innym powszechnie używanym językiem jest Java. Największą zaletą jest to, że może być wykonywana na wielu systemach operacyjnych (na najpopularniejszych) bez najmniejszych zmian, ponieważ nie jest wykonywana bezpośrednio przez procesor, ale przez rodzaj oprogramowania, tzw. Wirtualną Maszynę Javy - coś jakby komputer w komputerze. Dodatkowa złożoność procedur wykonywanych przez wirtualną maszynę (gdyż Java jest językiem wysokiego poziomu) początkowo powodowała na tyle duże spowolnienie jej pracy, że wielu użytkowników rezygnowało z korzystania z tego narzędzia, ale kilka osiągnięć technicznych pozwoliło znacznie zwiększyć jej efektywność. Struktura i składnia Javy jest podobna do C++, więc jeśli znasz C++, możesz łatwo nauczyć się Javy; jakkolwiek jeżeli umiesz Javę, to nauka C++ będzie mimo to wymagać przyswojenia pewnej liczby nowych wiadomości i umiejętności. Drobna sugestia. W C++ pamięcią zarządza programista, natomiast w Javie wykorzystywany jest odśmiecacz. Oznacza to, że aplikacja w Javie beztrosko pobiera pamięć z komputera i co pewien czas zatrzymuje się, aby odśmiecacz zwolnił nieużywaną część pamięci. Jest to proces skomplikowany i sprawdza się wtedy, kiedy aplikacja nie ma dużych wymagań odnośnie pamięci. Po drugie, należy się zastanowić, w jaki sposób przebiega pobieranie pamięci na tablice. W C i C++ pamięć na tablice jest pobierana od systemu operacyjnego za każdym razem jako jeden blok pamięci. Pobieranie pamięci jest bardzo skomplikowane (i czasochłonne), ale pobranie jednej dużej tablicy jest wykonywanie względnie szybko. Natomiast w Javie, tablica składa się z szeregu oddzielnie pobranych komórek. Jest to dużo kosztowniejsze czasowo. Jeżeli chcemy przetworzyć obraz (miliony komórek) to stosowanie Javy może okazać się porażką. Po trzecie, przetwarzanie tablicy w Javie polega na pobieraniu tablicy z pamięci RAM komórka po komórce, ponieważ maszyna wirtualna nie widzi spójnego bloku pamięci. Dla porównania, kiedy w języku C++ zaalokujemy jedną dużą tablicę, to podczas jej przetwarzania (komórka po komórce) może ona być pobierana do pamięci podręcznej procesora (cache), co daje olbrzymi wzrost wydajności. Ma to znaczenie przy obliczeniach np. na macierzach. Rodzi to pytanie o sens stosowania takich rozwiązań w Javie. Przyczyną jest dążenie do maksymalnego uproszczenia pisania aplikacji. Programista nie musi się troszczyć o zwalnianie ręczne pobranej pamięci. Upraszcza to pisanie aplikacji np. biznesowych, które nie potrzebują wielkich tabel a zamiast tego mają wiele drobniejszych obiektów (które w C++ musiałyby być zwalniane w sposób żmudny i podatny na błędy). Java posiada bardzo rozbudowaną bibliotekę, natomiast C++ jest bardziej okrojony (choć napisano dlań niejedną solidną bibliotekę ). Ciekawostka 1 - język C# jest podobny w zarządzaniu pamięcią do Javy, ze wszystkimi tego konsekwencjami. Ciekawostka 2 - twórcy języka C stworzyli język Go, który łączy odśmiecacz pamięci z alokowaniem tabel w formie jednego bloku pamięci.
Basic (również Visual Basic, QBasic) jest także często używany. Jest bardzo prosty w programowaniu, i tylko z powodu tej prostoty jest obecnie używany do wielu zadań np. w Windowsie. Pakiet Microsoft Office wykorzystuje język VBA (Visual Basic for Applications).
Assembler i kod maszynowy nie jest obecnie tak użyteczny, jak kiedyś był, ale nauka tych języków programowania pomoże ci zrozumieć, jak działa komputer i jak lepiej projektować strukturę programu w języku wysokiego poziomu. Jakkolwiek znajomość assemblerów jest niezbędna, jeżeli będziesz programować podstawowe procedury (niskiego poziomu) dla różnego sprzętu. Ponadto, jeżeli chcesz rzeczywiście przyspieszyć kilka często używanych procedur w twoim programie, najlepiej jeśli użyjesz assemblera do napisania ich. Ponieważ assembler jest językiem niskiego poziomu, każda architektura procesora wymaga napisania kodu specjalnie dla tego rodzaju procesora; program napisany na PC będzie wymagał kompletnej przebudowy, żeby mógł być wykonany na procesorze typu ARM. Języki wyższego poziomu są o tyle bardziej przenośne, o ile kompilator posiada implementację dla danej architektury procesora. Drobna sugestia. Do nauki asemblera dobrze nadają się dość popularne w Polsce mikrokontrolery AVR rodziny np. ATmega. Każda instrukcja jest w nich wykonywana w określonej liczbie taktów, zatem można kontrolować taki mikrokontroler z dokładnością do jednego taktu zegara. Nauka asemblera jest bardziej kształcąca, kiedy znamy podstawy programowania np. w języku C. Daje nam to pewną dozę światła na temat działania programów wysokopoziomowych.
Jest jeszcze jedno rozróżnienie pomiędzy językami skryptowymi czy najwyższego poziomu a innymi językami. Języki skryptowe, jak PHP, Perl, Python, Ruby czy RACER zostały zaprojektowane jako szybkie i proste w pisaniu programu za pomocą krótkich instrukcji, często z elastyczną składnią i pozwalające na napisanie kompletnej aplikacji w kilkunastu zaledwie linijkach kodu. Doskonale nadają się do rozwiązywania bieżących zadań, mniej do pisania kompletnych, jednolitych programów, choć tutaj są i wyjątki (przykładowo aplikacje pisane w Pythonie, jak MayaVi, Zope oraz mechanizmów przygotowanych na potrzeby Internetu i pisanych w PHP, np. system Wiki, dzięki któremu czytasz te słowa).
Języki programowania
[edytuj]Istnieje wiele różnych języków programowania, ich popularność, zastosowanie wypisaliśmy już wcześniej. Gdzie szukać pomocy i jak się przede wszystkim ich uczyć? Najczęściej wtedy sięga się do ich dokumentacji lub plików man (odpowiednik pomocy w systemie Windows), ale one w przeważającej części są po angielsku (tym bardziej jeśli szukamy kompletnej i całościowej). Źródeł jest wiele, począwszy od tutoriali napisanych przez zapaleńców wraz z ich własną metodą nauki, aż po tłumaczenia angielskich. Parę poradników do różnych języków znajdziesz również na tej stronie.
W jaki sposób się uczyć? Metod jest wiele, począwszy od „kucia na blachę”, poruszanie się w rytm tutoriala, kopiowaniu kodu... lecz nikt nie lubi kuć, prawda? Starym sprawdzonym sposobem są tradycyjne ściągi - w naszym wypadku będzie to czytanie listingów danego języka i ich przepisywanie. Jak mam te komendy rozumieć? W przeważającej części języki programowania są tworami bazującym na języku angielskim, jeśli rozumiesz ten język to zrozumienie kodu nie będzie problemem. Jeśli nie, zostaje translatacja tekstu. I tu okazuje się się znajomość języka angielskiego okazuje się niezbędna, przynajmniej na poziomie umożliwiającym przeczytanie dokumentacji (chociaż i tak znajdą się osoby które potrafią zrozumieć skomplikowany kod, a nie potrafią napisać ani jednego zdania po angielsku ale już osobny temat). W skrócie: czytaj, czytaj kod programów, najlepiej w wielu źródeł nie tylko z książki ale również forów, czasopism i tym podobnych źródeł.
Typy języków programowania
[edytuj]Implementacje
[edytuj]- Sztuczna inteligencja
- Application development
- Bazy danych i biblioteki
- Sterowniki
- Gry
- Praca w sieci komputerowej
- Multimedia
- Tworzenie systemów operacyjnych
Programowanie pod systemy operacyjne
[edytuj]Popularne biblioteki danych
[edytuj]Formaty plików
[edytuj]Bibliografia
[edytuj]Jak zacząć myśleć jak komputerowiec (How to Think Like a Computer Scientist)
Software Engineering Body of Knowledge (SWEBOK) http://www.swebok.org
Światomir Grzegorz Ząbek, Podstawy algorytmizacji i programowania, Wydawnictwo: Helion
Światomir Grzegorz Ząbek, Strukturalne Techniki Programowania, Wydawnictwo UMCS
Stephen Prata, Język C - Szkoła programowania, Wydawnictwo Helion
Kyle Loudon, Algorytmy w C, Wydawnictwo Helion