Dasturchi bo’lish uchun qaysi birini tanlash kerak
Bu maqola software engineer yoki dasturchi bo’lishga qiziqib, qaysi birini o’rganay deb yurgan (Android, iOS, web, backend, frontend, devOps, AI/ML, gaming, robotics, cloud engineering va h.klar) ukalarimiz, singillarimizga.
Shunchaki maslahat sifatida yozilgan, qanday qabul qilish o’zingizga bog’liq. Yaqinda endi o’rganishni boshlagan bir nechta talabalardan ko’p savollar, qaysi birini texnologiyalarni o’rgangan yaxshi va qaysi biriga talab juda ko’p degan savollarni juda ko’plab so’rashdi. Qisqa qilib javob berishga harakat qilaman. Hammasi bir xil narsa, faqat nomlari boshqacha lol 😂 .
Aslida, dasturchilikni yoki software engineerlikni sub-sohalari (sub-field / division) juda ko’p bo’lgani bilan, unchalik juda keng soha emas, hozircha. Ya’ni bu software engineerlikda, fundamental levelda asosan ikkita funksiyadan iborat:
1) data storage (ma’lumotlarni saqlash);
2) data processing (va shu ma’lumotlarni process qilish).
Bo’ldi. Ya’ni har qanday software engineer yoki dasturchini qiladigan ishi, yo’nalishidan qat’iy nazar shu ikkita oddiy funksiyani bajarishdan iborat va shu funksiyani bajaradigan software yozishdan iborat. O’sha Android / iOS engineering, data engineering, web / backend engineering, SRE / DevOps, ML engineering, game engineering, robotics va h.k sohalardagi dasturchilarni qiladigan ishi, shu borib 2 ikkita funksiyani bajarishga boradi: data storage & data processing.
Fundamental levelda, Android / iOS / web / frontend engineering yoki o’xshash soha bilan shug’ullanadigan dasturchilarni ishi — data (ma’lumot)ni foydanavchiga yetkazib berish (data serving) qaysidir bir storagedan olib yoki foydalanuvchidan ma’lumotni olib qaysidir bir storagega saqlab qo’yish — data processing & storage.
Backend engineering: o’sib boruvchi (scalable) datalarni saqlaydigan (store) va shu datalarni process qiladigan, resilient va robust yani mustahkam interface yaratish — data storage & processing.
SRE / DevOps: Shu datalarni xavfsiz (secure) va ishonchli (reliable) tarzda foydalanuvchilarga yetkazib berishni ta’minlash — data processing.
ML engineering: Datalarga yoki ulardan intelligence berish yoki olish — data storage & processing.
Game engineering: graphic datalarni foydalanuvchiga yetkazib berish (data processing) va ulardan shu graphic datalar ustida data processingni amalga oshirish uchun inputlar olish — data processing.
Data / database engineering: Qanday qilib, qaysi formatda yoki shalkda bu o’sib boruvchi (scalable) data va ma’lumotlarni saqlash — data storage.
Qaysi bir sub-fieldni tanlashdan qat’iy nazar, qiladigan ishingiz shu datalarni storage qilish yoki processing qilishdan iborat bo’ladi. IT yoki software engineeringda har qanday qiladigan ishingiz shu 2 ta funksiyaga borib taqaladi. Va bu har birini ishini juda osonlashtirish uchun har xil texnologiyalar o’ylab topilgan va mavjud.
Masalan, ma’lumotlarni turi va format va undan kelajakdan qanday foydalanishga va access qilinishiga qarab turli xil databaselar (relational, graph, distributed centralized, decentralized, operation va etc) va ularni qanday qilib foydalanuvchilarga yetkazib berilishiga qarab turli xil protocollar (ftp, http/s, tpc, udp, pop, smtp va h.k) va bu datalarga qanday access qilinishiga qarab har xil devicelarga programming qilish yani mobile — Android / iOS, TV, IoT devices, game consoles, laptop, desktop, airplane dashboard, pen va xatto doorbell knob. Ma’lumotlarni saqlashdan (data storagedan) boshlab uni processing qilib, sotishgacha juda ko’p millionlab misollar keltirsa bo’ladi.
Engineeringlikni sub-sohasini, sub-field tanlayotganda siz qay holatda ma’lumotlar bilan ishlashingizga qiziqishingizga qarab tanlasangiz bo’ladi. Va asosiysi, sohangizda qanday qilib ma’lumolarni most efficiently process va storage qilish, yani maximum tezlikda, minimum resourcelardan foydalangan holatda ma’lumotni yani datani storage & process qilishni o’rganishingiz kerak. Bu company uchun ham, foydalanuvchi uchun ham foydali.
Bu data process yoki data storage qiladigan texnologiyalarni o’rganib olish juda juda oson va hammasi onlineda mavjud. Databasedan tortib IoT texnologiyalargacha.
Dasturchilar ko’payayotgan sari, yaxshi dasturchilarga bo’lgan talab pasayib ozgina, faqat zo’r dasturchilarga talab ko’payib bormoqda. Farqi shundaki:
1. Yaxshi dasturchi bu o’zining texnologiyalarini ishlatishni biladi yani databaselarni yoki qandaydir protocollarni yoki shunga o’xshash. Zo’r dasturchi shu texnologiyalarni ishlatishni biladi va qachon qayerda nima maqsadda ishlashda to’g’ri qaror qabul qila oladi;
2. Yaxshi dasturchi berilgan muamoni yechishni yoki unga yechim topishni biladi. Zo’r dasturchi berilgan muamoni eng to’g’ri yo’lda va eng efficient yo’lda yechishni biladi yoki harakat qiladi. Aytaylik, 1 petabyte ma’lumotni processing yoki storage qilish uchun, yaxshi dasturchi 2 GB memory va 30 sekund ketadigan va ishlaydigan dastur yozishi mumkin. Ammo, zo’r dasturchi xuddi shu shkaladagi ma’lumotni to’g’ri algorithm va techniquelardan foydalanib 80 % kamroq resourcelardan foydalanib, 80% tezroq ishlaydigan dastur yozishi mumkin va bu juda muhim kompaniyani o’sishi uchun va foydalanuvchini qoniqtirish uchun.
3. Yaxshi dasturchilar o’zi ishlatadigan texnologiyalarni yaxshi biladi, zo’r dasturchilar fundamental (mathematics, strong computer science, critical thinking) bilimlari kuchli va shuning uchun texnologiyalarni ham yaxshi biladi. Va yaxshi dasturchilar yangi texnologiyalarni o’rgana oladi lekin uzoq muddatda (haftalar, oylar) va zo’r dasturchi xuddi shu texnologiyalarni kunlar yoki maximum haftalarda o’rgana olishadi, fundamental bilimlarni kuchli bo’lgani uchun. Va bu o’z o’zidan companyni resourcelarni kamroq sarf bo’lishidan va productni tezroq tugalishiga olib keladi.
Va millionlab shundek misollarni keltirishimiz mumkin.
Manba:
Umumiy Dasturlash
Dasturchi bo’lish uchun qaysi birini tanlash kerak