Programowanie jest sztuką tworzenia, rozszerzania oraz naprawiania oprogramowania.
Jedyną przewagą komputerów nad ludźmi, jest możliwość wykonywania wielu bardzo szybkich obliczeń przeprowadzanych na dużych zbiorach danych.
Z faktu braku inteligencji komputera wszystko co chcemy, by zrobił, musi być bardzo dokładnie zapisane. O ile człowiek rozumie zapis słowny i przybliżony, jak na przykład przepis na ciasto, komputer nie potrafi niczego się domyślać (samo "domyślanie się" może być w pewnym stopniu dopiero zaprogramowane i zajmują się tym naukowcy i informatycy pracujący nad sztuczną inteligencją).
Z jednej strony jest to zaletą - po dobrym zaprogramowaniu nie traci się czasu procesora na ewentualną analizę i domyślanie się tego, co autor miał na myśli, a także chroni przed niejednoznacznością. Z drugiej strony nakłada to na programistę obowiązek wyrażania programu w sposób bardzo ścisły i bezbłędny. Jak chodzi o błędy to większość narzędzi, kompilatorów czy interpreterów języków wyższego poziomu wyłapuje miejsca znacznej ich części, ale naprawę pozostawia autorowi. Jest to jeden z elementów procesu programowania.
Programowanie to nic innego jak zapisywanie tego, co chcemy, by komputer zrobił (przepisu, algorytmu) w ścisłej postaci - odpowiednim języku, który komputer będzie potrafił przetworzyć i zrozumieć, a następnie zgodnie z instrukcją w nim zapisaną zadziałać.
Początkowo programowanie polegało na pisaniu instrukcji bezpośrednio w języku zrozumiałym dla komputera. Był to proces bardzo żmudny i trudny, gdyż kod zrozumiały dla procesora w postaci kolejnych prostych instrukcji dla procesora nie jest ani czytelny dla człowieka ani łatwy do szerokiego objęcia przez umysł, nawet po zapisania w czytelniejszy sposób niż kod maszynowy - czyli w postaci skrótów, tak zwanego języka programowania niskiego poziomu, Asemblera.
Nie ma tam obiektów podobnych do znanych w naszym świecie takich jak złożone typy danych. Nie ma wyrażeń odpowiednich dla bardziej złożonych sposobów ludzkiego myślenia i spostrzegania takich jak pętle powtórzeń, odliczanie i inne. Oczywiście wszystko to da się odwzorować w takim języku, ale wymaga to konstrukcji składających się z drobnych cegiełek - prostych operacji na rejestrach i pamięci oraz prostych instrukcji warunkowych takich jak "skocz jeśli". Łatwo się w tym pogubić, trudno napisać w całości jakiś bardziej złożony program (nawet przestrzegając reguł pozwalających na zachowanie pewnej czytelności i podziału na mniejsze fragmenty by móc objąć myślą całość programu). Wadą jest także brak przenośności. Program napisany w Asemblerze dla jednego procesora nie będzie działał na procesorze, który w istotny sposób się od niego różni.
Współcześnie znaczną większość programów powstaje bez użycia języków niskiego poziomu lub z zastosowaniem ich tylko do napisania niedużej części kodu - kiedy szybkie działanie fragmentu jest najważniejsze, krytyczne. Zamiast pisać wszystkie programy w Asemblerze wymyślono bardzo sprytną metodę - zwaną językami wysokiego poziomu. Programista piszący program w takim języku zwykle ma dużą ilość odpowiednich ułatwień, a także metod pozwalające na implementację (zawarcie) w swoim programie w prosty sposób takich elementów jak podział programu na funkcje, ich wywoływanie, pętle, złożone typy danych, obiekty. Niewątpliwym ułatwieniem jest również istnienie zwykle bardzo wielu tak zwanych bibliotek, które zawierają już zdefiniowane funkcje (a w programowaniu obiektowym - obiekty i metody) wykonujące różne przydatne rzeczy - takie jak na przykład bardziej złożone obliczenia matematyczne, generowanie grafiki czy obsługa hardware.
Języki wysokiego poziomu:
Języki kompilowane - są to języki, które przechodzą proces całkowitej kompilacji (automatycznego tłumaczenia) do postaci kodu maszynowego oraz konsolidacji (linkowania(łączenia)) tego kodu z innym kodem maszynowym (używanych bibliotek, innych części programu lub części skompilowanych w innym języku programowania - zarówno wyższego jak i niskiego poziomu), po czym powstaje kod wykonywalny odpowiedni dla danego systemu i rodzaju procesora.
Będą to C, C++, Pascal, Object Pascal(Delphi)
Zalety: szybkość
Wady: po kompilacji i linkowaniu trudne do przenoszenia między systemami operacyjnymi i procesorami gdy nie ma dostępu do kodów źródłowych i kompilatorów oraz linkerów, wymaga procesu kompilacji i konsolidacji (linkowania).
Języki interpretowane - są to języki, które nie są tłumaczone przed uruchomieniem na kod maszynowy, ale są w trakcie wykonywania interpretowane przez działający w tle program interpretujący
Będą to PHP, Java Script.
Zalety: przenośność, brak procesu kompilacji i linkowania, nierzadko możliwość prostego korzystania z metod oprogramowania jakie daje program interpretujący - często są to języki wewnętrzne związane z obsługą pewnego oprogramowania, jak np. Java Script interpretowany w przeglądarkach internetowych
Wady: mała szybkość
Język kompilowano-interpretowany - język który jest wstępnie kompilowany do pseudo-kodu prawie maszynowego, który następnie jest interpretowany przez działający w tle program (tutaj tak zwaną maszynę wirtualną Java)
będzie to język Java
Zalety: szybszy od języków interpretowanych, przenośny
Wady: nie tak szybki jak kompilowany
Proces programowania
Zwykle proces programowania należy zacząć od określenia tego, co chce się stworzyć Następnie trzeba wybrać język programowania, lub zastosować ten, który się zna. Dobrze jest jednak znać kilka - języki programowania często mają pewne specyficzne i właściwe im zastosowania - takie, które w innych językach są bardzo trudne do zrealizowania. Wybór ten czasem jest oczywisty (do generowania dynamicznego zawartości strony WWW na podstawie bazy danych raczej używa się PHP niż języka C lub Pascal, tych ostatnich nawet zwykle nie można by było użyć w praktyce), a czasem nie do końca (jak wybór między C++ i Java w wielu sytuacjach - jeden i drugi ma pewne wady i zalety). Po określeniu zadania i języka powinno się zaprojektować to, co chce się zrobić, zrobić pewien szkic, który pozwoli na ścisłe trzymanie się planu. Oczywiście w prostych programach można od razu zabrać się za pisania programu mając pomysł i plan w głowie.