paint-brush
Паметни програмерод стране@themachine94
12,795 читања
12,795 читања

Паметни програмер

од стране theMachine9410m2024/10/26
Read on Terminal Reader

Предуго; Читати

Прича о томе како се студент завршне године са високим акредитивима придружио нашем малом тиму.
featured image - Паметни програмер
theMachine94 HackerNoon profile picture

Живео сам и радио у малом граду на северозападу Немачке пре него што је ударила пандемија ЦОВИД-а. Радио сам у малом стартапу. Био сам један од 7 инжењера у компанији. Упркос томе што смо били веома мали тим, моји сарадници су били једни од најпаметнијих људи са којима сам икада радио. Направили смо матичну десктоп апликацију коју користе машински инжењери за пројектовање делова. Ови делови су били они који су улазили у аутомобиле и авионе и слично. Био је то програм за 3Д моделирање (ЦАД) тако да је природно, кад год смо ангажовали новог инжењера или имали приправника, више смо волели људе који су били добри у математици, геометрији, писању кода ниског нивоа високих перформанси итд. Када смо интервјуисали кандидате, добио сам одговорност обављања техничког интервјуа. Припремио сам неколико програмских задатака који су одражавали вештине које желимо од кандидата. Замолио бих кандидата да реши проблем и проговори кроз процес размишљања. Чак и ако не заврше решење за 45 минута, то је био користан начин да науче шта знају и како мисле. Други чланови мог тима су интервјуисали кандидате за друге критеријуме као што су личност итд. Ово је заиста добро функционисало и запослили смо неке заиста талентоване и мотивисане инжењере. Сви смо били прилично добри у ономе што смо радили и поштовали смо једни друге.


Почетком 2020. године, јавио нам се студент завршне године са локалног универзитета тражећи праксу. Узео сам преко потребан одмор и отишао у Берлин на неколико недеља. Тако да нисам био ту да обавим технички интервју. Мој менаџер и остатак тима су били изузетно импресионирани студентом током интервјуа, а његов животопис је био изузетан. Никада раније нисмо имали приправника. Мој менаџер је мислио да технички интервју може бити непотребан за приправника. Зато је одлучио да почне да ради са нама без техничког интервјуа. Вратио сам се са одмора и рекли су ми за новог приправника који ће почети недељу дана касније. Морао сам да надгледам рад овог приправника. У суштини, уверите се да разуме шта треба да се уради, одговорите на сва питања, деблокирајте га на било који начин. Већ смо изложили скуп проблема на којима смо желели да стажиста ради. Од сада ћу приправника називати Стефаном. Отприлике у то време, било је много говора о ширењу корона вируса у Немачкој. Било је свуда у вестима. Били смо мали тим и навикли смо да радимо блиски, постављамо питања једни другима, размишљамо о белим таблама итд. Али, авај, тачно дан пре него што нам се Стефан придружио, Немачка је ушла у потпуну блокаду. Сви смо почели да радимо на даљину од куће. Борили смо се са радом на даљину током првих неколико недеља. Као супервизор Стефановог пројекта, рекао сам му да може да ми се обрати са свиме што му треба да би кренуо. У случају да сам био одсутан или заузет, други чланови тима су радо ускочили и помогли Стефану да изађе.


Наша база кода је била мешавина Ц# и Ц++. Сви наши корисници су били на Виндовс-у, па смо написали предњи крај и све остало што није било критично за перформансе у Ц#. Сви наши нумерички алгоритми, 3Д рендеровање и све што је било критично за перформансе написано је у Ц++. Већина чланова нашег тима познавала је оба језика, а неки су се специјализовали за један или други. Стефан је тврдио да је веома вешт у Ц# и Ц++. Првог дана његовог првог дана, неколико сати сам био дежуран са Стефаном објашњавајући му нашу базу кода, постављајући све на његовој локалној машини како би могао да почне. Стефан је био мало нервозан и рекао је да је прошло доста времена откако је писао Ц++ или користио Виндовс. Стефан је свакодневно возио Линук машину. Чинило се да се мучи да напише Ц++. Схватио сам да је мало одбачен због тога што мора да ради у новом окружењу, новој бази кода и одлучио сам да му помогнем док не крене. Тако да смо упарили програмирани за наредних неколико сати. Требао сам му да му помогнем да напише код ред по ред. Стално је правио глупе грешке у свом коду и требао сам да их исправим и покажем му прави начин да уради ствари. Мислио сам да је ово мало чудно, али сам ипак одлучио да му дам шансу. Надао сам се да је Стефан до краја нашег разговора знао довољно да настави да ради сам.


На моје задовољство, сутрадан се нисам чуо са Стефаном. Послала сам му поруку и рекао је да напредује и да му ништа не треба од мене. Био сам срећан што сам то чуо. Могао бих да се фокусирам на свој посао. Али дан касније Стефан ми се поново обратио тражећи помоћ. Да би допринео нашој апликацији, Стефан је морао да напише и Ц# и Ц++. Морао је да напише нумерички део алгоритма у Ц++, и повеже га са предњим делом и уради још неколико ствари у Ц#. Када ми се Стефан обратио трећег дана, није направио никакав напредак са својим Ц++ кодом. То је углавном било тамо где смо стали на крају првог дана. Али он је много напредовао са својим Ц# кодом. Нападао је задатак са оба краја у исто време. Стефан ми је другог дана без моје помоћи поносно показао ствари које је написао у Ц#-у. Прочитао сам код и био сам одушевљен њиме. Код је био заиста високог квалитета. Било је сажето, елегантно и ефектно. Стефан је заиста био талентован, помислио сам. Можда је заиста био мало зарђао са Ц++ синтаксом и детаљима о језику, али његов Ц# код је показао да је генерално добар програмер. Схватио сам да је ово добар знак и да ће вероватно врло брзо побољшати свој Ц++ код. То ме је охрабрило да му помогнем са његовим Ц++. Поново сам провео неколико сати трећег дана упарујући се са Стефаном, помажући му око његовог Ц++ кода. Овај циклус се поновио још једном. Стефан је отишао сам и писао Ц# код 4. дана, а вратио ми се тражећи помоћ за Ц++ петог дана. У овом тренутку сам почео да постајем сумњичав. Ниво на којем му је била потребна помоћ са својим Ц++ кодом није био у складу са висококвалитетним Ц# кодом који је написао. Чинило се да се у Ц++-у бори са основним концептима, како рачунари раде, како меморија ради итд. Очигледно је Ц# језик који се сакупља за смеће и не морате да знате управљање меморијом, али нешто није било у реду и нисам могао сасвим стави прст на то.


Прошла је цела недеља. Као тим који је навикао да ради у канцеларији, сви смо мрзели рад на даљину. У ово време током закључавања, било нам је дозвољено да се окупљамо у групама од 7 или мање људи. Колега са посла, назовимо га Давид, позвао је мене и још неколико колега у своју кућу на роштиљ током викенда. Живео је недалеко од мене и раније смо радили овакве ствари. Време је било лепо, дружили смо се у Давидовом дворишту са његовом женом и ћерком од 3 године. Пекли смо на роштиљу и јели месо и поврће, попили неколико пива и расположење је било веома благо. Давидова трогодишња ћерка нам је служила прљавштину у малим пластичним чашама претварајући се да је сладолед. Непотребно је рећи да нисам пао на то. Давид је покренуо тему Стефана и разговор је текао отприлике овако:


Давид: Како иде са Стефаном? Он се обратио мени тражећи помоћ неколико пута прошле недеље.


Ја: Ох, да, и ја сам му доста помогао. Он је тек почео тако да ми није сметало да му помогнем. Шта мислите о њему?


Давид: Да. Био сам прилично импресиониран његовим радом. Он пише веома квалитетан код и чини се да зна шта ради у Ц++, али се бори да напише добар Ц# код. Помагао сам му да напише Ц# код.


Питао сам Дејвида: "Чекај, да ли мислиш обрнуто? Зато што мислим да је његов Ц# веома добар, али он је лош у Ц++." Чим сам завршио реченицу, обоје смо схватили шта се дешава. На кашичицу сам хранио Стефана Ц++ код, који је Давиду показао као свој. И сваки други дан, Давид је кашиком хранио Стефана Ц# код који ми је показивао као свој. Био сам импресиониран квалитетом Давидовог Ц# кода, а Давид је био импресиониран мојим Ц++ кодом. С једне стране, Дејвид и ја смо имали овај диван моменат брата како смо се дивили шифри једно другом. Али тај тренутак је био засјењен чињеницом да нас је Стефан обоје преварио. Ово је било право из приче, али се дешавало у стварном животу. Било је то као прича о оном момку који није знао да игра шах, али успева да извуче партије са два велемајстора тако што их игра један против другог. Стефан је ово изводио у стварном животу. Стефан ништа није знао. Мрзели смо себе што смо одвојили недељу дана да то схватимо. Да будемо поштени, да смо били у канцеларији овај трик не би успео. Пали смо на ово због тога што смо били лоши у комуникацији док смо радили од својих домова.


Када смо се следећег понедељка вратили на посао, рекла сам Стефану да не гњави Давида и да само мене тражи помоћ. Убрзо је постало очигледно да Стефан не зна толико о програмирању, математици или геометрији. Било је јасно да је његов животопис пун лажи. Случајно је веома углађен говорник и има таленат да звучи као да зна много. Та вештина му је донела посао и заваравала нас целу недељу. Што сам више радио са Стефаном, што сам више прегледавао његов код, он је испадао неспособнији. Коначно сам видео ко је Стефан заиста, његове праве програмске вештине. Нисам сигуран да ли је неспособан права реч. Стефан је написао лош код, али је био лош на чудан начин. Када сам га питао о томе, дао је чудне одговоре. Ево примера који се заиста десио. Једном сам Стефану рекао нешто попут: "... Дакле, желите да добијете ову целобројну вредност, а ако је та вредност између доње и горње границе, требало би да позовете ову другу функцију... Да ли је то јасно?". Стефан ме је уверавао да разуме шта треба да се уради. Када сам следећег дана погледао његов ПР видео сам нешто овако:


 int value; // Assigned from somewhere. for (int i = lower_bound; i <= upper_bound; ++i) { if (value == i) { do_stuff(...); } }


Био сам одушевљен. Ово није био само лош код, ово је било нешто друго. Сећам се да сам био млад и да сам био лош у кодирању, али мој лош код никада није био овакав. Ово је била још једна димензија чудности. Чак и као програмер почетник, никада не бих помислио да напишем овакав код. Избор петље преко свих целих бројева између граница био је довољно чудан, али оно што ме је заиста одушевило је чињеница да чак и када пронађе подударање и позове функцију, никада не изађе из петље. Стално проверава преостале вредности. Како? Питао сам Стефана зашто једноставно није урадио:


 if (value <= upper_bound && value >= lower_bound) { do_stuff(...); }


Пошто је примио мој предлог да користим једноставне неједнакости уместо поређења са сваким целим бројем у опсегу који може да буде 10 или чак 100 хиљада хиљада, Стефан ме је похвалио што сам дошао на тако добру идеју и гурнуо нову промену у ПР. Сваки пут када се Стефан трудио да уради нешто, ми бисмо му дали нешто лакше да уради. Изненађујуће је и он у томе пропао. Била је то кратка пракса, па се нисмо превише замарали Стефаном. Након неког времена завршио је радећи задатке који нису програмски, управљајући стварима у табелама и другим ад хоц задацима које је требало обавити. Оригинални пројекти на којима је намеравао да ради показали су се далеко изнад његових вештина. Стефан је некако завршио свој тромесечни плаћени стаж. Желео је да настави да ради за нас током лета. Он је представио нови истраживачки пројекат који би био користан за нашу компанију. Када ме је менаџер питао да ли желим да наставим да радим са Стефаном још 3 месеца, рекао сам НЕ. Подсетио сам свог менаџера колико је његов рад у последња три месеца био ужасан. Али мој менаџер је био оптимиста. Имао је веру у људе. Замолио ме је да мислим на себе када будем Стефанових година, на факултету и први пут да учим ствари.


Менаџер ме је замолио да размислим и замолио ме да размислим да дам Стефану још једну шансу. Искрено говорећи, када сам био Стефанових година, писао сам 2Д игре у ЈаваСцрипт-у користећи ново (у то време) ХТМЛ5 платно. Стефан је био заиста неспособан, чак и након што се прилагодио годинама и искуству. Али далеко горе од његове неспособности било је његово непоштење. У сваком случају, нисам желео да олако схватим ову одлуку. С једне стране, можда је Стефан способан да учи, али је с друге стране непоштен. Прочитао сам предлог који је написао за нови истраживачки пројекат. Идеја је била веома нова, и ако успе, била би веома корисна за нашу компанију. Било је заиста импресивно. Али онда сам имао тренутак јасноће где је мој цинизам преузео оптимизам који је мој менаџер покушао да ми усади. Постао сам фиксиран на једну реч из Стефановог истраживачког предлога: '2-многострукости'.


Пошто сам радио са њим, знао сам колико је Стефан заправо неспособан, и нема јебеног начина да је знао шта значи 2-манифолд. Копирао сам Стефанов предлог истраживања у онлајн проверу плагијата. Било је то пре много година и заборавио сам који је. Управо сам тражио на Гоогле-у и користио један од најбољих резултата. Провера плагијата је пронашла 97% подударања са истраживачким радом и дала везу са оригиналом. Стефан је копирао целу ствар. Следећег јутра разговарао сам са Стефаном о његовом предлогу истраживања. Чим је почео да говори било је јасно да не разуме о чему говори, а све је то била само салата од речи. Поново је био шарлатан. Обавестио сам свог менаџера и ово је коначно сломило његову веру у Стефана. Стефан опет није радио за нас.


Једино у чему је Стефан био добар је да се прода, и да изгледа као да зна о чему говори. Разумем да постоје професије у којима те вештине могу доста далеко одвести, нпр. Продаја. Али мислио сам да је необично да неко покуша да се усра кроз техничку каријеру као што је развој софтвера.

L O A D I N G
. . . comments & more!

About Author

theMachine94 HackerNoon profile picture
theMachine94@themachine94
I am a Software Engineer. I have been writing C++ and Rust for almost a decade.

ХАНГ ТАГС

ОВАЈ ЧЛАНАК ЈЕ ПРЕДСТАВЉЕН У...