Водич за преживљавање софтверског инжењерства

Ресурси који ће вам помоћи на почетку каријере

Првих неколико година моје каријере било је време интензивног учења.

Упознао сам стварност софтверског инжењера и морао сам стећи многе вештине за које нисам знао да су ми потребне. Гледајући уназад, било би лепо знати ствари које сада знам.

Дакле, написао сам овај водич да бих помогао другима на основу искустава програмера којима сам био ментор у првих неколико година професионалности, као и себе и неких својих колега.

Покрићу:

  • Како направити најбоље од интервјуа,
  • Како преживети (и напредовати) у свом послу софтверског инжењера,
  • И на које ресурсе треба обратити пажњу када размишљамо о сталном побољшању.

Интервјуи

Како започињете каријеру у софтверском инжењерству, мораћете да се суочите са једном неспорном чињеницом. Интервјуи су срање.

Они могу бити ужасни за све укључене. Пошто сам био и анкетар и саговорник, могу потврдити да су разговори велики временски одмак, изузетно стресан и заиста лош показатељ будућих радних резултата. Ипак, они су неопходно зло на које би ви и ваш резиме требали бити спремни.

Припрема за битку

Ако размишљате о каријери у софтверском инжењерству, научите нека од најчешће постављаних питања за програмски интервју, као што је „ФиззБузз“:

„Напишите програм који штампа бројеве од 1 до 100. Али за вишекратнике од три исписујте„ Физз “уместо броја и за вишекратнике од пет одштампајте„ Бузз “. За бројеве који су вишеструки од три и пет, исписујте „ФиззБузз“. “(Кодирање хорора)

Звучи довољно једноставно, зар не?

Па, велика већина испитаника пада на овом једноставном тесту, а камоли на његовим сложенијим варијантама.

Лично сам видео да су многи кандидати за високе позиције пали на овом тесту док су имали пун приступ Интернету . Дакле, уверите се да ако је програмски језик наведен у вашем резимеу, да знате како да урадите барем ФиззБузз у њему. У супротном, само губите време свих, укључујући и ваше.

Да бисте преживели своје интервјуе, мораћете да знате више од ФиззБузз-а. Такође морате бити сигурни да знате:

  • Основне структуре података и алгоритми: као што су повезане листе, низови, стабла и сорте.
  • Уобичајене „потешкоће“ у вашем језику, на пример, да ли су низови непроменљиви и како се управља меморијом.
  • Објектно оријентисани концепти програмирања попут класе наспрам објекта и наслеђивања.

На почетку своје каријере мораћете да осветлите оваква питања, јер немате искуства да бисте доказали да ћете бити добри у послу. Постоје два ресурса која увек препоручујем када се припремам за интервју:

  • „Црацкинг тхе Цодинг Интервиев“, фантастична књига која укључује пуно проблема са кодирањем и њихова решења, као и резимее онога што треба да знате да бисте их решили
  • ЦодеВарс, веб локација која има велику колекцију проблема са кодирањем које можете решити у прегледачу помоћу широког избора језика. Најкорисније је видети како су други корисници решили исти проблем. Упознаћете различите приступе истом проблему и научићете нове алате на језику по вашем избору.

Дајте себи ту додатну предност

Можете учинити неколико ствари које ће вам пружити ту малу ствар.

Прво научите да саопштавате своја искуства . Требали бисте имати нагиб лифта који резимира ваш животопис у кохерентан и занимљив наратив.

Уз то, знајте и свој резиме! Звучи глупо, али видео сам да се пуно испитаника бори да објасни одређену ставку у свом резимеу. Требали бисте бити у могућности да одговорите на питања о било ком искуству које наведете у свом резимеу и објасните како сте постали бољим кандидатом за посао.

Даље, припремите узорке кода за приказ на ГитХуб-у (или другом јавном спремишту).

Видети је веровати, а анкетари који могу да виде вашу шифру учиниће чуда. Поред тога, показује да разумете системе за контролу верзија.

Узорци кода не морају бити превише сложени, али морају бити чисти и показати добру праксу кодирања. Ово је ваша прилика да покажете како кодирате без временског притиска интервјуа за кодирање.

Када учините све горе наведено, време је да размислите о учешћу у пројекту отвореног кода . Показаће вам да можете радити у постојећој бази кода и сарађивати са другим програмерима.

Ово ће бити најближе програмирању у индустријском окружењу, а да заправо не будете у индустријском окружењу. Ово је до сада најтежа и дуготрајна ствар, па је резервирајте док не завршите доње висеће воће о којем сам горе говорио.

Интервјуисање вашег анкетара

У журби и стресу у потрази за послом, многи кандидати заборављају да је интервјуирање двосмерна улица. Док компанија покушава да утврди да ли сте права особа за тај посао, требало би да утврдите да ли је компанија погодна за вас.

Обавезно поставите нека од питања у наставку, чак и ако је то у додатној е-пошти. Имајте на уму да компаније често покушавају да се не придржавају најбољих инжењерских пракси као предност, па читајте између редова.

Ево неколико примера питања која бисте могли поставити:

„Како би изгледао типичан радни дан за мене?“

Важно је знати шта очекивати од одређене позиције, јер се послови софтверског инжењерства прилично разликују. На пример, од вас се може очекивати да одржавате сервере или директно разговарате са клијентима.

Црвена застава:Нисам сигуран.“ → Значи да људи који вас интервјуишу неће бити у вашем тиму или немају јасну идеју зашто вас запошљавају.

„Како тестирате свој софтвер?“

Идеално би било да се за верификацију квалитета кода користи комбинација јединственог тестирања, ручног и аутоматског тестирања.

Црвена застава: " Ми једноставно не пишемо грешке, хаха." → Ти људи су управо они који пишу грешке.

„Који систем за контролу верзија користите?“

Системи за контролу верзија су изузетно корисни за сарадњу и нема разлога да их не користите у професионалном окружењу.

Црвена застава # 1: „Овај, систем контроле верзија?“ → Бежи далеко, далеко.

Црвена застава # 2: гт; ” → Означава да највероватније не иду у корак са временом и да већ дуго нису ажурирали своју инфраструктуру.

„Да ли радите рецензије?“

Провера колега или навођење неког другог да погледа ваш код пре него што уђе у базу кода, фантастичан је начин да уочите глупе грешке и витална је прилика за тренинг током започињања каријере.

Црвена застава: „Ми само верујемо једни другима!“ → Вероватно да старији програмери веома штите свој код и нису сјајни у примању повратних информација.

„Које програме имате за континуирано образовање?“

Бити софтверски инжењер значи стално учити како се технологије вртоглавом брзином појављују, сазревају и застаревају. Као такве, многе компаније имају буџет за обуку који користе за плаћање универзитетских и интернетских часова, конференција или интерних разговора.

Црвена застава: „Мислите на читање ствари на мрежи у слободно време?“ → Компанија је или везана за готовину или програмере сматра заменљивим, а не дугорочним улагањима.

„Који је процес развоја софтвера који користите?“

Процес је од виталног значаја за софтверски инжењеринг, без обзира на стварне детаље. Појединости о томе шта представља оптималан процес предмет су интензивне расправе, али само постојање договореног начина рада на пројекту умањује хаос и осигурава да су сви на истој страници.

Црвена застава: „Наш процес је инспирисан џезом слободне форме.“ → Највероватније је цело одељење у режиму гашења пожара, скачући из нужде у нужду без икаквог јасног циља.

„Како се решавате техничког дуга?“

Технички дуг је накупина застарелих технологија и брзих, али прљавих решења у основи кода. Решавање овог проблема важно је за дугорочно здравље кода и требало би га радити континуирано.

Црвена застава: „Фокусирани смо искључиво на нове функције.“ → Њихова база кода је у нереду или ће ускоро бити.

„Каква је култура ваше компаније?“

Култура компаније може бити врло нејасан концепт, али чак и мале ствари попут отвореног уреда у односу на кабине променит ће вашу свакодневну интеракцију са колегама на значајан начин. Не постоје опште црвене заставе, али уверите се да је њихов одговор нешто са чиме можете живети 40+ сати недељно годинама.

Ради као софтверски инжењер

У овој фази, ако сте се добро показали у интервјуима и свидело вам се како су анкетари одговарали на ваша питања, вероватно ћете бити ангажовани.

Честитамо, званично сте инжењер!

Шта сад? Па, време је да се научите много ствари о кодирању и раду. А пошто смо програмери, почнимо са расправом о коду.

Кодекс добре индустрије

Код добре индустрије има следећа својства, тим редоследом:

  • Читљиво , јер се код чита и одржава чешће него што је написан. Намера кода мора бити јасна другим програмерима годинама након што сте га написали.
  • Одбрамбени, као у следећим најбољим праксама одбрамбеног кодирања. Одбрамбено кодирање је тема сама за себе, али суштина је у томе: Морате осигурати да неправилна употреба класа и метода које сте написали неће довести до тога да ваш код сруши софтвер.
  • Оптимизовано , које је последње на овој листи, јер најчешће нећете морати да бринете о томе. То не значи да бисте требали написати лош код који ради нешто у О (н³) када постоји линеарно решење. Али програмери су углавном жељни да покушају и превише оптимизирају када за то нема потребе, често на штету читљивости и обрамбљивости кода. Увек бисте требали бити у могућности да докажете да је заправо потребна одређена оптимизација која жртвује та својства.

Сада када знате како да напишете добар индустријски код:

Нећете се много кодирати

Можда ће вас изненадити, али најчешће нећете писати нови код, већ ћете:

  • Отклањање грешака
  • Читање постојећег кода
  • На састанцима или писању мејлова
  • Истражујући шта треба учинити како не бисте написали код

Стога ће умеће кодирања бити подједнако важне за вашу каријеру.

Код за отклањање грешака и читање

  • Требаће вам много више од отклањања грешака помоћу исписа за штампу. Сви широко коришћени језици и технолошки скупови имају мноштво моћних алата. Научите да их користите јер ће олакшати отклањање грешака и уштедети вам безброј сати.
  • Разумевање основе кода. Већина технолошких стекова има неку врсту алата за генерисање графикона кода који ће вам помоћи да разумете структуру основе кода. Ентерприсе ИДЕ-ови углавном имају уграђену ту функцију. Такође можете истражити код помоћу алата као што су РеСхарпер, греп или Соурцеграпх.
  • Разумети производ. И оу'лл се изненадио колико програмери не знају како се софтвер требало да ради пре него што покушате да се "поправе" га. Само прочитајте документацију.

Организујте своје мисли

Будући да ће вам пуно времена бити посвећено комуникацији, истраживању и обављању више послова, потребни су вам неки алати који ће вам помоћи да све буде у реду.

  • ТОДО листе / Задаци: Ваша компанија већ треба да има неку врсту софтвера за задатке, али помаже и постојање личног система. Користите пост-ит белешке или софтвер попут Трелло или Тодоист.
  • Напомене: Увек правите белешке на састанцима, радите на побољшању постојеће документације и стварању личне базе знања. Користите Еверноте, ОнеНоте или бележницу, као некада. То може изгледати претјерано, али захвалићете се годину дана касније када поново будете посећивали за тим нејасним процесом израде који вам је требао 3 дана да бисте први пут схватили. Никада нисам упознао доброг софтверског инжењера који није правио опсежне белешке.
  • Графикони / визуелизације: Људи су визуелна бића и стварање табела процеса и архитектура помоћи ће вама и другима да разумете сложене теме. Дијаграми су посебно корисни у комуникацији са нетехничким колегама. Користите Луцидцхарт, Висио или обичну белу таблу.

Знајте када треба користити библиотеке

Кратак одговор: Готово све време.

Дуг одговор: У 99% случајева не би требало да измишљате точак. На већини позиција софтверског инжењерства, примена одређене врсте потпуни је губитак времена. То не значи да не бисте требали знати како функционишу алгоритми и структуре података које користите, јер ће вам то помоћи да одлучите шта ћете користити и када.

Да бисте били ефикасан софтверски инжењер, морате да разумете библиотеке којима располажете. Стандардне библиотеке најпопуларнијих језика изузетно су корисне и веће су од онога што бисте очекивали. Поред тога, база кода такође може користити додатне, специјализоване библиотеке. Прочитајте њихову документацију и знајте када их треба користити.

Такође се не треба плашити предлагања додатних библиотека ако ће уштедети време. Међутим, морате осигурати да одаберете добру библиотеку за индустријску употребу. Добра библиотека је:

  • Отворени извор , тако да можете сами да проверите квалитет кода и потенцијално исправите грешке кључне за вашу апликацију.
  • Лиценцирано под дозволом као што су МИТ и БСД , тако да ваша компанија не наилази на проблеме користећи га. Будите опрезни са ГПЛ-ом, да случајно не бисте отворили целу своју базу кода.
  • Зрели , тј. Био је вани већ неко време и има богат скуп карактеристика.
  • Одржава се , а нова издања често излазе.
  • Користе га друге компаније или пројекти , што представља печат одобрења и осигурава да има индустријску подршку за континуирано одржавање.

Континуирано побољшање

Поред учења вештина које ће вас побољшати у свакодневном послу, мораћете и да континуирано побољшавате своје вештине и учите нове како бисте себи створили нове могућности за каријеру.

Прилике за учење су бројне, а многе од њих су прилично приступачне:

  • Онлајн курсеви: Не треба пропустити прилику да учите од најбољих професора у тој области у флексибилном формату. Погледајте Цоурсера, Удацити и едКс (међу многима) за курсеве који могу допунити ваше постојеће вештине.
  • Онлине мастер студије: Недавни тренд међу најбоље рангираним универзитетима, онлине мастер студије су флексибилан начин за наставак вашег формалног образовања. Такође су обично јефтинији степени захвалности на кампусу, с тим што већина програма кошта око 10.000 америчких долара за целу диплому. Георгиа Тецх, УТ и УЦ Сан Диего су неки од универзитета који нуде такве дипломе. Лично препоручујем он-лине мастер студије Георгиа Тецх-а, које сам дипломирао ове године.
  • Блогови: Блогови су важан део заједнице програмера (овде вас не чуди, јер је тренутно читате). Блогови као што су Цодинг Хоррор, Јоел он Софтваре или још духовитије веб странице попут Тхе Даили ВТФ могу вам дати добру идеју о томе шта и шта не треба радити као софтверски инжењер. Медијум за преглед, р / програмирање, ХацкерНевс или други фидови довешће вас и до добрих чланака и блогова.
  • Конференције: Последње, али не најмање важно, конференције су невероватна прилика за учење и свакако бисте требали искористити буџет за обуку своје компаније тако што ћете отићи на њих. Веома непотпуна листа добрих конференција за проверу (заједно са њиховом темом): ГОТО; (Генерал), Странге Лооп (Генерал), ПиЦон (Питхон), ЦППЦон (Ц ++), ДЕФ ЦОН (Сецурити), Флуент (Веб дев). Сви они такође имају видео записе (већине) разговора на ИоуТубеу, тако да ћете моћи нешто да научите чак и ако не можете да присуствујете!

Надамо се да вас је овај чланак наоружао знањем шта можете очекивати од почетка ваше каријере софтверског инжењера и пружио вам алате за добро извођење на овом узбудљивом путовању! Хвала за читање! Ако имате питања или сугестије, оставите коментар или твеет @АлекиевВалери.