Би Google HashCode World Championship Finals 2017 тэмцээнд бэлдэж байсан. Энэ бол Google-ээс зохион байгуулдаг алгоритмын бодлоготой хамгийн том тэмцээн юм.
Би есдүгээр ангиасаа эхлэн C++ хэл сурч эхэлсэн. Би програмчлал, алгоритм, өгөгдлийн бүтцийн талаар юу ч мэдэхгүй байсан. Хэзээ нэгэн цагт би кодын эхний мөрийг бичсэн. Долоон сарын дараа програмчлалын уралдаан тэнгэрийн хаяанд иржээ. Би програмчлалын сурах арга барил маань хэр үр дүнтэй болохыг харахыг хүссэн. Энэ бол төгс боломж байсан.
Хоёр өдөр үргэлжилсэн өрсөлдөөний үр дүнд би алтан медаль хүртлээ.
Би цочирдсон. Би 5 жилийн туршлагатай өрсөлдөгчдөөс түрүүлж байсан. Би шаргуу ажилласан гэдгээ мэдэж байсан ч энэ амжилт миний бүх хүлээлтээс давсан. Спортын нэвтрүүлэг бол миний сэдэв гэдгийг ойлгоод энэ сэдэв рүү толгойгоо гашилгасан.
Намайг амжилтанд хүргэсэн зүйлийг би мэдэж байгаа бөгөөд та бүхэнтэй хуваалцахыг хүсч байна.
Нийтлэлийг EDISON програм хангамжийн дэмжлэгтэйгээр орчуулсанпрограмистуудын эрүүл мэнд, өглөөний цайнд санаа тавьдаг Тэгээдзахиалгат програм хангамжийг боловсруулдаг .
Аль програмчлалын хэлийг сонгох вэ
- C++ - Маш их зөвлөж байна! Тэр маш хурдан. STL-ийн улмаас алгоритмыг хэрэгжүүлэхэд бага хугацаа шаардагдана. С++ хэлийг бүх тэмцээнд хүлээн зөвшөөрдөг. Би анхны кодоо C++ хэл дээр бичсэн.
- C - STL-ийн ачаар C++ хэлийг сур. Хэрэв та С-г мэддэг бол C++ хэл дээр ч програмчилж болно.
- Java бол удаан програмчлалын хэл юм. Энэ нь Big Integer ангитай боловч энэ нь танд нэг их тус болохгүй. Тэмцээнд цаг хугацааны хязгаарлалт байгаа бол Java-ийн тусламжтайгаар та үүнийг давах нь гарцаагүй. Java хэлийг бүх тэмцээнд хүлээн зөвшөөрдөггүй.
Та хаана дасгал хийж болох вэ
Би санал болгож байна
Эхлээд та үндсэн мэдлэгээ сайжруулах хэрэгтэй
Хэлний синтаксийг дассан бол зарим нэг бэрхшээлийг даван туулах хэрэгтэй. Дадлага хийх шаардлагатай энгийн асуудлуудаас эхэл. Энэ үе шатанд гол зүйл бол програмчлалын хэв маягаа тодорхойлох явдал юм. Магадгүй та маш их зайтай код бичих дуртай, магадгүй та дургүй байж магадгүй. Та хашилтыг "хэрэв"-тэй ижил мөрөнд эсвэл тусдаа мөрөнд хийж болно.
Та програмчлалын хэв маягаа олох хэрэгтэй, учир нь энэ бол ТАНЫ хэв маяг юм.
Та үүнийг хайхдаа хоёр үндсэн зарчмыг санаарай:
- Таны кодыг хэрэгжүүлэхэд хялбар байх ёстой. Бодсон шийдлээ хэрэгжүүлэхэд таатай байх ёстой. Яагаад? Учир нь тэмцээний үеэр таны хамгийн сүүлд хүссэн зүйл бол кодоо төөрөлдүүлэх явдал юм. Кодын хэрэгжилтийг хэрхэн хялбарчлах талаар бодоход 5 минут зарцуулснаас илүү 10 минут зарцуулах нь үргэлж дээр юм.
- Таны кодыг уншихад хялбар байх ёстой. Кодыг уншихад хялбар бол дибаг хийхэд хялбар байдаг. Алдаа байнга гардаг гэдгийг хүлээн зөвшөөрье. Чамд 10 минут дутуу байхад тэр хараал идсэн алдаагаа олж чадахгүй байхад тэр мэдрэмжийг мэдэх үү? Та мэдээжийн хэрэг. Ийм нөхцөл байдлаас зайлсхийхийн тулд ойлгомжтой код бичнэ үү. Та дибаг хийж эхэлмэгц код нь энгийн бөгөөд ойлгоход хялбар мэт санагдах болно.
Хөгжлийн ур чадвараа хэрхэн сайжруулах вэ
Дасгал хийх, дадлага хийх, илүү их дадлага хийх. Би танд хамгийн шийдвэрлэх боломжтой эхний 250 асуудлыг шийдэхийг зөвлөж байна
"Энэ асуудал надад хэтэрхий хэцүү байна, би дараагийн асуудлыг шийдэхийг хичээх болно" гэж битгий хэлээрэй. Хожигдсон хүмүүс ингэж боддог.
Цаас, харандаа ав. Үүний тухай бодож үз. Магадгүй та шийдлийг олох болно, магадгүй үгүй. Хамгийн багадаа та алгоритмын сэтгэлгээг хөгжүүлэх болно. Хэрэв та нэг цагийн дотор шийдлийг гаргаж чадахгүй бол форум эсвэл нийтлэлээс бэлэн шийдлийг хайж олоорой.
Энэ арга барилаар та юунд хүрэх вэ? Код ашиглан санаагаа хурдан хэрэгжүүлж сур. Мөн сонгодог бодлого, алгоритмуудыг судлах.
Хоёрдугаарт, та алгоритм, өгөгдлийн бүтцийг эзэмших ёстой
Шаталсан арга барилыг баримтал. Яаж алхахаа мэдэхгүй гүйж эхэлсэн үү? Үгүй Та бат бөх суурьгүй тэнгэр баганадсан барилга барьж чадах уу? Дахиад үгүй шүү.
Та суралцах зам дээрх алхмуудыг үл тоомсорлож болохгүй. Хэрэв та тэдгээрийг үл тоомсорловол мэдлэгийн цоорхойтой үлдэх болно. Цаг хугацаа өнгөрөхөд тэд улам дордох болно.
Үндсэн алгоритмууд болон өгөгдлийн бүтцээс эхэл
Эхлэхэд хэцүү. Магадгүй та эхлээд юу сурахаа мэдэхгүй байгаа болохоор тэр байх. Тийм ч учраас
Хялбар асуудлыг шийдэхийн төлөө ажиллавал хэзээ ч сайжрахгүй.
Мэдэхгүй зүйлээ ойлгох хамгийн үр дүнтэй арга бол практик дээр мэдрэх явдал юм. Ингээд л би сурсан. Хэцүү даалгавар сонгосноор өмнө нь сонсож байгаагүй олон шинэ арга техникийг сурсан.
Таны ажиллаж буй гурав дахь асуудал бүр танд шинэ зүйлийг зааж өгөх ёстой. Асуудлыг сонгохдоо илүү болгоомжтой байгаарай. Илүү хэцүү асуудлуудыг сонго!
SPOJ-ийн эдгээр 250 асуудлыг дуусгасны дараа та спортын програмчлалын үндсэн сэдвүүдийн талаар үндсэн ойлголттой болно. Үндсэн алгоритмуудын цаадах логикийн талаар гүн гүнзгий ойлголттой бол өндөр түвшний алгоритмууд илүү төвөгтэй мэт санагдах болно. Ингэснээр та мэдлэгээ дээд зэргээр ашиглах боломжтой.
Үндсэн сэдэв бүрийг гүнзгийрүүлэн судал
Хэрэв та шинэ зүйл сурсны дараа мэдлэгээ бататгахгүй бол бүх зүйлийг хурдан мартдаг.
Би шинэ алгоритм сурсны дараа түүнийг практикт ашиглахыг зөвлөж байна. Үүнийг 2-3 даалгавраар гүйцэтгээрэй. SPOJ-ээс алгоритмын шошгыг хай. Тэнд та энэ алгоритмыг шийдвэрлэх шаардлагатай асуудлуудыг олох болно. Эдгээр асуудлыг эхлээд шийд.
Динамик програмчлалын мастер, учир нь энэ нь таныг ялалтад хүргэх болно
Миний туршлагаас харахад тэмцээн болгонд дор хаяж нэг асуудал гардаг
Мөн энэ сайн байна. Учир нь та динамик програмчлалыг ойлговол хожно.
Би динамик програмчлалд дуртай, энэ бол миний дуртай сэдэв. Динамик програмчлалын нууц нь зөвхөн орон нутгийн бус дэлхийн хэмжээнд оновчтой сонголт хийх явдал юм. Та асуудлыг илүү энгийн дэд асуудал болгон задлах ёстой. Эдгээр дэд бодлого бүрийг зөвхөн нэг удаа шийд. Дараа нь шийдэгдсэн дэд асуудлуудыг нэгтгэсэн шийдлийг бий болго.
Шинэ үзэл баримтлалыг сурч байхдаа шалгаж үзээрэй
Шаргуу ажилла
Олон жил бэлтгэл хийхгүйгээр олимпод түрүүлдэг тамирчдын талаар та сонсож байсан уу? Би биш.
Жил бүрийн есдүгээр сард компьютерийн олимпиадын бэлтгэл ажил эхэлж, дөрөвдүгээр сард дуусдаг.
Энэ 8 сарын турш би өдөр бүр 5 цаг дасгал хийсэн.
Тийм ээ, би эдгээр 5 цагийг зөвхөн алгоритмын бодлого шийдвэрлэхэд зарцуулсан. 8 байтугай 10 цаг хүртэл бэлтгэл хийж байсан үеээ санаж байна. Яагаад? Учир нь надад таалагдсан. Би өдөр бүр сургуулиасаа буцаж ирээд шууд унтлагын өрөөнд орж, компьютерийн ард суугаад шинэ асуудалд дүн шинжилгээ хийж эхлэв. Эсвэл би энэ асуудлыг шийдэхийн тулд мэдэх шаардлагатай шинэ алгоритмыг сурч байсан.
Хэрэв та ялахыг хүсч байгаа бол үүнийг хийх хэрэгтэй. Асуудлыг сонгоод, түүнийгээ үргэлжлүүлээрэй. Супермаркет руу явж байхдаа эсвэл жолоо барьж байхдаа энэ тухай бодоорой.
Унтах үед таны тархи тухайн өдөр цуглуулсан мэдээллийг задалдаг гэдгийг та мэдэх үү? Тэр номын тавиур дээр цагаан толгойн үсгийн дарааллаар ном овоолж байгаа бололтой. Үндсэндээ таны тархи танд тулгарч буй янз бүрийн асуудлын талаар боддог.
Үүнийг чадварлаг ашиглаж болно. Унтахынхаа өмнө хэцүү асуудлыг уншиж, түүнийг шийдвэрлэхэд юу хэрэгтэйг санаарай. Энэ үе шатанд та шийдлийг өөрөө хайх шаардлагагүй. Орондоо ор. Таны тархи энэ асуудлыг боловсруулж эхэлнэ. Та сэрэхдээ унтаж байхдаа шийдлийг олсон гэдгээ мэдээд гайхах болно.
Та өөрөө туршаад үзээрэй. Яг л ид шид шиг.
Би видео блог үүсгэсэн
Энэ богино догол мөр нь спортын хөтөлбөртэй холбоогүй юм. Хэрэв та хорин настай бөгөөд намайг ертөнцийг хэрхэн харж байгааг гайхаж байгаа бол сонирхоод үзээрэй
Ухаалаг ажилла
Энэ бол амжилтын нууц. Танд зорилго хэрэгтэй.
Бид бол хүмүүс бөгөөд үүнд дуртай
Хэрхэн хойшлуулах вэ
Өөртөө зорилго тавь. Та үргэлж шинэ зүйл сурч болох сонирхолтой асуудлуудыг олох болно (дээр дурдсан эх сурвалжуудыг үзээрэй). Гэхдээ эдгээр асуудлыг зүгээр нэг уншаад зогсохгүй шийдэх хэрэгтэй.
Тиймээс би хойшлуулалтыг хэрхэн даван туулж чадсаныг энд харуулав. Би цаасан хуанли эхлүүлж, өдөр бүр шийдэхийг хүссэн асуудлаа дүүргэсэн. Би үргэлж хоёр өдрийн өмнө асуудлыг бөглөдөг байсан. Тиймээс би дараагийн өдрүүдэд цагаа хэрхэн зохицуулахаа мэддэг болсон.
Тиймээс би үргэлж урам зоригтой байсан. Би зарим асуудлыг шийдэж, дараагийн өдрүүдийг хуанли дээр бөглөх шинэ асуудлуудыг хайж олох хэрэгтэй болсон. Шийдвэрлэсэн асуудлуудыг даван туулах нь сайхан санагддаг. Чамд ч бас таалагдаж байгааг би мэднэ.
Өөрийн цаасан хуанли аваарай. Маргааш хийхээ мартчихаар өөр ажлын жагсаалт гар утсан дээрээ бүү хий.
Хэрхэн үр дүнтэй дибаг хийх вэ
Та мэргэжлийн хүн болохыг хүсч байна уу? Хэрэв тийм бол та "оюун ухаандаа дибаг хийх" хэрэгтэй.
Энэ нь дибаг хийх шаардлагагүй тул миний мэдэх хамгийн үр дүнтэй дибаг хийх арга юм. Таны тархи нэг дор олон кодын салбарыг судалж, кодтой харьцуулахад илүү өргөн хүрээтэй тоймыг өгдөг
Та өөрийгөө шатар тоглодог, 3 довтолгооны өмнө боддог их мастертай зүйрлэж болно.
Би энэ аргыг зөвхөн анхны хамгаалалтын шугам болгон ашигладаг. Дараа нь би жинхэнэ дибаглагч ашигладаг.
Толгойдоо хэрхэн дибаг хийхийг сурахын тулд та дадлага хийх хэрэгтэй. Асуудлын шийдлийг баталгаажуулж, "буруу хариулт" авах үед дибаг хийх товчлуур руу шууд очиж болохгүй. Кодыг дахин уншаад: "Энэ мөрөнд юу болж байна вэ?", "Энд байгаа "хэрэв" нь програмд хэрхэн нөлөөлдөг вэ?", "Бид давталтаас гарахад давтагч ямар утгатай вэ?"
Ингэснээр та өөрийнхөө төлөө боддог. Цаг хугацаа өнгөрөхөд та код бичиж, дибаг хийж сурах болно.
Зохиогчийн тухай
Андрей Маргелоиу бол бизнес эрхлэх, гарааны бизнес эрхлэх, гадаа амьдрах сонирхолтой програмист юм. Та түүнтэй холбоо барьж болно
Орчуулга: Диана Шеремьева
Эх сурвалж: www.habr.com