Počítačové programování

V rámci softwarového inženýrství je programování (implementace) považováno za jednu fázi procesu vývoje softwaru.

Probíhá debata o tom, do jaké míry je psaní programů uměním, řemeslem nebo inženýrskou disciplínou. Dobré programování je obecně považováno za uměřenou aplikaci všech tří s cílem vytvořit efektivní a udržovatelné softwarové řešení (kritéria pro „efektivní“ a „udržovatelné“ se značně liší). Tato disciplína se liší od mnoha jiných technických profesí v tom, že programátoři obvykle nemusí mít licenci nebo absolvovat standardizované (nebo vládou regulované) certifikační zkoušky, aby se mohli nazývat „programátory“ nebo dokonce „softwarovými inženýry“.

Další probíhající debatou je, do jaké míry programovací jazyk používaný při psaní programů ovlivňuje formu, kterou konečný program má. Tato debata je analogická s tou, která obklopuje Sapir-Whorfovu hypotézu v lingvistice.[Jak odkazovat a odkazovat na shrnutí nebo text]

Různé programovací jazyky podporují různé styly programování (nazývané programovací paradigmata). Výběr použitého jazyka podléhá mnoha úvahám, jako je firemní politika, vhodnost pro úkol, dostupnost balíčků třetích stran nebo individuální preference. V ideálním případě bude vybrán programovací jazyk, který je pro daný úkol nejvhodnější. Kompromisy z tohoto ideálu zahrnují nalezení dostatečného počtu programátorů, kteří znají jazyk pro sestavení týmu, dostupnost kompilátorů pro daný jazyk a účinnost, s jakou programy napsané v daném jazyce provádějí.

Allen Downey ve své knize „Jak myslet jako počítačový vědec“ napsal:

Detaily vypadají v různých jazycích různě, ale několik základních instrukcí
se objeví snad v každém jazyce:

input: Získejte data z klávesnice, souboru nebo jiného zařízení.

výstup: Zobrazení dat na obrazovce nebo odeslání dat do souboru nebo jiného zařízení.

matematika: Provádět základní matematické operace jako sčítání a násobení.

podmíněné provedení: Zkontrolujte některé podmínky a proveďte odpovídající
posloupnost příkazů.

opakování: Proveďte nějakou akci opakovaně, obvykle s určitými odchylkami.

Doporučujeme:  Erekce klitorisu

Drátová zásuvková deska pro IBM 402 Accounting Machine.

Nejstarší programovatelný stroj (to je stroj, jehož chování lze ovládat změnami „programu“) byl v roce 1206 Al-Jazariho programovatelný humanoidní robot. Al-Jazariho robot byl původně loď se čtyřmi automatickými hudebníky, která plula po jezeře, aby bavila hosty na královských pijáckých večírcích. Jeho mechanismus měl programovatelný bubenický stroj s kolíčky (vačkami), které narážely do malých pák, které ovládaly bicí nástroje. Bubeník mohl být donucen hrát různé rytmy a různé bubenické vzorce tím, že se kolíčky přesunuly na různá místa.

Tuto inovaci později zdokonalil Herman Hollerith, který v roce 1896 založil společnost Tabulating Machine Company (ze které se stala IBM). Vynalezl děrnou kartu Hollerith, čtečku karet a děrovací stroj na klíče. Tyto vynálezy byly základem moderního průmyslu zpracování informací. Přidání zásuvkové desky k jeho Tabulátoru typu I z roku 1906 mu umožnilo vykonávat různé práce bez nutnosti přestavby (první krok k programování). Koncem čtyřicátých let existovala celá řada zásuvkových programovatelných strojů, nazývaných zařízení pro záznam jednotek, které prováděly úkony zpracování dat (čtení karet). První počítače byly také naprogramovány pomocí zásuvkových desek.

Krabice děrných štítků s několika programovými balíčky.

S postupem času učinily počítače obrovské skoky v oblasti výpočetního výkonu. To přineslo novější programovací jazyky, které jsou více abstrahovány od základního hardwaru. Ačkoli tyto abstrahovanější jazyky vyžadují další režii, ve většině případů obrovský nárůst rychlosti moderních počítačů přinesl jen malý pokles výkonu ve srovnání s dřívějšími protějšky. Výhody těchto abstraktnějších jazyků spočívají v tom, že umožňují jak snadnější učení lidem méně obeznámeným se staršími programovacími jazyky nižší úrovně, tak také zkušenějšímu programátorovi umožňují rychle vyvíjet jednoduché aplikace. Navzdory těmto výhodám velké komplikované programy a programy, které jsou více závislé na rychlosti, stále vyžadují rychlejší a relativně nižší jazyky s dnešním hardwarem. (Stejné obavy byly vzneseny ohledně původního jazyka Fortran.)

Doporučujeme:  Likér

Během druhé poloviny dvacátého století bylo programování atraktivní kariérou ve většině rozvinutých zemí. Některé formy programování byly stále více předmětem offshore outsourcingu (dovoz softwaru a služeb z jiných zemí, obvykle za nižší mzdu), což komplikovalo rozhodování o kariéře programování v rozvinutých zemích a zároveň zvyšovalo ekonomické příležitosti v méně rozvinutých oblastech. Není jasné, jak daleko bude tento trend pokračovat a jak hluboce ovlivní mzdy a příležitosti programátorů.

Ať už je přístup k vývoji softwaru jakýkoliv, program musí konečně uspokojit některé základní vlastnosti; mít je na paměti, zatímco programování snižuje náklady z hlediska času a/nebo peněz kvůli ladění, dalšímu vývoji a uživatelské podpoře. Přestože kvalitního programování lze dosáhnout mnoha způsoby, mezi nejvýznamnější patří následujících pět vlastností:

Prvním krokem ve většině formálních softwarových vývojových projektů je analýza požadavků, následuje
modelování, implementace a eliminace selhání (ladění).
Pro každý z těchto úkolů existuje mnoho rozdílných přístupů. Jedním z přístupů oblíbených pro analýzu požadavků je analýza případů použití.

Mezi oblíbené modelovací techniky patří objektově orientovaná analýza a design (OOAD) a modelem řízená architektura (MDA). Unified Modeling Language (UML) je notace používaná pro OOAD i MDA.

Podobnou technikou používanou pro návrh databáze je Entity-Relationship Modeling (ER Modeling).

Implementační techniky zahrnují imperativní jazyky (objektově orientované nebo procedurální), funkční jazyky a logické jazyky.

Ladění se nejčastěji provádí pomocí IDE jako Visual Studio, NetBeans a Eclipse. Používají se také samostatné debuggery jako gdb.

Je velmi obtížné určit, které jazyky jsou nejpopulárnější z moderních programovacích jazyků. Některé jazyky jsou velmi populární pro konkrétní druhy aplikací (např. COBOL je stále silný v korporátním datovém centru, často na velkých sálových počítačích, FORTRAN v inženýrských aplikacích a C v embedded aplikacích), zatímco některé jazyky jsou pravidelně používány pro psaní mnoha různých druhů aplikací.

Doporučujeme:  Neurověda a sexuální orientace

Ladění je velmi důležitý úkol pro každého programátora, protože chybný program je často nepoužitelný. Jazyky jako C++ a Assembler jsou velmi náročné i pro zkušené programátory kvůli poruchovým režimům, jako je překročení vyrovnávací paměti, špatné ukazatele nebo neinicializovaná paměť. Překročení vyrovnávací paměti může poškodit přilehlé oblasti paměti a způsobit selhání v úplně jiné programové řadě. Kvůli těmto problémům s pamětí jsou nástroje jako Valgrind, Purify nebo Boundschecker prakticky nutností pro moderní vývoj softwaru v jazyce C++.
Jazyky jako Java, C#, PHP a Python chrání programátora před většinou těchto runtime poruchových režimů, ale to může přijít za cenu dramaticky nižší rychlosti provedení výsledného programu. To je přijatelné pro aplikace, kde je rychlost provedení určena jinými ohledy, jako je přístup k databázi nebo souborový I/O. Přesná cena bude záviset na konkrétních prováděcích detailech. Moderní Java virtuální stroje a .NET Common Language Runtime například používají celou řadu sofistikovaných optimalizací, včetně runtime konverze interpretovaných instrukcí na nativní strojový kód (viz Just-in-time kompilace).