Biz texnologik kompaniyalar ochiq kodli texnologiyalar (va umuman boshqa texnologiyalar) nomlarini o‘zgartiradigan va o‘z xizmatlarini brend yoki mahsulot ostida qayta sotadigan g‘alati bir davrda yashayapmiz. Ba'zan ikkalasi ham.

Bunda hech qanday aybi yo'q HR yollovchisi bu to'lqinni qabul qilib, tajribalar yoki tajribalarni bilim sifatida qabul qila boshladi. Shunga o'xshash tarix mavjud bo'lishi mumkin, Pepsi uchun ishlaydigan oziq-ovqat muhandisini tasavvur qiling. Keyin u Coca-Cola uchun intervyu berishga qaror qiladi va savol: "Kola tayyorlashda tajribangiz bormi?". Albatta yo'q. Muhandis ichimlikni, har qanday ichimlikni tayyorlashda tajribaga ega. Ta'midan qat'i nazar!

Endi Tech Industry haqida bizda tillar ro'yxati, ramkalar ro'yxati, bulutli provayderlar ro'yxati va asboblar ro'yxati mavjud. Umuman olganda, siz tilni ramka uchun vosita orqali ishlatasiz va uni bulutli provayderga joylashtirasiz.

Katta dasturiy ta'minot muhandisi allaqachon mavjud bo'lgan barcha tillar bilan ishlamagan, barcha ramkalar bilan, barcha vositalardan foydalangan holda va bulutli provayderlar ixtiro qilgan barcha mahsulot nomlarini bilgan. AWS RDS bu shunchaki ma'lumotlar bazasi, GCP Compute bu shunchaki Virtual mashina va hokazo. Ammo bugungi ish ta'riflari haqida so'radi: siz AWSni bilasizmi? Siz allaqachon Rust-da dasturlashdingizmi? Go tilida necha yil tajribaga egasiz? Flutterda tajribangiz bormi? Bu asboblar!

Katta dasturiy ta'minot muhandisi algoritmlar, ma'lumotlar tuzilmalari va tizim dizaynlarini biladi. U serversiz funksiyalarga navbatlar yordamida uzoq davom etadigan vazifalarni yuklash uchun monolit ilovani qanday optimallashtirishni biladi, bu esa ushbu kod qismini ishga tushirish uchun to'g'ri ish vaqti dasturlariga ega konteynerdan boshqa narsa emas. Bulutli provayder muhim emas, til va hatto ramka muhim emas. Mahsulot nomi muhim emas. Ehtimol, AWS Lambda bo'lishi mumkin, lekin bu shart emas.

Bu haqiqat va ish ta'riflari va talablari nima bo'lishi haqidagi mening kelishmovchiligim tufayli, shuningdek, bu talablarni tushunmagan HR xodimi. Men yaxshi Katta dasturiy ta'minot muhandisi bo'lish uchun zarur bo'lgan bilimlarni brendlar yoki mahsulotlarsiz 7 (etti) toifaga jamlayman. Menimcha, bu ish tavsiflarida bo'lishi kerak. Tillar, ramkalar, mahsulot nomlari yoki maxsus brend vositalari emas.

1-chi - Linux (distrodan qat'iy nazar).

Internet Linux tomonidan boshqariladi. Bizda Linux qurilmalarida, serverlarida, marshrutizatorlarida, kalitlarda, sensorlarda, ulangan avtomobillarga o'rnatilgan, xulosa qilib aytganda, hamma narsada mavjud.

Katta dasturiy ta'minot muhandisi yadro qanday ishlashini, jarayonlarni qanday boshqarishini, jarayonlar qanday aloqada bo'lishini, virtualizatsiya qanday ishlashini, konteynerni bir-biridan ajratib turadigan narsa, fayl tizimlari qanday ishlashi, tizimni nima yuklashi va yadrodan oldin nima bo'lishini bilishi kerak. egallaydi. Linux tizimidagi jarayonlarni qanday kuzatish, uni qanday boshqarish va Linuxga kiritilgan xavfsizlik modeli qanday ishlashi. Bu asosiy minimal.

2 - narsalar qanday aloqa qiladi?

Narsalar muloqot qiladi! Sizning telefoningiz xabarlar ilovasi orqali do'stingizning telefoni bilan gaplashadi. Brauzeringiz Google Qidiruviga kirish. Planshetingiz bir vaqtning o'zida siz va hamkasbingiz o'zgarishlarini real vaqtda sinxronlash va yangilash xizmatidan foydalanib, bulutli provayderda saqlangan diskda saqlangan elektron jadvalga kirishadi.

Bularning barchasini ta'kidlab, sizda ilovalar, serverlar, protokollar, jismoniy havolalar va biz shunchaki Internet deb ataydigan ba'zi bir mexanizmlar mavjud ;-).

Katta dasturiy ta'minot ishlab chiqaruvchisi dunyoning bir nuqtasidan boshqasiga signal yuboradigan mashinalar nima ekanligini bilishi kerak. Qanday qilib bu aloqa bog'lanish asosida sodir bo'ladi va mashinalar qanday qilib paketni belgilangan joyga yetguncha biridan ikkinchisiga o'tkazadi. Shuningdek, paket ichidagi foydali yuk nima ekanligini va u qanday protokolga ega ekanligini bilishingiz kerak. Ushbu protokol ilovalardan ma'lumotlarni qanday olib yuradi. Va qanday qilib turli xil ilovalar bir xil mashinaga bir dasturdan boshqa dasturga ma'lumot oqib chiqmagan holda ishlagan. U IP manzillari va TCP va UDP kabi tashuvchi protokollari va ushbu protokollar yordamida marshrutlash qanday amalga oshirilganligi haqida bilishi kerak.

Biz hammamiz ishonadigan og'ir yuk: TCP kabi tashuvchi protokoli va IP kabi marshrutlash protokoli ishlaydi! Va HTTP kabi dastur protokolidan foydali yuk bir nuqtadan boshqasiga o'tadi.

Katta dasturiy ta'minot muhandisi, shuningdek, HTTP ma'lumotlarni qanday tashishini, URI yordamida ma'lumotni topishini va to'g'ri ma'lumotni mijoz va serverni bir necha marta bog'laydigan rozetka deb ataladigan oldindan belgilangan ulanish ostida to'g'ri mijozga yuborishini bilishi kerak. , turli paketlarni yetkazib berish uchun turli fizika yo'llari.

3-chi - Ilovalar ushbu jarayonlar ustida qanday ishlagan

Kompyuterlar umumiy maqsad bo'lib, bugungi kunda biz kompyuterni deyarli hamma narsani qilish uchun dasturlashimiz mumkin, lekin ular protsessor ishlab chiqaruvchisi tomonidan ishlab chiqilgan o'qish qiyin bo'lgan tilda ishlaydi, bu protsessor modeli uchun yig'ish kodi. Shuning uchun bizda Python kabi yaxshiroq o'qiladigan kodni mashina kodiga tarjima qilish uchun kompilyatorlarimiz (va tarjimonlarimiz) bor. Aslida, unchalik oddiy emas, bizda turli xil tillarni qo'llash mumkin. Ba'zilar ba'zi narsalar uchun yaxshi, boshqalari boshqa narsalar uchun yaxshi. Ba'zan sizga ishlash kerak, ba'zan esa loyihangizni tezda tugatishingiz kerak, masalan. Bundan tashqari, xuddi shu argumentda ba'zi dasturlar ba'zi operatsion tizimlarga, boshqalari esa boshqa operatsion tizimga kiradi.

Misol uchun, yaqinda Apple o'z mashinalari uchun boshqa arxitekturadan foydalanishini ko'rib chiqaylik, lekin siz Python-ni Windows-da CISC protsessori bilan, shuningdek, ARM arxitekturasida bir xil Python kodini macOS mashinasida ishlatishingiz mumkin. Bu "sehrlilik", chunki ba'zi tillar kompilyatsiya qilinadi va ba'zi tillar ish vaqti talqin qilinadi. Va u erda to'xtamaydi. Ba'zi tillar ma'lumotlarni dinamik narsa sifatida ko'rib chiqish uchun mo'ljallangan, bir xil o'zgaruvchi raqam bo'lishi mumkin va keyinchalik dasturda so'zga o'zgaradi. Boshqa tillarda kuchli turdagi paradigma mavjud va birinchi navbatda raqam sifatida e'lon qilingan o'zgaruvchi dasturda har doim raqam bo'lib qoladi. Bularning barchasi shuni ko'rsatadiki, Katta dasturiy ta'minot ishlab chiquvchisi, hatto o'zi hech qachon bu tilda kodlamagan bo'lsa ham, barcha turli tillardagi bu farqlar va ta'sirlarni tushunadi.

Bilish kerak bo'lgan muhim narsa shundaki, sizning dasturingiz jarayonga kirishadi va joriy operatsion tizim tomonidan boshqariladi, bu ular xohlagan narsani bajaradigan soxta dastur emas. Operatsion tizim himoyalangan xotira va boshqa jarayonlarga cheklangan kirish kabi cheklovlarni qo'yadi va ba'zi hollarda fayl tizimiga, kirish-chiqish fayllariga va hokazolarga, siz o'zingiz yashayotgan muhitni, 1-bilimga qaytib keladigan narsalarni bilishingiz kerak. Katta dasturiy ta'minot ishlab chiqaruvchisi bo'lishi kerak.

4 - Ilova protokollari qanday mavjud

Ba'zi bosh direktorlar yoki hatto muhandislar texnologiyani xushxabar qilishga moyildirlar. Bulutli provayder yoki ramka, yoki til yoki hatto vosita bo'lish. Ammo, aslida, biz Internetda ishlaydigan dastur protokollarini standartlashtirganimizdan beri bir necha o'n yillar o'tdi. Bizda HTTP, HTTPS, FTP, UDP, RTSP va boshqalar mavjud. Ehtimol, gRPC dan foydalanadigan Protocol Buferlar (protobuf) yangi bo'lsa-da, lekin juda kamdan-kam hollarda dasturni ilgari keltirilganlardan ba'zilari foydalanmasdan yoki hatto HTTP(S Maybe) dan foydalanmasdan bajarasiz.

Katta dasturiy ta'minot ishlab chiqaruvchisi buni biladi va biladi va texnologiya to'plamidan qat'i nazar, ular HTTP cheklovlari bilan cheklanishini biladi, sizda faqat ba'zi FE'Llar mavjud va uzoq vaqt davomida faqat GET va POST ishlatiladi. “Avval ilova”, “Avval mobil”, “Birinchi veb-sayt” yoki “Birinchi ish stoli”ni bajarasizmi, muhim emas. Siz HTTP bilan aloqa qilyapsiz. Sizning asosiy veb-serveringiz bir vaqtning o'zida cheklangan miqdordagi mijozlarni boshqaradi. Sizning monolit Full-Stack ilovangiz miqyosda bo'lmaydi. Agar bu MVP bo'lsa, yaxshi. Lekin siz o'zgartirishingiz kerak bo'ladi. Va ko'p narsani o'zgartiring. Qanchalik noto'g'ri qarorlar qabul qilinsa, amalga oshirib bo'lmaydigan narsani yaratish uchun ko'proq vaqt yo'qotasiz. Katta dasturiy ta'minot ishlab chiquvchisi boshidanoq buni amalga oshirish mumkin emasligini biladi, Katta dasturiy ta'minot ishlab chiquvchingizni tinglang. Agar u bitta bo'lsa.

CTO har doim direktorga, direktor har doim menejerga, menejer har doim texnik rahbarga, texnik rahbar har doim muhandisga va muhandisga to'g'ri bo'lgan korporativ madaniyatni qabul qilmang. hech qanday ovozi yo'q. U ketadi.

Yaxshi katta dasturiy ta'minot muhandisi texnologik stek ortida turgan asosiy texnologiyani biladi, u shov-shuv yoki hamma foydalanadigan narsa haqida emas. U o'zini video taqdimot yoki texnologiya stekini reklama qilish sahifasidagi vitrina bilan ishontirmaydi. U nima qilayotganini biladi. Texnologiya nimani beradi va nima yo'q. Yana, agar sizda bo'lsa, Katta dasturiy ta'minot ishlab chiqaruvchisini tinglang.

5 - Algoritmlar va ma'lumotlar tuzilmalari

Ishoning yoki ishonmang, ma'lumotlar bilan ishlashning cheklangan miqdordagi usullari mavjud. Ma'lumotlarni saqlash, qidirish, saralash, yangilash va yo'q qilish mumkin. Va bu ma'lumotlarni taqdim etishning faqat bitta usuli bor. 0 va 1 bilan.

Ma'lumotlarni saqlash, topish, tartibga solish, o'zgartirish yoki o'chirish usullari allaqachon aniqlangan. Masalan, tartibga solish uchun sizda ikkilik daraxtlar, bog'langan ro'yxatlar, ikkilangan bog'langan ro'yxatlar, xesh-jadvallar va boshqalar mavjud. Saqlash, topish, o'zgartirish va o'chirish uchun ham xuddi shunday.

Katta dasturiy ta'minot muhandisi bu algoritmlarni biladi, qanchalik murakkab, samaraliroq, ko'proq xotira ishlatadigan, kamroq xotira ishlatadigan va hokazo. U allaqachon dasturlash tilini bilishi shart emas, bu tushunchalar siz kodlashdan oldin o'rgatiladi. Kodlash bu bilimlarning namoyonidir. Agar katta dasturiy ta'minot ishlab chiqaruvchisi Swift va Python-ni bilsa-yu, lekin Rustni bilmasa, bu HECH NARSA demaydi. Bu faqat bir necha hafta ichida uni o'rganishini anglatadi. Chunki kodlash chuqurroq bilimning namoyon bo'lishi, ya'ni hisoblash fikrlash va muammolarni hal qilish fikridir. Va agar u katta dasturiy ta'minot ishlab chiqaruvchisi bo'lsa, u allaqachon bir nechta tillardan foydalangan. Sizga kerak bo'lgan har qanday til, u qanchalik g'alati yoki qiyin bo'lishidan qat'i nazar, o'rganish va foydalanishga qodir.

Agar katta dasturiy ta'minot ishlab chiquvchisi allaqachon ba'zi tillarni bilsa (ha, ko'plikda) u Senior hisoblanadi va yangi til unga muammo tug'dirmaydi.

6 - Ma'lumotlar qanday saqlanadi

Algoritmlar singari, ma'lumotlarni saqlash mumkin bo'lgan bir nechta echimlar mavjud. Har biri ma'lum bir narsa uchun. Tranzaksiyaga asoslangan ma'lumotlarni saqlash bo'yicha o'nlab yillar davomida o'rganilgan. Boshqacha qilib aytganda, agar INSERT buyrug'ining qaytishi to'g'ri bo'lsa, men ushbu ma'lumotni so'raganimdan keyin qancha millisekund o'tganidan qat'iy nazar yoki undan keyin butun ma'lumotlar markazi yopilgan bo'lsa ham, bu ma'lumotlar mavjudligiga ishonch hosil qilishingiz mumkin. Biz buni ATOM deb ataymiz. Bular relyatsion ma'lumotlar bazalari. Bugungi kunda mavjud bo'lgan ma'lumotlarni saqlash va saqlashning eng samarali usuli.

Bundan tashqari, muqobil variantlar mavjud va men yana ikkitasi haqida gapiraman, saqlashni blokirovka qilish va hujjatlarni saqlash. Hujjatlarni saqlash haqida shov-shuv bo'lib turibdi, bugungi kunda hamma NoSQL ma'lumotlar bazasidan foydalanishni xohlaydi, lekin NoSQL ma'lumotlar bazasi - bu nomda aytilganidek, ma'lumotlar bazasi, unga narsalarni QO'Shtirganingizda "see-quel" tranzaksiyalariga asoslanmagan, ma'lumotlar saqlanganligiga kafolat yo'q. Oxir-oqibat, ma'lumotlar saqlanib qoladi, lekin undan keyin qancha vaqt ketishini bilmaysiz. Agar ma'lumotni kiritish yoki yangilashdan so'ng sizga ma'lumot kerak bo'lsa, siz eski javobni olasiz.

Katta dasturiy ta'minot ishlab chiquvchisi buni biladi va ATOMIC tranzaktsiyalarini darhol o'qish kerak bo'lmagan stsenariylar uchun undan foydalanadi va hujjatlar saqlanishi va faqat tayyor bo'lganda ko'rsatilishi mumkin, masalan, ijtimoiy tarmoq tasmasi. Lekin siz elektron to'lov uchun moliyaviy operatsiyani amalga oshirayotgan va to'lov o'sha vaqtda amalga oshirilganligiga ishonch hosil qilishingiz kerak bo'lgan stsenariyda emas. Keyin buni relyatsion ma'lumotlar bazasida qilishingiz kerak. Shunga qaramay, Google Cloud, AWS yoki Azure-da mahsulot nomidan qat'i nazar. U mahsulot nomidan qat'i nazar texnologiyani biladi.

Endi men bloklarni saqlash haqida ozgina gapiraman, Katta dasturiy ta'minot muhandisi saqlashning mohiyatini tushunadi, u biladiki, biz sahna ortida biz bir oz saqlamaymiz, biz bloklarda, fayllarda, ma'lumotlar bazalarida (bu shunchaki fayllar) saqlaymiz. , qat'iyatlilik yoki hatto sevimli tilingizning "xotirasi" oxir-oqibat bloklarda saqlanadi. Ma'lumotlarni bloklarga saqlash va keyinchalik xarita yordamida ularga kirish osonroq. Tasavvur qiling-a, bizga har safar fayl kerak bo'lganda butun diskni o'qish kerakmi? To'lov ma'lumotlarini topish uchun butun ma'lumotlar bazasini o'qish kerakmi? Biz xaritalar tuzamiz va narsalarni indekslaymiz. Biz o'quvchi o'zining sevimli kitobining sarlavhali sahifasini ko'rib chiqayotgandek, qaysi sahifada uning sevimli iqtibos borligini eslab qolish uchun ushbu indekslarni ko'rib chiqamiz. Ushbu xulosada ma'lumotlar saqlanadigan muhim bloklar mavjud, keyin biz u erga o'tamiz.

7-chi - Dasturiy ta'minot qanday ishlab chiqilgan

Nihoyat, lekin eng muhimi, Katta dasturiy ta'minot muhandisi dasturiy ta'minot qanday tuzilganligini, qisman biladi, nima ustuvor va nima emasligini biladi. U qurilayotgan narsaning asoslari nima ekanligini tushunadi va jamoaga dasturiy ta'minotning ba'zi qismlari keyin bajarilishi mumkinligini tushunishga yordam beradi. U dasturiy ta'minot nima ekanligini va uni qanday ishlab chiqish mumkinligini tushunish uchun mahsulot egasi bilan bir necha daqiqa vaqt talab etadi. Albatta, rivojlanish o'zgarishni anglatadi, lekin bu mutlaqo yaxshi. Yaxshi bo'lmagan narsa shundaki, loyihaning o'rtasida ba'zi bosh direktor barcha kodlarni qirib tashlaydi va qaytadan boshlashni xohlaydi. Bu shunchaki kompaniyaning o'ziga katta aylanish holati. Ammo bir xil mahsulotni yaratish, lekin boshqa texnologik stack bilan, faqat, chunki, bu mumkin emas.

RUP axlat, endi uni hech kim ishlatmaydi, xuddi siz dvigatelni krank bilan ishga tushirayotganingizni aytganingizdek. Hech qachon ishlamagan va bo'lmaydi ham. Kompaniyalar undan foydalanadilar, chunki agar siz undan foydalanayotganingizni aytsangiz, ajoyib ko'rinasiz.

Foydalanish holatlari, talablar, artefaktlar, sinf diagrammalari va ketma-ketlik diagrammalari hali ham universitetlarda o'qitiladi, ammo barchasi behuda. Siz hech qachon hech narsa uchun foydalanmaysiz. Siz foydalanish holatlari mijozning yoki dastur ichidagi aktyorning xatti-harakatlarini tushunish uchun yaxshi, lekin mijozni olib kelish va undan so'rash osonroq, deb bahslashishingiz mumkin. Roʻyxat tuzing. Loyihangiz uchun sizga yopishqoq chizmalar kerak emas.

ITIL uchun ham xuddi shunday, uni tashlang.

Imkoniyatli modellar uchun ham xuddi shunday, ularni tashlang.

Katta dasturiy ta'minot muhandisi Ekstremal dasturlash manifestining tamoyillarini biladi va undan foydalanadi.

Katta dasturiy ta'minot muhandisi Scrum tamoyillarini biladi va undan foydalanadi.

Jira emas, Kanban emas, vosita emas ... tamoyillar. Yaxshi katta dasturiy ta'minot muhandisi qachon Scrum marosimi kerak emasligini biladi. Va qachon bo'ladi.

Yaxshi Katta dasturiy ta'minot muhandisi bu tushunchalarning barchasini va ular hatto o'zi ham bilmagan tarzda aralashtirganda yoki bu tushunchani qachon o'rganganini o'rganadi. Keyin siz uni Katta dasturiy ta'minot muhandisi deb hisoblashingiz mumkin. Va mumkin, menejer.

Tugatishdan oldin…

Men haqiqatning egasi emasman, agar sizda ushbu matn bo'yicha fikr-mulohazalaringiz, takliflaringiz yoki tuzatishlaringiz bo'lsa, ularni Twitter-dagi "bu erda" akkauntimda baham ko'ring.