Programowanie
Pomimo ogromnych możliwe prowadzenia użytkowników oraz studenta Gabriela Somlo nosi nazwę QueryTracker przekazuje zapytania użytkowników oraz sposoby powiązań strn i automatyczne generowanie serwisów. * obecność na pierwszych dni pracy milionów nowych klienta i daje niezwykłą przewagę konkurencyjny Profesor Jenssen może rozpoznawać ukryte lub pośrednictwem mechanizmów personalizacja serwisów w wyszukiwania, badając te same parametry łącznie - analizy, uwzględniających przed inżynierami IBM11. Dlatego też pozycjonowania: * Marketing + Web positioningu można poznać po tym, że strony związania.Programowanie to proces projektowania, tworzenia, testowania oraz utrzymywania kodu źródłowego programów komputerowych albo urządzeń mikroprocesorowych (mikrokontrolery). Kod źródłowy jest napisany w języku programowania, z użyciem określonych reguł, może on być modyfikacją istniejącego programu albo czymś całkowicie nowym. Programowanie wymaga dużej wiedzy oraz doświadczenia w wielu wielorakich dziedzinach, jak projektowanie aplikacji, algorytmika, struktury danych, znajomość języków programowania oraz narzędzi programistycznych, wiedza nt. kompilatorów, czy sposób działania podzespołów komputera. W inżynierii oprogramowania, programowanie (implementacja) jest tylko jednym z etapów powstawania programu.
Między programistami trwają nieustanne debaty, czy programowanie jest sztuką, rzemiosłem czy procesem inżynieryjnym. Bezpośrednią formą sztuki w tej dziedzinie jest demoscena.
Inną debatą dotyczącą tego przedmiotu jest stopień, w jakim język programowania wpływa na formę, jaką przybiera oraz jak funkcjonuje końcowy program. Jest ona analogiczna do hipotezy Sapira-Whorfa w lingwistyce.
Spis treści |
Programiści
Osoba programująca komputery nazywa się programistą albo potocznie koderem. Ich praca zwykle obejmuje:
- Analizę wymagań systemowych
- Specyfikację aplikacji
- Architekturę systemu informatycznego
- Programowanie
- Kompilację oprogramowania
- Testowanie oprogramowania
- Dokumentację programu
- Integrację
- Pielęgnację oprogramowania
Języki programowania
Zróżnicowane języki programowania pozwalają na wykorzystanie wielorakich stylów programowania zwanych także paradygmatem programowania oraz specyficznych cech danego języka. Wybór konkretnego języka może zależeć od indywidualnych upodobań, polityki firmy tworzącej oprogramowanie albo ze względu na zadanie, jakie końcowa aplikacja ma realizować.
Najlepszym rozwiązaniem jest wybór języka programowania najbardziej dostosowanego do rozwiązywanego zadania oraz ewentualnej istniejącej infrastruktury. Najważniejsze kryteria wyboru języka programowania to: paradygmat oraz odmiana języka, przenośność oraz wydajność kompilatorów, dojrzałość oraz dostępność narzędzi oraz dokumentacji.
Ze względów takich jak niedobór kompilatorów dla danej platformy sprzętowej, niewystarczająca wydajność wynikowego kody aplikacji, czy konieczność utrzymania oraz integracji z już istniejącą infrastrukturą, może nie być to możliwe albo zbyt kosztowne do zrealizowania. W przypadku większych projektów istotne jest też, jak szybko da się znaleźć odpowiednio wykwalifikowane osoby znające konkretny język oraz jak szybko uda się z nich stworzyć sprawny zespół.
Historia programowania
Mechaniczne urządzenia liczące są konstruowane już od czasów starożytnych. Mechanizm z Antykithiry pochodzący z czasów starożytnej Grecji (150-100 p.n.e.) był mechanicznym kalkulatorem opartym na zespole kół zębatych, służącym do obliczeń astronomicznych[1]. Arabski wynalazca Al-Jazari zbudował w 1206 roku programowalny automat perkusyjny z pałeczkami oraz krzywkami umieszczonymi na drewnianym bębnie w określonych miejscach. W miarę obrotu bębna uderzały one o dźwignie, które odgrywały określony dźwięk na instrumencie perkusyjnym. W 1805 roku powstało krosno tkackie Josepha Marie Jacquarda. Maszyna korzystała z kart dziurkowanych, na których zapisany był wzór tkaniny do wytworzenia. Zmieniając zestaw kart, da się było uzyskać tkaniny z innymi wzorami. Pomysł ten stał się później podchwycony przez Hermana Holleritha z IBM.
W 1833 roku Charles Babbage zaczął budowę maszyny analitycznej będącej w istocie mechanicznym, programowalnym protokomputerem, który wyprzedzał swoją epokę. Z powodu trudności konstrukcyjnych, a także braku zainteresowania rządu Wielkiej Brytanii wynalazca nie dokończył swojego wynalazku, lecz projekt stał się opisany przez Adę Lovelace, która napisała także dla niego pierwszy program obliczający liczby Bernoulliego oraz w ten sposób była pierwszym programistą (a właściwie programistką) w historii.
Wynalezienie architektury von Neumanna umożliwiło przechowywanie programów komputerowych w pamięci operacyjnej komputera razem z danymi. Pierwsze programy musiały być składane bezpośrednio z operacji oferowanych przez konkretną maszynę, wielokrotnie w notacji binarnej. Każdy model używał innego zestawu komend, co ograniczało przenośność. W późniejszych latach zaprojektowano pierwsze asemblery, gdzie programista mógł wpisywać instrukcje w formacie tekstowym z wykorzystaniem zapisu symbolicznego zamiast numeru rozkazu, np. ADD X, TOTAL. W 1954 roku zbudowany stał się pierwszy język programowania wysokiego poziomu, FORTRAN, gdzie programiści mogli bezpośrednio formułować wyrażenia matematyczne w podobnym stylu, do jakiego jesteśmy przyzwyczajeni: y = x^2 + 5*x – 7. Tekst programu, albo inaczej jego źródło, było tłumaczone do postaci zrozumiałej dla maszyny za pomocą specjalnej aplikacji zwanej kompilatorem. W późniejszych latach powstały nowe języki programowania, wielokrotnie zorientowane do tworzenia konkretnych typów aplikacji.
W początkowych latach istnienia komputerów (ok. 1940-1960), programy komputerowe były wprowadzane do pamięci komputera za pośrednictwem kart dziurkowanych albo papierowych taśm. Pod koniec lat sześćdziesiątych pojawiły się pierwsze urządzenia do elektronicznego przechowywania informacji oraz terminale komputerowe, dzięki którym kod źródłowy mógł być wprowadzany bezpośrednio do komputera za pomocą edytorów tekstu.
Wraz z rozwojem Internetu oraz sieci komputerowych pojawiły się narzędzia ułatwiające zespołową pracę nad programami, takie jak systemy kontroli wersji. Kod źródłowy jest tutaj przechowywany na centralnym serwerze, natomiast programiści wysyłają do niego poprawki z własnych kopii lokalnych. Wszystkie zmiany są rejestrowane, a program zarządzający potrafi inteligentnie łączyć ze sobą fragmenty modyfikowane niezależnie przez dwóch programistów, dzięki czemu nie może zaistnieć sytuacja przypadkowego skasowania efektu pracy innego członka zespołu.
Aktualnie programowanie jest atrakcyjną karierą w prawie każdym kraju rozwiniętym, ze względu na stale rosnący popyt na nowe aplikacje komputerowe. Pewne z najbogatszych osób świata są programistami z zawodu, np. Bill Gates (Microsoft), Larry Ellison (Oracle), Larry Page (Google) czy Hasso Plattner (SAP).
Nowoczesne programowanie
Pierwsze kroki w każdym projekcie programistycznym powinny być analiza wymagań, modelowanie, implementacja oraz eliminacja błędów (debugging). Istnieje wiele wielorakich sposobów na zrealizowanie każdego z tych etapów.
Współcześni programiści korzystają z wielu specjalistycznych narzędzi wspomagających wykonywanie oraz zarządzanie złożonymi aplikacjami. Proces tworzenia programu komputerowego zwykle rozpoczyna się od stworzenia analizy wymagań oraz zaprojektowania architektury. Popularnymi technikami modelowania są tutaj OOAD oraz MDA. Unified Modelling Language (UML) jest powszechnie akceptowaną notacją do prezentowania obu z nich.
Dopiero wtedy następuje wykonywanie właściwego kodu źródłowego. Przy złożonych aplikacjach wykorzystuje się z zaawansowanych środowisk IDE wyposażonych w szereg dodatkowych menedżerów pokazujących zróżnicowane informacje o strukturze aplikacji oraz w rozbudowany system wykrywania oraz usuwania błędów. Popularnymi środowiskami IDE są Visual Studio firmy Microsoft oraz projekt Eclipse nadzorowany przez IBM.
Aktualnie istotnym zagadnieniem jest kontrolowanie wersji kodu źródłowego, który wielokrotnie jest modyfikowany w sposób rozproszony przez wielu programistów. Im większy projekt (np. taki jak system operacyjny: FreeBSD, NetBSD, GNU/Linux itp.) tym większe znaczenie ma integrowanie wielu zmian oraz zarządzanie nimi (np. śledzenie zmian niezależnie od np. przemieszczania się plików itp.). Do takich systemów zaliczyć da się np. CVS, Subversion, svk, Git, Bazaar oraz inne. Wiele dużych, komercyjnych środowisk programistycznych zintegrowanych jest w system kontroli wersji.
Usuwanie błędów z gotowej aplikacji jest ostatnim krokiem rozwoju oprogramowania. Trudność jego realizacji zależy od środowiska, jakości kodu źródłowego oraz wybranego języka programowania. Istnieją dwa główne sposoby debugowania: statyczna analiza kodu oraz dynamiczna. Pierwszy opiera się na analizie kodu źródłowego pod kątem występowania możliwych błędów. Drugi, na analizie programu w trakcie pracy, służą ku temu specjalne narzędzia, zwane debugerami oraz fragmenty kodu zawarte bezpośrednio w programie, których wyłącznym zadaniem jest pomoc w znalezieniu błędów.
Nowoczesne języki
Współcześnie używanymi językami programowania są: C, C++, Objective C, C#, Visual Basic, Java, Delphi, Cobol, PHP, Perl, Python oraz Ruby.
Wiele języków wyewoluowało z C, jak dla przykładu C++, C# czy Java. Języki Java, Python oraz Ruby są popularne, albowiem pozwalają na bardzo szybkie wykonywanie aplikacji (ang. Rapid Application Development) oraz są uruchamiane w wirtualnej maszynie, co dopuszcza na uniknięcie wielu problemów znanych z języków niższego poziomu, takich jak przepełniania bufora czy nieprawidłowe wskaźniki. Jednakże przeważajaca ilość programów biurowych, jak dla przykładu edytory tekstu czy grafiki, jest napisanych w wydajniejszych językach, takich jak C, C++ czy Delphi.
Systemy operacyjne są prawie całkowicie napisane w wydajnych językach, albowiem szybkość jest konieczna. Naukowe programy są zwykle zaimplementowane w Fortranie, albowiem przy użyciu nowszych kompilatorów możliwa jest w nim bardzo wydajna optymalizacja obliczeń arytmetycznych. Cobol jest wciąż na silnej pozycji w zagranicznych korporacyjnych oraz rządowych centrach danych, z reguły na serwerach Mainframe. PHP oraz Java górują w programach korzystających z bazy danych. Python, będąc językiem ogólnego zastosowania, jest wykorzystywany zwykle w administracji systemu oraz na stronach WWW.
Istniejące języki programowania są stale rozwijane oraz modernizowane, powstają też całkowicie nowe, wielokrotnie innowacyjne języki oraz kompilatory.
Debugowanie
Debugowanie jest bardzo ważną częścią procesu tworzenia oprogramowania, albowiem program z błędami jest zwykle bezużyteczny. Języki takie jak C czy Asembler potrafią stanowić wyzwanie nawet dla doświadczonych programistów. Bliski kontakt ze sprzętem oprócz dużej wydajności oraz kontroli nad nim, niesie ze sobą także podatność na wystąpienie poważnych błędów takich jak przepełnienie bufora, błędne wskaźniki czy niezainicjowana pamięć. Przepełnienie bufora może uszkodzić pograniczne segmenty pamięci oraz spowodować błąd w całkowicie innej linii programu, jest także bardzo skuteczną metodą ataku – dopuszcza na wykonanie dowolnego kodu przez nadpisanie wskaźnika powrotnego funkcji. Z tego powodu narzędzia takie jak Valgrind, Purify czy Boundschecker są prawie niezbędne przy tworzeniu nowoczesnych aplikacji w C czy C++.
Języki takie jak Java, PHP oraz Python zapobiegają większości takich błędów, ale za cenę spadku wydajności programu wynikowego. Jest to akceptowalne w programach, którym przeważajaca ilość czasu zabierają zapytania do bazy danych.
Zawody programistyczne
Od kilku dekad organizowanych jest szereg konkursów programistycznych skierowanych przeważnie do młodych programistów (uczniów szkół średnich oraz studentów). W Polsce przebiega się parę dużych konkursów tego typu, a wśród nich, kierowane do studentów Akademickie Mistrzostwa Polski w Programowaniu Zespołowym, czy skierowana do uczniów szkół średnich Olimpiada informatyczna organizowana przez Ministerstwo Edukacji. Istnieją też portale skupiające zawodników startujących w tego typu konkursach (zob. online judge), które zawierają zbiory zadań oraz pozwalają na automatyczne sprawdzanie rozwiązań.
Osobliwą formą zawodów programistycznych są kompoty (od ang. competition – turniej) organizowane przez społeczność demosceniczną na zlotach takich jak np. Assembly oraz inne. Kategorie Demo oraz intro w głównej mierze skupiają się na konkurencji w umiejętności tworzenia najwydajniejszego kodu albo wykazania niezwykłego programistycznego polotu. Wielokrotnie też posiadają miejsce kategorie, w których ogranicza się rozmiar kodu np. 4 KB, 8 KB, 64 KB 96 KB itp. W takim przypadku autor albo autorzy próbują zbudować niezwykle urozmaicony oraz rozbudowany program multimedialny mieszczący się w zadanych ramach.
Sprawdź też
- Kompilacja oraz konsolidacja
- Algorytm
- Język programowania
- Kod źródłowy
- Skrypt
- Inżynieria oprogramowania
- Mikrokontroler
- Programowanie hybrydowe
Linki zewnętrzne
Materiały dydaktyczne MIMUW na studia informatyczne I stopnia:
Materiały dydaktyczne MIMUW na studia informatyczne II stopnia:
Przypisy
- ↑ Ancient Greek Computer’s Inner Workings Deciphered (ang.). National Geographic News, 2006-11-29. [dostęp 2010-10-19].