» »

Kaj sploh je programiranje?

Kaj sploh je programiranje?

«
1
2

shadeX ::

Ker je kar nekaj tem, ki ljudje povprašujejo po programiranju (kakšen jezik se naučiti, a se vpisati na kakšno šolo, a se učiti doma.. itd ), bomo (upam) s to temo razjasnili kaj sploh je programiranje. Ta tema se predvsem nanaša trenutno najbolj aktualno temo ->( https://slo-tech.com/forum/t585653/0 )

Da smo tukaj na enem mestu zbrani navdušenci nad računalniki ni potrebno posebej poudarjati. Nekateri so privrženci strojne opreme računalnika ( so mojstri za overclockanje, modifikacije na računalniku, itd ), drugi obvladajo različne zelo uporabne programe, ki bi danes težko brez njih (Adobe izdelki in veliko drugih ), tretji pa smo privrženci sestavljanja programov, se pravi dajanja ukazov računalniku. Računalnik ( oz. naprava ), nato ob uspešni zahtevi, izvrši ta naš ukaz. Tako nastanejo programi za Windows, Mac, Android, iOS, itd itd.

Ampak mene sedaj nekaj zanima. Tisti ki se redno ukvarjate s programiranjem, ali ste s tem začeli zato da se boste naprimer naučili uporabljati že obstoječe API-je in tukaj se zadeva konča. Se pravi to pomeni, že s spisanimi razredi si lahko veliko pomagate in naredite praktično kakršno koli aplikacijo. Naredite lahko spletno stran s podatkovno bazo, lahko naredite naprimer android program ki bo računal nekaj na podlagi GPS podatkov itd.

Ali ste bolj tiste narave, ki znate tudi kaj sami narediti? Naprimer spisati kakšen svoj razred ( npr barvno paleto - color picker ). Znate tudi sami rešiti zahtevne algoritme.. in podobne stvari.

Kako bi sploh opisali z besedo tistega ki zna samo API uporabljati in tudi nekaj sestaviti, ali pa tistega ki praktično razume "0 , 1 " in zna sam rešiti vsak problem brez povpraševanja na forumih?

jype ::

Čeprav ni potrebe po predalčkanju, je za en tip od zgoraj opisanih precej uveljavljen izraz "copy-paste programer".

shadeX> Tisti ki se redno ukvarjate s programiranjem, ali ste s tem začeli zato

Začeli smo zato, ker je fino, če znaš računalniku povedat, kaj želiš od njega.

111111111111 ::

Zaenkrat "copy-paste" programer. :) Sam znam kakšno stvar stuhtat, ampak da mi štarta misleni proces še vedno rabim google. Se pa ne ustrašim problemov in pač žulim dokler ne naredim rešitve (ki žal še ni optimalna).

Programiranje, obvladovanje računalnika z ukazi in da te škatla razume kaj hočeš. :)

shadeX ::

Čeprav ni potrebe po predalčkanju, je za en tip od zgoraj opisanih precej uveljavljen izraz "copy-paste programer".


Bi se kar strinjal. Mogoče bom dobil boljši odgovor če zastavim vprašanje tako:
Vsi vemo da delodajalci zahtevajo ne vem kakšno izobrazbo preden vzamejo progamerja na delovno mesto. Recimo kot delodajalcu, kako bi se moral človek izkazati preden bi ga vzel na delo? Mogoče napisati kodo, ki jo dobiš že povsod na internetu ( primer - shranjevanje podatkov iz obrazca v podatkovno bazo ), ali bi mu dal "nalogo" naj spiše praktično en svoj razred z zahtevno kodo :) ?

111111111111 je izjavil:

Zaenkrat "copy-paste" programer. :) Sam znam kakšno stvar stuhtat, ampak da mi štarta misleni proces še vedno rabim google. Se pa ne ustrašim problemov in pač žulim dokler ne naredim rešitve (ki žal še ni optimalna).


Prosim če definiraš: "miselni proces". Podaj en primer miselnega procesa zaradi katerega rabiš Google :) (mogoče katerega izmed svojih prejšenih projektov se boš kaj spomnil)

S to temo bi predvsem rad dobil informacije kje je meja med dobrim in slabim programerjem :D

Zgodovina sprememb…

  • spremenil: shadeX ()

dottor ::

Jaz sem letos srečal prvič resneje s pisanjem kode. Sicer je šlo za spletno stran. Večina me je hotela prepričat, da naj nardim z wordpressom ker je to najlažje, ker pa sem iz srednje šole imel neki malega znanja HTMLja sem si postavu iziv, da bi celotno spletno stran (šlo je bolj za stran informativne narave brez menije, vsebovala je podatke, linke in slike) izdelal sam. Ker sem vešč photoshopa sem dam izdelal celoten dezajn. Pol sem se lotu HTML kode. Ker sem ugotovil, da je HTML precej omejen sem začel s pomočjo googla uporabljat še CSS. Na drugi strani sobe je bil brat ki mi je pomagal (lih takrat je delal spletno stran za zaključni izdelek), pol pa sem vse skupaj poslal kolegu ki je programer da preleti malo skozi kodo in popravi napake oz. malo optimizira zadeve. Cela avantura je trajala malo dlje, ker sem se sproti še CSS učil ampak na koncu je doseglo pričakovanja. V društvu za katerega sem delal imamo programerja in je bil presenečen, da sem celotno spletno stran s pomočjo brata in kolega sam spisal namesto da bi uporabil namenske programe. Sedaj se nam bo pridružil, saj imamo namen za drušvo nardit eno dokaj veliko in zahtevno spletno stran. Se mi je pa zdelo vse skupaj zanimivo in zabavno.

Sicer se s pisanjem programov ne bom ukvarjal ampak že "programiranje" spletne strani je zanimiva izkušnja.
Xeon X5650@3.8GHz |Asus P6T|
2x4GB+4x2GB|ASUS R9 280X@1100MHz|
WD Green 240GB SSD + 4x1TB Hitachi

shadeX ::

@dj_dottor

Kateri jezik si uporabil ? Boš nadaljeval z izdelovanjem (progamiranjem) spletnih strani? Mogoče link do spletne strani ki si jo naredil ( če te ne moti )

pegasus ::

Djikstra: The Humble Programmer. Eden zadnjih redkih pravih programerjev ... ki so programiranje jemali kot znanost in ne kot obrt. Razlika je nekako taka kot med arhitektom in zidarjem. Oba poklica sta spoštovanja vreda, a ko se odločiš, da boš programer, si moraš precej dobro razjasniti, kakšne sorte programer želiš biti.

dottor ::

Spletna stran je bila narejena za namen sejma ki smo ga imeli in je sedaj prazna in čaka na novo, ki se izdeluje, žal pa nisem shranu screenshotov. Drugače sem spletno stran izdeloval v Notepad++ z uporabo HTML-ja in CSS-ja. Kar se tiče nadaljevanja bom sedaj bolj kot ne skrbel za dezajn (so bli zadovoljni nad videnim in želijo da ga izdelam jaz za novo spletno stran) in mogoče kej malega. Večino bom prepustil kolegu ki mi je že pomagal in še enemu članu društva, oba sta programerja. Sam bom mogoče kej v izi stipkal.
Xeon X5650@3.8GHz |Asus P6T|
2x4GB+4x2GB|ASUS R9 280X@1100MHz|
WD Green 240GB SSD + 4x1TB Hitachi

Mipe ::

Več vrst programiranja je, predvidevam, da govorimo o računalniškem.

Znotraj računalniškega programiranja pa je še več vrst, kot je več različnih sort programerjev.

a) arhitekti, kot je pegasus omenil zgoraj, poznajo strukturo programa ter programskega jezika, zanje je programiranje prava umetnost;
b) code monkeys, ki znajo programirati ravno dovolj, da po navodilih spacajo (copypastajo) nekaj uporabnega skupaj;
c) vizualni programerji, to so predvsem dizajnerji, ki določijo parametre in strukturo programa ter orišejo flowchart;
d) drag & drop "programerji", ki uporabljajo razna orodja, da programirajo namesto njih - oni samo vlečejo UI elemente, specificirajo, kaj vsak gumb počne in to je to.

Te kategorije se ne izključujejo nujno med sabo. Za kvaliteten program ni več nujno strokovno poznavanje jezika, le konceptov razvoja programske opreme ter njih strukture. Imamo mojstre, ki z WYSIWIG orodji naredijo profesionalne spletne strani, ob ogledu izvorne kode katere bi se marsikdo med nami tule le nemočno zgrabil za čelo. Hkrati pa še taki strokovnjaki ne spacajo skupaj profesionalne strani in rabijo pomoč oblikovalca ter dizajnerja. Tako je nujno sodelovanje med različnimi ljudmi z različnimi kompetencami; le strokovnjak premore znanje za globoko razhroščevanje, na primer.

Zgodovina sprememb…

  • spremenil: Mipe ()

Vesoljc ::

programski jeziki in API-ji so samo orodja za dosego cilja. zakaj bi izumljal toplo vodo? ce nek API nudi funkcionalnost, ki jo rabis, ga pac uporabis. to da nekdo uporablja ze obstojece resitve, je zame kvecjemu plus, ne pa neznanje, saj bo cilj (naceloma) dosezen hitreje in bolje. in zakaj bi uporaba google bila minus? pac pogledas kako so (ce so) drugi resili problem. ce je resitev ustreza jo uporabis.

aja, pa color picker ni razred z zahtevno kodo...
Abnormal behavior of abnormal brain makes me normal...

111111111111 ::

shadeX je izjavil:


Prosim če definiraš: "miselni proces". Podaj en primer miselnega procesa zaradi katerega rabiš Google :) (mogoče katerega izmed svojih prejšenih projektov se boš kaj spomnil)

S to temo bi predvsem rad dobil informacije kje je meja med dobrim in slabim programerjem :D


Mene lahko kamot šteješ med slabe programerje, stvar naredim ni pa TOP tako kot bi rad, ker mi manjka znanja in izkušenj.

Recimo lotil sem se tegale: https://slo-tech.com/forum/t403429/p419...

"Misleni proces": Npr. Stvaritev GUI v autoit z izpisom loga v text polju (Travian Bot ene 5 let nazaj). Malo googlanja in ene 3-4 možne rešitve in v vsaki cel kup uporabnih informacij, da projekt dobi na brzini in dodatnih opcijah in požene miselni proces, kaj se da in kaj se ne in kaj lahko izboljšam. Sem poskušal delati z dokumentacijo samo ostanem s prazno glavo. :) 2-3 delujoči primeri pa naredim svojega 4, ki vsebuje del prejšnjih in nekaj avtorske kode.

shadeX ::

@Mipe, lep odgovor!

Sicer pa..programiranje 30let nazaj:



Vs programiranje danes



pa color picker ni razred z zahtevno kodo...


Če bi se lotil tega sam delati, nimam niti pojma kje začeti. Does that make me a bad programmer?

Zgodovina sprememb…

  • spremenil: shadeX ()

jernejl ::

a se boste naprimer naučili uporabljati že obstoječe API-je in tukaj se zadeva konča. Se pravi to pomeni, že s spisanimi razredi si lahko veliko pomagate in naredite praktično kakršno koli aplikacijo. Naredite lahko spletno stran s podatkovno bazo, lahko naredite naprimer android program ki bo računal nekaj na podlagi GPS podatkov itd.

API-ji in knjižnice so lahko samo v pomoč, običajno pa glavnega problema ne rešujejo.
Je precej praktično, da se programerju ali koderju pri delu ni treba ukvarjati s trivialnimi rečmi in se lahko posveti glavnemu problemu.
Zakaj bi šel implementirat sortirni algoritem, če lahko uporabiš že napisano funkcijo? Zakaj bi implementiral svoj način shranjevanja in dostopa do podatkov v multi-user okolju, če lahko uporabiš DBMS?
Seveda je pa dobro razumeti, kaj se v ozadju dogaja. Quicksort ni zmeraj najhitrejši. Before trigger se lahko za en dogodek (vrstico) sproži več kot enkrat. In tako naprej.

Recimo kot delodajalcu, kako bi se moral človek izkazati preden bi ga vzel na delo? Mogoče napisati kodo, ki jo dobiš že povsod na internetu ( primer - shranjevanje podatkov iz obrazca v podatkovno bazo ), ali bi mu dal "nalogo" naj spiše praktično en svoj razred z zahtevno kodo :) ?

Shraniti podatke iz obrazca verjetno zna vsak. Nima smisla. Bolje se je pogovoriti o reševanju konkretnega problema, ki je povezan z delom, ki ga opravlja podjetje. Npr. kako zasnovati algoritem, ki bi znal povedati, koliko krogel polmera r spravimo v kvadratno škatlo s stranico a. Ali podobno.

Zgodovina sprememb…

  • spremenil: jernejl ()

shadeX ::

Npr. kako zasnovati algoritem, ki bi znal povedati, koliko krogel polmera r spravimo v kvadratno škatlo s stranico a. Ali podobno.


Zanimivo. Bi rad videl programerja samouka, ki zna narediti kaj podobnega. Ali pa kot že rečeno zgoraj omenjeno "color picker" knjižnjico. Očitno tukaj manjka še veliko drugega znanja kot pa poznavanje programskega jezika.

Zgodovina sprememb…

  • spremenil: shadeX ()

Vesoljc ::

shadeX je izjavil:


pa color picker ni razred z zahtevno kodo...


Če bi se lotil tega sam delati, nimam niti pojma kje začeti. Does that make me a bad programmer?


ja, ampak ne zato ker ne bi znal, ampak zato ker ne probas iskat resitive. googlat in sprasevat ni "bad"...
http://bit.ly/193GlEn
Abnormal behavior of abnormal brain makes me normal...

shadeX ::

ja, ampak ne zato ker ne bi znal, ampak zato ker ne probas iskat resitive. googlat in sprasevat ni "bad"...


Seveda preden se lotim kakšne zahtevne stvari pogooglam o zadevi. Color picker je bil samo primer. V tem trenutnem stanju, brez Googla ali kakršne koli druge informacije sem dejansko "useless". Samo poznavanje programskega jezika mi tukaj ne pomaga popolnoma nič.

Vesoljc ::

shadeX je izjavil:

ja, ampak ne zato ker ne bi znal, ampak zato ker ne probas iskat resitive. googlat in sprasevat ni "bad"...


Seveda preden se lotim kakšne zahtevne stvari pogooglam o zadevi. Color picker je bil samo primer. V tem trenutnem stanju, brez Googla ali kakršne koli druge informacije sem dejansko "useless". Samo poznavanje programskega jezika mi tukaj ne pomaga popolnoma nič.


no pa dejmo resit problem s kroglami v skatli (ali bo to optimalna in najbolj pravilna resitev sicer dvomim, ampak sej ni vazno). ocitno je da za ta problem rabis vsaj malo znanja matematike (3d geometrija). kaksne interakcije se dogajajo med kroglami in skatlo?
Abnormal behavior of abnormal brain makes me normal...

dottor ::

Problem pri kroglah je prazen vmesni prostor, tako da ne moreš lih delit prostornino škatle s prostornino krogel.
Xeon X5650@3.8GHz |Asus P6T|
2x4GB+4x2GB|ASUS R9 280X@1100MHz|
WD Green 240GB SSD + 4x1TB Hitachi

Vesoljc ::

dottor je izjavil:

Problem pri kroglah je prazen vmesni prostor, tako da ne moreš lih delit prostornino škatle s prostornino krogel.


sej glih zato je zanimiv problem. collision moras upostevat.
Abnormal behavior of abnormal brain makes me normal...

moose_man ::

Vesoljc je izjavil:

dottor je izjavil:

Problem pri kroglah je prazen vmesni prostor, tako da ne moreš lih delit prostornino škatle s prostornino krogel.


sej glih zato je zanimiv problem. collision moras upostevat.


Collision?

Če je stranica kocke celoštevilski mnogokratnik premera krogle, je problem enostaven - vsaka (2*n)-ta plast je enaka, vsaka (2*n-1)-ta plast je enaka. Že samo če pogledaš koliko krogcev s polmerom r gre v en kvadrat s stranico a si rešil pol problema, druga polovica je trivialna. Sphere packing @ Wikipedia
Če stranica kocke ni mnogokratnik premera krogle - v tem primeru je problem zanimivejši, ampak ni nič kaj ekstra težji.

Ampak ne razumem, zakaj bi takšen program predstavljal težavo za programerja samouka. Za tako reč moraš znat osnove Cja oz. kateregakoli programskega jezika in nič več kot to ... prej moraš znat abstraktno razmišljat in met nekaj pojma o (niti ne preveč zapleteni) matematiki ...

Zgodovina sprememb…

  • spremenilo: moose_man ()

pegasus ::

moose_man je izjavil:

Ampak ne razumem, zakaj bi takšen program predstavljal težavo za programerja samouka. Za tako reč moraš znat osnove Cja oz. kateregakoli programskega jezika in nič več kot to ... prej moraš znat abstraktno razmišljat in met nekaj pojma o (niti ne preveč zapleteni) matematiki ...
Indeed.
Programiranje je v prvi vrsti sposobnost dojemanja problemov na način, da jih lahko razgradiš na neko zaporedje osnovnih operacij, ki jih potem lahko izvajaš na tabli ali pa v računalniku. Sama implementacija (izbira programskega jezika, dialekta, ...) je bolj obrtniška reč, ko je enkrat znano, *kako* boš nekaj rešil.
Hec je, da so danes rešitve za veliko večino vsakodnevnih splošnih problemov na voljo v t.i. knjižnicah. Tako da obrtniški programer res bolje investira čas v pregledovanje kaj vse je že narejeno in kako bo to skupaj zložil, kot pa v osnovno raziskovanje kako nekaj narest. Na drugi strani se pravi algoritmičar ne ukvarja s knjižnicami preko tega, da zna izpisat nekaj vrstic na zaslon, kar mu ponavadi zadostuje. Navedel sem dve skrajnosti, a je kot mnogo kje tu srednja pot najboljša ;)

moose_man ::

moose_man je izjavil:


Če je stranica kocke celoštevilski mnogokratnik premera krogle, je problem enostaven - vsaka (2*n)-ta plast je enaka, vsaka (2*n-1)-ta plast je enaka. Že samo če pogledaš koliko krogcev s polmerom r gre v en kvadrat s stranico a si rešil pol problema, druga polovica je trivialna. Sphere packing @ Wikipedia
Če stranica kocke ni mnogokratnik premera krogle - v tem primeru je problem zanimivejši, ampak ni nič kaj ekstra težji.


SE POPRAVLJAM.

Prejle na WCju me je naenkrat prešinilo, da sem napisal neumnost. Kroglic namreč seveda ne moramo prepolovit, da bi razporeditev zgledala npr. tako:

 face centered cubic

face centered cubic



Problem niti ni tako trivialen. Pardon! :blush:

dottor ::

Na to risbo sem tudi jaz pomislu. Še vedno je problem umesni prostor. Edino če so kroglice tako majhne da je zanemarljiv.
Xeon X5650@3.8GHz |Asus P6T|
2x4GB+4x2GB|ASUS R9 280X@1100MHz|
WD Green 240GB SSD + 4x1TB Hitachi

moose_man ::

Če na hitro pomislim, bi zadevo naredil nekako tako, če ne bi bilo pametnejše ideje:

1. & 2. kroglica
Nekje bi fiksiral eno kroglico. Nato bi naključno izbral smer (v 3D prostoru), v kateri bi se od težišča 1. kroglice premaknil za 2R in tisto točko določil za težišče nove kroglice. Če bi se pri tem zgodilo, da bi bil kakšen del druge kroglice bodisi izven kocke, bodisi znotraj območja prve kroglice, bi pozicijo druge kroglice zavrnil in poiskal novo.
ostale kroglice:
postopal bi enako, le da pozicije za nove kroglice ne bi iskal samo pri "zadnji" (v prejšnjem primeru drugi) kroglici, ampak pri vseh. Se pravi da bi ves čas v okolici vsake kroglice iskal možne pozicije za nove kroglice in jih sprejel, če bi ustrezale zgornjim pogojem.

Postopek bi večkrat ponovil in iskal najbolj ugodno polnitveno razmerje. Pri tem bi pozicijo prve kroglice za vsako določil naključno na novo. Zgornji postopek bi pri večjem številu kroglic bil presneto zamuden, ampak v tem primeru bi se že zelo dobro približali rešitvi z razporeditvijo v obliki slike v mojem prejšnjem postu (face centered cubic).

Zgodovina sprememb…

  • spremenilo: moose_man ()

dottor ::

Pomoje 1x ko izračunaš kolko jih pride v prvo, drugo in tretjo vrsto si že skoraj fertik. Pol izračunaš kolko "nastropij" visoko pridejo. Ko imaš to daš to število -1 (zaradi prve vrste) in pol še deliš z 2 ker bi se 2. in 3. vrsta ponavljali do vrha. Prva vrsta pa ima več lufta zaradi ravne začetne ploskve.
Xeon X5650@3.8GHz |Asus P6T|
2x4GB+4x2GB|ASUS R9 280X@1100MHz|
WD Green 240GB SSD + 4x1TB Hitachi

Zgodovina sprememb…

  • spremenil: dottor ()

moose_man ::

Ja, ampak če dolžina stranice ni celoštevilski mnogokratnik premera kroglice, si v težavah - nimaš namreč niti najmanjšega pojma, kakšna je optimalna porazdelitev na 1. plasti. Sicer veš, koliko kroglic lahko gre tja, ampak to ti o njihovih medsebojnih položajih ne pove nič, ker ostane še nekaj malega ekstra prostora ...

dottor ::

Sej za dobit kolko kroglic gre v prvo vrsto je dovolj da veš fi kroglic in dimenzije škatle. Je pa res da pol luft dela probleme. Če imaš srečo naslednja vrsta kroglic umiri prvo, za to je dovolj, da je prostora med zadnjo spodnjo kroglico in steno za vsaj pol kroglice. Ampak ponavadi nimaš te sreče. Zato ti vse skupaj pleše in imaš dosti več lufta pol med kroglicami.
Xeon X5650@3.8GHz |Asus P6T|
2x4GB+4x2GB|ASUS R9 280X@1100MHz|
WD Green 240GB SSD + 4x1TB Hitachi

Zgodovina sprememb…

  • spremenil: dottor ()

fireice ::

Drugace je ta problem s kroglicami dokaj zahteven. Ce se se kdo spomni Thomasa in njegovega Critticalla: http://www.critticall.com/SQU_cir.html

shadeX ::

No, kako bo potem programer samouk s srednjo šolo to znal sam rešit? Meni se dozdeva da programer samouk več kakor en CMS ne bo znal narediti. Pomoje je majhen procent samoukov ki postanejo resnični mojstri.


EDIT: Sicer ne pravim da ni mogoče, ampak tudi programer samouk bi v tem primeru moral prebrati še kakšno knjigo matematike zraven :)

Zgodovina sprememb…

  • spremenil: shadeX ()

Utk ::

Ta problem je bolj matematični kot programerski. Rešitev, bolj ali manj optimalno, izračuna matematik. Če ne zna programirat, mu lahko programer njegovo formulo vpiše v nek jezik, in bo dobil ven rešitev.
Če pa se že loti tega programer, mora napisati program, ki mu bo ven metal različne rešitve in iskal optimalno. Drugače ni naredil nič. Drugače je samo pomočnik matematiku (tudi če matematiku v sebi).

dottor ::

Kar se tiče teh kroglic mi ni dalo mira med spanjem.

Tudi če je število kroglic tako, da ne pokrije cele spodnje ploskve (ostane med zadnjo kroglico in stranico luft), se zgornja plast kroglic poleže tako, da se spodnja razširi čez celoten obseg spodnje ploskve. To v teoriji pomeni, da gre v vsako vrstico in v vsak stolpec po eno kroglico manj, kot je to v spodnjem "nastropju". Na to drugo vrstico pol pride tretja, ki je identična prvi, daj se kroglice razporedijo tako, da pašejo v praznine. In tako naprej do vrha. Izračunat moreš samo še kolko vrstic in stolpcev po kolko kroglic gre na dnu in pol od vsakega stolpca in vrstice odšteješ po eno kroglico za zgornjo vrsto. Glede na luft predvidiš kolko "se bo kroglica potopila v spodnjo vrsto" in izračunaš kolko nastropij bo. Pol število deliš z dva. Vsako polovičko deliš najprej s številom prve vrste in pol s število spodnje vrste pol pa vse skupaj sešteješ.
Xeon X5650@3.8GHz |Asus P6T|
2x4GB+4x2GB|ASUS R9 280X@1100MHz|
WD Green 240GB SSD + 4x1TB Hitachi

Aljaz1980 ::

Šli ste močno v off topik.

phyro ::

shadeX je izjavil:

No, kako bo potem programer samouk s srednjo šolo to znal sam rešit? Meni se dozdeva da programer samouk več kakor en CMS ne bo znal narediti. Pomoje je majhen procent samoukov ki postanejo resnični mojstri.


EDIT: Sicer ne pravim da ni mogoče, ampak tudi programer samouk bi v tem primeru moral prebrati še kakšno knjigo matematike zraven :)

kaj je sploh samouk? da ne hodiš na predavanja al kaj točno? :D ker recimo če nekdo na faksu pri izpitu programiranje prebere knjigo X, potem lahko ta naš samouk gre v knjižnico in jo tudi prebere. Če ima ta naš študent neke slajde od profesorja, lahko ta naš samouk gre po tutorialih or better yet, gre na coursero in ima tam tudi slajde, običajno celo bolj kvalitetno snov ki je posneta in ne samo 1x slišana. Osebno ne vidim razloga zakaj bi samouk bil bilo kako omejen, za algoritme moraš pač mal bolj matematično razmišljat, za drugo pa pač prebrat kako delajo stvari (protokoli, api) itd. nobenih omejitev, sam tam si moraš uzet cajt da nardiš izpit, pr samouku pa rabiš več samodiscipline da greš skozi nisi v to prisiljen (no če delaš iz veselja nisi niti v tem primeru) :D

Ang3lo ::

Op: Jaz mislim da enega brez drugega skoraj ne moreš. Tudi če prideš na to področje skozi višje nivoje, se boš slej ko prej naučil rešitev, ki delujejo na nižjih nivojih, ker brez njih marsikdaj enostavno ne gre.

Moja osebna definicija programiranja pa je, da gre za poučevanje matematike, samo da jo poskušaš razložiti računalniku, ne ljudem :p .

technolog ::

phyro: Razlika med tem, a si dejansko vpisan na faks al samo slediš prosojnicam na spletni učilnici (al pa nemara celo hodiš na javna predavanja), je sam ena: prisila. Če si dejansko vpisan, si prisiljen obiskovat predavanja in se brcnit, naučit za izpit in delat vaje. Tolk willpowerja v praksi premorejo redki, da jih ne bi blo treba "brcat".

Ostali, ki ste probal rešit nalogo s kroglicami: Veliko razočaranje, sami požrešni, eng. greedy, striktno programerski postopki. Nekaterim je celo uspel sestavit algoritem O(n^2), kjer je n število kroglic, oz posledično O(a^6), kjer je a dolžina stranice kvadra. Bruh.

Prva stvar, ki bi jo mogli nardit je, da se začnete zavedat, da problem vleče zelo matematično in bo vsaka kapljica matematičnega znanja olajšala problem. Že to da veš, kaj je najgostejši heksagonalni sklad (iz faking gimnazijske anoorganske kemije), ful pomaga. Naprej pa google, tud če sovražiš matematiko, ni izgovora.

Zgodovina sprememb…

Utk ::

Vsak dober matematik verjetno pozna optimalno rešitev za to, on ti takoj lahko reče "42", brez programiranja.
Programer, ta dober, bo pa naredil program, ki ti bo našel to rešitev. Tudi ko boš vmešal not še piramide, bo samo še enkrat zalaufal program. Tudi če nima pojma niti približno kakšna je optimalna rešitev. Matematik bo pa pri zmešanih kroglah in piramidah verjetno mrzel.

technolog, ti bi verjetno sprogramiral najboljšo rešitev za točno ta primer, ampak bi delovala samo v tem primeru. To ni programerska rešitev. To je matematična. V tem je razlika med enim in drugim.

Zgodovina sprememb…

  • spremenil: Utk ()

phyro ::

ne vem, če se strinjam. Kar ti sprogramiraš je ideja. Torej dobiš najprej rešitev v glavi in vse kar potem narediš je le to, da jo program izvede. Zakaj bi bil matematik mrzel? On lahko dobi enako idejo kot programer (in fact, mislim da če že kdo lahko razširi idejo na bolj abstraktno, ki ne deluje samo za točno določen primer, pol to najbrž prej stori matematik) in nobenemu matematiku je ni težko opisat kot program.

krneki0001 ::

Danes, ko je večino že napisane kode moč najti na internetu, večina programerjev "programira" z "reusable" kodo (zdej ali je free ali ne je vprašanje, ampak...). Ne začne čisto iz nule, ampak vzame že nek program za osnovo. Vzamee program, ki dela približno to kar rabi, predela, da dela točno po njegovem okusu in je to to. Zakaj bi pisal čisto na novo nekaj kar je že narejeno? Ali se splača? Imate toliko časa na voljo? Ponavadi so roki za implementacijo tako kratki, da se ne splača nekaj na novo napisat, ampak spremenit že obstoječo zadevo do te mere, da dela tako kot si si zamislil. Ampak da nekaj predelaš po lastnih željah, rabiš kar nekaj znanja.
Je pa še ena možnost, ki pa jo opažam pri zelo veliko novodobnih programerjev s faksa v zadnjih nekaj letih - programiranje s probavanjem. Vzame nek program, potem pa spreminja program in za vsako spremembo gleda kaj je program naredil. Sej na koncu je izdelek recimo namenjen temu, da dela kar je bilo zahtevano. Ampak v večini primerov ne vedo kaj vse so spremenili, stestirali tudi niso vsega, ker se je preveč časa porabilo za "programiranje" in se potem dogajajo čudeži s podatki.
Asrock X99 Extreme 4 | Intel E5-2683V4 ES | 64GB DDR4 2400MHz ECC |
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster

Utk ::

phyro je izjavil:

ne vem, če se strinjam. Kar ti sprogramiraš je ideja. Torej dobiš najprej rešitev v glavi in vse kar potem narediš je le to, da jo program izvede. Zakaj bi bil matematik mrzel? On lahko dobi enako idejo kot programer (in fact, mislim da če že kdo lahko razširi idejo na bolj abstraktno, ki ne deluje samo za točno določen primer, pol to najbrž prej stori matematik) in nobenemu matematiku je ni težko opisat kot program.

No, če zna matematik rešit ta problem čisto splošno, potem super. Ampak kaj če se ne da? Kaj če je edina rešitev "random" premikanje objektov in preizkušanje kako jih razporedit, da jih bo notri čim več. To pa lahko narediš tudi samo s kroglami, čeprav ti matematik zna za ta primer izračunat najboljšo rešitev. Recimo da zna.

jype ::

Dobri matematiki obvladajo numerično in analitično reševanje, tako da so praviloma tudi dobri programerji (pa čeprav morda le v fortranu).

krneki0001 ::

Veliko lažje se bo dober matematik naučil programirat, kot pa se bo dober programer naučil matematike.
Asrock X99 Extreme 4 | Intel E5-2683V4 ES | 64GB DDR4 2400MHz ECC |
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster

jype ::

Dvomim, da obstajajo dobri programerji, ki nimajo vsaj matematičnih osnov razčiščenih, kar v resnici pomeni, da so tudi spodobni matematiki.

phyro ::

Utk je izjavil:


No, če zna matematik rešit ta problem čisto splošno, potem super. Ampak kaj če se ne da? Kaj če je edina rešitev "random" premikanje objektov in preizkušanje kako jih razporedit, da jih bo notri čim več. To pa lahko narediš tudi samo s kroglami, čeprav ti matematik zna za ta primer izračunat najboljšo rešitev. Recimo da zna.

Ne vem zakaj misliš, da matematiki znajo rešit načeloma samo tako, da dajo formulo vn. Algoritmi so tudi matematični. Matematiki ne dobijo samo rešitev, ki jih je možno kar izpljunit. Recimo celotno področje teorije grafov je matematika, čeprav to deluje bolj "programersko", ker se velikokrat rešuje probleme s tega področja z raznimi algoritmi, ampak načeloma se s tem ukvarjajo matematiki. Torej matematiki znajo razmišljat algoritmično (verjetno v povprečju boljše kot programerji), torej bi znali tudi "random" prekimanje in preizkušanje rešit. To je konec koncev tudi neka ideja za rešitev. ;)

Utk ::

Ne gre se za to kaj znajo matematiki in kaj programerji kot osebe, ampak za to kaj je matematična rešitev in kaj programerska.
Po moje to ni isto. Matematik da ven formulo, lahko tudi postopek in ne vem kaj še vse, še zmeraj se pa ne rabi ukvarjat s tem v katero polje in na kak način bo shranil kater podatek, koliko časa ga bo rabil, koliko spomina bo pokuril itd. Pa ne da tega ne bi znal, seveda bi, samo treba mu ni, pri matematični rešitvi.

Zgodovina sprememb…

  • spremenil: Utk ()

phyro ::

aha mislim da sm poštekal kaj čš rečt in se strinjam s tabo :D

imagodei ::

Drugače mal preveč bluzite s tole matematiko v programiranju.

Žal (ali pa na srečo) je tako, da je programiranje tudi izdelava end-user aplikacij, vse od odjemalcev za mail, preko file browserjev, namenskih front-endov za mini baze podatkov, raznih to-do list, razno raznih client-server aplikacij, ki uporabljajo obstoječe in dokumentirane protokole, ali pa čisto namensko razvite proprietary protokole, do razvoja firmware-a in gonilnikov... Pri ničemer od naštetega se ne potrebuje (nujno) poglobljenega znanja iz analize, numeričnih metod, teorije množic, ipd.

Seveda je pri kakšnih aplikacijah hudo važno, ali se ponavljajoče se operacije izvajajo 50ms ali pa 5ms in dobri matematiki še kako prav pridejo. Prav tako pri razvoju nekaterih novih protokolov, obdelavi slik, videa, zvoka, optimizaciji prenosa in pri razvoju mnogih drugih specialnih aplikacij - ampak to je zgolj en elitni del programiranja.

V našem podjetju imamo kar nekaj programerjev, ki se ukvarjajo z različnimi področji: od razvoja GUI aplikacij za komunikacijo z našimi napravami, obdelavo podatkov, pa do razvoja gonilnikov in programiranja FPGA procesorjev in razvojem proprietary "fat" tabele, kontrolo dostopa do podatkov na različnih pomnilniških medijih... Navkljub temu, da sem v pogovoru z njimi že večkrat povprašal o potrebi po znanju matematike, še nihče nikoli ni potrdil, da bi potreboval poglobljeno znanje iz npr. analize ali teorije množic - eden izmed njih je tudi bivši študent matematike. Ja, morda se bo kdaj pojavila potreba po tem, da se kak proces v programu pohitrit, pa se bo moralo dele algoritmov predelat, za kar se bo moralo zaposlit ljudi s poglobljenim znanjem matematike. Zaenkrat pa hitrost več kot zadostuje.

Morda ti naši programerji že kar sami uporabljajo nekatere principe, pa se tega niti zavedajo ne, ampak to ni poglobljeno poznavanje. IOW, če razumeš Boolovo algebro še ne moreš reči, da obvladaš teorijo množic. Medtem ko je prvo nujno za programerja, obvladovanje teorije množic nikakor ni med vsakdanjimi zahtevami za programerja.


Tako da - dajte mal nehat s tem elitizmom in ne nabijajte preveč o tem, kakšne hude matematične teorije mora programer obvladat. V Sloveniji mogoče potrebujemo 100 programerjev, ki so na takem nivoju. Oz. še boljše: slovensko gospodarstvo si morda lahko privošči 100 takšnih programerjev. Za vse ostalo pa lahko poskrbijo "povprečni programerji", ki razumejo Boolovo algebro in so sposobni RL probleme prevesti v višjenivojski jezik.
- Hoc est qui sumus -

Zgodovina sprememb…

  • spremenil: imagodei ()

phyro ::

kake hude teorije? če si ciljal na teorijo grafov, se osnove le te nauči vsak v 1. letniku pri diskretnih strukturah, nadaljevanje je pri kakšnih algoritmih. Če se ti zdi to znanje iz teorije grafov, ki te naučijo na fri-ju preveč, pol se pa vdam. :D

P.S.: Ja, da se delat brez takih znanj, ampak glede na to da tudi na našem kadru poplavljajo diplome, bodo pametna podjetja začela delat selekcijo.
P.S.2.: osnove teorije grafov bi lahko učili na osnovni šoli.

krneki0001 ::

jype je izjavil:

Dvomim, da obstajajo dobri programerji, ki nimajo vsaj matematičnih osnov razčiščenih, kar v resnici pomeni, da so tudi spodobni matematiki.

Jype, Osnove bi moral imeti vsak razčiščene. Ampak iz izkušenj vem, da ima veliko programerjev probleme že z vektorji in vektorskim produktom, kaj šele s kako bolj zahtevno nalogo. Pa je recimo vektorski produkt pri kaki triangulaciji nujen.
Asrock X99 Extreme 4 | Intel E5-2683V4 ES | 64GB DDR4 2400MHz ECC |
Samsung 250GB M.2 | Asus 1070 TI | 850W Antec | LC Tank Buster

jype ::

imagodei> obvladat

Razumet. Razumet jih mora. Vedeti mora, kaj pomeni iteracija, če je trikrat gnezdena, na primer.

SeMiNeSanja ::

Dajte no nehat nakladat. Tudi če si imel na faksu oceno 10.0 iz matematike, pa jo par let nisi uporabljal (si recimo programiral le GUI), boš zadeve pozabil in boš na slabšem, kot gimnazijec, ki je ravnokar maturiral.

Če boš namesto GUI moral začeti programirati 'resne' reči, pri katerih bi potreboval znanje matematike, ti ne bo pomagalo nič - lahko se edino vsedeš in se še enkrat naučiš, kar potrebuješ. Morda boš edino nekoliko v prednosti pred maturantom, ker se ti megleno sanja, katero specifično področje moraš obnoviti, boš pa zato na slabšem, ker maturant same osnove še ni uspel pozabiti (ti boš pa plonkal, kako se že dela integral od funkcije f(x)).
Na koncu - če bi se oba lotevala istega problema, bi po parih mesecih učenja bila oba na povsem primerljivem nivoju obvladovanja problematike.

Drugače pa tudi diplomirani matematik nima kar vseh formul in enačb v glavi. Tudi on bo v roke vzel kakšen debel špehovje z matematično teorijo in po njemu brskal za algoritmom, ki rešuje nek določen problem, predenj se bo lotil odkrivanja tople vode.
«
1
2


Vredno ogleda ...

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

Kaj je to programerska logika? (strani: 1 2 )

Oddelek: Programiranje
529343 (6348) windigo
»

Programer-php, python

Oddelek: Loža
458059 (4950) Red_Mamba
»

FRI vs FE (strani: 1 2 3 )

Oddelek: Šola
10123764 (18555) Invictus
»

Punca -> Tehnik računalništva, Vegova LJ (strani: 1 2 3 )

Oddelek: Šola
12931131 (24792) x128
»

A se je možno samostojno naučit programiranja? (strani: 1 2 3 )

Oddelek: Programiranje
14933116 (29210) darkkk

Več podobnih tem