Boshqalar

Junior dasturchilarning tipik xatolari. Siz ulardan biri boʻlishingiz mumkin

Middle va senior dasturchilardan juniorlar koʻpincha qanday xatolarga yoʻl qoʻyishi haqida, shuningdek, bu xatolarni qanday chetlab oʻtish mumkinligini aytishini soʻradik.

Middle va senior dasturchilardan juniorlar koʻpincha qanday xatolarga yoʻl qoʻyishi haqida, shuningdek, bu xatolarni qanday chetlab oʻtish mumkinligini aytishini soʻradik. Quyida ularning javoblari.

Kichik dasturchilar metod va oʻzgaruvchilar nomiga kam eʼtibor beradi. Ular koʻpincha funksiyalarga vazifasini aks ettirmaydigan nomlar oʻylab topadi va natijada oʻzi yozgan narsalarda chalkashib ketadi.

Xatolar “velosiped” ixtiro qilishga oʻxshash boʻlib, dasturchilar tayyor kod oʻrniga oʻzinikini yozadi. Boshqa ogʻir ahvol — tayyor kutubxonalardan ularning ishlash mantigʻini tushunmasdan foydalanish. Eʼtiborsizlik va shoshqaloqlik tufayli yuzaga keladigan xatolar ham boʻlib turadi. Kamchiliklarning oldini olish uchun kodni katta hamkasblarga revyuga berish, amalga oshirish rejalarini ishlab chiqish boshlanishidan oldin muhokama qilish mumkin, sarosimaga tushmaslik va shoshilmaslik kerak.

Odatda kichik mutaxassislar dastur arxitekturasini loyihalashga jalb etilmaydi. Ammo shunga qaramay bu sodir boʻlsa, muvaffaqiyatli loyihalar (open source va kompaniyada ishlatiladiganlar) qanday tuzilganini sinchiklab koʻrib chiqish va ustoz bilan maslahatlashish kerak.

Git bilan ishlashda yangi boshlagan dasturchilarga xos odatiy xatolar — tarmoqlanish va birlashish metodologiyasini buzish. Jamoadagi standart va reglamentlarga soʻzsiz rioya qilish hamda nashr etishda hech qachon force atributdan foydalanmaslik kerak.

Agar bu muammo tizimli boʻlsa, dasturlashning spiral modelini oʻrganib chiqib, uni jarayonga joriy etish va ish boshida qabul qilishning aniq mezonlari (Defenition of Done) ni belgilash tavsiya qilinadi.

Agar bu dasturchining shaxsiy muammosi boʻlsa, u holda oʻzini TDDʼda sinab koʻrishi, qabul qilish mezonlarini aniqlashtirishi yoki texnik qarzdagi kodni yaxshilash vazifalarini bajarishga oʻtishi mumkin. Shuningdek, mukammallikka qoʻshadigan hech narsa boʻlmaganda emas, balki olib tashlanadigan hech narsa qolmaganida erishishni yodda tutamiz.

Oʻzimizga bildirilgan tanbehlarni toʻgʻri qabul qilolmasak, hatto neytral soʻzlar ham noxush taʼsir qilishi mumkin. Konstruktiv tanqidni subyektiv baholardan ajratishni oʻrganish kerak. Bu mavzu boʻyicha foydali kitob — D. Stoun va Sh.Xin hammuallifligidagi “Fikr-mulohazalar uchun rahmat”.

Ilovalarning ish unumdorligi bilan bogʻliq muammolarning oldini olish uchun unga dastlabki bosqichda kiritilishi mumkin boʻlgan narsalar — mikroservis arxitekturasi, kutubxona kodi, dastur patternlaridan foydalanish tavsiya etiladi.

Dasturlashning asosiy tamoyillarini oʻrganish muhim ahamiyatga ega. Yaxshi kod nafaqat ishlaydi, balki uni qoʻllab-quvvatlash va oʻzgarishlarga moslashtirish imkoni boʻladi. Dasturchilarning dasturlashning asosiy tamoyillariga eʼtiborsizligi oqibatida kod izchilligi yoʻqoladi va yakuniy mahsulot sifati pasayadi.

Motivatsiyani yoʻqotmasdan rivojlanishda davom etishning eng oson usuli bu — xatolarga oʻsish va rivojlanish imkoniyati sifatida qarashni boshlash. Seniorlar oʻzining muvaffaqiyatsizliklari haqida hikoya qiladigan Fails Nightʼga boring, balki bu sizni ilhomlantirar!

Yangi boshlayotganlar koʻpincha jamoaga qoʻshilish va yangi loyihani tushunishda muammolarga duch keladi. Kishi ish tartibiga muvofiq ishlashga odatlanishi va kompaniyadagi ichki jarayonlarni tushunib olishi qiyin. Shugʻullanish kerak boʻlgan loyihada katta kod bazasining mavjudligi va dasturlashdagi dastlabki bosqichda oʻrganilmaydigan turli xil yondashuvlar tufayli qiyinchiliklar tugʻilishi mumkin.

Juniorlar koʻpincha kod uslubi yoki arxitekturaga oid yondashuv va dasturlash tamoyillarini bilmaslik bilan bogʻliq oddiy xatolarga yoʻl qoʻyadi. Bunday muammolarni chetlab oʻtish uchun CI\CD (uzluksiz integratsiya) dan foydalanish maqsadga muvofiq. Bu metodologiya natijasida tegishli linterlar ishga tushiriladi va kod testdan oʻtkaziladi.

  • Yangi boshlayotgan dasturchilar xotirani boshqarish bilan bogʻliq muammolarga duch kelishi mumkin. Bu xotira qoʻlda boshqariladigan dasturlash tillari — C yoki C++ʼga xosdir. 
  • Qiyinchiliklarni algoritmlardagi xatolarni aniqlash va tuzatish yuzaga keltirishi mumkin. Bu aniqlash qiyin boʻlgan mantiqiy xatolar bilan bogʻliq. 
  • Shuningdek, tushunish va sozlash uchun rekursiv algoritmlar ham qiyinchilik keltirib chiqarishi mumkin. Ayniqsa, agar yangi boshlovchida bazaviy holatlar va rekursiyadan chiqish borasida sezgi shakllanib ulgurmagan boʻlsa. 
  • Junior mutaxassislar koʻpincha maʼlum bir vazifa uchun eng samarali maʼlumotlar strukturasini qanday tanlashni bilmaydi. Bu kodni murakkablashtiradigan va dasturlash jarayonini uzaytiradigan samarasiz yechimlarga olib kelishi mumkin.

 

  • Yangi boshlayotgan dasturchilar arxitektura yechimlarining ish unumdorligi va masshtablashish bilan bogʻliq muammolarni nazardan chetda qoldirishi mumkin. Bu koʻpincha kelajakda muammolarga olib keladi, chunki ishga tushirilgan yechimni takomillashtirishning iloji boʻlmaydi va kodni noldan qayta yozish kerak boʻladi. 
  • Tajribasiz mutaxassislar asosiy eʼtiborni arxitekturaning texnik jihatlariga qaratadi. Shu bilan birga, ular mijozning biznes talablari va foydalanuvchi ehtiyojlarini tushunish muhimligiga yetarlicha baho bermaydi.
  • Juniorlarning yana bir muammosi – SOLID, DRY, KISS kabi dasturlash tamoyillarini yetarli darajada tushunmasligi. Ular ortiqcha narsa yozmaslikka, osonroq va tushunarli qilishga yordam beradi.

Asosiy muammo shundaki, Gitʼdagi ishlar bazaviy darajada olib boriladi. Yangi boshlayotgan dasturchilar dasturlash tarixini toza saqlashga yordam beradigan rebase yoki squash buyrugʻini bilmaydi.

Koʻpincha ziddiyatlarni bartaraf etish va oʻzgarishlarni birlashtirish chogʻida dasturchi tayyorlagan maʼlumotlarini oʻchirib yuborishi yoki hatto yoʻqotishi mumkin boʻlgan vaziyatlar yuzaga keladi. Bunday muammolarning oldini olish uchun jamoaviy dasturlash bilan koʻproq shugʻullanish va muntazam ravishda Git hujjatlarini oʻrganish kerak.

Yangi boshlayotgan dasturchilarga ideal darajaga yetkazilgan kod mijozning biznes muammolarini hal qilishda yordam bermasligini tushuntirish kerak. Hatto kod bitta faylda, bir satrda yozilgan boʻlsa ham. Mijoz uchun uning ishga layoqati va time2market deb ataladigan narsa pasaymasligi uchun ishlab chiqarishdagi biznes talablarni amalga oshirishi muhimdir. Shuni ham tushunish kerakki, takomillashtirish ham vaqt talab etadi va perfektsionizm tufayli relizni kechiktirish mijoz bilan munosabatlarning yomonlashuviga olib kelishi mumkin.

Kod-revyu katta mutaxassisning dasturlashdagi biron-bir kamchiliklar haqidagi fikr-mulohazasini bildiradigan asosiy jarayonlardan biridir. Koʻpincha yangi boshlayotgan dasturchilar yozma birlashish soʻrovi borasidagi nasihatli sharhlarni ogʻriqli qabul qiladi. Shuni tushunish kerakki, kodni takomillashtirish boʻyicha tanqid yoki tavsiyalar malaka va professionallikka nisbatan shaxsiy haqorat sifatida qabul qilinmasligi kerak. Aksincha, bu oʻsish nuqtasi boʻlib, rivojlanish va katta dasturchidan tajriba orttirishda yangi bosqichdir.

Asosiy muammolardan biri maʼlumotlar bazalari va SQL bilan ishlashdir. Aksariyat hollarda yangi boshlayotganlar oʻzi ishlayotgan MBBTning nozik jihatlarini bilmaydi. Bu muammoni hal qilish uchun bunday soʻrovlarni tahlil qilish lozim.

Yana bir muammo bu — profillash, debagging vositalari haqidagi bilimlarning yoʻqligi. Har bir dasturlash tilida debagger, profillovchi kabi vositalar mavjud boʻlib, ishlab chiqarishdagi muammolarning oldini olish uchun ularni oʻrganish va ishda foydalanish kerak.

  • SOLID, DRY, KISS, YAGNI, GRASP va boshqalar kabi asosiy dasturlash tamoyillari samarali, toza va oson xizmat koʻrsatiladigan kodni yaratish uchun fundamental vosita va metodikalarni taqdim etadi. 
  • Dasturlash tamoyillarini qoʻllash kodni soddalashtirishga koʻmaklashadi, uni tushunish, modifikatsiya qilish va sozlashni osonlashtiradi. 
  • Asosiy tamoyillar haqidagi bilim loyiha uzoq muddatli qoʻllab-quvvatlanishi uchun muhim boʻlgan modulli va masshtablanuvchi kodni yaratishga yordam beradi.
  • Dasturlash tamoyillari yanada samarali kodni yaratishga yordam beradi, bu esa oʻz navbatida ilova ish unumdorligini yaxshilash imkonini beradi. 
  • Dasturlashning asosiy tamoyillariga rioya qilish xatolar ehtimolini kamaytirish va sozlash jarayonini osonlashtirishga yordam beradi. 
  • Dasturlashning asosiy tamoyillari universal boʻlib, turli dasturlash tillari hamda texnologiyalarga taalluqlidir va bu dasturchilar uchun katta ahamiyat kasb etadi. 
  • Dasturlashning nazariy bazasi va asosiy tamoyillariga eʼtiborsizlik samarasiz, qoʻllab-quvvatlash qiyin va hatto notoʻgʻri kod yaratilishiga olib kelishi mumkin. Bu esa oxir-oqibat amaliy dasturlashda xarajatlarning koʻpayishi, ilova ish unumdorligining pasayishi va xatolar ehtimolining oshishi kabi jiddiy muammolarga olib kelishi mumkin.

Har bir mutaxassis karyerasining har qanday bosqichida dasturlashda qiyinchiliklarni boshdan kechiradi. Muhimi, qiyinchiliklarni yengib oʻtish kerakligini tushunishdir, aynan shu tajriba tufayli biz mutaxassis sifatida oʻsamiz. Nima boʻlganda ham, har doim yordam beradigan va muammoni qanday hal qilishni koʻrsatadigan katta dasturchilar bor. Shuni ham tushunish kerakki, qiyinchiliklar maʼlum bir sohada bilim yetishmasligi bilan bogʻliq boʻladi. Keyingi safar yuzaga kelgan muammoni mustaqil ravishda hal qilish uchun bu mavzu boʻyicha qoʻshimcha materiallarni oʻrganish kerak. Bu kelajakda xatolarni chetlab oʻtishga va muammoga keragidan ortiq vaqt sarflamaslikka yordam beradi.

“Tushunmaslik” dan koʻra “murakkablik” atamasi oʻrinliroqdir. Qiyinchilik dasturlash tilini (DT) oʻrganayotgan har qanday yangi boshlayotgan mutaxassis asosan oddiy matematik muammolar yoki tasniflash metodlaridan foydalanishni oʻrganishi bilan bogʻliq. Amalda esa DT har kuni ishlatiladigan universal vositadir. Har kuni hal qilinishi kerak boʻlgan vazifalar doirasiga matematik, tasniflash metodlari yoki algoritmik masalalar kirmasligi mumkin. Natijada juniorda “boshqa narsani oʻrgatishdi, amalda esa umuman boshqa narsani bajarishga toʻgʻri kelyapti” ruhida notoʻgʻri taassurot paydo boʻladi.

Qisqa qilib aytadigan boʻlsak, 10 yil oldin koʻproq sintaktik xatolar uchrardi. Yangi boshlayotgan kishi odatiy: “Kompilyatorim yoki interpretatorim aytganni qilmayapti, hamma narsani sinab koʻrdim, lekin baribir u nimani xohlayotganini tushunmayapman”, — degan muammo bilan kelardi. SI oddiy kodni yozadigan, IDE yanada mukammal boʻlgan hozirgi paytda xatolarning aksariyati mantiqiydir. Dasturchi “bu hozir qanday ishlayapti va qanday ishlashi kerak” orasidagi farqni aniq tushunmaguncha, ularni chetlab oʻtib boʻlmaydi.

Algoritmlar bilan bogʻliq muammolar kam uchraydi. Talab etilgan maʼlumotlar strukturasini maʼlum bir DT turlari orqali tavsiflash bilan bogʻliq muammolar koʻproq tarqalgan.

Eng keng tarqalgan xato — birlashishdagi ziddiyatlar. Xatolarning aksariyati ziddiyatdan boshlanadi. Eng yaxshi amaliyot bu — oʻz git metodologiyangiz (qarang: git flow).

Kod-revyuga yetarlicha eʼtibor berilmasa, yangi boshlayotganlar oʻz kodlarini bir necha bor qayta yozadigan va baribir kod-revyudan oʻtolmaydigan vaziyatga osongina tushishi mumkin. Shunga teskari vaziyat — yangi boshlayotganlar guruhlarga birlashib, bir-birining pul-rekvestini doʻstona tarzda appruv qiladi va natijada sifatsiz kodga ega boʻladi. Shuning uchun koʻpincha quyidagi kabi qoidalar kiritiladi: kod-revyu boʻyicha tanqid asosli (masalan, boʻlimga havola bilan), muloyimlik bilan (haqorat qilinmagan holda), lekin bajarilish sharti bilan boʻlishi kerak. Albatta, yangi boshlayotganning har qanday kodini kamida bitta tajribaliroq hamkasbi koʻrishi kerak.

Bu yerda bir oʻxshatma oʻrinli: tegishli maʼlumotga ega boʻlmagan kishi kichik dalahovli uyini qura oladimi? Boʻlishi mumkin. Xuddi shu odam barcha resurslar mavjud boʻlganda osmonoʻpar bino qura oladimi? Yoʻq. Bino loyihasi juda puxta oʻylangan boʻlsa ham, maʼlumotsiz odam uni toʻliq oʻqib, tushuna olmaydi. Bundan tashqari, bizning universitetlarimiz faqat osmonoʻpar binolarni loyihalash va qurishni oʻrgatmaydi. Dasturlash bilan ham xuddi shunday: yangi boshlayotgan dasturchi internetdagi misollardan foydalanib, minimal ilova yarata oladimi? Ha, albatta. Ammo katta loyihalar haqida gap ketganda, uning bilimlari yetarli boʻlmasligi aniq.

Bu sizni hayratga solishi mumkin, menimcha, motivatsiya muammosining mohiyati “Aytiga qanday kirish mumkin?” degan savolga borib taqaladi. Kuzatishlarimdan misol: yangi boshlayotganlarning, ayniqsa, 30 yosh va undan katta yoshdagilar uchun motivatsiya birinchi navbatda moliyaviy xususiyatga ega boʻlib, baʼzida keskin eshitiladi. Masalan: “Nima qilishim muhim emas, buning uchun yaxshi pul toʻlanishi muhim”. Xoʻsh, 3—6 oy oʻtib nimaga ega boʻlamiz? Kishi sezilarli daromad oladi, asosiy ehtiyojlari qondiriladi va “Bu koʻnglimdagi ishmi? U bilan shugʻullanish menga yoqadimi?” kabi ichki savollar navbati keladi. Xoʻsh, bunday savollar paydo boʻlar ekan, javob aniq. Xullas, u soʻnadi. Nimani tavsiya qilish mumkin? Toʻxtamang. Hali boshlamagan boʻlsangiz, didingizga mos ixtisoslikni tanlashni boshlang. Bizning sohamiz juda ham keng, deyarli har bir kishi oʻz yoʻnalishi va shugʻullanishi qiziqarli boʻladigan faoliyatni topishi mumkin.

 

Manba: Типичные ошибки junior-разработчиков. Вы можете быть одним из них

#junior
#maslahat
Mohirdev Telegram

Telegram kanalimizga obuna bo’lishni unutmang

Obuna bo'lish
Tproger

Tproger

O'xshash maqolalar

Bosim ostida testdan oʻtkazish (testing): biz avtonom sinov tizimini qanday yaratdik?
testing
machine learning

9-aprel, 2024

Bosim ostida testdan oʻtkazish (testing): biz avtonom sinov tizimini qanday yaratdik?

Birmuncha vaqt avval dasturni ishchi nusxa (production instance)ga yuklashdan soʻng avtomatik  testdan oʻtkazish (testing) kerak boʻladigan loyihada ishlagandim. Avtomatlashtirilgan testdan oʻtkazish (testing) bu – toʻliq sinovdan oʻtkazilmasdan oldin dasturiy taʼminotga yaqinda qoʻshilgan yoki oʻzgartirilgan funksiyalar oʻz oʻrnida ishlayotganini tezkor tekshirish usuli. Bu usul batafsil testdan oʻtkazishdan avval asosiy funksiyalar ishlayotganiga amin boʻlishga yordam beradi va oʻz-oʻzidan sifatni taʼminlashdagi tezkor bosqich sanaladi. Testdan oʻtkazish sozlamalari reliz turiga qarab dinamik ravishda oʻzgarib turishi kerak, chunki frontend va bekend relizlar turli vaqtlarda chiqarilgan hamda turlicha testdan oʻtkazish sozlamalarini talab etgan boʻladi.

Maqolani o'qish
“Xato 404” atamasi nimani anglatadi? Uni qanday tuzatish mumkin?

12-iyun, 2024

“Xato 404” atamasi nimani anglatadi? Uni qanday tuzatish mumkin?

Maqolani o'qish
Scalaʼni bilish — yaxshi, Sparkʼni bilish esa majburiy. Yangi boshlayotgan va tajribali data injenerlar nimalarni bilishi kerak? Yandeks Praktikum tadqiqoti
Yumsoq ko'nikmalar
portfolio

3-may, 2024

Scalaʼni bilish — yaxshi, Sparkʼni bilish esa majburiy. Yangi boshlayotgan va tajribali data injenerlar nimalarni bilishi kerak? Yandeks Praktikum tadqiqoti

Yandeks Praktikum junior, middle va senior data injenerlar uchun eng talab yuqori boʻlgan koʻnikmalarni oʻrganib chiqdi. Kasbga kirib, unda oʻsish uchun qayerda va qanday rivojlanish kerakligini koʻrib chiqamiz.

Maqolani o'qish
Ilk React loyihamni boshlashda yoʻl qoʻygan 5 xatoyim
javascript
react

1-may, 2024

Ilk React loyihamni boshlashda yoʻl qoʻygan 5 xatoyim

Maqolani o'qish
Qanday qilib boshqa juniorlar orasida ajralib, AyTida birinchi ishni topish mumkin?
resume
junior

4-may, 2024

Qanday qilib boshqa juniorlar orasida ajralib, AyTida birinchi ishni topish mumkin?

Qanday qilib AyTi sohasida birinchi ishni topish va kompaniya taklif yuboradigan “oʻsha” mutaxassis boʻlish toʻgʻrisida hikoya qilamiz.

Maqolani o'qish