Zdravim, mam uz klasicku otazku, ktora sa riesi skoro vsade, ale predsa ju polozim. Aky programovaci jazyk si mam zvolit, ktoremu by som sa mohol venovat? Ako poziadavku mam viacej kriterii. V prvom rade, aby bol jazyk pouzitelny hlavne v OS Linux, ak bude pouzitelny aj pre Win, je to len vyhoda. Dalej, aby som si v nom mohol vytvorit jednoduche, pripadne zlozitejsie programy a hry (jak konzolove, tak graficke aplikacie, viac vsak preferujem graficke aplikacie). Dalej, aby som sa s tymto jazykom mohol bezproblemov uplatnit hocikde v praci. Co ma napadlo, tak bud C++ s nejakou grafikou, napr. QT4, alebo programovaci jazyk JAVA.
- hry webove neni problem
- uplatnis v praxi (na rozdiel od C++ a QT4)
- funguje vo vsetkych OS (v podstate aj na mobiloch ak ma webbrowser)
- mozes na tom zarabat od sameho zaciatku (pocnuc 1-vikendovou webstrankou nejakej predajne umelych hnojiv az po ...)
- desktop je mrtvy
co sa tyka webovych hier tak tak skoro sa nevyrovnaju ziadnym desktopovym a uz aj preto desktop nie je mrtvy
co sa tyka C++ a javy tak tiez funguju cca na vsetkych systemoch staci mat len nejaky kompilator ... je pravda ze treba urobit nejake tie zmeny v kode ale ked si na to clovek zvykne tak nema problem
java a este viac C++ ma podla mna vacsie uplatnenie ako PHP
a co sa tyka pisania PHP napisat dobre optimalizovany kod v PHP tiez nie je az take jednoduche aby sa to dalo len tak za vikend...zaklady ano ... ale to je tak vsetko ...
17.1.2008
Dvaja profesori z New York University sa v obšírnejšej rozprave zaoberali problémom, ktorý trápi mnohých zamestnávateľov v IT priemysle: programátorské schopnosti nových absolventov počítačových vied sa postupne znižujú. Podľa nich za to môžu úvodné kurzy Javy a skriptovacích jazykov.
Vývoj programovacích schopností vo viacerých jazykoch potom študentov učí automaticky používať veľké knižnice a špeciálne balíky s kódom, akoby programovali z predpripraveného receptu[kuchárskej knihy]. Výsledným negatívom pre softvérový priemysel je nedostatočná zručnosť, najmä pre bezpečnostné a ochranné účely, ktorá je navyše prakticky na úrovni toho, čo ponúka outsourcingový priemysel. Skrátene sa to dá povedať tak, že vysoké školy (zo zamerania dvoch profesorov vyplýva, že teda najmä školy v USA) trénujú ľahko nahraditeľných IT profesionálov. Problémy so stupňom programátorskej vyspelosti absolventov už navyše naznačujú aj zamestnávatelia.
V prvom rade sa sa študentom ťažko píšu programy, ktoré nemajú žiadne grafické rozhranie; ďalej nemajú pochopenie pre vzťah medzi zdrojovým kódom a tým, čo hardvér dokáže skutočne spraviť. Nakoniec, vôbec nerozumejú sémantike ukazovateľov (resp. smerníkov), takže majú neskôr problémy s C pri systémovom programovaní.
http://www.itnews.sk/buxus_dev/generate_page.php?page_id=52067
=> jednoznacne C, kde smerniku su a treba ich pouzivat casto.... Leda, ze by si chcel konkurovat schopnostmi Indom......
Indovia neznaju miestne pomery, to je ich nevyhoda. Inak by uz robili vsetko oni :-)
Ano, Free Pascal je super, ale ja tu teraz neriesim co je lepsie a horsie, ja tu len poukazujem na moznosti vyberu.
Ak sa bude v C stranit prikazu goto a nezacne hned pointerami, tak sa rychlo nauci zaklady, ktore by mohol mat mozno za rovnaky cas aj v Pascale, ale bude mat moznost napredovat dalej.
No Turbo Pascal má dosť veľké obmedzenia (napr. memget, alebo ako sa volá niečo ako malloc v pascale), ale vo FPC je to už o inom. Samozrejme syntax stále taká hrozná.
Mimochodom goto nie je až taký zlý príkaz za aký ho všetci považujú. Vo vnorených cykloch sa dá napríklad veľmi elegantne využiť na vyskočenie z vnútorného cyklu.
Vyssie tu este niekto pisal, ze je jedno, aky jazyk sa pouzije, ze aj tak je to hlavne "matika", na com zalezi. Ma pravdu, ale len polovicnu. Spravny programator samozrejme musi vediet, aky algoritmus je v akej chvili vhodne pouzit na dosiahnutie ciela. Dnesni programatori casto nevedia skoro nic. Ked potrebuju nieco zosortit, tak pouziju sort z kolekcii, ak sme v Jave, alebo qsort v C a tym to pre nich hasne. Netusia vobec, ako funguje, preco funguje a kedy je vhodny a kedy nie. Takychto programatorov len kopat do zadku a bit po hlave. Ale na druhu stranu, len znalost algoritmov a zlozitosti cloveka z nudze nedostane. Castokrat sa stane, ze aj v teorii horsi algoritmus dosahuje lepsie vysledky. A to preto, ze nie len navrh, ale aj samotna implementacia je dolezita. A to je ta druha strana mince. Je dolezite vediet, ako pracuje CPU, ako sa pristupuje do RAM a na HDD a kolko casu to trva, co je to stack a preco moze pretiect a podobne veci. Bez toho z vas nebude dobry programator, hoci by ste dokonale ovladali vsetku tu "matiku" okolo. Takze v tomto ohlade je vyber jazyka pomerne dolezita vec a prave v tomto ohlade je C opat najvhodnejsia volba, lebo nic pred vami neskryva.
Preto nevidim dovod, preco pouzivat na ucenie cokolvek ine, ako ciste C :)
Neni pravda ze for cyklus v pascale neni podobny na ziadny jazyk je podobny na BASIC (dalsi jazyk pouzivany viac na vyucovanie).
Asi pre uplneho zaciatocnika je vhodnejsi jednoduchy jazyk, v ktom pred nim niektore veci zatajite a prechod na iny jazyk neni az tak zlozity teda ak sa neucite programovat "nasilu".
A aj tak si myslim ze matika je najpodstatnejsia cast programovania.
Staci si zobrat jednoduchy priklad sucet cisel od 1 po n hlavne kde n je dost velke cislo, velka cast ludi to skodi cez for cyklus, co je dost zdlhave. A takychto prikladov je dost vela. Nadruhu stranu netvrdim ze znalost syntaxe a toho ako pociac funguje neni dolezita.
Ja som sa ucil programovat v Jave je multiplatformna a am vela inych vyhod, ale ako som skor pisal ako nahle sa naucis ako tak nejaky nizsi prog jazik, tak tie vissie sa uz ucia jednoducho a C++ a Java su dost podobne.
Basic nie je turingovo kompletny jazyk, ked uz tak velmi poukazujes na tu "matiku". Ked uz chces, aby sa ludia ucili na zaciatku pouzivat hracky, tak ovela vhodnejsie je Commenius Logo, Karel alebo Baltik, ale to je tak akurat uroven zakladnej skoly, co je miesto, kde by sa deti mali zoznamit so zakladmi programovania.
Medzi turning kompletne programovacie kazyky, zaradujeme aj ezotericky jazyk Brainfuck. Pre vsetky konstrukcie, ktore ma BrainFuck sa daju najst ekvivalenty aj v Basicu, tak preco Basic nie je turning kompletny ?
Basic nazaj nema parametre pre funkce, lokalne premenne a navratove hodnoty, ale to nema ani assembler a BrainFuck a preda su turing kompletne
Uvediem priklad jednoduchej rekuznej funkcie v C :
int fibonacci(int x)
{
if( x == 0 )
{
return 0;
}
if( x == 1 )
{
return 1;
}
return fibonacci(x-1) + fibonacci(x-2);
}
Teraz tu istu funkciu v assembleri (nejde o diassemblovanie funkcie ale o znovu napisanie tej istej funkcie v assembleri pre x86 ) :
; val2 [ebp-8]
; val1 [ebp-4]
; ebp [ebp]
; ret [ebp+4]
; arg1 [ebp+8]
fabonacci:
push ebp
mov ebp, esp
sub esp, 16
mov eax, [ebp+8]
cmp eax, 0
jnz .is_zero
mov esp, ebp
pop ebp
ret
.is_zero:
cmp eax, 1
jnz .is_one
mov esp, ebp
pop ebp
ret
.is_one:
dec dword [ebp+8]
push dword [ebp+8]
call fabonaci
add esp, 4*1
mov [ebp-4], eax
dec dword [ebp+8]
push dword [ebp+8]
call fabonaci
add esp, 4*1
add [ebp-4], eax
mov eax, [ebp-4]
mov esp, ebp
pop ebp
ret
Vsimni me si, ako sa to vlastne v tom assembleri prisu rekurzne funkcie
Teraz mi uz iba v BASICu staci implementovat zasobnik a prepisat tento algoritmus, jediny rozdiel je v tom, ze budem mat zasobniky vlastne dva, prvy vnutorne implementivany BASICom, kde sa ukladaju a vyberaju cisla riadkov po volani GOSUB/RETURN a druhy zasobnik implementovany mnou cez jednorozmerne pole (este taky detail, ten moj implementovany zasobnik nerastie od vyssich adries k nizsim, ako to pozname v zasobniku implementovanom pomocou instrukcii PUSH POP, ale naopak, ale to je fakt detail). tymto dvom zasobnikom musim priposobit onen algoritmus v assembleri
tu je vysledny kod (dodatocne okomentrovany):
REM init
REM init stack
stacksize = 1024
DIM stack(stacksize)
REM init registers (32-bit only)
eax = 0: REM return value
ebx = 0
ecx = 0
edx = 0
esp = 1: REM stack pointer
ebp = 0: REM stack frame pointer
REM main
REM PUSH(10)
REM do zasobnika ulozime argument funkcie
arg1 = 10
GOSUB 10
REM FINONACCI(10)
REM zavolame funkciu
GOSUB 100
REM vyberieme argument zo zasobnika
esp = esp - 1
PRINT "eax = "; eax
END
10 REM push
esp = esp + 1
stack(esp) = arg1
RETURN
20 REM pop
arg1 = stack(esp)
esp = esp - 1
RETURN
REM funckia FIBONACI
REM
REM stackframe:
REM x - stack(ebp+1) - lokalna premenna
REM EBP - stack(ebp) - zalohovana hodnota registra EBP
REM arg1 - stack(ebp-1) - prvy, jediny argument funkcie
100
REM vytvorime stack-frame funkcie
REM PUSH EBP
arg1 = ebp
GOSUB 10
ebp = esp
esp = esp + 1: REM miesto vyhradene pre jednu lokalnu premennu
IF stack(ebp - 1) = 0 THEN eax = 0: GOTO 190
IF stack(ebp - 1) = 1 THEN eax = 1: GOTO 190
REM PUSH(arg1-1)
REM do zasobnika ulozime argument funkcie
arg1 = stack(ebp - 1) - 1
GOSUB 10
REM FINONACCI(arg1-1)
REM zavolame funkciu
GOSUB 100
REM vyberieme argument zo zasobnika
esp = esp - 1
REM ulozime vysledok do lokalnej premennej
stack(ebp + 1) = eax
REM PUSH(arg1-2)
REM do zasobnika ulozime argument funkcie
arg1 = stack(ebp - 1) - 2
GOSUB 10
REM FINONACCI(arg1-2)
REM zavolame funkciu
GOSUB 100
REM vyberieme argument zo zasobnika
esp = esp - 1
REM pripocitam vysedok k lokelnej premennej
stack(ebp + 1) = stack(ebp + 1) + eax
REM EAX = fibonacci(arg1-1) + fibonacci(arg1-2);
REM navratova hodnota, sa rovna nasej lokalnej premennej
eax = stack(ebp + 1)
190
REM rusime stack-frame funkcie
esp = ebp
REM POP EBP
GOSUB 20
ebp = arg1
RETURN
btw co odporucas ked sa clovek prekusne C-ckom a alokovanie / dealokovanie dvojrozmernych poli, trocha rucnej prace s SQLite, atd
vydat sa hardcore cestou C/GTK+ (a pisania dlhych funkcii napr. gtk_text_buffer_get_iter_at_offset(), co mna hned pri prvom pohlade odradilo, k tomu ked som este videl ako sa derivuje neaka trieda z GObject) alebo si zvolit C++/Qt?
C++ je urcite vhodnejsi jazyk ako Java/C# pre zaciatocnikov, lebo ked chce clovek napisat neaky algoritmus tak nemusi hned vsetko balit do nezmyselnych tried v tomto pripade....no ked uz treba GUI aplikaciu bez vyssich struktur si ju nwm predstavit, je to tym, ze GUI je vzdy o objektovom programovani ;)
PS: pri programovani si treba uvedomit ze viaceri ficia na 6 a viac rokov starych kompoch...ne kazdemu sa chce kazde 2roky menit komp aby mu tam bezala neaka prasacky naprogramovana aplikacia :)
Co to znamena hocikde?
Kazdy jazyk bol vyvinuty na isty typ programov - C bolo na pisanie opearcnych systemov a ovladacov...
Ale skus si pozrite, ake jazyky pouzivaju softverove projekty firiem nad 1000 ludi
meria ich tzv. TIOBE index (vysledky su kazdy mesiac) a su zverejnene na ...
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html