Kuidas alustada veebiarendusega ja üldse programmeerimisega?

Kuidas alustada veebiarendusega ja üldse programmeerimisega?

Kui ma hakkasin tegema HTMLi kursust, siis ma absoluutselt ei mõelnud sellepeale, et ma oleksin võinud alustuseks teha mingi sissejuhatavama osa üldse programmeerimise ja tehnika maailma.

Nii et selle postitusega ma heastan selle vea. Kui sa oled täielik algaja ja tahaksid hakata õppima programmeerimist/veebiarendust, siis see on see koht, kust sa peaksid alustama.

Ma ei hakka valetama, et enamus mu mõtteid on varastatud ühest tasuta Simple Programmeri raamatust, mis õpetab põhiliselt kõik selgeks, mida üks algaja või isegi edasijõudnud programmeerimises peaks teadma.

Programmeerimisest üldisemalt

Kui sa alustad programmeerimisega, siis sa ei saa enamus asjadest aru ja sulle suure tõenäosusega tundub, et sul nii palju informatsiooni, mida sa pead läbi võtma, et üldse mingile tasemele jõuda. Aga ära muretse, see on täiesti normaalne.

Kui mina alustasin, siis ma ka ei saanud paljudest asjadest aru. Miks nad nõnda töötavad või et miks just need asjad seal on jne. Ajamöödudes, kui õpid juurde järjest rohkem uusi asju, arusaamine paraneb ja sinust saab järjest parem programmeerija.

Kõigepealt ma tahaksin öelda, et programmeerimine ehk arvutile käskluste ütlemine ei ole lihtsalt programmeerimine. Loomulikult on see suur osa sellest, aga tegelikult on programmeerimine automatiseerimine.

Meil peab olema midagi sellist, mida tehakse praegu manuaalselt või pool-automaatselt, et seda saaks programmeerida. Tähtis on sellest konspetktist aru saada, sest alati tuleks koodi kirjutades proovida asju automatiseerida, et sa ei kordaks ennast – DRY (näiteks 5 täpse käsu manuaalse kirjutamise asemel kasutada for loopi jne.)

Loomulikult on olemas projekte, kus esmasel silmapilgul midagi erilist ei automatiseerita (just vaadates veebiarendust ja võib-olla ka natukene mängude arendust), aga siiski on seal ka olemas põhilised automatiseerimise tunnused, nagu näiteks game loop, WordPressi ala pealt WP_query jne.

Nii et esimene küsimus, kui sa üldse midagi programmeerima hakkad peaks olema see, et mida sa automatiseerid?

 

Kui sa oled sellele küsimusele vastuse leidnud, siis kindlasti hakkad sa mõtlema, kuidas sa seda automatiseerid? Kindlasti ei tohiks koheselt lihtsalt koodi hüpata ja vaadata, mis juhtub, vaid nüüd oleks väga tähtis hakata koguma vaikselt teadmisi selle probleemi osas (probleemi all ma mõtlen midagi suuremat ehk millistest komponendidest programm koosneb nt. mängul peab olema AI, füüsika jne).

Kuidas seda teha, millised võimalused on erinevateks lahendusteks ja äkki on keegi selle probleemi ära lahendanud (kui keegi on, siis see ei tähendaks, et sa ei võiks enda lahendust teha, aga sa võiksid vaadata, kuidas tema selle probleemi ära lahendas ja mis võtteid ta kasutas)?

Ning kui juba realset tööd hakkad tegema ja sul on tähtaeg paika pandud, siis võib olla näed just selle etapis, et sa ei peagi kõike ise programmeerima, vaid kasutad juba kellegi poolt pakutud lahendust.

Loomulikult oht selle juures on see, et kellegi teise lahendus ei pruugi olla kõige parem. Siis tihtipeale on sinu töö seda lahendust parandada ja automatiseerida!

Kui mul väga kiire tähtajaga pole, siis ma rikun reeglit ja lihtsalt hüppan koodi, et kirjutada valmis testversioon võimalikust programmist. Testversioon ongi ainult testmiseks ja erinevatele probleemidele lahenduste leidmiseks ning pärast testversiooni valmimist kirjutan ma terve programmi ümber.

Jah, lugesite õigesti, kirjutan terve testprogrammi ümber (siis juba korralikult koos kommentaaridega ja läbimõeldud algoritmidega), nii et suuremate projektide juures see tehnika ei tööta.

Make it work, make it right, make it fast!

Teiseks küsimuseks on siis see, et kuidas sa automatiseerid ehk kuidas sa lahendad suuremad probleemid?

 

Nüüd järgmisena peaks välja mõtlema programmi struktuuri. See sarnaneb natukene eelmise punktiga, aga selle põhimõte on panna paika, kuidas on erinevad komponendid seotud ja kuidas nad töötavad. Näiteks objekorienteeritud programmeerimises tuleks välja mõelda, kes on mingi klassi lapsklassid, mis iga klassi ülesanne jne. Et ei juhtuks seda, et näiteks renderdamise eest hoolitsevasse klassi ei satuks mingi suvaline arvutusmeetod.

Hea oleks selline plaan realselt välja joonistada.

Toon siia ka väikese näite.

WPPluginPlanExample

Ma otseselt arvutis plaani ei soovitaks teha, sest see on üsna tülikas (kui arvutis teed, siis kasuta vektorgraafikat), aga ma loodan, et andsin sulle enam-vähem aimu, mida üks plaan peaks endast kujutama. Lisaks sellele võiksid veel plaanil olla ka nooled, et näha paremini, kuidas mingi asi on teise asjaga seotud jne.

Kolmandaks asjaks oli siis plaan.

 

Kui nüüd peaks juhtuma, et koodis ei ole võimalik kõike täpselt plaani peal järgi teha, siis tuleb plaan ümber hinnata ja jälgida uut plaani.

Praeguseks oleme siis läbi võtnud 3 olulist punkti mida peaks enne programmeerimist küsima/tegema:

  1. Mida me automiseerime?
  2. Kogu teadmisi probleemi kohta (näiteks kuidas seda automatiseerida ja mida ma pean teadma, et probleeme lahendada).
  3. Koosta üldine plaan.

Pärast plaani koostamist võib programmeerimine alata. See on nüüd see lõbus osa, loomulikult ainult siis kui sa tead, mida sa teed.

Järgmisena, pärast programmeerimist, tuleb testimine.

Ja pärast testimist tuleb siis programmi välja laskmine. Ma ei lähe siin väga detailidesse, sest see tuleb alles kõik pärast sinu esimest tõsist programmi ja ma arvan, et siis sa juba enam-vähem tead, mida sa teed.

Postituse tegelik sisu

Nüüd võib olla sa küsid, et miks on selline vahepealkiri, et kas see eelnev polnudki siis postituse sisu. Oli küll, aga see oli väga laias laastus. Aga miks see oli siis “laias laastus”? Sest ma tahtsin, et sa saaksid enam-vähem aimu, mida tuleb enne programmeerimist teha. Et kui sa peaksid kunagi jõudma sinnamaani, et sa lood oma esimese tõsise programmi, siis sa lihtsalt ei tee midagi valmis, vaid sa mõtled iga asja läbi.

Olgu algajale selline asi vist eriti korda ei lähe, eriti siis kui käsil on võib-olla esimene programmeerimiskeel.

Aga mis siis läheb korda?

Korda läheb plaan. Ei mitte see struktuuriplaan, vaid tegutsemisplaan.

Mis järjekorras sa asju õpid ja omandad? See on minu arust kõige tähtsam. Sul peaks olema ees teatud siht, kuhu sa tahad välja jõuda.

Oleks hea, et sa suudad välja valida enda nišši või spetsialiatsiooni, aga suure tõenäosusega sa seda ei suuda.

Kui suudad, siis on väga hea (ma räägin sellest veel natukene allpool), aga kui sa ei suuda, siis ma mõistan sind 100%. Miks? Sest sul on niipalju võimalusi. Alustades erinevate programmeerimiskeeltega ja lõpetades erinevate frameworkide ja platformidega.

Miks oleks nišši või spetsialiatsiooni omamine hea?

Neid põhjuseid on tegelikult mitu.

Esiteks sul on lihtsam. Sa tead enam-vähem mida sa õppima pead ja mida sa õppima ei pea. Kui sa nüüd üritaksid õppida programmeerima (mida paljud algajad teevad, kaasa arvatud mina tegin), siis sa ei tea mida sa peaksid õppima.

Äkki oleks hea kui sa õpiksid C, ei äkki Java on parem, aga siis on ka ju C#, proffessionaalid ütlevad, et C++ (tõsiselt ärge seda keelt oma esimeseks keeleks võtke, liiga keeruline), vanaisa aga ütles Assembly. Saate aru, kuhu ma selle jutuga lähen. See oleks nagu sportlane, kes üritaks teha igat ala. Võimatu!

Teiseks, sa saad kiiremini eksperdiks. Kujutage ette endale programmeerijat, kes on programmeerinud 5 aastat ja teab ainult ühte programmeerimiskeelt, oletame Javat. Paljud ütlevad, et see on väga halb (noh võib olla üks on tõesti vähe, aga kahest täiesti piisab), aga mina väidan vastupidist.

Oletame, et ta on viimased 5 aastat korralikult programmeerinud, see tähendab järjepidevalt programme teinud Javas. Kui nüüd tuleks tööpakkumine Java arendaja koha peale, siis kumb suurema tõenäosusega tööd saab, kas programmeerija, kes on 5 aastat programmeerinud Javas ja teab Javast peaaegu, et kõike või programmeerija, kes on ka 5 aastat programmeerinud, aga teab natukene C#, C, HTMLi, CSSi, PHP, Javat, JavaScripti. Mina arvan, et töö saab ikkagi ekspert, kes on Javas programmeerinud 5 aastat.

Tähtis pole kui palju keeli sa oskad, tähtis on see, et sa oleksid ekspert ühel alal, sest eksperte tahetakse ja neile ka makstakse rohkem.

Paljud ütlevad, et nõnda pannakse turgu kinni, aga tegelikult tehakse ennast klientidele/tööandjatele nähtavamaks.

Võtame näiteks ehitusfirmad. On kaks ehitusfirmat. Üks, kes pakub puitmaju, kivimaju, tellismaju jne. Teine pakub ainult puitmaju ja on spetsialiseerunud nendele.

Nüüd tuleb klient, kes tahab endale puitmaja ja kas ta paneb google otsingusse lihtsalt maja ehitamine või ta paneb google otsingusse puitmaja ehitamine.

Loomulikult paneb ta otsingusse puitmaja ehitamine ja suure tõenäosusega leiab ta esimeseks vasteks teise ehitusfirma, sest nende veebileht kajastab rohkem sõna “puit” ja selle tõttu tõstab google selle veebilehe selles otsingus paremale kohale.

See ei toimu ainult otsingumootoris nõnda, vaid ka päriselus. Inimesed tahavad seda, et nende jaoks töötavad proffessionaalid, kes teavad, mida nad teevad ja tihti peale makstakse proffessionaalidele rohkem. Ja kui sa kajastad ennast kui eksperti teatud kitsal alal, siis on sind märgatakse kiiremini, sest sinu kõrval pole eriti konkurentsi.

“Sa ei taha olla väike kala suures tiigis. Sa tahad olla suur kala väikses tiigis” – John Sonmez, simpleporgrammer.com.

Ma loodan, et olen sind veennud, et ekspert on parem olla kui inimene, kes teab igast asjast natukene.

Aga kui sa ei tea, mis programmeerimiseriala võtta, siis pole hullu, ma annan sulle natukene nõu. Tegelikult ma annan sulle terve tegutsemisplaani.

Minul läks enda eriala valimisega aega 2 aastat. Miks nii kaua? Sest ma üritasin ennast õpetada programmeerima pidevalt ehk ma ei valinud endale eriala. Aga ma aitan sul aega kokku hoida.

Tegutsemisplaan neile, kes ei tea, mis eriala valida

Aastane tegutsemisplaan on järgmine:

  1. Õppida ära põhilised asjad ära (muutujad, if – laused, funktsioonid, loopid) Pythonis. Tähtaeg: 1. kuu lõpp
  2. Teha valmis esimene lihtne terminali rakendus (arvutusprogramm, tekstipõhine seiklusmäng jne.), kus kasutatakse esimesel kuul õpitud asju. Soovitavalt võiksid selle programmi teha peast. Tähtaeg: teise kuu 2 esimest nädalat
  3. Õppida ära keskmise tasemega Python (import, classes, try except + error handling). Tähtaeg: 2. kuu lõpp
  4. Teha valmis terminali rakendus (võib jälle olla arvutusprogramm, tekstipõhine seiklusmäng jne.), aga seekord peab kasutama 3. punktis välja toodud teadmisi. Soovitavalt võiksid selle programmi teha peast. Tähtaeg: kolmanda kuu 2 esimest nädalat.
  5. Õppida ära kõrge tasemega Python (GUI (tkinter)/PyGame ja muud endale huvitavad frameworkid ja libraryd). Tähtaeg: 3. kuu lõpp
  6. Teha valmis lihtne GUI rakendus või mäng (võib jälle olla arvutusprogramm, tekstipõhine seiklusmäng, lihtne space sooter jne.), aga seekord peab kasutama 5. punktis välja toodud teadmisi + lisaks varem õpitud teadmised. Tähtaeg: neljanda kuu 2 esimest nädalat.
  7. Nüüd ma soovitaksin lihtsalt valida huvitavaid projekte, mida sa pole veel teinud ja teha neid Pythonis (tähtis oleks, et neid oleks võimalikult palju, sest oleks hea, kui sa katsetad erinevate asjadega, et leiaksid endale huvitava haru). Tähtaeg: 5. kuu lõpp (siin ei ole tegelikult tähtaeg tähtis, sest oluline on leida teema, mis just sind kõnetab).
  8. Leida endale meeldivaim/huvitavaim projekt, mis on seni olnud. Nüüdsest keskendu(spetsialiseeru) sellele valitud erialale (mida spetsiifilisem, seda parem), millega see projekt seondub (näiteks kui sulle meeldis veebiarendus Pythoniga, kuigi sa vist ei saanud sellest suurt aru, sest HTMLi pole sa veel õppinud, siis vali veebiarendus) Tähtaeg: 6. kuu lõpp.
  9. Otsi mida sa veel pead selle ala kohta teadma, kas selle probleemi lahendamiseks läheb vaja mingit teist keelt või tööriista ja õpi need tööriistad/keeled täielikult ära (näiteks veebiarenduse kohta, et juurde kindlasti pead õppima HTMLi, CSSi kui ka JavaScripti). Tähtaeg 12.kuu lõpp.

Kui keegi küsib, miks ma just Pythoni valisin nii-öelda esimeseks keeleks, siis sellepärast, et ta on üsna kerge, dünaamiline ja sellega saab ehitada päris võimsaid programme ja veebilehti.

Pythoni õppimiseks soovitaksin mina seda kursust (see on täielikum)-> siin või siin.

Lisaks kasulikke allikaid saab siit.

Tähtis oleks, et selle plaani lõpuks oleks sul kindel eriala, millele oled keskendunud. Mida spetsiifilisem, seda parem. Näiteks kui sa valisid veebiarenduse, siis see on ka omakorda suur ala.

Nii et sa pead otsustama, kas sa jääd Pythoni juurde või liigud edasi mõne teise platformi näiteks WordPressi juurde jne. Kui oled mõne eriala valinud, siis jää selle juurde, aga kui sulle tundub, et see pole ikka sinu jaoks siis, võid valida teise eriala.

Aga vaata, et sa liiga palju ei vaheta. Selleks see 7. punkt ongi, et sa katsetaksid erinevaid võimalusi.

Tegutsemisplaan neile, kes teavad, mis eriala valida ja ka neile, kes on läbinud esimese tegutsemisplaani

Minu soovituseks on see, et sa jääd oma eriala juurde nii kauaks kui võimalik. Sa võid oma eriala vahetada, aga tee seda äärmistel juhtudel, kus tõesti tunned, et see eriala enam sind ei huvita või kus selle eriala nõudlus on null.

Lisaks sellele ma soovitaksin panna paika sellise konkreetsema tegutsemisplaani, mida sa järk-järgult täidad. See võib olla üsnagi sarnane minu ülemise plaaniga, aga see võiks olla veel konkreetsem, et mis tehnoloogia/teegi mingiks ajaks ära õpid ja omandad.

Kas tekkis küsimusi sellise pika postituse peale? Kui jah, siis andke kommentaarides teada 🙂 !

 

Senikaua olge tugevad ja kohtume juba järgmistes postitustes,

Tähelepanu eest tänades – Oliver Paljak

P.S! Kui oled huvitatud animatsioonilisest veebilehest, siis võta minuga julgelt ühendust AnsiVeebi kodulehel.

Leave a Reply

Your email address will not be published. Required fields are marked *