Isa itong pagsasalin ng kwento ng tagumpay mula sa aming pandaigdigang komunidad ng Java. Natutunan ni Alex ang Java sa bersyon ng kursong Russian-language, na pinag-aaralan mo sa English sa CodeGym. Nawa'y maging inspirasyon ito para sa iyong karagdagang pag-aaral at baka isang araw ay nais mong ibahagi sa amin ang iyong sariling kwento :)

Panimula

Medyo tungkol sa kung paano ako napunta sa programming. Isa akong guro at psychologist sa pamamagitan ng pagsasanay, at sa loob ng 5 taon ay matagumpay kong nagsasagawa ng aking propesyon. Ngunit sa iba't ibang dahilan, lalo kong iniisip na lumipat sa ibang bansa. At dahil iba ang wika at mga regulasyon sa ibang mga bansa, hindi ako maaaring maging katulad na uri ng propesyonal nang walang seryosong muling pagsasanay. Kaya nagsimula akong maghanap ng mas simple, kawili-wiling mga paraan upang lumipat at maging matagumpay. Paano ito?  O ang aking unang proyekto - 1Sinubukan ko ang aking kamay bilang isang tattoo artist (ito ay nangangailangan ng mahalagang walang kaalaman sa wika), ngunit iyon ay isang kuwento para sa isa pang araw. Pagkatapos ay ipinakilala ako ng aking katrabaho na kaibigan sa CodeGym. Sa una ay nag-aalinlangan ako sa mga pangako na gagawin akong ganap na programmer sa pamamagitan ng paglalaro ng isang laro at sa ganoong katamtamang presyo. Ngunit pagkatapos ay nakakuha ako ng ilang pera sa kaarawan (hindi napapailalim sa "buwis sa pamilya"), at hinarap ang pagpili sa pagitan ng WoW at CodeGym... Buweno, salamat sa isang napapanahong diskwento, ang mga kaliskis ay napunta sa tamang direksyon, at narito ako. Gaya ng dapat alam na nating lahat, ang CodeGym ay 90% purong pagsasanay. Matuto kang lutasin ang mga gawain. Matuto kang hanapin ang kaalamang kulang sa iyo sa Internet. Ang lahat ng ito ay mabuti, ngunit para sa 15 na antas ay hindi ko maalis ang pakiramdam na may nawawala akong isang bagay na kukumpleto sa larawan para sa akin. Naisip kong sumali sa GeekBrains, ngunit (marahil sa kabutihang palad) ang parehong kaibigan ay tumigil sa akin sa oras at ipinakilala ako sa Udemy. Nang buksan ko itong repositoryo ng kaalaman, sinabayan ko ang mga panawagan: " Psst, friend. Newbie ka ba?" May discount para sa iyo... for only 3 days — Huwag palampasin ang pagkakataong ito! " Nang maglaon ay naging malinaw na palaging may mga diskwento, ngunit hindi iyon ang punto. Agad akong bumili ng isang pakete na may dalawang kurso: Java mula 0 hanggang Pro at isang katulad na bagay para sa Android. At dito nagsisimula ang aming kuwento.

Tagumpay o kabiguan?

Habang nagsusumikap ako sa kursong Android, nakakuha ako ng takdang-aralin upang makagawa ng isang proyekto batay sa aking bagong kaalaman. Ako ang uri ng tao na naniniwala na ang paggawa ng isang bagay sa simple o ordinaryong paraan ay parang hindi ginagawa. Kaya, agad kong sinimulan na gawing kumplikado ang aking buhay. Lumingon ako sa taong kilala ko na may pinakamaunlad at matingkad na imahinasyon. Ito ang aking mahal na asawa (oo, babasahin din niya ang artikulong ito). Iminungkahi niya ang paggawa ng isang app na may mga larawan ng mga hayop, na gumagawa ng kaukulang mga tunog ng hayop kapag sila ay na-click. Ito ay isang magandang ideya, ngunit medyo simple pa rin. Isinasaalang-alang ang mungkahing ito bilang pundasyon, nagsimula akong mangatuwiran:
  • Ang app na ito ay dapat na higit pa sa himulmol (isang bagay na pagtawanan at kalimutan). Gusto kong may halaga ito. Halimbawa, sa pamamagitan ng pagtuturo ng isang bagay.
  • Hayaan itong maging ang alpabeto sa mga hayop. Ngunit hindi lamang anumang alpabeto, ngunit ang alpabetong Ingles!
  • At hindi lamang mga hayop, ngunit mga bihirang hayop na kakaunti ang nakakaalam, upang palawakin ang kanilang mga abot-tanaw!
  • At dapat mayroong animation, audio reproduction ng mga pangalan ng mga titik, at mga pangalan ng mga hayop sa English at Russian!
Ngayon iyon ang tinatawag kong homework (nakalimutan kong banggitin na bago ang CodeGym ay hindi ako pamilyar sa programming. At wala pang 3-4 na buwan ang lumipas mula sa sandaling nagsimula akong aktibong gumamit ng website hanggang sa sandaling sinimulan ko ang proyekto. Kaya, kung ikaw Beterano ka na sa lugar na ito at iniisip mo, " Pff... May nagbago ba mula sa orihinal na bersyon? ", I assure you, yes, it changed)! Ang unang paghihirap na naranasan ko ay , kakaiba, ang pagsisimula ng proyekto. Sa lumalabas, hindi lang mga author ang nakakaranas ng "writers' block"... Pero dahil psychologist ako, alam ko ang solusyon sa problema ko. Kailangan mo lang simulan ang paggawa ng isang bagay. Gumawa ng kahit isang maliit na hakbang, at pagkatapos ay huwag huminto. Kaya nagsimula ako sa isang abstract Letter class . Ang klase na ito ay may ilang mga patlang at pagkatapos ay magkakaroon ng iba't ibang mga pamamaraan. Sa totoo lang, wala akong ideya kung ano ang gagawin ko dito, ngunit kailangan kong gumawa ng isang bagay. Pagkatapos, gumawa ako ng mga klase para sa bawat letra, ginagawa silang magmana ng abstract na klase. Ito ay tumagal ng maraming oras, at sa unang araw ko sa trabaho ay natapos na. Kinabukasan ay tinanggal ko ang proyekto at nagsimulang muli. Binuksan ko lang ang proyekto para alalahanin kung ano ang nagbago mula noong inilarawan ko sa itaas. At gusto kong sabihin na ang lahat ay mukhang mas mahusay kapag natapos ko, ngunit hindi. Talagang mayroon pa ring mga klase para sa bawat titik... Ito ay partikular na dahil sa ang katunayan na ako ay itinalaga sa takdang-aralin na ito halos sa pinakadulo simula ng kurso sa Android, at sa aking sarili kailangan kong alamin ang mga intricacies ng relasyon sa pagitan ng isang aktibidad (ang aktibong window, o katulad niyan) na may klase. At wala akong nakita o naisip na anuman maliban sa clumsy na paraan ng pag-uugnay ng isang partikular na klase sa isang partikular na aktibidad. Anyway, ang isa sa mga prinsipyo ng programming (iwasan ang pag-uulit) ay nilabag ng 26 na beses. Una, ganap kong (parang sa akin) ipinatupad ang unang dalawang titik, gumawa ng magaspang na UI na binubuo ng dalawang menu (isang pangkalahatang menu na maaaring kailanganin kapag pinalawak ang pag-andar, at isang talaan ng mga nilalaman, kung saan maaari kang lumipat sa anumang ng mga titik). Hindi naman talaga ako nahirapan sa programming. Habang ipinapatupad ko ang aking independiyenteng proyekto, maraming bagay, tulad ng mga ugnayan sa pagitan ng mga klase, pamamaraan, atbp., ay naging malinaw at ang proyekto mismo ay naging mahusay na kasanayan para sa pagsasama-sama ng lahat ng kaalaman na natamo ko hindi lamang tungkol sa Android, kundi pati na rin sa Java. Ang pangalawang kahirapan ayna lumipat ang sulat kasabay ng narinig ang pangalan nito. Ang makinis na paglipat (shading) ay ginawang tila ang tunog ay nauna sa larawan. Ngunit kapag naglagay ako ng isang pagkaantala sa tunog, ang buong thread ay nagyelo - ang paglipat ay ipinagpaliban lamang ng dami ng pagkaantala, na gumagawa ng parehong hindi kanais-nais na epekto, pagkatapos lamang. Pagkatapos ay gumawa ako ng matapang na desisyon na gawing multithreaded ang aking programa! Inilipat ko ang pag-playback ng tunog sa isang hiwalay na thread, na may pagkaantala na sapat ang haba para ma-load ang larawan. Ito ay hanggang sa multithreading, ngunit ipinagmamalaki kong sabihin na nagsusulat ako ng isang multithreaded na app. Ang huling kahirapan ay ang pagpili ng mga angkop na materyales. Naisip mo ba na walang hayop ang Ingles para sa letrang X (mayroon pala)? Kinailangan kong kilalanin ang 26 na hayop at hanapin ang kanilang mga imahe at tunog, at itala ang mga pangalan ng 26 na titik at 26 na hayop. Kung nagtatrabaho ako sa isang koponan, malinaw na iniwan ko ang bahaging ito ng trabaho para sa ibang tao. Ang ganitong mga monotonous na sandali ay pumapatay sa pagnanais na magtrabaho, at kapag walang pagnanais, may mga dahilan. Anyway, ang yugtong ito ay tumagal ng halos 2 linggo (ginawa ko ang proyekto sa aking bakanteng oras at kapag wala akong mga dahilan). Ang proyekto ay idineklara na kumpleto humigit-kumulang 3-4 na linggo matapos itong magsimula.

Sulit ba ang patuloy na pag-aaral ng programming?

Sumunod ang pagkadismaya. Una, hindi ako pinayagang mag-publish ng aking takdang-aralin sa kurso. Ginawa ko ang trabaho at naglagay ng isang toneladang pagsisikap na magpakitang-gilas, ngunit hindi ako pinayagan. Pangalawa, gumana nang maayos ang aking app sa emulator at sa aking telepono. Sa binalak kong gawin, hindi ako nagpatupad ng animation, dahil dumura ako at nagpasyang tapusin ko ito kapag napagdaanan ko na ang mga nauugnay na aralin sa kurso. Ngunit nang magsimula akong mag-isip tungkol sa pamamahagi ng aplikasyon, nakatagpo ako ng isang kawili-wiling problema. Pagkatapos gumamit ng isa pang telepono at tablet upang tingnan kung ang aking app ay na-optimize para sa iba't ibang screen at iba't ibang bersyon ng Android, nakaranas ako ng hindi kilalang error. Ang programa ay nagsasara lamang kapag lumipat sa isang liham. Sinubukan kong hanapin ang ugat ng problema, sinuri ang mga log, na, kumpara sa maigsi na mga eksepsiyon sa Java, ay tila mas katulad ng hocus-pocus. Hindi ako nakatulong sa Internet. Sa isang banda, gumawa ako ng gumaganang app na gustong laruin ng mga anak ko. Sa kabilang banda, ito ay gumagana lamang sa aking telepono. Ito ang nagpapatawa sa akin. Siyempre, nalungkot ako, ngunit sa pag-iisip tungkol dito, napagpasyahan ko na nakakuha ako ng higit pa kaysa sa nawala ko:
  • Naging mas mahusay ako sa pagharap sa mga kritisismo sa aking trabaho.
  • Napagtanto ko ang halaga ng kaalaman at karanasan sa disenyo ng software.
  • Pinalakas ko ang aking pagpapahalaga sa sarili sa programming.
  • Napagtanto ko ang pangangailangang pag-aralan ang mga pattern ng disenyo at ang mga pangunahing kaalaman sa refactoring.
  • At gaya ng sinabi ko, ngayon ay mayroon na akong sariling app, na wala sa iba at malamang na hinding-hindi magkakaroon. =)
"Alam kong wala akong alam". Sa pamamagitan ng pagpapatupad ng mga proyektong pang-edukasyon tulad nito, mayroon kang isang magandang pagkakataon upang suriin kung ano ang alam mo kung saan mayroon kang mga puwang sa iyong kaalaman, at tukuyin ang mga paraan upang umunlad pa. Sulit ba ang patuloy na pag-aaral ng programming kung nauunawaan mo na ang lahat ng iyong pagsisikap sa mahabang yugto ng iyong buhay ay inilipat ka mula 0 hanggang +0.001? Para sa akin, ang sagot ay oo. ikaw naman?