“ძია ბობის” — “სუფთა კოდი”

Rostomi Kutchukhidze
5 min readApr 6, 2022

--

ეს კაცი ჩათლახური სმირკით არის რობერტ სესილ მარტინი, კაცი რომელმაც დაწერა Clean Code.
და კიდევ ძალიან ბევრი კარგი წიგნი რომელიც ჯერჯერობით არ წამიკთხავს.
მაგრამ “სუფთა კოდიც” საკმარისი აღმოჩნდა იმისთვის რომ

  1. მეგრძნო სირცხვილი და ჩადენილი ცოდვები ჩემს ნაწერ კოდში
  2. მომენანიებინა და დავქრინჯულიყავი
  3. დავდგომოდი განწმენდის გზას

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

ამიტომ ვაპირებ “კლუჩევოი” მცნებები, ფასეულობები და შთაბეჭდილებები აქ ამოვაკონსპექტო და ყოველი კომპონენტის დაწერამდე ერთხელ გადავიკითხო (და ორჯერ დავფიქრდე).

გაფრთხილება! თუ ამ კონსპექტს კითხულობ, ჯავას დეველოპერი ხარ და კაიხელა ბინძური კოდი გაქვს ნაწერი, ახლავე შეუდექი ამ წიგნის კითხვას!

რამდენიმე დიდაქტიკური ფრაზისა თუ გვერდის წაკითხვის შემდეგ ჩემს გულს კაუჭი ამ ფრაზამ გამოსდო:

“We Are Authors”

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

თავიდან ვერ მივხვდი რა იგულისხმა, მეგონა სუფთად ნაწერი კოდის სქრინი შემხვდებოდა მაგრამ ასეთი რამ შემხვდა:


-ბობი მოდულში შევიდა.
-მან ჩამოსქროლა ფუნქციასთან რომლის შეცვლაც სჭირდებოდა.
-ბობი შეჩერდა… რაღაცები უნდა გაეთვალისწინებინა.
-ოჰ! მან მოდულის დასაწყისში ასქროლა რათა ცვლადის ინიციალიზაცია შეემოწმებინა!
-ახლა კი ჩამოსქროლა და რაღაცის აკრეფა დაიწყო
-უუუუუპს!!! ის თავის ნაწერს შლის!
-კრეფს
-ისევ შლის!
-ბობმა რაღაც დაწერა (ისიც ნახევრად) და შემდეგ ისევ წაშალა!
-მან სხვა ფუნქციასთან ჩამოსქროლა რათა გამოეძახებინა ფუნქცია რომელსაც ცვლიდა.
-გამოიძახა
-ასქროლა და წეღან წაშლილი კოდი თავიდან დაწერა
-ბობი შეჩერდა
-კვლავ წაშალა კოდი!
-ბობმა ახალი ფანჯარა გააღო რათა ქვეკლასისთვის დაეხედა: “ნუთუ ეს ფუნქცია გადაწერილია?”

არასოდეს მიფიქრია რომ ჩემი დაწერილი კოდი შეიძლება ამბავს ყვებოდეს.
არადა გრედი ბუჩი (ან გრედი ბუხი) ამბობს:

“სუფთა კოდი მარტივი და პირდაპირია, იგი იკითხება როგორც კარგად დაწერილი პროზაული ნაწარმოები, სუფთა კოდი არასოდეს ფარავს შემქმნელის განზრახვას, პირიქით იგი სავსეა მკვეთრი აბსტრაქციებით”

ზედა ნაწყვეტმა და ქვემორე ფრაზამ მარიო ვარგას ლიოსას “საუბარი კათედრალში” და ამ მწერლის წერის მანერა გამახსენა.
ერთი-ერთში ჯდება!

ახლა კი რომ არ გამიგრძელდეს და არც თქვენ მოგეწყინოთ ძვირფასო მკითხველო, შევეცდები 462 გვერდიანი წიგნი 10 მცნებამდე დავიყვანო და სანამ კოდის ახალი ნაგლეჯის წერას შევუდგები ისინი მკაცრად გავითვალისწინო:

  1. ცვლადს სახელი შეურჩიე იმგვარად, რომ თავის მნიშვნელობას და აზრს მიესადაგებოდეს
  2. ფუნქციას შეურჩიე სახელი იმგვარად რომ მოქმედებას გამოხატავდეს თავის არგუმენტზე, მაგ: write(book), handleSubmit(form). ფუნქციის და არგუმენტის საუკეთესო წყვილი ზმნა და არსებითი სახელია
  3. ჩაშალე დუბლირებული ოფციები, გაიტანე ისინი სხვა ფუნქციაში, გახადე კოდი reusable. ფუნქციის ზომა უნდა იყოს პატარა და კიდევ უფრო პატარა. (და კიდევ უფრო პატარა).
  4. არ გადასცე ფუნქციას არგუმენტი თუ ეს ძალზედ აუცილებელი არ არის. კაი ჯანდაბას ერთი შეიძლება. მაქსიმუმ ორი.
    სამ არგუმენტს გაატან და კოდისთვის ტესტს კიარა ჯოჯოხეთს დაწერ!
  5. კოდის დაწერამდე დაწერე იუნიტ ტესტი, TTD-ის (Test Driven Development გარეშე კოდი ადრე თუ გვიან დალპება
  6. არ დაწერო არასაჭირო კომენტარები, თუ კოდს კომენტარი სჭირდება ესე იგი კარგი კოდი არ გიწერია. გამოიყენე კომენტარი მხოლოდ აუციებელ შემთხვევებში.
  7. არ გაიმეორო საკუთარი კოდის ნაგლეჯი მეორედ!
  8. ყოველთვის იფიქრე საკუთარი (და არამარტო საკუთარი) კოდის რეფაქტორზე, გაუმჯობესებაზე, სტრუქტურულ დახვეწაზე.
  9. არ შექმნა ფუნქციის/კლასის შიგნით მრავალშრიანი აბსტრაქციები
  10. გამოიყენე ლინტერი, ფორმატერი, შეადგინე წესები პროექტის დაწყებამდე და მკაცრად მიჰყევი მას.

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

“იფიქრე კოდზე როგორც კარგად დაწერილ საგაზეთო სტატიაზე. სტატიას ხომ ვერტიკალურად ვკითხულობთ? ზემოდან ქვემოთ!
ჯერ მთავარ ჰედლაინს ვკითხულობთ და ვგებულობთ რაზეა ამბავი, ამის შემდგომ ვწყვეტთ გვიღირს თუ არა მისი წაკითხვა.

პირველი პარაგრაფი მოკლე შინაარსს აღგვიწერს, მთლიან დეტალებს რასაკვირველია გვიმალავს მაგრამ ამბის მთავარ კონცეფციას გადმოსცემს.

რაც უფრო ქვემოთ ჩადიხარ დეტალები იმატებს: თარიღები, სახელები, ფრაზები, პრეტენზიები და ტრივიალური რამე-რუმეები”

მართალია ერთი ხელის მოსმით მარიო ვარგას ლიოსას, გრედი ბუხს და ძია ბობს ვერ გავუტოლდებით მაგრამ საგაზეთო სვეტის დაწერას ვისწავლით. პირველი გვერდის სტატიის დონეს ეგრევე ვერ დავდებთ მაგრამ ნეკროლოგით დავიწყოთ, ამასაც თავისი მუღამი აქვს:
როდესაც ამერიკაში საბეჭდი მანქანის უკანასკნელი ხელოსანი გარდაიცვალა, “New Your Times”-მა ამ ფაქტზე ისეთი ნეკროლოგი გამოაქვეყნა, რომ თითქოს ეპოქა დამთავრდა, ერთი ერა დასრულდა სამყაროს სიტყვათკრეფაში და მეორე დაიწყო.
განა რა?
მაგრამ “კვირის პალიტრის” ბოლოსწინისწინა გვერდზე რომ ნეკროლოგების გვერდი იყო ხოლმე იმას გავს ჩემი კოდი მაშინ როცა NYT ჟურნალისტმა ნეკროლოგიც კი ცნობილი გახადა მასში ჩადებული ემოციით და წერის კულტურით.

ახლა კი მსურს გაგიზიაროთ რამდენიმე ‘გრეხი’ რომლის მსგავსიც Clean Code-ის წაკითხვის შემდეგ არასოდეს (არასოდეს!) არ უნდა ჩაიდინოთ!

ასეთ რამეს თუ ჩაიდენთ, ჩათვალეთ თქვენმა მარჯვენამ გაცდუნათ, უნდა მოიკვეთოთ და გეენიაში ჩააგდოთ.
ცვლადისთვის ამ სახელის დარქმევა ძალიან მიყვარს, მითიური პერსონაჟია ფილმიდან “ცისფერი მთები” მაგრამ არ შეიძლება!
კაი ჩემო ძმაო?! მართლა? ერორი მოხდა? რას მელაპარაკები?! :O (თან როგორ საყვარლად ვლოგავ ❤)

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

Clean Code წაკითხვას კი მაშინ აქვს ყველაზე დიდი მუღამი როცა უკვე საკმარისზე ბევრი ბინძური კოდი გაქვს ნაწერი და არა მაშინ როცა ჯერ კოდი არ გაქვს ნაწერი და უკვე სუფთა კოდის წერა გინდა.

დაწერე ბინძური კოდი.
წაიკთხე.
მოუბრუნდი.
დაარეფაქტორე.
კიდე წაიკითხე.
მოუბრუნდი.
დაარეფაქტორე.
კიდე წაიკითხე.
კიიიდეეე მოუბრუნდი.
კიიიიდეეე დაარეფაქტორე.

writeCode();

for (let i = 0; i ≤ refactorQuantity; i++){
read(cleanCode);
reanalyze(yourCode);
refactor(yourMind)
}

ერთადერთი რაც ამ წიგნის წაკითხვის შემდეგ მაფიქრებს არის შემდეგი:
ვთქვათ ჩავშალე, დავყავი, დუპლიკაცია აღმოვფხვერი, გავამრავალფეროვნე, ერთი დიიიიიდი ძროხა ფუნქციის/კლასის მაგივრად ბევრი და პატარა reusable ბოჩოლები მაქვს.
ესენი როგორ დავალაგო ისე რომ მივხვდე რომელ ფარდულში რომელი ჯიშის ბოჩოლა უნდა დავაწვინო?

აქ მახსენდება ჩემი მენტორის სიტყვები რომელმაც ქლინ კოდის გარჩევა მირჩია: “პატერნები გაარჩიე”

მომავალ შეხვედრამდე 👋

--

--

Rostomi Kutchukhidze

მიყვარს მიმების კეთება. ასევე საკუთარ კომპიუტერსა და Google Drive-ში დროგამოშვებით ფაილებისა და ფოლდერების გადალაგება-გადმოლაგება.