Software engineer деген кім және ол немен айналысады?
![](https://kz.kursiv.media/wp-content/uploads/2023/09/shutterstock_2111828198.jpg)
Фото: shutterstock.com
Бағдарламалық жасақтама инженері Ақнұр Абубәкіровамен сұхбат
Software Engineer яки бағдарламалық жасақтама инженерлері мәселелерді шешу үшін компьютерлік жүйелер мен қолданбаларды бағдарламалап, жасаумен айналысады. Яғни дижитал өнімдер жасап, оны қолдануға қолайлы еткенді, анализ жасап, зерттегенді жақсы көретіндер осы мамандықтың айналысына жиылса болады. Мұндай маман болу үшін қандай машық керек? Бағдарламалық жасақтама инженерінің міндетіне не кіреді? Осы туралы айтамыз.
Software Engineer деген кім? Оның бағдарламалаушыдан қандай айырмашылығы бар?
Бағдарламалық инженерия деп те аталатын бұл сала информатиканың құрамына кіреді. Жобалау, бағдарламалау, тестілеу және бағдарламалық қолданбаларға қызмет көрсетумен айналысады. Бағдарламалаушы-инженерлер инженерлік принциптерді қолдана отырып, бағдарламалау тілдерін білгенінің арқасында қолданушының мәселесін шешуге көмектеседі. Бизнес-аналитиктер, бағдарламалаушылар, тестілеушілер, DevOps — бәрі әртүрлі бағытта маманданған Software Engineers. Негізі заманауи инженерде engineering Thinking ғана емес, сонымен бірге agile Thinking де қатар дамыған болуы керек. Өйткені технология күн сайын өзгеріп жатыр. Сондай күрделі бизнес-процестермен жұмыс істей білу, қарым-қатынастың әр алуан тәсілін меңгеру маңызды.
Көбіне бағдарламалаушы деп жалпы айтылғанымен, арагідік шатасып қалатындар болады. Бағдарламалаушы немесе programmer — код жазатын адам. Оның алдындағы міндеті — белгілі бір бағдарламалау тілінде код жазу. Оған алдын-ала тапсырма беріліп, бағыт көрсетілген. Ол сол нұсқау бойынша жұмыс істейді. Ал software engineer болса, код жазардан бұрын берілген тапсырма мәселесін шешіп, модельдеп, ең ұтымды деген шешім табумен айналысады. Яғни «бағдарлама жұмыс істеп тұрса болды» демейді. Оның оңтайлы болғанына, әдемі көрінгеніне, жаңартулар мен кеңейтімдерді де қолдай білгеніне баса мән береді. Бұл салаға жаңа келгендерді junior деп атайды. Тәжірибесі молайып, жаңа білім жиып, сертификациядан өткен соң, уақыт өте келе сұхбаттан өтіп, алдымен — middle, одан соң senior деңгейіне қол жеткізе алады. Әрине, әр компанияның ішкі талабы, саясаты бар. Соған сай деңгейлерді өту әркімде әр қалай болуы мүмкін. Senior-ға жеткен соң араға уақыт салып, мансап жолында алға жылжығысы келгендер software architect немесе team lead бола алады. Архитекторлар инженерлер секілді мәселелерді шешумен айналысады. Әйтсе де, деңгейі сәл жоғарырақ. Ішкі құрылғылардың қандай болатынын, сыртқы интерфейсті де ойластырады.
Software engineer-дің бір күні
Ақнұр Абубәкірова — DAR Tech компаниясында senior software engineer. Алғашында шағын уеб-студияларда жұмыс істеуден бастаған. «Бастапқыда білімім мен тәжірибем үлкен компанияларда істеуге жеткіліксіз деп ойладым. Сөйтіп head hunter-ден тағылымдамалар іздеп, нәтижесінде бір студияны тауып алдым. Білімімді сынап көрмекке сонда бардым. Әрі тәжірибе де жинағым келді. Уақыт өте келе біраз жұмыс істеп көргеннен кейін өзіңді басқа мамандармен салыстырып, бағалап үйренеді екенсің. Осылайша өсуге, үлкенірек жобаларға «кіруге» дайын екеніңді біліп, деңгейіңді біле бастайсың» деп бастады әңгімесін Ақнұр.
Кейіпкеріміздің жұмыс күні қалай өтетіні де бізге қызық болды. Бағдарламалық жасақтама инженері күнін неден бастайды? «Кез келген software engineer-дің күні, меніңше, стендап яки «летучкадан» басталады. Былайша айтқанда, команданың бүгін атқаруы керек тапсырмалары талқыланатын шағын жиналыс. Мұнда команда мүшелері кеше не істегенін, қазір немен айналысып жатқанын, қандай блокер не мәселелер барын айтады. Әлдебір тапсырмалар толық орындалып, тестілеуге дайын болса, солар талқыланады. Одан кейін өз басым jira-дағы тапсырмаларымды бір шолып шығамын. Егер жаңа тапсырмалар пайда болса, соларды ретке келтіріп аламын. Менің тарапымнан шешілуі керек блокерлер болса, соны шешуге отырамын. Ондай мәселелер болмаса, жоспардағы тапсырмаларымды жасауға кірісемін. Кейде бір тапсырманы орындауға research жасау керек болып қалады. Ондайда мақалалар оқып, видеолар қарап, ақпарат жинаймын. Жалпы алғанда бағдарламалық жасақтама инженері не тапсырма орныдап отырады, не сол тапсырманы орындауға керек ақпарат жинаумен айналысады».
Бағдарламалық жасақтама инженеріне керек машықтар
Ақнұрдың айтуынша, қандай хард скилз керегі бірінші кезекте software engineer-дың бағыты мен деңгейіне байланысты. Яғни backend, frontend, mobile болғанына қарай, қажет машықтар да түрліше болады. «Қандай скилл қажетін ең оңайы — Google-дан іздеп қарай аласыз. Болмаса, сіздің деңгейіңіздегі software engineer-ларды Linkedin-нен тауып алып, сол жерден ақпарат алуға болады. Кез келген компания инженер іздеген кезде қандай қызметкерді алатынын сипаттап, жазып қояды. Оның ішінде қандай технологияларды меңгерген болуы керегі, қандай құралдармен жұмыс істей білуі міндеттелетіні де көрсетіледі. Үшінші жолы — өзіңнен деңгейі жоғарырақ әріптестерден сұрау. «Деңгейімді өсіргім келеді. Ол үшін не істеуім керек?» деп сұрасаңыз болады. Жалпы алғанда барлығына бірдей қатып қалған тізімді айта алмаймыз. Себебі айтқанымдай, әркімде бағыт пен деңгей әр түрлі» дейді кейіпкеріміз.
Софт скилзге қатысты сұрағымызға Ақнұр былай деп жауап берді: «Нетуоркиң — адамды алға тартатын күш. Қай салада істесеңіз де, адамдармен қарым-қатынас жасай білу маңызды. Осы қабілетті бір жүйеге келтіріп алу керек. Адаммен дұрыс сөйлесе алмайтын маманмен ешкімнің жұмыс істегісі келмейтіні белгілі. Сондықтан, бірінші орында нетуоркиңді дұрыстау қажет. Екіншіден, software developers бірнеше категорияға бөлінеді. Өзін болашақта кім ретінде көреді — соған байланысты. Кейбірі менеджментке барғысы келмеуі мүмкін. Тек өз тапсырмасымен, жобаларымен айналысқанды жөн көреді. Сол міндеттерді жоғары деңгейде, тез жасайтын адам ретінде кәсіби маман болғысы келеді, өсуге қызықпайды дегендей. Оның жоспарында tech lead, team lead болу жоқ, ментор да болғысы келмеуі мүмкін. Ондай болса да — қалыпты жағдай. Ал болашақта өскісі келетіндер тиісті софт скилз дамытуы керек. Команданы алға сүйрейтін адам болғысы келсе, менеджментті меңгеруі қажет болады».
Ақнұрдың ұсынатын кітаптары мен каналдары
Software engineers ғана емес, жалпы бәріне оқуға ұсынатыным — Кэрол Дуэктың «Гибкое сознание» кітабы. Неге бұл бағдарламалық жасақтама инженерлеріне пайдалы болады десеңіз, көпшілігінде Impostor syndrome көп кездеседі. Яғни өзіне сенімсіздік басым. Біздің салада өзіңді бағалауға арналған нақты критерий жоқ. Әр компания өзі қояды. Сол үшін «Гибкое сознание» кітабын оқуға кеңес берер едім. Мұнда талант пен еңбек туралы көп айтылады. Алға сүйретін факторлар жайлы жазылған. Адам ретінде өзіңізді бағалауды үйретеді. Ал осы саладағы junior мамандарға YouTube-тағы Academind каналы пайдалы болады. Сонымен бірге ui.dev уеб-сайтынан да мол ақпарат ала аласыз. Кез келген frontend developer-ге You Don’t Know JS кітабын оқу керек. Оқи бастасаңыз, JavaScript-ті шынымен білмейтініңізді түсінесіз. Өзім де басында скептик ретінде ұзақ уақыт бойы беттемей жүрген едім. Бірақ оқи келе, көзім ашылды.
Тақырыпқа тұздық: тағы не оқуға болады?
- Clean Code: Robert C. Martin
- The Pragmatic Programmer: Andrew Hunt, David Thomas
- The Mythical Man-Month: Frederick P Brooks
- Design Patterns: Elements of Reusable Object-Oriented Software: Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- Refactoring: Improving the Design of Existing Code: Martin Fowler
- Code Complete: A Practical Handbook of Software Construction: Steve McConnell
- Domain-Driven Design: Tackling Complexity in the Heart of Software: Eric Evans
- Working Effectively With Legacy Code: Michael C. Feathers
- Test-Driven Development: By Example: Kent Beck
- Peopleware: Productive Projects and Teams: Tom DeMarco
- Cracking the Coding Interview: 150 Programming Questions and Solutions: Gayle Laakmann McDowell
- Code: The Hidden Language of Computer Hardware and Software: Charles Petzold