Thecoder
JF-Expert Member
- Aug 10, 2015
- 1,590
- 4,244
Niaje wakuu…
Ni hivi, ni rahisi kujifunza syntax za programming language yoyote ila shida kubwa ambayo inawasumbua watu wengi ni namna ya kubadili hizo concept na kuziweka kwenye mfumo wanaouhitaji.
Na ndio maana nimekuja hapa niweze kukupa hii mbinu ambayo itakusaidia kwenye safari ya usomaji wako na kama na wewe ni miongoni mwa watu ambao wanapata tabu kwenye kipengele hiko cha kushindwa kubadili concept kuwa kwenye mfumo unaoutaka basi utaenda kupata kitu.
Kama utakumbuka mara ya mwisho niliweza kusema ya kwamba programming huwa inaishia kwenye data types pamoja na control flow kwa maana ya if-else (sikupata challenge yoyote ya hii hoja yangu na hii inamaanisha ya kwamba wote kwenye hili jukwaa tulikubaliana hivyo).
Na hoja hii niliijenga kwa kuongeza kusema ya kwamba kwenye data types utajifunza misingi ya awali ya kuhifadhi data na kwenye control flow utajifunza misingi ya awali ya kutengeneza logic.
Ukishakuwa na uelewa mzuri kwenye kujua namna data zinavyohifadhiwa na ukajua namna mbalimbali za kujenga logic, kama lugha unayojifunza inafuata ule mfumo wa OOP kwa maana ya object oriented programming(na leo nitabaki kwenye lugha za mfumo huu) basi utakwenda kujifunza namna unavyoweza kutumia data na logic zako kwa pamoja kwenye kipengele cha OO kwa maana ya object oriented.
Kwenye kipengele hiki utakwenda kujifunza pillars za object oriented programming, ambazo hizi zitakusaidia kwenye kujua namna class moja inavyoweza kuingiliana na class nyingine.
Utajua namna ya kuziwekea ulinzi data zako ili zisiweze kufikiwa kwa haraka, lakini utajifunza namna methods pamoja na instance variables zake zinavyoweza kurithiwa na methods pamoja na instance variables zilizopo kwenye class nyingine, hii itakusaidia pale utakapo pata nafasi ya kuandika mfumo ambao utakua na methods pamoja na instance variables zinazojirudia rudia.
Kwa mfano mfumo wa mikopo ambapo ndani yake utakua unatoa mikopo ya nyumba, mikopo ya magari, na mikopo ya fedha, kwenye mfumo wa namna hii lazima utakutana na instance variables pamoja na methods nyingi ambazo zitakua zinajirudia kwenye Kila class hasa kama utaamua kutengeneza class tatu kwa maana class ya Mkopowafedha, class ya Mkopowanyumba na class ya Mkopowagari.
Kwahiyo hili eneo la OOP, ndio eneo ambalo unatakiwa ulielewe vizuri kwa maana ukilielewa vizuri basi utakua na uwezo wa kuandika programu yako unayotaka kwa uzuri.
Na kimsingi hili ndio eneo la mwisho ambalo litakufunza wewe namna ya kuandika mfumo baada ya hapo topics zote ambazo utajifunza ni zile ambazo zitakua zinakufundisha namna mbalimbali ya kukabiliana na matatizo yatakayojitokeza pindi utakapoandika mfumo wako (wacha nikueleweshe kidogo hapa namna itakavyokua kwenye topics zitakazo fuata baada ya OOP).
Tuseme tayari umeshaelewa vizuri namna ya kuunganisha concept zako za data types pamoja na logic kwenye class moja lakini pia umeshaelewa namna class na class zinavyoweza kuingiliana kutoka package moja hadi nyingine na ukawa unaandika mifumo yako mwenyewe, lakini unaona baadhi ya vipengele unashindwa kabisa kutengeneza logic zake, kwa mfano unataka utengeneze mfumo ambao ndani yake upo na calendar huku ukiwa unaonesha muda automatic na unashindwa sasa namna ya kutengeneza hiyo logic.
Basi ili kutatua hili tatizo utaenda kujifunza kitu kinachoitwa build in APIs, hizi ni API ambazo zipo tayari kwenye language yako kwahiyo ili uweze kuzitumia unachofanya ni kuimport package ambayo hiyo API ipo kwenye class ambayo unalenga kuitumia kisha utakua na uwezo wa kuaccess objects pamoja na methods zote zilizopo kwenye API hiyo, kwahiyo tatizo lako la tarehe litakua limetatuliwa (tarehe ni mfano mdogo tu kati ya mifano mikubwa ambayo API inaweza kukusaidia).
Lakini pindi utakapoanza kuzitumia hizi API huwa kuna nyakati inatokea zinaweza zisikupe matokeo kwa wakati na kusababisha error ziweze kutokea ambazo zitapelekea mfumo wako ushindwe kufanya kazi vizuri, na ili uweze kukabiliana na hii changamoto basi utaenda kujifunza namna ya kukabiliana na changamoto hii kwenye kipengele cha exceptional error handling, ambapo hapa utaenda kujifunza try-catch, ambapo hapa ni kama utaenda kuandika if-else kwa namna tofauti.
Ikiwa bado unaendelea kutengeneza hii mifumo utakuja kugundua kwamba mifumo yote ambayo umekua ukiijenga ni command line programs ya kwamba zinafanya kazi kwenye command lines tu kitu ambacho ni changamoto na ili uweze kutatua hii changamoto basi utaenda kujifunza kitu kinachoitwa GUI kwa maana ya graphics user interface.
Hii itakusaidia uanze kutengeneza mifumo ambayo itakua inaonekana kwa macho na si mifumo ambayo itakua inaishia kwenye command line.
Na kwakua tayari sasa unaouwezo wa kutengeneza graphics basi unaweza kujikuta unatamani sasa utengeneze game ili uwe unacheza cheza hapo nyumbani.
Baada ya kutengeneza game utakua unacheza ila utagundua baada ya kucheza ukifunika laptop yako kwa muda na utakaporudi kuiwasha ile game uliyokua unacheza haianzii pale ambapo uliishia ila badala yake itakua inaanzia mwanzo kabisa (hii ni changamoto, kuanza upya Kila mara kwa maana data zinapotea kila unapotoka nje ya hiyo game yako)
Na ili uweze kutatua hii changamoto utaenda kujifunza kitu kinachoitwa serialization na deserialization, hapa utaenda kujifunza namna ya kuhifadhi data kwenye heap au kwenye stacks na baadae kuzichukua tena ili uweze kuzitumia katika namna tofauti tofauti, kwahiyo ukikitumia hiki kipengele kwenye game yako utaona lile tatizo la kuanza upya limetatuliwa.
Lakini unapotengeneza game utakuja kugundua ya kwamba kila character anakua na sifa tofauti tofauti ila pia unavyocheza utagundua programu yako itakua inafanya mambo mengi kwa wakati mmoja, kama kutunza nguvu, kuupgrade stages, kudowngrade stages, kupunguza nguvu, kurusha ngumi, kurusha mateke na kadhalika, hali hii itakua inaweza kupelekea programu yako iwe na changamoto kadhaa ila kubwa ni kustack kwa maana ya kuwa nzito lakini pia baadhi ya tasks zitakua hazifanyi kazi kwa haraka au kama ipaswavyo na hii tayari itakua ni changamoto.
Sasa ili uweze kukabiliana na changamoto hii utakwenda kujifunza kitu kinachoitwa Concurrency ambapo ndani yake utaenda kujifunza multithreads pamoja na synchronization zitakazo kusaidia kukabiliana na changamoto hiyo iliyojitokeza baada ya programu yako kufanya mambo mengi kwa wakati mmoja.
Kwahiyo changamoto kama ya race condition, deadlock, starving na kadhalika, utakwenda kujifunza namna ya kuzitatua kupitia kipengele hiko.
Ila pia wakati unaendelea unaweza kupata wazo la kuona hii game nataka niwe nacheza na rafiki yangu kwenye kifaa tofauti na hiki changu sasa nitafanyaje ili hili liwezekane, basi hapo utaenda kujifunza kitu kinachoitwa Networking and IO, humu ndio utaenda kujifunza mambo ya socket zinavyofanya kazi na IP address pamoja na server na kadhalika.
Ila pia nadhani haitatosha ila baada ya hapa utataka uhifafhi baadhi ya data ili ziwe zinapatikana kila wakati zinapohitajika hasa kama utaamua kuongeza kile kipengele cha login pamoja na registration, na hapa ili kuweza kutatua hii changamoto utaenda kujifunza kitu kinachoitwa database connection kwa maana mtu atakapo fanya registration zile taarifa zake zinakwenda kwenye database na atakapokuja kulogin mfumo wako utakumbuka kwamba taarifa za mtu huyu tayari zipo kwahiyo muache aingie ndani ya mfumo.
Kwahiyo hii series inaenda hivyo over and over again hadi pale itakapofikia wakati umeona umechoka kuandika codes nyingi na kutake care Kila changamoto inayojitokeza kwenye programu yako wewe mwenyewe na kuamua kujifunza namna ya kufanya kazi na frameworks, ambazo hizi zitakupunguzia mzigo huo wa kuandika codes nyingi na badala yake utakua unaandika zile necessary codes ambazo frameworks haziwezi kutake care.
Kwahiyo ili usiwe na changamoto ya kuchanganya concept (kwasababu hii changamoto ndio itakufanya usijue wapi kwa kuanzia pindi unapotaka kutengeneza mfumo) unatakiwa pindi unaposoma language yoyote ile unapohama kutoka kipengele kimoja kwenda kingine ujue hiko kipengele kimewekwa kwasababu gani na kitakwenda kukusaidia kwenye kutatua changamoto gani za kimfumo.
Naweka vidole vyangu pembeni ya keyboard.
Ni hivi, ni rahisi kujifunza syntax za programming language yoyote ila shida kubwa ambayo inawasumbua watu wengi ni namna ya kubadili hizo concept na kuziweka kwenye mfumo wanaouhitaji.
Na ndio maana nimekuja hapa niweze kukupa hii mbinu ambayo itakusaidia kwenye safari ya usomaji wako na kama na wewe ni miongoni mwa watu ambao wanapata tabu kwenye kipengele hiko cha kushindwa kubadili concept kuwa kwenye mfumo unaoutaka basi utaenda kupata kitu.
Kama utakumbuka mara ya mwisho niliweza kusema ya kwamba programming huwa inaishia kwenye data types pamoja na control flow kwa maana ya if-else (sikupata challenge yoyote ya hii hoja yangu na hii inamaanisha ya kwamba wote kwenye hili jukwaa tulikubaliana hivyo).
Na hoja hii niliijenga kwa kuongeza kusema ya kwamba kwenye data types utajifunza misingi ya awali ya kuhifadhi data na kwenye control flow utajifunza misingi ya awali ya kutengeneza logic.
Ukishakuwa na uelewa mzuri kwenye kujua namna data zinavyohifadhiwa na ukajua namna mbalimbali za kujenga logic, kama lugha unayojifunza inafuata ule mfumo wa OOP kwa maana ya object oriented programming(na leo nitabaki kwenye lugha za mfumo huu) basi utakwenda kujifunza namna unavyoweza kutumia data na logic zako kwa pamoja kwenye kipengele cha OO kwa maana ya object oriented.
Kwenye kipengele hiki utakwenda kujifunza pillars za object oriented programming, ambazo hizi zitakusaidia kwenye kujua namna class moja inavyoweza kuingiliana na class nyingine.
Utajua namna ya kuziwekea ulinzi data zako ili zisiweze kufikiwa kwa haraka, lakini utajifunza namna methods pamoja na instance variables zake zinavyoweza kurithiwa na methods pamoja na instance variables zilizopo kwenye class nyingine, hii itakusaidia pale utakapo pata nafasi ya kuandika mfumo ambao utakua na methods pamoja na instance variables zinazojirudia rudia.
Kwa mfano mfumo wa mikopo ambapo ndani yake utakua unatoa mikopo ya nyumba, mikopo ya magari, na mikopo ya fedha, kwenye mfumo wa namna hii lazima utakutana na instance variables pamoja na methods nyingi ambazo zitakua zinajirudia kwenye Kila class hasa kama utaamua kutengeneza class tatu kwa maana class ya Mkopowafedha, class ya Mkopowanyumba na class ya Mkopowagari.
Kwahiyo hili eneo la OOP, ndio eneo ambalo unatakiwa ulielewe vizuri kwa maana ukilielewa vizuri basi utakua na uwezo wa kuandika programu yako unayotaka kwa uzuri.
Na kimsingi hili ndio eneo la mwisho ambalo litakufunza wewe namna ya kuandika mfumo baada ya hapo topics zote ambazo utajifunza ni zile ambazo zitakua zinakufundisha namna mbalimbali ya kukabiliana na matatizo yatakayojitokeza pindi utakapoandika mfumo wako (wacha nikueleweshe kidogo hapa namna itakavyokua kwenye topics zitakazo fuata baada ya OOP).
Tuseme tayari umeshaelewa vizuri namna ya kuunganisha concept zako za data types pamoja na logic kwenye class moja lakini pia umeshaelewa namna class na class zinavyoweza kuingiliana kutoka package moja hadi nyingine na ukawa unaandika mifumo yako mwenyewe, lakini unaona baadhi ya vipengele unashindwa kabisa kutengeneza logic zake, kwa mfano unataka utengeneze mfumo ambao ndani yake upo na calendar huku ukiwa unaonesha muda automatic na unashindwa sasa namna ya kutengeneza hiyo logic.
Basi ili kutatua hili tatizo utaenda kujifunza kitu kinachoitwa build in APIs, hizi ni API ambazo zipo tayari kwenye language yako kwahiyo ili uweze kuzitumia unachofanya ni kuimport package ambayo hiyo API ipo kwenye class ambayo unalenga kuitumia kisha utakua na uwezo wa kuaccess objects pamoja na methods zote zilizopo kwenye API hiyo, kwahiyo tatizo lako la tarehe litakua limetatuliwa (tarehe ni mfano mdogo tu kati ya mifano mikubwa ambayo API inaweza kukusaidia).
Lakini pindi utakapoanza kuzitumia hizi API huwa kuna nyakati inatokea zinaweza zisikupe matokeo kwa wakati na kusababisha error ziweze kutokea ambazo zitapelekea mfumo wako ushindwe kufanya kazi vizuri, na ili uweze kukabiliana na hii changamoto basi utaenda kujifunza namna ya kukabiliana na changamoto hii kwenye kipengele cha exceptional error handling, ambapo hapa utaenda kujifunza try-catch, ambapo hapa ni kama utaenda kuandika if-else kwa namna tofauti.
Ikiwa bado unaendelea kutengeneza hii mifumo utakuja kugundua kwamba mifumo yote ambayo umekua ukiijenga ni command line programs ya kwamba zinafanya kazi kwenye command lines tu kitu ambacho ni changamoto na ili uweze kutatua hii changamoto basi utaenda kujifunza kitu kinachoitwa GUI kwa maana ya graphics user interface.
Hii itakusaidia uanze kutengeneza mifumo ambayo itakua inaonekana kwa macho na si mifumo ambayo itakua inaishia kwenye command line.
Na kwakua tayari sasa unaouwezo wa kutengeneza graphics basi unaweza kujikuta unatamani sasa utengeneze game ili uwe unacheza cheza hapo nyumbani.
Baada ya kutengeneza game utakua unacheza ila utagundua baada ya kucheza ukifunika laptop yako kwa muda na utakaporudi kuiwasha ile game uliyokua unacheza haianzii pale ambapo uliishia ila badala yake itakua inaanzia mwanzo kabisa (hii ni changamoto, kuanza upya Kila mara kwa maana data zinapotea kila unapotoka nje ya hiyo game yako)
Na ili uweze kutatua hii changamoto utaenda kujifunza kitu kinachoitwa serialization na deserialization, hapa utaenda kujifunza namna ya kuhifadhi data kwenye heap au kwenye stacks na baadae kuzichukua tena ili uweze kuzitumia katika namna tofauti tofauti, kwahiyo ukikitumia hiki kipengele kwenye game yako utaona lile tatizo la kuanza upya limetatuliwa.
Lakini unapotengeneza game utakuja kugundua ya kwamba kila character anakua na sifa tofauti tofauti ila pia unavyocheza utagundua programu yako itakua inafanya mambo mengi kwa wakati mmoja, kama kutunza nguvu, kuupgrade stages, kudowngrade stages, kupunguza nguvu, kurusha ngumi, kurusha mateke na kadhalika, hali hii itakua inaweza kupelekea programu yako iwe na changamoto kadhaa ila kubwa ni kustack kwa maana ya kuwa nzito lakini pia baadhi ya tasks zitakua hazifanyi kazi kwa haraka au kama ipaswavyo na hii tayari itakua ni changamoto.
Sasa ili uweze kukabiliana na changamoto hii utakwenda kujifunza kitu kinachoitwa Concurrency ambapo ndani yake utaenda kujifunza multithreads pamoja na synchronization zitakazo kusaidia kukabiliana na changamoto hiyo iliyojitokeza baada ya programu yako kufanya mambo mengi kwa wakati mmoja.
Kwahiyo changamoto kama ya race condition, deadlock, starving na kadhalika, utakwenda kujifunza namna ya kuzitatua kupitia kipengele hiko.
Ila pia wakati unaendelea unaweza kupata wazo la kuona hii game nataka niwe nacheza na rafiki yangu kwenye kifaa tofauti na hiki changu sasa nitafanyaje ili hili liwezekane, basi hapo utaenda kujifunza kitu kinachoitwa Networking and IO, humu ndio utaenda kujifunza mambo ya socket zinavyofanya kazi na IP address pamoja na server na kadhalika.
Ila pia nadhani haitatosha ila baada ya hapa utataka uhifafhi baadhi ya data ili ziwe zinapatikana kila wakati zinapohitajika hasa kama utaamua kuongeza kile kipengele cha login pamoja na registration, na hapa ili kuweza kutatua hii changamoto utaenda kujifunza kitu kinachoitwa database connection kwa maana mtu atakapo fanya registration zile taarifa zake zinakwenda kwenye database na atakapokuja kulogin mfumo wako utakumbuka kwamba taarifa za mtu huyu tayari zipo kwahiyo muache aingie ndani ya mfumo.
Kwahiyo hii series inaenda hivyo over and over again hadi pale itakapofikia wakati umeona umechoka kuandika codes nyingi na kutake care Kila changamoto inayojitokeza kwenye programu yako wewe mwenyewe na kuamua kujifunza namna ya kufanya kazi na frameworks, ambazo hizi zitakupunguzia mzigo huo wa kuandika codes nyingi na badala yake utakua unaandika zile necessary codes ambazo frameworks haziwezi kutake care.
Kwahiyo ili usiwe na changamoto ya kuchanganya concept (kwasababu hii changamoto ndio itakufanya usijue wapi kwa kuanzia pindi unapotaka kutengeneza mfumo) unatakiwa pindi unaposoma language yoyote ile unapohama kutoka kipengele kimoja kwenda kingine ujue hiko kipengele kimewekwa kwasababu gani na kitakwenda kukusaidia kwenye kutatua changamoto gani za kimfumo.
Naweka vidole vyangu pembeni ya keyboard.