» »

S katerim programskim jezikom narediti prve korake v svet programiranja ?

S katerim programskim jezikom narediti prve korake v svet programiranja ?

«
1
2

rokec1991 ::

Mene samo zanima, kako bi se naučil programirati?!?! Ker sam nimam pojma kak to gre zeloooo rad bi se pa naučil! Imam program freepascal in me zanima, če je to vredu program za začetnika ali predlagate kaj drugega!?!?!

Hvala
  • spremenilo: CCfly ()

MarkV ::

Sam jezik pascal je zelo naklonjen začetniku in te tudi nauči lepih navad, ki jih boš potem potreboval pri kakšnih "resnih" jezikih ala C.

Začni s takim programom :

program moj_prvi;
begin
writeln('To je moj prvi program aka Hello World');
end.

Skompajlaj, linkaj, zaženi. To je tvoj prvi program:))
O pascalu je na netu ogromno tutorialov, če je kakšna nejasnost, se obrni name, ti z veseljem pomagam.

rokpok ::

Vprašanje, koliko se je smiselno učiti Pascala, ker je majhna verjetnost, da boš kasneje v življenju programiral v njem ali v C-ju...

Osebno ti (za učenje programiranja) priporočam Python.
Rad bi bil pingvin.

Zgodovina sprememb…

  • spremenil: rokpok ()

MarkV ::

Še vedno se najde ogromno ponudb za programerje, ki obvladajo DELPHI.

Je pa prihodnost pascala res vprašljiva, saj je borland malodane šel v 3 krasne...

Nejc Pintar ::

Borlandova nova okolja (BDS) so za en kurc. Je pa delphi kul za izdelavo aplikacij "na hitrco":)
Lahko je biti prvi, če si edini!

OwcA ::

Tudi jeziku samemu (pascal in derivati) se precej pozna zob časa.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Matrin ::

Borland v tri krasne? Ravno pred kratkim so izdali nove prevajalnike. tukaj novica

luli ::

Zadnje čase imam občutek, da večina ljudi (tudi ti owca) piše na forum samo zato, da smeti! A lahko rečeš kje se pascalu in njegovim derivatom pozna zob časa?

OwcA ::

A lahko rečeš kje se pascalu in njegovim derivatom pozna zob časa?

Vsekakor:
- nezmožnost metaprogramiranja
- funkcije niso prvorazredni objekti
- nima interaktivne konzole

Napisano vsekakor velja tudi za mnoge druge popularne jezike, tudi novejše, ampak po drugi strani imamo pa tudi starejše jezike, ki vse to in še več omogočajo.

Objektivno gledano je učenje programiranja preko Pascala dan danes slaba naložba. Žal.
Otroška radovednost - gonilo napredka.

OwcA ::

Morda še to, kaj so moji favoriti med jeziki za učenje:

* Python
* JavaScript

za mlajše pride v poštev še:

* Logo

za vse, ki jim matematika leži in imajo po možnosti tudi dobro zaledje v njej pa:

* Scheme
* Haskell
* Mathematica
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

LapD ::

Logo...kiri spomini :)) FW 50 RT 90 BW 50 PU... Je sploh še aktualna ta zadeva al si kaj druzga mislu?

OwcA ::

To, ja.
Seveda pa Logo ni le RT in kompanija, temveč dokaj zmogljiv programski jezik.
Otroška radovednost - gonilo napredka.

'FireSTORM' ::

zakaj se pa npr. v Cju nebi dalo programirat? mislim, zakaj bi naj tudi C bil obsojen na propad?
Those penguins.... They sure aint normal....

OwcA ::

Zakaj bi bil C obsojen na propad? Če ni zelo primeren za učenje, še ne pomeni, da ni za kaj drugega dobra izbira.
Otroška radovednost - gonilo napredka.

Quikee ::

smalltalk =)

'FireSTORM' ::

OwcA
moj post se je navezoval na rokpokovo izjavo
kje je smisel se učit pascal če ga pa tak nebo uporabljal v življenju kasneje pa tudi C-ja ne...ali nekak v tem smislu

drugače pa C je tudi dober za učenje programiranja...saj je zelo podoben pascalu

drugače pa jaz sem najprej programiral v Logo(OŠ), potem pascal, zdaj pa c++/mfc
Those penguins.... They sure aint normal....

Gundolf ::

Jaz bi pa samo rekel, da če jezik v realnem življenju ni sploh in nikoli mi uporabljen, to še ne pomeni, da ni dober za učit se. Nasploh je verjetno najslabše kar se da naredit, da se gre učit programiranja v nek 'perspektiven' jezik. Ko enkrat znaš programirat se je naučit nekega jezika zelo majhen problem. V učenje programiranja pa spada pregled eneparih jezikov in začet s pascalom zna biti čisto v redu. Ko pa enkrat obvladaš osnovne pojme, greš pa na ostale jezike.

rokpok ::

Nisem rekel, da je C jezik obsojen na propad oziroma, da bo propadel. Upam pa si trditi, da se bo v prihodnosti uporabljal izključno za pisanje sistemskih aplikacij, gonilnikov...

Nesmiselno je pisati uporabniške programe v C-ju, zato ker lahko v veliko krajšem času napišeš enak program v katerem drugem jeziku (VB.NET, C#, Python...) brez kakšnih gromozanskih izgub glede hitrosti izvajanja. Prav tako moraš pri programiranju v C jeziku skrbeti za ustrezno alociranje pomnilnika in podobne stvari, kar programerje dejansko velikokrat odvrne, da bi pozornost posvečali dejanskemu problemu (ki ga rešujejo) in so se prisiljeni posvečati tehničnim zahtevam programskega jezika.

Ne rečem, da se nek začetnik ne sme učiti programiranja v C-ju, vendar se res sprašujem koliko mu bo to koristilo v prihodnosti, ko bomo programe pisali tako, da bomo (enostavno povedano) povezovali skupaj različne UML diagrame (govorim o Model Driven Applications).
Rad bi bil pingvin.

MarkV ::

Ni važno ali je jezik perspektiven ali ne, pomembno je da je učenju prijazen in učinkovit. Če se učiš "perspektivne" jezike je to napačen pristop. Iz tebe potem ne rata programer ampak "code monkey", ki zna nekaj narediti, ne ve pa o samem programiranju in računalništvu praktično nič.

Tipičen primer je večina programerjev v .NET okolj (in vseh ostalih RAD).

Važno je razviti "programersko logiko" in to lahko razvijemo le s kakim kompleksnim jezikom, da začnemo tudi malo razumeti stvari v ozadju. Kdor takoj skoči na "perspektiven jezik" ne bo nikoli dober programer, ampak bo odvisen od omejitev programskih okolij za razvoj... Taka okolja pa precej omejujejo, če hočeš narediti nekaj, kar ŠE NI uveljavljeno, ali poskušaš orati ledino s kakim novim pristopom/programom.

Če bodo ostali samo "code monkey-i", kdo bo pisal driverje, operacijske sisteme in zahtevne aplikacije? Bodo vsi delali "programe" v MS Acessu in .NET? Bomo plesali, kot nam bodo narekovali v MS-ju?

Vedno smo in bomo potrebovali prave programerje! To dokazuje tudi dejstvo, da so najboljše aplikacije za industrijo še vedno pisane v assemblerju in C-ju. In še vedno je velika potreba po tistih ki razumejo surovo kodiranje in vedno bo, ne glede na to, če se bodo programska orodja razvila v to smer, da bo aplikacije lahko izdeloval vsak lolek.

edit: rokec1991: ti se kar nauči pascal... dejstvo da je pascal v učnem načrtu računalniških tehnikov in na tehniških gimnazijah ŠE DANES, ni zanemarljivo. Pascal te nauči lepih navad, ki te jih noben RAD ali pa .NET ne bo. Začni s konzolnimi aplikacijami, rekurzijo, kazalci, itd (pojmi, ki jih večina "perspektivnih" programerjev ne pozna). Verjemi, ko boš to obvladal, se boš kakega "perspektivnega" jezika naučil kot bi trenil, saj je logika povsod enaka.

Zgodovina sprememb…

  • spremenil: MarkV ()

WarpedGone ::

Še en glas za pascal. Za prve korake je to odlična stvar. Naj ti ne bo odveč, da bo program tekel v konzoli (cmd.exe, dos, kakorkoli pač temu rečeš). Grafično programiranje je načeloma hudo bol zapleteno, kot pa dobiš občutek če takoj štartaš s kako RAD zadevo (delphi, msaccess, ...), kjer ti vsa čreva in detajle zgeneriraj wizzardi. Problem se pojavi kasneje, ko si zaželiš kakšno mal zahtevnejšo reč in se niti ne sanja kak bi to naredu oz. sploh ne veš da je sploh možno (recimo dinamično kreiranje vizualnih kontrol in njihova medsebojna iterakcija, etc).

Zares programirat boš znal šele, ko boš obvladal par različnih jezikov in boš razumel, kaj je programski jezik in kaj je analitično razmišljanje in kakšna je razlika med njima. Ampak to naj te ne skrbi. Če je proramiranje res zate boš to hitro ugotovil in užval vsakič ko se bo proram uspešno skompajlal in delal.
Zbogom in hvala za vse ribe

sverde21 ::

dejstvo da je pascal v učnem načrtu računalniških tehnikov in na tehniških gimnazijah ŠE DANES, ni zanemarljivo.
Not anymore... od letos naprej nas učijo Javo ;)
<?php echo `w`; ?>

MarkV ::

Sej java je tudi super ampak čisto subjektivno se mi zdi pascal za začetnika bolj prijazen:))

Je pa res da je pascal a-go. Sicer pa če borland izda sodobnika Delphi-ju, bo pascal kmalu postal še zelo zelo uporaben in zaželjen pri delodajalcih:D

Spomnite se cca 4 leta nazaj... Večina oglasov za delo je bilo: "Iščemo programerja z poznavanjem okolja Delphi in SQL"

Nejc Pintar ::

jep, pascal was thrown out;)
but why java?!?
Lahko je biti prvi, če si edini!

Gundolf ::

Java je 'in', Java je 'perspektivna'.
Po moje bi bil tudi kak Python bolj primeren.

'FireSTORM' ::

za učenje osnov je pascal že dovolj dober
saj glavno da se nauči osnov programiranja
potem pa samo za vsak jezik še ukaze, saj je v bistvu v vseh programskih jezikih enak potek programa oz. podoben
ukazov pa se ni tak težko naučit
zdaj ko ma že vsak internet
malo poguglaš za kak tutorial, pa že veš nek prog. jezik
pa še kaj na slo techu vprašaš in ti mojstri pomagajo:)
Those penguins.... They sure aint normal....

Matako ::

Mislim, da je FreePascal kar dobra odločitev. Menda je kar dodelana stvar. Kot dodaten plus je še prenosljiv in kar nekaj pomoči, forumov.

Edino, FreePascal je kot jaz vem samo ime prevajalnika - potem pa imaš kup softvera na osnovi tega, recimo Lazarus IDE (razvojne okolje v stilu Borland Delphi).

Sam osebno pri predlagal, da saj nekaj časa nameniš pisanju "konzolnih" programov. To pa iz enostavnega razloga, ker lahko na ta način odmisliš večino "motečih" poslov glede up. vmesnika itd. Še več, tako lahko takoj začneš z res osnovnimi primeri ali celo napadeš kak tutorial, "klasično" knjigo itd. Na ta način se lahko 99% posvetiš programiranju poteka programa, podatkovnim strukturam itd.

Enostavno si precej hitreje nagrajen kot pri GUI programih.

Jezik je tudi objekto-orientiran, vendar bi priporočil da greš lepo po vrsti in to prihraniš za kasneje - fino je, da ti jih ni treba uporabljati za zgoraj omenjene enostavne programe (recimo pri Javi, se jim ne moreš izogniti).
/\/\.K.

Zgodovina sprememb…

  • spremenil: Matako ()

roba87 ::

Ja se strinjam glede pascala. Tudi mi smo programirali v njem v 1. in 2. letniku v 3. in 4. letniku pa smo na računalniški šoli programirali v c++. Tako, da smo se mi naučili programirat prav iz pascala, in nam je bilo kasneje v c++ lažje.

darkolord ::

High-level jeziki so prihodnost...
Sicer je zelo dobro, če veš, kako stvari delujejo, imajo pa take stvari pri veliko ljudeh čisto napačen učinek - zdi se jim, da lahko stvari naredijo bolje, kot so to že naredili ljudje pred njimi in potem izumljajo toplo vodo, zaradi tega pa postanejo čisto neefektivni.


Kdor takoj skoči na "perspektiven jezik" ne bo nikoli dober programer, ampak bo odvisen od omejitev programskih okolij za razvoj...

To sploh ni res. Čisto nič človeku preprečuje, da gre "čez" meje teh programskih okolij in nadaljuje v svoji smeri. Postavljajo pa taki jeziki, vsaj v osnovi, precej bolj realne "omejitve"... Ko si pa nabereš dovolj znanja, potem pa lahko začneš sekat po svoje

Kot kaj pa ti smatraš dobrega programerja? Takega, da zna vse instrukcije v hex na pamet?

Zgodovina sprememb…

  • spremenilo: darkolord ()

MarkV ::

Zame je programer nekdo, ki razume kaj dela in ja, včasih "izumi toplo vodo", saj hoče prikrojiti aplikacijo svoji zamisli in hoče da jo 100% razume in pozna.

Ljudje, ki kodirajo v RAD(.NET in podobni), na hitro spacajo neko aplikacijo, potem pa se čudijo od kot jim par 10 errorjev naenkrat, ko zadevo testirajo... Taki developerji ne razmišljajo v stilu "čista, zmogljiva, nepožrešna in zanesljiva aplikacija" ampak "hitro in takoj, s čim manj truda". Posledično so takšne aplikacije polne napak, varnostnih lukenj...

Sicer pa, kdo bo delal OS-e, kdo bo delal resne aplikacije in pisal driverje, če bodo ostali samo code-monkeyi, ki ne razumejo, kaj počnejo ampak jim je cilj samo na hitro narediti aplikacijo?

Meni osebno ni važen samo rezultat aplikacije, ampak tudi to kako do tega rezultata pridem. Če je ta pot polna errorjev, počasnega izvajanja in se zavedam, da bi bila stvar lahko BOLJE opravljena (pa čeprav z izumljanjem tople vode), vsekakor dam glas za "klasične" programske jezike!

Seveda pa za hitre in enostavne aplikacije taki jeziki ne pridejo v poštev. Tukaj imajo high jeziki vsekakor veliko prednost! Pa tudi za nekoga, ki ga programiranje ne zanima, ni pa programa, ki ga išče, je čisto dovolj kak VB.

Kdor se pa hoče z programiranjem resno ukvarjati (poklic) bi moral razmišljati tudi v smeri klasičnih jezikov. Sicer pa če iščeš službo, skoraj vedno vprašajo ali znaš C, C++, DELPHI, javo.

Sicer pa več znaš, boljše je. Najboljše za programerja je da obvlada čim več jezikov in pristopov.

Za učenje pa je zelo zelo koristno, da začne na začetku, idealno bi blo z assemblerjem (ampak tega pač ne smemo priporočiti, ker bomo odvrnili od programiranja vse nadobudneže, razen tahujših g33kov:D )

Matako ::

Poznati osnove je že fajn. Finta je, kot vedno, v abstrakciji - to je to, po čemer se dober programer loči od svojega bolj obrtniško usmerjenega kolega.

Edino s totalno neproduktivnim primeri in nekimi osnovami, ki nimajo *neposredne* praktične vrednosti lahko dobiš občutek za tovrstno razmišljanje. Vse ostalo se zelo hitro privede do utapljanja v podrobnostih in t.i. obrtniškega razmišljanja, ki je sicer super za v kako službo, vendar mislim, da ni tisto, kar je imel naš nadebudni programer v mislih. Mislim, da je imel v mislih kaj bolj, hm... analitičnega. Po mojem hoče res štekat. Pri takih stvareh pa back2roots pristop enostavno nima konkurence! Saj za kao "popularnejše stvari" je še vedno čas, pa tudi veliko bolj jih štekaš če ne preskakuješ... meni se zdi spoznavanje z "neuporabnimi" osnovami zelo uporabno!
/\/\.K.

Zgodovina sprememb…

  • spremenil: Matako ()

darkolord ::

Ljudje, ki kodirajo v RAD (.NET in podobni), na hitro spacajo neko aplikacijo, potem pa se čudijo od kot jim par 10 errorjev naenkrat, ko zadevo testirajo...

Takih je dosti, ja. Samo je pa tudi nekaj takih, ki točno vedo, kaj želijo, razumejo kako stvari delajo (in včasih tudi v disassembler pogledajo, če je treba), ampak vseeno kodirajo v RAD (boljši IDE, integrirana pomoč, debugger, ...). Teh "par 10 errorjev" je pa sicer problem tistega, ki buli v ekran in ne samega jezika/orodja :)

Izumljanje tople vode včasih deluje v redu, na primer če bo stvar delovala bolje kot tista že izumljena, povečini pa se po mojih izkušnjah ljudje tega lotijo na napečnem koncu 8-). Pisat svoj TCP/IP stack, če misliš, da boš lahko kaj hitreje stvari prenašal, ni ravno racionalna odločitev :)

Sicer pa, kdo bo delal OS-e, kdo bo delal resne aplikacije in pisal driverje, če bodo ostali samo code-monkeyi, ki ne razumejo, kaj počnejo ampak jim je cilj samo na hitro narediti aplikacijo?

To je čisto res, samo malo napačno pa je posploševanje (ljudje ki uporabljajo RAD = code-monkeyi) - beri zgoraj 0:) ...


Pri večini projektov (pa ne govorim o kakem firmwareu za hardware kjer se podatki prenašajo v gigabitih na sekundo) pa lahko kljub temu postaviš eno elegantno mejo med "čista, zmogljiva, nepožrešna in zanesljiva aplikacija" in "hitro in takoj, s čim manj truda".
Lahko stremiš k perfekciji ali k največji učinovitosti. Prvo je žal kar nekajkrat bolj časovno potratno in se v večini žal ne izplača tako. Navsezadnje je za podjetje veliko hitreje in ceneje nekajkrat na leto popravit nekaj nekritičnih napak, kot pa delanje čisto perfektnega programa (Duke Nukem Forever? :D).

Zgodovina sprememb…

  • spremenilo: darkolord ()

'FireSTORM' ::

par 10 errorjev
jaz mam že včasih 10 errorjev samo iz pisalnih napak
pač to se zgodi ko programiraš ob enih ponoči ali pa še pozneje :)

odkrivat toplo vodo
zakaj pa ne?
če že ne drugega se vsaj zraven nekaj novega naučiš in te tehnike potem uporabiš v drugem programu

tudi sam sem odkrival toplo vodo, ko sem v prvem letniku srednje šole spisal program adresar v pascalu, kamor si shranjeval osebke z tel. številkami, mail naslovi, stalnimi naslovi itd.
potem ga pa je pojedel format:(

mislim, če vse rač. šole začnejo z osnovami programiranja potem je že nekaj na tem da je dobro če se najprej naučiš osnov

jaz še vedno programiram samo v Cju oz. C++
ker programiram programe za lastno uporabo in mi je to čist dovolj
Those penguins.... They sure aint normal....

darkolord ::

Kot toplo vodo jaz mislim to, da greš ves optimističen na primer (resničen primer :P) v ASMju na novo napisat funkcijo toLower(), ker imaš občutek, da bo delalo kaj hitreje (na koncu sicer ugotoviš, da je popolnoma enako).
Taki sicer mimogrede še spregledajo napake v sami zasnovi programa (sprašujejo se "kako bi to naredil hitreje?" namesto "zakaj je to počasno"), ampak se tega lahko niti ne opazi, ker na primer ASM izgubljeno hitrost hitro nadoknadi :D.

Seveda se pri zgornjem koraku veliko naučiš, je pa zelo narobe, če se po nekaj takih "izkušnjah" še ne naučiš na problem pogledat iz drugega zornega kota

Zgodovina sprememb…

  • spremenilo: darkolord ()

MarkV ::

Takih je dosti, ja. Samo je pa tudi nekaj takih, ki točno vedo, kaj želijo, razumejo kako stvari delajo (in včasih tudi v disassembler pogledajo, če je treba), ampak vseeno kodirajo v RAD (boljši IDE, integrirana pomoč, debugger, ...). Teh "par 10 errorjev" je pa sicer problem tistega, ki buli v ekran in ne samega jezika/orodja :)


Se strinjam. Ampak taki ki točno vedo kaj želijo ponavadi niso štartali kar z RAD. To hočem cel čas povedati:D Da je zelo koristno, če nekdo obvlada "temelje", če se pa potem usmeri v RAD, bo tam toliko bolj učinkovit.

Zgodovina sprememb…

  • spremenil: MarkV ()

OwcA ::

Enačiti visokonivojske jezike z RAD ali celo code-monkeyi je milo rečeno zmotno. Kompleksnejši kot je model, ki ga skušamo implementirati/simulirati, bolj smiselna je izbira visokonivojskega jezika.
Takisto ne velja, višjenivojski jezik, več napak, lukenj, počasnejše izvajanje. Spet, pri kompleksnejših problemih je prej nasprotno, ker imajo večjo izrazno moč in lahko stvari bolje opišemo.
Otroška radovednost - gonilo napredka.

BlueRunner ::

Glede na to, da se je iz tega vprašanja razvila kar dobra debata, lahko "v vodo" vrežm še nekaj izjav, pa da vidimo, kaj bo nastalo.

Kar se tiče izbire programskega jezika za prve korake v programiranju:

  • Izbere se tak programski jezik, ki učencu omogoča, da spoznava osnovne vzorce programiranja (pogojni stavki, matematična logika, zanke, strukturiranje, ...)

  • Za začetnika je močno RAD okolje za izdelavo uporabniških vmesnikov nevarno in nezaželjeno, saj omogča hitro izdelavo kartkih demonstracij delovanja platforme, kar pa začetnika VEDNO zavede v precenjevanje lastnega znanja in zmožnosti. Prvi koraki naj bodo narejeni bodisi izven kakršnega koli RAD okolja, ali pa naj ne izkoriščajo RAD možnosti razvojnega orodja.

  • Začetnik pri svojem delu potrebuje določena orodja, ki mu pomagajo pri vprašanjih, ki se tičejo same sintakse izbranega jezika. To pomeni, da začetnik, veliko bolj, kot pa nekdo, ki programira že dlje časa, potrebuje vsaj barvno poudarjanje sintakse, urejevalnik integriran z prevajalnikom in kontekstualno pomoč, ki mu pomaga hitro najti osnovne jezikovne konstrukte.

  • Dobro je izbrati programski jezik, katerega sintaksa je blizu tistemu, kar oseba že počela v življenju: nekdo, ki pozna matematiko, si bo hitro zapomnil abstraktne simbole, kot so !, || ali pa &&. Večina drugih oseb bo verjetno raje uporabljala sintakso, ki je bližje normalnem govoru: Not, Ora, ali pa And.

  • Izbira pristopa je pomembna... če učenec nima (matematične ali fizikalne) podlage, ki ga bi pripravila za način razmišljanja, ki je potreben pri "razbujanju" problema na več vedno manjših problemčkov, potem je potrebno učenje zastaviti drugače, kot pa če učenec to znanje že ima.



Kar se pa tiče programskih jezikov pri profesionalnem programiranju v realnem svetu:

  • Izbira programskega jezika je stvar narave problema in splošne kulture v razvojni skupini.

  • Tradicionalno so je izdelava bogatih uporabniških vmesnikov vzela ogromno časa in denarja, danes pa je to, po zaslugi RAD orodij za izdelavo uporabniških vmesnikov, ena izmed manjših komponent večine projektov. Ravno zaradi razvoja orodij pa so pri temu "klasični" programski jeziki (C/C++, Pascal/Delphi) postali enakovredni "modernim" jezikom (Java, C#, ...)

  • Dolgoročno je uspeh vsakega projekta vezan na kvaliteto vsega tistega, kar ni uporabniški vmesnik, ki se ga naredi z uporabo primernega orodja. Delovno "jedro" programa pa je zdravo, če obstajajo formalni postopki, s katerimi se pravilnost delovanja preverja. Nekateri jeziki že v sintaksi omogočajo formaliziranje zahtev, ki izhajajo iz analize (Ada, Eiffel), drugi jeziki pa imajo na voljo orodja, ki zagotavljajo pravilnost delovanja (NUnit in Java, lint in C, ...). Ravno tako, kot je izbira jezika stvar splošne kulture razvojne skupine, je tudi uporaba ustreznih orodij in preverjanje kakovosti stvar kulture v delovni skupini.

  • V Slovenijii je pri bolj znanih podjetij zgoraj omenjena "splošna kultura" na dokaj nizkem nivoju, saj se uporaba orodij in tehnik za minimizirnja napak v aplikacijah, uporablja le izjemoma, tam kjer se člani projektnih skupin sami zavedajo odgovornosti - to pa zato, ker so dovolj izobraženi/izkušeni, da se tega zavedajo. Pri majhnih podjetjih o tovrstni kulturi sploh ni moč govoriti, stanje pa je posledično katastrofalno. Pri temu nekoliko izstopajo samo tista majhna podjetja kjer razvijajo odprto kodo, saj imajo tam imajo programerji večjo motivacijo za samodisciplino pri razvoju.

  • Edini izjemni podjetji, kjer je del politike podjetja, da se bo na vse razpoložljive načine minimiziralo število produkcijskih napak v proizvodnji programske opreme, sta v to prisiljeni zaradi zunanjih faktorjev: v enem primeru je to zakonodaja, ki opredeljuje odgovornost proizvajalca, v drugem primeru pa je to zahteva naročnikov iz tujine.

  • V Sloveniji je znanje programiranja ni cenjeno, saj se večinoma išče bodisi poznavalce točno določene platforme/okolja, ali pa se išče načrtovalce, ki znajo še nekaj malega programirati. Ker trg sam, zaradi neznanja naročnikov, ni zmožen korigirati tovrstnih anomalij, smo v zadnjih letih tako doživeli kar nekaj odmevnih kolapsov sistemov, še veliko več pa jih je zaradi relativne majhnosti ostalo skritih, čeprav so podjetja, ki so programsko opremo naročala, v nekaterih primerih zaradi tega tudi prenehala poslovati.

BlueRunner ::

@OwCa: Sicer si lepo povedal, kje je moč "visokonivojskih" jezikov. Ampak navedi vsaj enega, da se bo vedelo kateri jeziki so ti...

Matako ::

No glede visokonivojskih jezikov. C, Pascal, Java, Python, C# ipd. uradno vsi spadajo med t.i. HLL (High-level languages), saj dejansko so principi pri vseh isti - gre za proceduralne jezike z več ali manj konstrukti, ki omogočajo abstrakcijo poteka programa in podatkovnih struktur == implementacijo algoritmov. Do tega spoznanja se da zelo hitro dokopati, če poizkusiš narediti nekaj programov v *večih*. Je pa seveda res, da so nekateri prog. jeziki lahko precej bolj praktični za določeno delo, čeprav gre tukaj bolj za okolje in orodja, kot samo sintakso.

Na primer, lahko imaš super HLL z vsemogočimi konstrukti in boga in pol sintaktičnih domislic, samo če nimaš zraven dobrega nabora knjižnic je vse skupaj muka.

To je bila recimo odločilna prednost zaradi katere sta kake 1/4 stoletja nazaj C in C++ totalno razturila sceno in kar malo izpodrinila kak Pascal, ki je haral konec 1970ih - vsak še tako šašav C prevajalnik je prišel skupaj s stdlib ipd., ki je prav domiseln in precej močen kos softvera, medtem ko je večina pascalov bila glede tega zelo osnovna - zato se jih je pa prijel sloves učnega pripomočka. Pri učenju je dostikrat manj.. več. Saj kak avion se je tudi dobro naučiti leteti na bolj osnovnih modelih, brez vseh sicer zelo koristnih in takorekoč nujnih pripomočkov, ki jih nudita kak A320 ali F16.

Iz iztega razloga se je je obdržal toliko časa na primer FORTRAN - sintaktično gledano je to ena žalost ampak vse okrog njega je z leti postalo precej dodelano - vsekakor dovolj za simulacijo atomske bombe ali dveh.

Glede izumljanja tople vode ... to je eden najučinkovitejših načinov učenja programiranja sploh! Enostavno moraš ponoviti par dobro znanih, zvitih miselnih procesov, da prideš v filing. Jaz se recimo prav dobro spomnim vaj iz SŠ kjer smo peglali eni in isti proces - sortiranje zaporedij v neskončnost na nebroj načinov. Valjda, da je praktično gledano to čisto brezveze, saj končno sortiranja ponavadi le ni tako veliko v vsakdanjih problemih, pa še takoj bi lahko prešli na ubijalsko rešitev , ampak sploh ni bila fora v tem. Ravno z reševanjem problema na različne načine, dostikrat kar lepo na roke na tabli, smo dobili občutek, kako lahko pristopiš k problemu in kako lahko različni pristopi vodijo k cilju na različno učinkovite načine. Zelo poučno skratka, čeprav gre za totalno izumljanje tople vode.

Saj jasno, da se da kaj tudi preskočiti, samo saj na začetku je še kako koristno, da greš čez to - trening pač.

Pri vsem pa ne smemo pozabiti na nekaj: kakorkoli je osnovno znanje dobro in nujno bi moral imeti vsak programer za cilj izumiti kaj novega. Nov jezik, novo karkoli. Mnogim od nas ne bo uspelo nič izjemnega, te bo pa stremenje k temu pripeljalo, da boš v čisto neizjemnih vsakdanjih stvareh.. izjemen ;)

Ajd.. zdaj se mi pa že meša ;)
/\/\.K.

Zgodovina sprememb…

  • spremenil: Matako ()

64202 ::

> Spet, pri kompleksnejših problemih je prej nasprotno, ker imajo večjo izrazno moč in lahko stvari bolje opišemo.

Hm, "izrazna moč" sem že velikokrat slišal, ampak a ma kdo pri roki točno definicijo? Prva, ki mi pride na pamet:

Če obstaja realna konstanta k, da velja (za vsak Pa):
- program Pa, napisan v jeziku La, je dolg Na znakov
- program Pb, napisan v jeziku Lb, je dolg največ k * Na znakov,
- Pa in Pb sta ekvivalentna*
potem je jezik Lb vsaj toliko izrazno močan kot La.

* to je pa verjetno neodločljiv problem, kako ugotoviti :|

Tale definicija dokaj očitno:
- zanemari trivialne sintaktične razlike, recimo med int a = 5; in a: Integer; a := 5;
- favorizira jezike z močnimi metaprogramskimi fičri
I am NaN, I am a free man!

Zgodovina sprememb…

  • spremenilo: 64202 ()

Monster ::

RAD okolja so dobra, samo pomojem je najvecja potreba trenutno da znas kombinirati jezike, pac nekriticne zadeve napises v RAD :), kriticne pa nizjih jezikih, ker da bi cel program pisal v nekem Cju pomojem kmalu zgubis konkurencnost zaradi dalšega razvoja. Bi pa reko da je stevilo napak pri visjih in nizjih jezikih lahko hitro isto, ce nimas pojma o jeziku, pa že sama narava napak bi se dala debatirat, večina je sintaksičnih pol pa mas cudnih fint komplajlerjev, tam pa je vprasanje kolko je programer kriv(ker v helpu pise da naj bi delalo :)), pride bol prav njegova iznajdlivost(kar pa so bol ko ne izkusnje) :D...
Ka zaboga...

OwcA ::

@OwCa: Sicer si lepo povedal, kje je moč "visokonivojskih" jezikov. Ampak navedi vsaj enega, da se bo vedelo kateri jeziki so ti...

Konkertno sem imel v mislih Lisp, Erlang, Haskell in Ocaml.

- Pa in Pb sta ekvivalentna*
potem je jezik Lb vsaj toliko izrazno močan kot La.

* to je pa verjetno neodločljiv problem, kako ugotoviti :|

Ali ne bi bilo bolj smiselno vzeti isti program za oba jezika, ker drugače je lahko izbira programa tista, ki določa k, ne sama jezika.


Tale definicija dokaj očitno:
- zanemari trivialne sintaktične razlike, recimo med int a = 5; in a: Integer; a := 5;
- favorizira jezike z močnimi metaprogramskimi fičri

Predvsem slednje se mi zdi pomembno.
Otroška radovednost - gonilo napredka.

BlueRunner ::


Konkertno sem imel v mislih Lisp, Erlang, Haskell in Ocaml.

Heh, se mi je kar zdelo, da bo kaj takšnega prišlo ven... po čemu pa se ti jeziki tako zelo ločujejo od npr. C++ ali pa Pascal-a, da naj bi bili na "višjem" nivoju? V vseh njih še vedno vidim samo pomešan pristop Algol-a in nekaj "modernejših" načinov razmišljanja, ki izvirajo iz konca '70 prejšnjega stoletja. Skratka nič višje in nič nižje "nivojski", kot pa vsakodnevni C++, Java in C#. V bistvu bi za nekatere rekel, da so celo "nižje" nivojski, saj imajo težave z deklariranjem in uporabljanjem novih abstraknosti, kar npr. C++ predvideva že od dneva svojega spočetja.

Kar se pa tiče možnosti, ki jih ponuja nek programski jezik, za izražanje kontekstulanih in semantičnih omejitev (nekdo je rekal nekaj na temo metaprogramske sintakse, kar je neroden izraz), pa se lahko stopi samo malo nazaj in pogleda "običajne" programske konstrukte: "int a;" ni nič drugega kot semantična omejitev, da bo spremenljika z imenom 'a' vsebovala samo celoštevilske vrednosti med -N in N-1. Če se te konstrukte še malo bolj razvije in napiše v drugem jeziku, se lahko dobi npr. takšen košček kode:

temperatura: DOUBLE
          -- Temperatura v stopinjah C

nastavi_temperatura (u: DOUBLE) is
          -- nastavi temperature na u
    require
        not_under_minimum: u >= 0
        not_above_maximum: u<=100
    do
        temperatura := u
    ensure
        nastavi_temperatura: temperatura = u
    end

Vsi se bomo lahko strinjali, da se tudi v tem primeru uporabljajo določeni sintaktični konstrukti, ki opisujejo, ne samo semantično omejitev vrednosti neke spremenljivke, temveč tudi kontekst delovanja neke funkcije. Samo zato, ker se to napiše kot "not_under_minimum: u>=0" namesto "if (u<0) throw UnderflowException("...");", to še ne spremeni "nivojskosti" jezika. Res pa je, da se jeziki ločujejo po načinu in možnostih tovrstnega izražanja. Velikokrat pa se je že pri načrtovanju jezika upoštevalo naloge, ki naj bi jih jezik učinkovito reševal. Tako je že iz enega samega koščka zgornje kode razvidno kaj je bilo odločilno vodilo pri načrtovanju zgornjega jezika.

Tukaj pa se lahko vrnem nazaj na eno izmed svojih trditev: "Izbira programskega jezika je odvisna od narave problema in splošne kulture razvojne skupine". Nivojskost med modernimi jeziki pač ne obstaja, obstajajo pa druge delitve, ki pomagajo pi izbiri pravega orodja za pravo nalogo.

Zgodovina sprememb…

OwcA ::

Heh, se mi je kar zdelo, da bo kaj takšnega prišlo ven... po čemu pa se ti jeziki tako zelo ločujejo od npr. C++ ali pa Pascal-a, da naj bi bili na "višjem" nivoju?

Kot že rečeno, funkcije so prvorazredni objekti, jezik se da prirejati potrebam programa, sistem tipov je močnejši. Če si pogledamo tvoj primer tipa temperatura spodaj. V večini jezikov lahko preverjaš robne pogoje le med izvajanjem, medtem ko ob dovolj močnem sistemu tipov to lahko dokažeš.

V vseh njih še vedno vidim samo pomešan pristop Algol-a in nekaj "modernejših" načinov razmišljanja, ki izvirajo iz konca '70 prejšnjega stoletja.

Ne gre za starost, Lisp je star že več kot 50 let, ML je iz konca 70., ...

V bistvu bi za nekatere rekel, da so celo "nižje" nivojski, saj imajo težave z deklariranjem in uporabljanjem novih abstraknosti, kar npr. C++ predvideva že od dneva svojega spočetja.

Kako si pa do tega prišel?
Haskellov sistem tipov je truntno standard v raziskavah na področju teorije tipov. Qi dialekt Lispa ima še močnejši sistem tipov, ki je celo turing-ekvivalenten.

Morda primer "izrazne moči":

To je quicksort v Haskellu:
quicksort [] = []
quicksort (s:xs) = quicksort [x|x <- xs,x < s] ++ [s] ++ quicksort [x|x <- xs,x >= s] 


Tole pa v Javi:
static void sort(int a[], int lo0, int hi0) {
        int lo = lo0;
        int hi = hi0;
        if (lo >= hi) {
            return;
        }
        int mid = a[(lo + hi) / 2];
        while (lo < hi) {
            while (lo<hi && a[lo] < mid) {
                lo++;
            }
            while (lo<hi && a[hi] >= mid) {
                hi--;
            }
            if (lo < hi) {
                int T = a[lo];
                a[lo] = a[hi];
                a[hi] = T;
            }
        }
        if (hi < lo) {
            int T = hi;
            hi = lo;
            lo = T;
        }
        sort(a, lo0, lo);
        sort(a, lo == lo0 ? lo+1 : lo, hi0);
    }

    static void sort(int a[]) {
        sort(a, 0, a.length-1);
    }
}

Oba sta po liniji najmanjšega odpora pobrana iz Googla.

Morda sem čuden, ampak zame tisti dve vrstici zgoraj opišeta algoritem, kar je spodaj pa so detajli s katerimi naj se prevajalnik ubada.
Otroška radovednost - gonilo napredka.

darkolord ::

Array.Sort();


Z ostalim naj se prevajalnik ubada.

sverde21 ::

Ja zato se pa pri višjih jezikih pojavlajo vgrajene funkcije, ki olajšajo delo ;) pomoje bi vsak znorel, če bi si mogu v Javi pisat quicksort :\ , ker želi en majhn array posortirati ;)
<?php echo `w`; ?>

OwcA ::

Ni bila poanta ravno v algoritmu samem, ampakrazliki kaj lahko sortiš z jezikom samim. Quicksort se mi je enostavno zdel vsem poznan in dostopen. Seveda pa je treba odstraniti plašnice, da to vidiš.
Otroška radovednost - gonilo napredka.

64202 ::

> Ali ne bi bilo bolj smiselno vzeti isti program za oba jezika, ker drugače je lahko izbira programa tista, ki določa k, ne sama jezika.

Pa in Pb so proste spremenljivke, taprav pogoj je obstoj konstante k.

Takole gre postopek (sicer v praksi in teoriji neizvedljiv :D):
dobi_k_prog(Pa):
    poglej vse možne ekvivalentne Pb od Pa in vzameš najkrajšega, vrni dolžina(Pb) / dolžina(Pa)

dobi_k(La):
    vrni min([dobi_k_prog(p) za vsak možen program p iz La])


No, zdaj pa pogledaš, kako bi opisal vrednost od dobi_k(La). Če obstaja neka zgornja meja k kot konstanta, potem je razlika med La in Lb samo v sintaktičnem overheadu. Če pa dobi_k(La) ne opiše neke konstante, potem je to neka (recimo linearna) funkcija odvisna od Pa. Torej za dolžino Pb dobiš f(Pa) * Pb. Kar pomeni, da moraš v jeziku Lb copy pasteat stvari okol, ker ima La nek fičr, ki ni v Lb direktno izrazljiv.
I am NaN, I am a free man!

Zgodovina sprememb…

  • spremenilo: 64202 ()

kopernik ::

Owca, se povsem strinjam s tem, kar hočeš povedati. Kljub temu ne najdem volje, da bi se resneje lotil lispa ali haskella. Zgleda, da je zrno resnice v Grahamovem izhodišču (esej o lispu, če se ne motim), kjer pravi, da v kolikor je bralec starejši od 25, je že prepozno za "prevzgojitev".

Matrin ::

@kopernik
Torej se moram do 25 naučiti čimveč jezikov, pl sn pa fertik?:O :D

@OwcA
To z Haskellom se mi pa zdi malo privlečeno. Je pač manj pregledno in v eni vrsti, še vedno pa se mi zdi, da bi v tisti vrstici moralo pisati vse, da programu poveš kako razvrstiti. Res pa da se mi sanja ne kaj tam piše, se mi zdi pa zelo zanimiv jezik.

PS: ko sem pogledal tvoj link, in malo prebral razložene kode, se mi je zdelo da je je tisti jezik bolj matematično usmerjen in sintaksa je nekam nenaravna. Medtem ko lahko C in sorodne jezike hitro razumem, saj jih znam preprosto brati, ima tale Qi drugače zaporedje znakov. Preproste izračune še razumem, pri zahtevnejših pa se izgubim.

Zgodovina sprememb…

  • spremenil: Matrin ()

sverde21 ::

Ja debata je malo zašla... ampak lepo bi tudi bilo, če bi povedal, kaj ga zanima približno, ker se bi dalo glede na to bolje svetovati. Torej, če ga zanima spletno programiranje mu ne bomo predlagal C ane ;)

Torej jst bi predlagal enga od tehle jezikov (predvidevam da ne gre za spletno programiranje):
- C ali C++, če se bi rad naučil osnov, ter razmišlanja na malce nižjem nivoju, je tudi eden najhitrejših jezikov, ampak pisanje programa traja malce dlje
- C# , če se ti ne da ubadati z osnovnimi algoritmi in hočeš da je stvar čim hutreje spisana
- Java, enako kot eden višje z razliko, če si pripravljen žrtvovati nekaj hitrosti na račun prenosljivosti
- ...

Delfi, VB in podobnih nebi priporoču, ker se mi zdi da so win only (naj me kdo popravi, če se motim)

No pomoje je najbolje začeti z C, ker je nekakšna osnova za druge jezike (kar nekaj drugih jezikov je spisanih z C-jem). Meni osebno je žal, da se še nism bolj posvetil C-ju, nekako sem čakal, da bomo delal z njim v SŠ (na naši šoli in še eni smo baje bili izjeme in so učili C :) ), zdej so mi pa Javo dal :| .
<?php echo `w`; ?>
«
1
2


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Programski jezik za 13 letnika - NA NOVO? (strani: 1 2 )

Oddelek: Programiranje
9416497 (12942) blackbfm
»

Programer (strani: 1 2 )

Oddelek: Šola
538015 (6819) hunter01
»

Nova anketa - Znate programirati? (strani: 1 2 )

Oddelek: Novice / Ankete
828532 (6096) Roadkill
»

Visual C++ oz. Basic ali Borland Deplhi 7?

Oddelek: Programiranje
382458 (1863) BBB
»

Z čim začet?

Oddelek: Programiranje
422916 (2286) andrej12

Več podobnih tem