Light Mode

Przejdz do zawartosci

Programowanie komputerow

Z Wikipedii, wolnej encyklopedii
Na te strone wskazuje przekierowanie z ,,programowanie". Zobacz tez: inne znaczenia.
Ten artykul od 2013-11 wymaga zweryfikowania podanych informacji.
Nalezy podac wiarygodne zrodla w formie przypisow bibliograficznych.
Czesc lub nawet wszystkie informacje w artykule moga byc nieprawdziwe. Jako pozbawione zrodel moga zostac zakwestionowane i usuniete.
Sprawdz w zrodlach: Encyklopedia PWN * Google Books * Google Scholar * BazHum * BazTech * RCIN * Internet Archive (texts / inlibrary)
Dokladniejsze informacje o tym, co nalezy poprawic, byc moze znajduja sie w dyskusji tego artykulu.
Po wyeliminowaniu niedoskonalosci nalezy usunac szablon {{Dopracowac}} z tego artykulu.
Kod zrodlowy prostego programu napisany w jezyku C. Kiedy zostanie skompilowany i uruchomiony, wyswietli napis ,,Hello, world!".

Programowanie komputerow - proces tworzenia programu komputerowego, ktory ma realizowac okreslone zadania zdefiniowane w jezyku programowania. Kod zrodlowy jest napisany w jezyku programowania.

Miedzy programistami trwaja debaty, czy programowanie komputerow jest sztuka, rzemioslem czy procesem inzynieryjnym[1]. Bezposrednia forma sztuki w tej dziedzinie jest demoscena oraz gry komputerowe.

Kolejna dyskusja dotyczaca tego procesu jest stopien, w jakim jezyk programowania wplywa na sposob myslenia programistow przy pisaniu programow komputerowych. Jest ona analogiczna do hipotezy Sapira-Whorfa w lingwistyce. Programowanie zwykle wymaga wiedzy w dziedzinie algorytmow i struktur danych, jezykow i metodologii programowania, architektury komputerow i oprogramowania oraz wiedzy dziedzinowej, w zaleznosci od powstajacego programu[2]. Z perspektywy inzynierii oprogramowania programowanie (implementacja) jest tylko jednym z etapow powstawania programu.

Programisci

[edytuj | edytuj kod]
Osobny artykul: Programista.

Osoba programujaca komputery nazywa sie programista. Ich praca zazwyczaj obejmuje:

Jezyki programowania

[edytuj | edytuj kod]
Osobny artykul: Jezyk programowania.

Rozne jezyki programowania pozwalaja na wykorzystanie roznych stylow programowania zwanych rowniez paradygmatami programowania oraz specyficznych cech danego jezyka. Wybor konkretnego jezyka moze zalezec od indywidualnych upodoban, polityki firmy tworzacej oprogramowanie lub ze wzgledu na zadanie, jakie koncowa aplikacja ma realizowac (jezyki dziedzinowe). Najlepszym rozwiazaniem jest wybor jezyka programowania najbardziej dostosowanego do rozwiazywanego zadania i ewentualnej istniejacej infrastruktury. Najwazniejsze kryteria wyboru jezyka programowania to: paradygmat i rodzaj jezyka, przenosnosc i wydajnosc kompilatorow, dojrzalosc oraz dostepnosc narzedzi i dokumentacji. Ze wzgledow takich jak brak kompilatorow dla danej platformy sprzetowej, niewystarczajaca wydajnosc wynikowego kodu aplikacji, czy koniecznosc utrzymania i integracji z juz istniejaca infrastruktura, moze nie byc to mozliwe lub zbyt kosztowne do zrealizowania. W przypadku wiekszych projektow istotne jest tez, jak szybko mozna znalezc odpowiednio wykwalifikowane osoby znajace konkretny jezyk i jak szybko uda sie z nich stworzyc sprawny zespol.

Historia programowania

[edytuj | edytuj kod]
Programowanie komputera analogowego ELWAT z konca lat 60. XX wieku, przez laczenie tablicy polaczen

Mechaniczne urzadzenia liczace sa konstruowane juz od czasow starozytnych. Mechanizm z Antykithiry pochodzacy z czasow starozytnej Grecji (150-100 p.n.e.) byl mechanicznym kalkulatorem opartym na zespole kol zebatych, sluzacym do obliczen astronomicznych[3]. Arabski wynalazca Al-Jazari zbudowal w 1206 roku programowalny automat perkusyjny z paleczkami oraz krzywkami umieszczonymi na drewnianym bebnie w okreslonych miejscach. W miare obrotu bebna uderzaly one o dzwignie, ktore odgrywaly okreslony dzwiek na instrumencie perkusyjnym. W 1805 roku powstalo krosno tkackie Josepha Marie Jacquarda. Maszyna korzystala z kart dziurkowanych, na ktorych zapisany byl wzor tkaniny do wytworzenia. Zmieniajac zestaw kart, mozna bylo uzyskac tkaniny z innymi wzorami. Pomysl ten zostal pozniej podchwycony przez Hermana Holleritha z IBM.

W 1833 roku Charles Babbage zaczal budowe maszyny analitycznej bedacej w istocie mechanicznym, programowalnym protokomputerem, ktory wyprzedzal swoja epoke. Z powodu trudnosci konstrukcyjnych, a takze braku zainteresowania rzadu Wielkiej Brytanii wynalazca nie dokonczyl swojego wynalazku, lecz projekt zostal opisany przez Ade Lovelace, ktora napisala takze dla niego pierwszy program obliczajacy liczby Bernoulliego i w ten sposob zostala pierwszym programista w historii.

Wynalezienie architektury von Neumanna umozliwilo przechowywanie programow komputerowych w pamieci operacyjnej komputera razem z danymi. Pierwsze programy musialy byc skladane bezposrednio z operacji oferowanych przez konkretna maszyne, czesto w notacji binarnej. Kazdy model uzywal innego zestawu komend, co ograniczalo przenosnosc. W pozniejszych latach zaprojektowano pierwsze asemblery, gdzie programista mogl wpisywac instrukcje w formacie tekstowym z wykorzystaniem zapisu symbolicznego zamiast numeru rozkazu, np. ADD X, TOTAL. W 1954 roku stworzony zostal pierwszy jezyk programowania wysokiego poziomu, FORTRAN, gdzie programisci mogli bezposrednio formulowac wyrazenia matematyczne w podobnym stylu, do jakiego jestesmy przyzwyczajeni: y = x^2 + 5*x - 7. Tekst programu, lub inaczej jego zrodlo, bylo tlumaczone do postaci zrozumialej dla maszyny za pomoca specjalnej aplikacji zwanej kompilatorem. W pozniejszych latach powstaly nowe jezyki programowania, czesto zorientowane do tworzenia konkretnych typow aplikacji.

W poczatkowych latach istnienia komputerow (ok. 1940-1960), programy komputerowe byly wprowadzane do pamieci komputera za posrednictwem kart dziurkowanych lub papierowych tasm. Pod koniec lat szescdziesiatych pojawily sie pierwsze urzadzenia do elektronicznego przechowywania informacji oraz terminale komputerowe, dzieki ktorym kod zrodlowy mogl byc wprowadzany bezposrednio do komputera za pomoca edytorow tekstu.

Wraz z rozwojem Internetu oraz sieci komputerowych pojawily sie narzedzia ulatwiajace zespolowa prace nad programami, takie jak systemy kontroli wersji. Kod zrodlowy jest tutaj przechowywany na centralnym serwerze, natomiast programisci wysylaja do niego poprawki z wlasnych kopii lokalnych. Wszystkie zmiany sa rejestrowane, a program zarzadzajacy potrafi inteligentnie laczyc ze soba fragmenty modyfikowane niezaleznie przez dwoch programistow, dzieki czemu nie moze zaistniec sytuacja przypadkowego skasowania efektu pracy innego czlonka zespolu.

Obecnie programowanie komputerow jest atrakcyjna kariera w niemal kazdym kraju rozwinietym, ze wzgledu na stale rosnacy popyt na nowe aplikacje komputerowe. Niektore z najbogatszych osob swiata sa programistami z zawodu, na przyklad Bill Gates (Microsoft), Larry Ellison (Oracle), Larry Page (Google) czy Hasso Plattner (SAP).

Nowoczesne programowanie

[edytuj | edytuj kod]

Kolejnymi krokami w kazdym projekcie programistycznym powinny byc analiza wymagan, modelowanie, implementacja i eliminacja bledow (debugging). Istnieje wiele roznych sposobow na zrealizowanie kazdego z tych etapow.

Wspolczesni programisci korzystaja z wielu specjalistycznych narzedzi wspomagajacych tworzenie i zarzadzanie zlozonymi aplikacjami. Proces tworzenia programu komputerowego zazwyczaj rozpoczyna sie od stworzenia analizy wymagan oraz zaprojektowania architektury. Popularnymi technikami modelowania sa tutaj OOAD oraz MDA. Unified Modelling Language (UML) jest powszechnie akceptowana notacja do prezentowania obu z nich.

Dopiero wtedy nastepuje tworzenie wlasciwego kodu zrodlowego. Przy zlozonych aplikacjach korzysta sie z zaawansowanych srodowisk IDE wyposazonych w szereg dodatkowych menedzerow pokazujacych rozne informacje o strukturze aplikacji oraz w rozbudowany system wykrywania i usuwania bledow. Popularnymi srodowiskami IDE sa Visual Studio firmy Microsoft oraz projekt Eclipse nadzorowany przez IBM.

Obecnie istotnym zagadnieniem jest kontrolowanie wersji kodu zrodlowego, ktory czesto jest modyfikowany w sposob rozproszony przez wielu programistow. Im wiekszy projekt (np. taki jak system operacyjny: FreeBSD, NetBSD, GNU/Linux itp.) tym wieksze znaczenie ma integrowanie wielu zmian oraz zarzadzanie nimi (np. sledzenie zmian niezaleznie np. od przemieszczania sie plikow itp.). Do takich systemow zaliczyc mozna np. CVS, Subversion, svk, Git, Bazaar i inne. Wiele duzych, komercyjnych srodowisk programistycznych zintegrowanych jest w system kontroli wersji.

Usuwanie bledow z gotowej aplikacji jest ostatnim krokiem rozwoju oprogramowania. Trudnosc jego realizacji zalezy od srodowiska, jakosci kodu zrodlowego oraz wybranego jezyka programowania. Istnieja dwa glowne sposoby debugowania: statyczna analiza kodu i dynamiczna. Pierwszy polega na analizie kodu zrodlowego pod katem wystepowania mozliwych bledow. Drugi, na analizie programu w trakcie pracy, sluza ku temu specjalne narzedzia, zwane debugerami oraz fragmenty kodu zawarte bezposrednio w programie, ktorych jedynym zadaniem jest pomoc w znalezieniu bledow.

Nowoczesne jezyki

[edytuj | edytuj kod]

Wspolczesnie uzywanymi jezykami programowania sa: C, C++, Objective-C, C#, Visual Basic, Java, Delphi, Cobol, PHP, Perl, Python, Ruby, Kotlin czy Rust.

Wiele jezykow wyewoluowalo z C, jak na przyklad C++, C# czy Java. Jezyki Java, Python i Ruby sa popularne, gdyz pozwalaja na bardzo szybkie tworzenie aplikacji oraz sa uruchamiane w wirtualnej maszynie, co pozwala na unikniecie wielu problemow znanych z jezykow nizszego poziomu, takich jak przepelniania bufora czy nieprawidlowe wskazniki. Jednakze wiekszosc programow biurowych, jak na przyklad edytory tekstu czy grafiki, jest napisanych w wydajniejszych jezykach, takich jak C, C++ czy Delphi.

Systemy operacyjne sa niemal calkowicie napisane w wydajnych jezykach, poniewaz w tym przypadku szybkosc jest priorytetowa. Naukowe programy sa zwykle zaimplementowane w Fortranie, gdyz przy uzyciu nowszych kompilatorow mozliwa jest w nim bardzo wydajna optymalizacja obliczen arytmetycznych. Cobol jest wciaz na silnej pozycji w zagranicznych korporacyjnych i rzadowych centrach danych, glownie na serwerach Mainframe. PHP i Java goruja w programach korzystajacych z baz danych. Python, bedac jezykiem ogolnego zastosowania, jest wykorzystywany zwykle do administrowania systemem i na stronach WWW.

Istniejace jezyki programowania sa stale rozwijane i modernizowane, powstaja tez zupelnie nowe, czesto innowacyjne jezyki i kompilatory.

Debugowanie

[edytuj | edytuj kod]

Debugowanie jest bardzo wazna czescia procesu tworzenia oprogramowania, poniewaz program z bledami jest zwykle bezuzyteczny. Jezyki takie jak C czy pisanie bezposrednio w asemblerze moga stanowic wyzwanie nawet dla doswiadczonych programistow. Bliski kontakt ze sprzetem oprocz duzej wydajnosci i kontroli nad nim, niesie ze soba rowniez podatnosc na wystapienie powaznych bledow takich jak przepelnienie bufora, bledne wskazniki czy niezainicjowana pamiec. Przepelnienie bufora moze uszkodzic sasiednie segmenty pamieci i spowodowac blad w zupelnie innej linii programu; jest rowniez bardzo skuteczna metoda ataku - pozwala na wykonanie praktycznie dowolnego kodu poprzez nadpisanie wskaznika powrotnego funkcji. Z tego powodu narzedzia takie jak Valgrind, Purify czy Boundschecker sa niemal niezbedne przy tworzeniu nowoczesnych aplikacji w C czy C++.

Jezyki takie jak Java, PHP i Python zapobiegaja wiekszosci takich bledow, ale za cene spadku wydajnosci programu wynikowego. Jest to akceptowalne w programach, ktorym wiekszosc czasu zabieraja zapytania do bazy danych.

Zawody programistyczne

[edytuj | edytuj kod]

Od kilku dekad organizowanych jest szereg konkursow programistycznych skierowanych przewaznie do mlodych programistow (uczniow szkol srednich i studentow). W Polsce odbywa sie kilka duzych konkursow tego typu, a wsrod nich, kierowane do studentow Akademickie Mistrzostwa Polski w Programowaniu Zespolowym, czy skierowana do uczniow szkol srednich Olimpiada Informatyczna organizowana przez Ministerstwo Edukacji. Istnieja tez portale skupiajace zawodnikow startujacych w tego typu konkursach (zob. online judge), ktore zawieraja zbiory zadan i pozwalaja na automatyczne sprawdzanie rozwiazan.

Osobliwa forma zawodow programistycznych sa kompoty (od ang. competition - turniej) organizowane przez spolecznosc demosceniczna na zlotach takich jak np. Assembly Demoparty i inne. Kategorie zawodow demo i intro w glownej mierze skupiaja sie na konkurencji polegajacej na stworzeniu najwydajniejszego kodu lub wykazania niezwyklego programistycznego polotu. Czesto tez maja miejsce kategorie, w ktorych ogranicza sie rozmiar kodu np. 4 KB, 8 KB, 64 KB 96 KB itp. W takim przypadku autor lub autorzy probuja zbudowac niezwykle urozmaicony i rozbudowany program multimedialny mieszczacy sie w zadanych ramach.

Czesto przy ograniczaniu rozmiaru wynikowego programu w takich turniejach stosuje sie metody kryptograficzne, algorytmy, kompresje badz metode usuwania opcjonalnych naglowkow pliku[4][5].

Zobacz tez

[edytuj | edytuj kod]
Zobacz publikacje
Programowanie komputerow w Wikibooks
Zobacz haslo programowanie w Wikislowniku

Przypisy

[edytuj | edytuj kod]
  1. | Programming is much more of a craft than it is either an art or a science. Good ... | Hacker News [online], news.ycombinator.com [dostep 2023-08-15] .
  2. | Wiedza dziedzinowa to rodzaj wiedzy, ktory koncentruje sie na konkretnym obszarze, dziedzinie nauki, branzy lub dziedzinie praktycznej.
  3. | Ancient Greek Computer's Inner Workings Deciphered. National Geographic News, 2006-11-29. [dostep 2010-10-19]. (ang.).
  4. | Tiny PE [online], www.phreedom.org [dostep 2023-08-29] .
  5. | format PE to nie jest jedyny schemat plikow wykonywalnych

Linki zewnetrzne

[edytuj | edytuj kod]

Materialy dydaktyczne MIMUW na studia informatyczne I stopnia:

Materialy dydaktyczne MIMUW na studia informatyczne II stopnia: