O svete máme často ustálené predstavy – že veci „nejako fungujú“ a výnimky sú skôr raritou. Avšak mladý programátor sa skôr či neskôr stretne s výnimkami, hraničnými stavmi, chybami používateľov aj zvláštnym správaním systémov, na ktorých jeho kód beží. Mnohé z týchto situácií si uvedomí až vtedy, keď program spadne alebo ohlási chybu. V tomto článku sa pozrieme na niektoré z nich a ukážeme, prečo realita programovania býva podstatne zložitejšia, než sa na prvý pohľad zdá.
Programovanie preto nie je len o automatizovaní štandardných postupov, ale najmä o systematickom ošetrovaní neštandardných situácií. Často sa predpokladá, že existuje jasne definovaný „bežný“ stav a popri ňom len niekoľko okrajových výnimiek.
Niektorí sa zamýšľajú dokonca nad tým, či v praxi neexistuje viac výnimiek než „normálnych“ stavov. Predstavme si, že určitá vlastnosť platí v 45 % prípadov. Zvyšok však netvorí jeden homogénny opak, ale desiatky rôznych výnimiek: 1 % má výnimku A, 1 % výnimku B, 1 % výnimku C a tak ďalej – pokojne až po päťdesiatu piatu výnimku. V súčte môže byť teda „nenormálnych“ prípadov viac než tých normálnych, len sú rozdrobené do množstva unikátnych situácií.
Chybná predstava č.1
Deň má 24 hodín.
Vysvetlenie na konci.
Chybná predstava č.2
Rok má 365 dní
Vysvetlenie na konci.
Chybná predstava č.3
Čas nemá začiatok a nemá koniec.
Vysvetlenie na konci.
Chybná predstava č.4
Minúta na systémových hodinách trvá minútu.
Alebo aspoň skoro presne minútu…
určite nie viac ako hodinu…
…to nemôžete myslieť vážne!
Vysvetlenie na konci.
Chybná predstava č.5
Týždeň číslo 1 začína v januári.
Vysvetlenie na konci.
Chybná predstava č.6
Mená ľudí sa zmestia do určitého vymedzeného priestoru .
Vysvetlenie na konci.
Chybná predstava č.7
Telefónne čísla sú čísla
Vysvetlenie na konci.
Vysvetlenie č. 1
V poslednú marcovú nedeľu má deň o jednu hodinu menej.
… nie vždy o jednu!
V histórii existujú príklady, keď sa posúvali hodiny dopredu o 2 hodiny alebo 30 minút.
… nie vždy menej!
Na južnej pologuli je to o jednu hodinu viac.
Vysvetlenie č. 2
V prestupnom roku má 366 dní.
Vysvetlenie č. 3
Počítačový čas začína prvým januárom 1970 00:00:00. A nebol to pondelok!
Väčšina systémov počíta počet sekúnd od tohoto dátumu a ukladá to do premennej veľkosti 4 bajty (32 bitov). Najväčšie kladné číslo, ktoré takto vieme zapísať, je 231 − 1, ak najľavejší bit je znamienko. Tento počet sekúnd ubehne 19. januára 2038 (Známy ako Problém roku 2038). Ak nepoužijeme ľavý bit na znamienko, budeme vedieť zapísať až 232 − 1 sekúnd, čo bude až v roku 2106.
Vysvetlenie č. 4
V starších verziách KVM na CentOS sa vyskytovala fascinujúca chyba. Virtuálny stroj KVM si neuvedomoval, že nebeží na fyzickom hardvéri. To znamenalo, že ak hostiteľský operačný systém prepol virtuálny stroj do suspendovaného stavu, virtuálne systémové hodiny si zachovali čas, ktorý mali v čase pozastavenia. Napríklad, ak bol virtuálny stroj pozastavený o 13:00 a potom o dve hodiny neskôr (o 15:00) opäť aktívny, systémové hodiny na virtuálnom stroji stále zobrazovali lokálny čas 13:00.
Programátori vyrobili záplatu – cron úlohu na udržanie času virtuálneho systému v súlade s hardvérovými hodinami hostiteľského operačného systému. Na nových virtuálnych strojoch sa však na to ľahko zabudlo a to viedlo k veľkej veselosti. Chyba bola opravená v novších verziách.
Vysvetlenie č. 5
Týždeň začína pondelkom, ale 1. január nie je vždy pondelok, takže podľa normy ISO budú dni predtým v starom roku a dni potom v novom roku. Príklad: 28. december 2014 patrí do 1. týždňa roku 2015.
Vysvetlenie č. 6
Maliar, známy jednoducho ako Picasso, mal celé meno „Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso“. Skúste toto meno vtesnať do tvaru, ktorý povoľuje 30 znakov…
Viac na shinesolutions.com/2018/01/08/falsehoods-programmers-believe-about-names-with-examples/
Vysvetlenie č. 7
Nikdy sa nepokúšajte ukladať telefónne čísla ako integer alebo akýkoľvek iný číselný typ. Hoci sú 007, 07 a 7 rovnaké čísla, nemusia byť nevyhnutne rovnaké telefónne číslo – v niektorých krajinách má úvodná 0 význam a tvorí súčasť samotného čísla.
V Izraeli niektoré reklamné čísla začínajú hviezdičkou *. Na Novom Zélande je možné nahlásiť dopravné nehody zavolaním na číslo *555. Niektoré telefónne čísla môžu dokonca obsahovať písmená, napríklad 1-800-Flowers.
Tento článok bol spracovaný podľa https://github.com/jameslk/awesome-falsehoods
