paint-brush
ჭკვიანი პროგრამისტიმიერ@themachine94
ახალი ისტორია

ჭკვიანი პროგრამისტი

მიერ theMachine9410m2024/10/26
Read on Terminal Reader

Ძალიან გრძელი; Წაკითხვა

ისტორია იმის შესახებ, თუ როგორ შემოუერთდა ჩვენს პატარა გუნდს მაღალი ხარისხის მქონე ბოლო კურსის სტუდენტი.
featured image - ჭკვიანი პროგრამისტი
theMachine94 HackerNoon profile picture

მე ვცხოვრობდი და ვმუშაობდი ჩრდილო-დასავლეთ გერმანიის ერთ პატარა ქალაქში, სანამ COVID-ის პანდემია არ გავრცელდებოდა. ვმუშაობდი პატარა სტარტაპში. მე ვიყავი კომპანიის 7 ინჟინრიდან ერთ-ერთი. მიუხედავად იმისა, რომ ძალიან პატარა გუნდი ვართ, ჩემი თანამშრომლები იყვნენ ყველაზე ჭკვიანი ადამიანები, ვისთანაც ოდესმე მიმუშავია. ჩვენ შევქმენით მშობლიური დესკტოპის აპლიკაცია, რომელსაც იყენებენ მექანიკური ინჟინრები ნაწილების დიზაინისთვის. ეს ნაწილები ისეთი იყო, რომელიც შედიოდა მანქანებში, თვითმფრინავებში და სხვა. ეს იყო 3D მოდელირების (CAD) პროგრამა, ასე რომ, ბუნებრივია, როცა ახალ ინჟინერს ვიქირავებდით ან გვყავდა სტაჟიორი, ვამჯობინებდით ადამიანებს, რომლებიც კარგად იყვნენ მათემატიკაში, გეომეტრიაში, დაბალი დონის მაღალი ხარისხის კოდის წერაში და ა.შ. პასუხისმგებლობა ტექნიკური გასაუბრების ჩატარების შესახებ. მე მქონდა მომზადებული პროგრამირების რამდენიმე დავალება, რომელიც ასახავდა კანდიდატის უნარებს. მე ვთხოვდი კანდიდატს, გადაჭრას პრობლემა და ისაუბროს მათი აზროვნების პროცესში. მაშინაც კი, თუ ისინი არ დაასრულებენ ამოხსნას 45 წუთში, ეს იყო სასარგებლო გზა იმის გასაგებად, თუ რა იციან და როგორ ფიქრობენ. ჩემი გუნდის სხვა წევრებმა ჩააკითხეს კანდიდატები სხვა კრიტერიუმებისთვის, როგორიცაა პიროვნება და ა.შ. ეს ძალიან კარგად მუშაობდა და ჩვენ დავიქირავეთ რამდენიმე მართლაც ნიჭიერი და მოტივირებული ინჟინერი. ჩვენ ყველანი კარგად ვიყავით იმაში, რასაც ვაკეთებდით და პატივს ვცემდით ერთმანეთს.


2020 წლის დასაწყისში, ადგილობრივი უნივერსიტეტის ბოლო კურსის სტუდენტი დაგვიკავშირდა და სტაჟირებას ითხოვდა. ძალიან საჭირო შვებულება ავიღე და ბერლინში წავედი ორი კვირით. ასე რომ, მე არ ვიყავი ტექნიკური ინტერვიუს გასაკეთებლად. ჩემი მენეჯერი და გუნდის დანარჩენი წევრები ინტერვიუს დროს ძალიან აღფრთოვანებული იყვნენ სტუდენტით და მისი რეზიუმე განსაკუთრებული იყო. აქამდე სტაჟიორი არასდროს გვყოლია. ჩემი მენეჯერი ფიქრობდა, რომ ტექნიკური გასაუბრება შეიძლება არასაჭირო იყოს სტაჟიორისთვის. ამიტომ მან გადაწყვიტა, ტექნიკური გასაუბრების გარეშე დაეწყო ჩვენთან მუშაობა. შვებულებიდან დავბრუნდი და მითხრეს ახალი სტაჟიორის შესახებ, რომელიც ერთი კვირის შემდეგ დაიწყება. მე უნდა გამეკონტროლებინა ამ სტაჟიორის მუშაობა. ძირითადად, დარწმუნდით, რომ მან გაიგო რა უნდა გაეკეთებინა, უპასუხეთ ნებისმიერ კითხვას, განბლოკეთ იგი ნებისმიერ შემთხვევაში. ჩვენ უკვე ჩამოვთვალეთ იმ პრობლემების ნაკრები, რომლებზეც გვინდოდა სტაჟიორს ემუშავა. ამიერიდან სტაჟიორს სტეფანად მოვიხსენიებ. დაახლოებით ამ დროს გერმანიაში კორონავირუსის გავრცელებაზე ბევრს საუბრობდნენ. ეს ყველგან იყო სიახლეებში. ჩვენ პატარა გუნდი ვიყავით და მიჩვეული ვიყავით ერთმანეთთან ახლოს მუშაობას, ერთმანეთის კითხვების დასმას, თეთრ დაფებზე და ა.შ. მაგრამ სამწუხაროდ, ზუსტად ერთი დღით ადრე, სანამ სტეფანი შემოგვიერთდებოდა, გერმანია სრულ ჩაკეტვაში შევიდა. ჩვენ ყველამ დავიწყეთ სახლიდან დისტანციურად მუშაობა. პირველი რამდენიმე კვირის განმავლობაში ჩვენ ვიბრძოდით დისტანციურ მუშაობასთან. მე, როგორც სტეფანის პროექტის ხელმძღვანელი, ვუთხარი, რომ მას შეუძლია დამიკავშირდეს ყველაფერი, რაც მას სჭირდებოდა. იმ შემთხვევაში, თუ მე ვიყავი წასული ან დაკავებული, გუნდის სხვა წევრები სიამოვნებით გადმოხტებოდნენ და სტეფანს ეხმარებოდნენ.


ჩვენი კოდის ბაზა იყო C# და C++-ის ნაზავი. ყველა ჩვენი მომხმარებელი იყო Windows-ზე, ამიტომ ჩვენ დავწერეთ წინა ნაწილი და ყველაფერი, რაც არ იყო მნიშვნელოვანი შესრულება C#-ში. ყველა ჩვენი რიცხვითი ალგორითმი, 3D რენდერი და ყველაფერი, რაც კრიტიკული იყო შესრულებაზე, დაიწერა C++-ში. ჩვენი გუნდის წევრების უმეტესობა ფლობდა ორივე ენას, ზოგი სპეციალიზირებული იყო ერთსა და მეორეში. სტეფანი ამტკიცებდა, რომ ძალიან კარგად ფლობდა როგორც C#, ასევე C++-ს. მის პირველ დღეს სტეფანთან რამდენიმე საათის განმავლობაში ვესაუბრებოდი, ვუხსნიდი მას ჩვენი კოდის ბაზას, ყველაფერს ვაწყობდი მის ადგილობრივ აპარატზე, რათა მან შეძლოს დაწყება. სტეფანი ცოტათი ნერვიულობდა და თქვა, რომ დიდი ხანი გავიდა მას შემდეგ, რაც მან დაწერა C++ ან გამოიყენა Windows. სტეფანი ყოველდღიურად მართავდა Linux აპარატს. მას თითქოს უჭირდა C++-ის დაწერა. მე მივხვდი, რომ ის ცოტათი გადაგდებული იყო ახალ გარემოში, ახალ კოდურ ბაზაში მუშაობას და გადავწყვიტე დამეხმარა, სანამ არ წავა. ასე რომ, ჩვენ დავაწყვილეთ დაპროგრამებული მომდევნო რამდენიმე საათის განმავლობაში. მას სჭირდებოდა, რომ დამეხმარა კოდის დაწერაში თითო სტრიქონი. ის სულელურ შეცდომებს უშვებდა თავის კოდექსში და სჭირდებოდა, რომ გამომესწორებინა ისინი და მეჩვენებინა საქმის კეთების სწორი გზა. მე ვფიქრობდი, რომ ეს ცოტა უცნაური იყო, მაგრამ გადავწყვიტე მისთვის შანსი მაინც მიმეცა. იმედი მქონდა, რომ ჩვენი ზარის ბოლოს სტეფანმა საკმარისად იცოდა, რომ დამოუკიდებლად გაეგრძელებინა მუშაობა.


ჩემდა სასიხარულოდ, მეორე დღეს სტეფანის არაფერი მსმენია. მე მას მესიჯი მივწერე და მან მითხრა, რომ პროგრესირებს და ჩემგან არაფერი სჭირდებოდა. გამიხარდა ამის მოსმენა. შემეძლო საკუთარ საქმეზე ფოკუსირება. მაგრამ მეორე დღეს სტეფანი კვლავ დამემართა და დახმარება მთხოვა. ჩვენს აპლიკაციაში წვლილისთვის, სტეფანს უნდა დაეწერა როგორც C#, ასევე C++. მას უნდა დაეწერა ალგორითმის რიცხვითი ნაწილი C++-ში და ჩაერთო იგი წინა ბოლოში და რამდენიმე სხვა რამ გაეკეთებინა C#-ში. როდესაც სტეფანი დამიკავშირდა მე-3 დღეს, მას არ ჰქონდა რაიმე პროგრესი თავისი C++ კოდით. ეს იყო ძირითადად ადგილი, სადაც ჩვენ შევჩერდით პირველი დღის ბოლოს. მაგრამ მან დიდი პროგრესი განიცადა თავისი C# კოდით. დავალებას ორივე ბოლოდან ერთდროულად უტევდა. სტეფანმა ამაყად მაჩვენა ის, რაც დაწერა C#-ში მე-2 დღეს ჩემი დახმარების გარეშე. წავიკითხე კოდი და გავოცდი. კოდი მართლაც მაღალი ხარისხის იყო. ეს იყო ლაკონური, ელეგანტური და ეფექტური. სტეფანი მართლაც ნიჭიერი იყო, ვფიქრობდი. შესაძლოა, ის მართლაც ცოტა ჟანგიანი იყო C++ სინტაქსით და ენის დეტალებით, მაგრამ მისმა C# კოდმა აჩვენა, რომ ის ზოგადად კარგი პროგრამისტი იყო. მე მივხვდი, რომ ეს კარგი ნიშანი იყო და რომ ის სავარაუდოდ გააუმჯობესებს თავის C++ კოდს ძალიან სწრაფად. ამან წაახალისა, რომ დავეხმარო მას C++-ში. მე კიდევ ერთხელ გავატარე რამდენიმე საათი მე-3 დღეს სტეფანთან დაწყვილებაში და დავეხმარე მას მისი C++ კოდით. ეს ციკლი კიდევ ერთხელ განმეორდა. სტეფანი დამოუკიდებლად წავიდა და დაწერა C# კოდი მე-4 დღეს, და დაბრუნდა ჩემთან და დახმარება მთხოვა C++-ში მე-5 დღეს. ამ დროს მე დავიწყე ეჭვი. დონე, რომლითაც მას დახმარება სჭირდებოდა C++ კოდთან დაკავშირებით, არ შეესაბამებოდა მის მიერ დაწერილ მაღალი ხარისხის C# კოდს. C++-ში მას თითქოს უჭირდა ძირითადი ცნებები, როგორ მუშაობს კომპიუტერები, როგორ მუშაობს მეხსიერება და ა.შ. ცხადია, C# არის ნაგვის შეგროვებული ენა და თქვენ არ გჭირდებათ მეხსიერების მენეჯმენტის ცოდნა, მაგრამ რაღაც არ იყო კარგად და მე არ შემეძლო. თითი დავადე.


მთელი კვირა გავიდა. როგორც გუნდს, რომელიც მიჩვეული იყო ოფისში მუშაობას, ყველას გვძულდა დისტანციური მუშაობა. ამ დროს ჩაკეტვის დროს, 7 ან ნაკლები ადამიანის ჯგუფებად შეკრების უფლება მოგვცეს. ერთმა თანამშრომელმა, მოდით დავითს ვუწოდოთ, შაბათ-კვირას მე და კიდევ რამდენიმე თანამშრომელი თავის სახლში დამპატიჟა მწვადზე. ის ჩემგან არც თუ ისე შორს ცხოვრობდა და ადრეც ასე გვქონდა გაკეთებული. კარგი ამინდი იყო, დავითის ეზოში მის ცოლთან და 3 წლის ქალიშვილთან ერთად ვზივართ. შევწვით და ვჭამდით ხორცს და ბოსტნეულს, დავლიეთ რამდენიმე ლუდი და განწყობა ძალიან მშვიდი იყო. დავითის 3 წლის ქალიშვილი პატარა პლასტმასის ჭიქებში ჭუჭყს გვთავაზობდა, თითქოს ნაყინი იყო. ზედმეტია იმის თქმა, რომ არ ჩავვარდი. დავითმა წამოაყენა სტეფანის თემა და საუბარი ასე წარიმართა:


დავითი: სტეფანთან როგორ არის საქმე? ბოლო კვირაში რამდენჯერმე მომმართა და დახმარება მთხოვა.


მე: ოჰ, მე მასაც საკმაოდ დავეხმარე. ის ახლა იწყებს მუშაობას, ამიტომ მე არ ვაპირებდი მის დახმარებას. რას ფიქრობთ მასზე?


დავითი: დიახ. დიდი შთაბეჭდილება მოახდინა მისმა ნამუშევრებმა. ის ნამდვილად მაღალი ხარისხის კოდს წერს და როგორც ჩანს, იცის რას აკეთებს C++-ში, მაგრამ ცდილობს დაწეროს კარგი C# კოდი. მე ვეხმარებოდი მას C# კოდის დაწერაში.


მე ვკითხე დევიდს: "მოიცადე, შენ ამას პირიქით გულისხმობ? იმიტომ, რომ მე ვფიქრობ, რომ მისი C# ძალიან კარგია, მაგრამ ის სწოვს C++-ს." როგორც კი წინადადება დავასრულე ორივემ მივხვდით რაც ხდებოდა. მე კოვზით ვაჭმევდი სტეფანს C++ კოდს, რომელიც მან დევიდს აჩვენა, როგორც საკუთარი. და ყოველ მეორე დღეს, დავითი კოვზით აწვდიდა სტეფანს C# კოდს, რომელიც მან მაჩვენა, როგორც საკუთარი. მე შთაბეჭდილება მოახდინა David's C# კოდის ხარისხმა და დავითმა შთაბეჭდილება მოახდინა ჩემმა C++ კოდმა. ერთის მხრივ, მე და დევიდს გვქონდა ეს მშვენიერი მომენტი ძმაო, როგორ აღფრთოვანებული ვიყავით ერთმანეთის კოდით. მაგრამ ეს მომენტი დაჩრდილა იმ ფაქტმა, რომ სტეფანმა ორივე მოგვატყუა. ეს პირდაპირ ამბიდან იყო, მაგრამ რეალურ ცხოვრებაში ხდებოდა. ეს იმ ბიჭის ისტორიას ჰგავდა, რომელმაც არ იცოდა ჭადრაკის თამაში, მაგრამ ახერხებს ორ დიდოსტატთან თამაშის დახატვას ერთმანეთის წინააღმდეგ თამაშით. სტეფანი ამას რეალურ ცხოვრებაში აკეთებდა. სტეფანმა სისულელე არ იცოდა. ჩვენ გვძულდა საკუთარი თავი, რომ ერთი კვირა დაგვჭირდა ამის გასაცნობიერებლად. სამართლიანობისთვის, ოფისში რომ ვყოფილიყავით, ეს ხრიკი არ იმუშავებდა. ჩვენ დავემშვიდობეთ ამას იმის გამო, თუ რამდენად ცუდად ვიყავით კომუნიკაციაში, როდესაც ვმუშაობდით სახლებიდან.


მომავალ ორშაბათს სამსახურში რომ დავბრუნდით, სტეფანს ვუთხარი, რომ დავითს არ შეეწუხებინა და მხოლოდ დახმარება მთხოვა. მალე აშკარა გახდა, რომ სტეფანმა არც ისე ბევრი იცოდა პროგრამირების, მათემატიკისა თუ გეომეტრიის შესახებ. აშკარა იყო, რომ მისი რეზიუმე სავსე იყო ტყუილებით. ის უბრალოდ ძალიან მოლაპარაკეა და აქვს ჟღერადობის ნიჭი, თითქოს ბევრი იცის. ამ უნარმა მას სამსახური მოუტანა და მთელი კვირა გვატყუებდა. რაც უფრო მეტს ვმუშაობდი სტეფანთან, რაც უფრო მეტს ვათვალიერებდი მის კოდს, მით უფრო არაკომპეტენტური გამოდიოდა. მე საბოლოოდ ვხედავდი ვინ იყო სტეფანი სინამდვილეში, მისი ნამდვილი პროგრამირების უნარები. არ ვარ დარწმუნებული, რომ არაკომპეტენტური სიტყვაა სწორი. სტეფანმა ცუდი კოდი დაწერა, მაგრამ უცნაური გზით ის ცუდი იყო. როცა ამის შესახებ ვკითხე, უცნაური პასუხები გასცა. აი მაგალითი, რომელიც მართლაც მოხდა. ერთხელ სტეფანს ვუთხარი მსგავსი რამ: "... ასე რომ, თქვენ გინდათ მიიღოთ ეს მთელი რიცხვი, და თუ ეს მნიშვნელობა არის ქვედა ზღვარსა და ზედა ზღვარს შორის, თქვენ უნდა დარეკოთ სხვა ფუნქცია... გასაგებია?". სტეფანმა დამარწმუნა, რომ მიხვდა, რაც უნდა გაეკეთებინა. მეორე დღეს მის პიარს რომ ვუყურე, ასეთი რამ დავინახე:


 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-იანი ათასობით სიგრძის, სტეფანმა შეაქო მე ასეთი კარგი იდეის გამო, და ახალი ცვლილება PR-ში გადაიტანა. ყოველთვის, როცა სტეფანი რაღაცის გაკეთებას ცდილობდა, ჩვენ მას უფრო მარტივს ვაძლევდით. გასაკვირია, რომ ის ამაშიც მარცხდებოდა. ეს იყო ხანმოკლე სტაჟირება, ამიტომ სტეფანთან ზედმეტად არ შევიწუხეთ. გარკვეული პერიოდის შემდეგ მან დაასრულა არაპროგრამირების ამოცანების შესრულება, გავრცელებულ ფურცლებზე და სხვა ad hoc ამოცანების მართვა. ორიგინალური პროექტები, რომლებზეც მან დაიწყო მუშაობა, მის უნარებს აღემატება. რატომღაც, სტეფანმა დაასრულა 3 თვიანი ნახევარ განაკვეთზე ანაზღაურებადი სტაჟირება. მას სურდა ჩვენთან მუშაობა ზაფხულის განმავლობაში გაეგრძელებინა. მან წამოაყენა ახალი კვლევითი პროექტი, რომელიც სასარგებლო იქნებოდა ჩვენი კომპანიისთვის. როდესაც ჩემმა მენეჯერმა მკითხა, მინდოდა თუ არა სტეფანთან მუშაობის გაგრძელება კიდევ 3 თვე, მე ვუთხარი არა. მე შევახსენე ჩემს მენეჯერს, რამდენად საშინელი იყო მისი მუშაობა ბოლო სამი თვის განმავლობაში. მაგრამ ჩემი მენეჯერი ოპტიმისტი იყო. მას ხალხის რწმენა ჰქონდა. მან მთხოვა, საკუთარ თავზე მეფიქრა, როცა სტეფანის ასაკში, კოლეჯში ვსწავლობდი და პირველად ვსწავლობდი რაღაცეებს.


ჩემმა მენეჯერმა მთხოვა დაფიქრება და მთხოვა, სტეფანს კიდევ ერთი შანსი მიმეცემა. გულწრფელად რომ გითხრათ, როდესაც სტეფანის ასაკში ვიყავი, ვწერდი 2D თამაშებს JavaScript-ში ახალი დახვეწილი (იმ დროს) HTML5 ტილოს გამოყენებით. სტეფანი მართლაც არაკომპეტენტური იყო, თუნდაც მისი ასაკისა და გამოცდილების შეგუების შემდეგ. მაგრამ მის არაკომპეტენტურობაზე ბევრად უარესი იყო მისი არაკეთილსინდისიერება. ყოველ შემთხვევაში, არ მინდოდა ამ გადაწყვეტილების მსუბუქად მიღება. ერთის მხრივ, შესაძლოა სტეფანს შეუძლია სწავლა, მაგრამ მეორეს მხრივ ის არაკეთილსინდისიერია. მე წავიკითხე წინადადება, რომელიც მან დაწერა ახალი კვლევითი პროექტისთვის. იდეა ძალიან ახალი იყო და თუ ის იმუშავებს, ძალიან გამოადგება ჩვენს კომპანიას. ეს მართლაც შთამბეჭდავი იყო. მაგრამ შემდეგ მე მქონდა სიცხადის მომენტი, როდესაც ჩემმა ცინიზმმა მოიცვა ოპტიმიზმი, რომელიც ჩემმა მენეჯერმა ცდილობდა ჩემში ჩაენერგა. სტეფანის კვლევითი წინადადებიდან ერთ სიტყვაზე დავაფიქსირე: „2 მრავალფეროვნება“.


მასთან მუშაობის შემდეგ, ვიცოდი, რამდენად არაკომპეტენტური იყო სტეფანი და არ არსებობს გზა, რომ მან იცოდა, რას ნიშნავდა 2-მაგი. სტეფანის კვლევის წინადადება დავაკოპირე ონლაინ პლაგიატის შემმოწმებელში. წლების წინ იყო და დამავიწყდა რომელი იყო. გუგლში ვეძებე და ერთ-ერთი საუკეთესო შედეგი გამოვიყენე. პლაგიატის შემმოწმებელმა აღმოაჩინა 97% შესაბამისობა კვლევით ნაშრომთან და მიაწოდა ორიგინალის ბმული. სტეფანმა ყველაფერი დააკოპირა. მეორე დილით სტეფანს ვესაუბრე მისი კვლევის შესახებ. როგორც კი ლაპარაკი დაიწყო, აშკარა იყო, რომ არ ესმოდა რაზე ლაპარაკობდა და ეს ყველაფერი მხოლოდ სიტყვის სალათა იყო. ის ისევ შარლატანი იყო. მე ვაცნობე ჩემს მენეჯერს და ამან საბოლოოდ დაარღვია მისი რწმენა სტეფანის მიმართ. სტეფანი ჩვენთან ისევ არ მუშაობდა.


ერთადერთი, რაშიც სტეფანი კარგად იყო, საკუთარი თავის გაყიდვა იყო და თითქოს იცოდა რაზე ლაპარაკობდა. მე მესმის, რომ არის პროფესიები, სადაც ამ უნარებმა შეიძლება საკმაოდ შორს მიგიყვანოთ, მაგალითად, გაყიდვები. მაგრამ მე მეგონა, რომ თავისებური იყო ვიღაცისთვის, რომ ცდილობდეს აეღო გზა ტექნიკური კარიერა, როგორიცაა პროგრამული უზრუნველყოფის განვითარება.