زمانی که شخصی تصمیم می گیرد وارد حوزه ی برنامه نویسی شود، می داند که مانند همه ی حوزه ها، نیاز به مطالعه دارد. اما این مطالعه، فقط خواندن کتاب، مقاله یا یک زبان برنامه نویسی خاص نیست، بلکه مطالعه ی کد است. مطالعه ی کد مانند هر کار دیگری نیاز به تمرین و تکرار و به دست آوردن مهارت دارد. در این مقاله قصد دارم مهارت های کد خوانی را با شما در میان بگذارم.
12 مهارت مهم برای کد خوانی بهتر
یکی از کارهایی که یک توسعه دهنده از زمانی که وارد این حوزه می شود، باید انجام دهد، مطالعه و بررسی کد است، آن هم نه فقط یک زبان برنامه نویسی خاص. بار ها و بارها نیاز است برای رفع بسیاری از اشکال ها، به برنامه هایی با زبان های مختلف مراجعه کرده و کد آن ها را بررسی نماید. گاهی این کار سخت و طاقت فرسا می شود و گاهی آن قدر پیچیده هست که باعث گیج شدن و اشتباه خواهد شد.
اگر می خواهید یک code review (بررسی یا مطالعه ی کد) خوب و مفیدی داشته باشید، مطالعه ی این مقاله را به شما پیشنهاد می کنم. در این مقاله نکته های خوبی را برایتان شرح می دهم تا بر اساس آن، خواندن کد برایتان دشوار نبوده بلکه موثر نیز باشد.
1- مشخص کردن هدف Code Review
یکی از مهم ترین نکته هایی که در بررسی و مطالعه ی کد باید به آن توجه کرد، هدف است. نمی گویم بدون هدف نمی توان کد خواند. بلکه منظور این است که با داشتن هدف و مشخص کردن آن، به طور حتم بررسی کد بهتری خواهید داشت. برای مشخص کردن هدفتان، به این فکر کنید که چرا می خواهید کدی را بررسی یا مطالعه کنید؟
در این جا چند هدف مهم را برایتان مشخص می کنم:
- شما یک توسعه دهنده ی مسئول هستید که باید کد های کامیت شده توسط شخص دیگری در تیم را بررسی کنید.
- شما یک توسعه دهنده هستید که برای کار هایی مانند استفاده از یک پکیج، پیاده سازی ویژگی جدید، رفع باگ و ... نیاز به بررسی کد های مشابه دارید.
- شما یک توسعه دهنده (در هر سطحی از تازه کار تا مدیر ارشد) هستید که برای پیشرفت شخصی خود، نیاز به مطالعه ی کد های مختلف دارید.
ممکن است هدف های دیگری نیز وجود داشته باشد که خوشحال می شوم در بخش نظرات با ما در میان بگذارید، اما این 3 هدف مهم ترین آن ها است.
2- استفاده از چک لیست در Code Review
بعد از این که هدفتان مشخص شد، بهتر است برای خودتان چک لیست مناسبی تهیه کنید. با داشتن چک لیست، بیش از پیش به هدف خود نزدیک خواهید شد. با یک مشورت یا جستجو، چک لیست های مختلفی را پیدا می کنید اما پیشنهاد می کنم خودتان از آن ها ایده گرفته و چک لست مختص خود را تهیه کنید.
برای مثال من در بررسی کد ها با هر هدفی که باشد، مطمئن هستم که در چک لیستم گزینه ای مانند "نکته ی جدید" خواهم داشت. یعنی در آن بررسی کد، نکته ی مهم یا جدیدی است که باعث خواهد شد در موردش مطالعه کنم. یا گزینه ای با عنوان باگ ها و میزان اهمیت آن ها و موارد دیگر.
همچنین چک لیست ها موثرترین راه برای حذف خطاهای رایج هستند. ممکن است فردی در تیم شما 10 اشتباه را بارها و بارها تکرار کند. چک لیست های بررسی کد، مشخص می کند که در هر نوع بررسی، افراد تیم چه انتظاری باید داشته باشند. یعنی برای پیگیری هدف ها و بهبود، مفید هستند.
3- داشتن یک راهنما با هر سطحی
همیشه در هر سطحی که هستید، یادتان باشد، هم کاری و هم فکری، نه تنها نتیجه ی کار را بهتر می کند بلکه سطح شما را به طرز عجیبی بالا خواهد برد حتی اگر شخص مورد نظر شما، در سطح پایین تری نسبت به شما قرار داشته باشد. در ضمن، تمرین کار گروهی نیز کرده اید.
نمی دانم تجربه داشته اید یا نه، در زمان مدرسه، گاهی با دوستانمان به صورت دو نفری درس می خواندیم، از هم سوال می کردیم و در نقش معلم و شاگرد تمرین کرده و جایمان را عوض می کردیم. ماهیت کار گروهی و یادگیری گروهی هیچ فرقی نکرده و فقط بزرگتر شده ایم و با مسئولیت بیشتری کار هایی را انجام می دهیم.
4- مشخص کردن معیار های Code Review
اگر خاطرتان باشد، نکته ی اول این بود که باید هدف خودتان را مشخص کنید. حال بر اساس هدف و چک لیست، باید معیار ها و شاخص ها را تعیین کنید. برای مثال قرار است به بررسی کدی بپردازید که درصد اشکال های زمان توسعه را کم کنید. پس قرار است بررسی کد، یک تصویری از بهبود کد به شما بدهد. فقط روی این مورد تمرکز کنید و مواردی که می تواند باعث بهبود شود را در نظر بگیرید.
یادتان باشد رفع اشکال های بیشتر در یک code review، هدف موثری نیست. فرض کنید قرار است کدی را بررسی کنید که ساختار و الگوریتم آن را تایید نمایید. روی همین معیار تمرکز کرده و به دنبال اشکال ها یا موارد ریز دیگر نباشید (آن ها را به زمان مناسب خود موکول کنید). بررسی همه جانبه ی کد در یک زمان، نه تنها شما را زودتر خسته می کند، بلکه نشان دهنده ی عدم توانایی شما در تمرکز روی اصل موضوع است. همچنین ممکن است باعث شود نویسنده ی کد، از تمرکز روی آن الگوریتم دور شده و در آینده، فقط به نکته هایی که شما می خواهید توجه کند و این خیلی بد است. تفکیک معیار ها و انجام آن ها در زمان مناسب، توانایی شما را در کد خوانی، نشان می دهد.
5- مشخص کردن تعداد خط های کد
در مقاله های زیادی و افراد مختلفی گفته اند که مرور کمتر از 400 خط کد، در یک زمان، مناسب است. یعنی وقتی می خواهید کدی را بررسی کنید، سعی کنید بین 200 تا نهایت 400 خط کد را بررسی کنید. گفته شده که مغز می تواند به طور موثر اطلاعات زیادی را در یک زمان پردازش کند اما بیش تر از 400 خط، توانایی پیدا کردن اشکال ها را کاهش می دهد. به طور معمول بررسی 200 تا 400 خط کد، در مدت 60 تا 90 دقیقه باید 70 تا 90 درصد اشکال ها را کشف کند. یعنی اگر 10 اشکال در کدی وجود داشته باشد، با یک بررسی درست باید بین 7 تا 9 مورد از آن ها را پیدا کرد.
اما من می خواهم تجربه ی خودم از این نکته را خدمتان عرض کنم. پیشنهاد می کنم برای خودتان یک سقفی از تعداد خط ها و زمان در نظر بگیرید. برای مثال اگر خواندن کد فقط جهت مطالعه هست، روزانه بین 1 ساعت تا 1 ساعت و نیم، بیش از 400 خط کد را مطالعه نکنید.
اگر شما در جایگاهی قرار دارید که بررسی کد جز وظیفه های شماست، باید به افراد تیم یادآور شوید که کامیت های کوچک داشته باشند تا در فاصله های زمانی مختلف، بتوانید کد ها را بررسی کنید. اما اگر جهت مطالعه ی خودتان، کد می خوانید، باید از کد های کمتر شروع کنید ولی نگذارید که مطالعه یا بررسی کد، از یک تعدادی بیشتر شود. ممکن است آستانه ی توانایی شما 500 خط کد یا 300 خط باشد. من نمی خواهم با اعداد بازی کنم و 4 خط کد بیشتر یا کمتر را به شما پیشنهاد دهم. می خواهم متذکر شود که یک حد کم و یک حد زیاد برای خودتان مشخص و از آن پیروی کنید. ممکن است با به دست آوردن تجربه، این میزان تغییر کند.
فراموش نکنید که اگر مجبور هستید برخی از روز ها، زمان زیادی را به بررسی کد های زیادی بگذرانید، حتما بین هر 400 خط کد (سقفی که برای خود در نظر می گیرید) یا هر 1 ساعت مرور، استراحتی داشته باشید. این هنر شما را نشان می دهد که چه طور آن را مدیریت کنید.
6- سرعت کمتر در زمان محدود و مشخص
اگر مقدار قابل قبولی از کد را بخواهید بررسی کنید، بهتر است با سرعت کمتری به بررسی کد بپردازید و زمان محدودی برای آن در نظر بگیرید. پس ابتدا با توجه به نکته ی قبل، اندازه ی کدی که می خواهید بررسی کنید را مشخص کرده و زمان آن را تعیین کنید، سپس آرام و آهسته آن را بررسی کنید که موثرترین بررسی کد خواهد بود.
7- مرور نکردن بیش از 60 دقیقه در هر بار بررسی
وقتی که گفته شد بهتر است آرام به code review بپردازید، این نکته را نیز در نظر بگیرید که برای مدت طولانی هم این کار را انجام ندهید. برای مثال مرور کد در 2 ساعت به این معنی نیست که کند بررسی می کنید. عملکرد، بعد از 1 ساعت کم کم کاهش پیدا می کند. بین زمان های بررسی کد، حتما زمانی را استراحت کنید تا کیفیت کار کم نشود. پیشنهاد می کنم اگر در طول روز مجبور به مرور کد های زیادی هستید، علاوه بر مشخص کردن تعداد خط های کد، بازه های زمانی کوتاه تعیین کنید و بین آن استراحت فراموش نشود.
8- کامنت گذاری و حاشیه نویسی
توسعه دهندگان باید قبل از این که کدشان بررسی شود، کامنت ها و حاشیه نویسی های مناسب را در کد قرار دهند. این کار، به کسی که کد را بررسی می کند، راهنمایی کرده و نشان می دهد که کدام فایل ها را ابتدا باید نگاه کند و می داند هر بخش کد، در چه موردی است.
اگر در جایگاه توسعه دهنده هستید، کامنت گذاری و نوشتن readme مناسب برای پروژه را فراموش نکنید. در این حالت، وقتی خودتان می خواهید کدی را بررسی کنید، برای دست یابی به مفهوم الگوریتم ها و کد ها، به کامنت ها توجه خواهید کرد. هر چه بهتر نوشته شود، بهتر نیز خوانده و درک خواهد شد. پس خوب کامنت گذاری کنید و انتظار داشته باشید کد هایی که بررسی می کنید نیز، این مورد را داشته باشند.
9- ایجاد فرآیند مناسب برای رفع اشکال ها
این نکته بیشتر برای زمانی کاربرد دارد که هدف شما از code review، پیدا کردن اشکال ها باشد. سوالی که در هنگام این نوع code review ممکن است پیش آید این است که بعد از بررسی کد، باگ ها چه طور رفع خواهند شد؟ به نظر ساده می رسد اما بسیاری از تیم ها روشی سیستماتیک برای رفع اشکال هایی که برای یافتن آن ها سخت تلاش کرده اند، ندارند. یعنی فقط اشکال گرفته می شود اما بعد آن مشخص نیست.
بهترین راه برای اطمینان از رفع اشکال ها، استفاده از یک ابزار بررسی کد است که به افرادی که کد را بررسی می کنند کمک می دهد اشکال ها را ثبت کنند، در مورد آن ها با توسعه دهنده بحث و گفتگوکنند و تغییرهای کد را تایید کنند. بدون ابزار خودکار، اشکال های پیدا شده در بررسی، به احتمال زیاد، در سیستم ردیابی اشکال تیم ثبت نمی شوند.
ابزار های بررسی کد زیادی وجود دارد که به طور حتم نام آن ها را شنیده اید. برخی از این ابزار ها عبارت اند از:
- GitHub
- GitLab
- Bitbucket
- Azure DevOps
- Crucible
- Gerrit
- JetBrains Space
- Review Board
- Gogs/Gitea
- Collaborator
- Veracode
10- تقویت فرهنگ مثبت در Code Review
این نکته نیز بیشتر در مورد code review های تیمی است. البته منظور این نیست که یادگیری در پی ندارد، اتفاقا بر عکس یادگیری هم دارم اما هدف، بررسی، پیدا کردن اشکال و تایید کد است. شاید به این موضوع فکر کرده اید که بررسی کد می تواند بر رابطه های بین افراد تیم تاثیر بگذارد و گاهی به برخی از افراد فشار وارد کند. واقعا سخت است که کد همکار یا هم تیمی را بررسی کرد بدون این که دچار سو تفاهم شوند.
باید یاد بگیریم که هدف از بررسی کد، نقد شخص توسعه دهنده نیست. این کار و هماهنگی و تربیت اعضای تیم، یک کار مدیریتی است و مدیر پروژه باید اعضای تیم را به گونه ای آموزش دهد که این گونه مسائل پیش نیاید. بنابراین، برای موفقیت آمیز بودن بررسی کد هم تیمی ها، بسیار مهم است که مدیران، فرهنگ همکاری و یادگیری را در بررسی کد، ایجاد کنند.
در حالی که به راحتی می توان اشکال ها را منفی دانست، اما به این فکر کنید که هر اشکال فرصتی برای تیم است تا کیفیت کد را بالا ببرد. همچنین بررسی کد هم تیمی ها، به اعضای جوان تیم اجازه می دهد تا از ارشدهای خودشان یاد بگیرند و حتی باتجربه ترین برنامه نویسان، عادت های بد را ترک کنند.
فراموش نکنید اشکال هایی که در بررسی کد هم تیمی ها یافت میشوند، عنوان قابل قبولی برای ارزیابی اعضای تیم نیستند. گزارش های به دست آمده از بررسی های کد هرگز نباید در گزارش های عملکرد استفاده شوند. اگر معیارهای شخصی، مبنایی برای جبران یا ارتقاء شوند، توسعه دهندگان نسبت به این فرآیند ناراحت خواهند شد و طبیعتا به جای نوشتن کد بهتر و پیش برد کلی کار، روی بهبود معیارهای شخصی تمرکز خواهند کرد.
11- پذیرش پیامدهای درست Code Review
کسی که تازه رستورانی راه اندازی کرده، به صورت مداوم منتظر این است که از سمت مشتریانش، بازخوردی دریافت کند. این بازخورد می تواند مثبت یا منفی باشد اما صاحب رستوران، از بازخورد مثبت خوشحال می شود و از باز خورد منفی استفاده کرده تا کار خود را بهتر کند. وقتی به این موضوع فکر کنیم که افراد دیگر کارمان را بررسی خواهند کرد، به طور طبیعی ما را به سمت تولید محصول بهتر هدایت می کند.
در مورد code review های درون تیمی نیز به همین صورت است. این کار به طور طبیعی توسعه دهندگان را تشویق میکند تا کد تمیز تری بنویسند، زیرا هم تیمی های آن ها، به طور حتم آن را خواهند دید. پس سعی کنید در جایگاه کسی که کد را نوشته هست، قرار بگیرید و بازخورد ها را بپذیرید (منظور پذیرش مطلق نیست. باید آن ها را دریافت کنید و در موردشان صحبت و در صورت نیاز، آن ها را برطرف کنید.). همچنین در جایگاه کسی که کد می خواند، توانایی دادن بازخورد و گفتگو در مورد آن را داشته باشید.
12- فراموش کردن سلیقه و پیروی از استاندارد ها
وقتی تازه شروع می کنید به مطالعه ی کد و قرار است کدی را بررسی کنید و از آن بیاموزید، انتظار کمتری می رود که خیلی در مقابل آن کد، از سلیقه استفاده کنید و تمام تلاش این است که یاد بگیرید و با آن کد آشنا شوید. اما در این مورد نیاز است دانش خودتان را نیز بالا ببرید. پس در مورد استاندارد های کد نویسی، best practice ها، Design Pattern ها، اصول SOLID و روش های بهینه سازی کد مطالعه کنید. به مرور زمان، کد خوانی شما پیشرفت می کند و گاهی خودتان می توانید کد های بهتری پیشنهاد دهید.
اگر قرار است کدی را جهت یافتن اشکال و تایید بررسی کنید، لطفا سلیقه را کنار بگذارید. قرار نیست همه ی افراد حتی افراد یک تیم، مانند شما کد بنویسند. شاید بتوانید یک استاندارد درون تیمی داشته باشید، که باید از قبل مشخص باشد اما نباید هر مدلی که شما دوست دارید، بقیه کد بنویسند. پس در code review ها، استاندارد ها و best practice را متذکر شوید و در مقام کد نویس، به دنبال راه حل ها و کد های بهتر باشید تا بیشتر یاد بگیرید. (در مورد استاندارد های کد نویسی best practice ها، با توجه به زبان برنامه نویسی خود، جستجو کرده و آن ها را مطالعه کنید.)
جمع بندی
در این مقاله سعی کردم نکته هایی را که در تجربه ی شخصی و یا با مطالعه به دست آورده بودم با شما دوستان به اشتراک بگذارم. دو نکته ی ریز و اما مهم دیگری وجود دارد که در این جا به آن ها اشاره می کنم.
اول این که از مطالعه ی کد، نترسید، ترس باعث می شود از آن فرار کنید و زمانی متوجه می شوید که دیگر دیر شده و برنامه نویسی را به شکل نادرست یاد گرفته اید.
نکته ی دوم این است که در هر سطحی که هستید، هر روز بخش کوچکی (حتی یک متد) را مطالعه کنید. دوستان تازه کار می توانند با مراجعه به مقاله های 20 پروژه ی ساده برای تمرین برنامه نویسی (بخش اول و دوم) در سکان آکادمی، نام پروژه ها را ببینند و بر اساس نام آن ها و با توجه به زبان برنامه نویسی مورد علاقه ی خود، کد های نمونه ی زیادی را جستجو کرده و مطالعه کنند.
مطمئن باشید به مرور زمان و با تلاش خودتان، موفق خواهید شد و در هر بار مطالعه و بررسی کد، به دانشتان اضافه خواهد شد. لطفا اگر شما هم تجربه ای (مثبت یا منفی) در مطالعه ی کد داشتید و یا نکته ای مهم به نظرتان جا افتاده است، در قسمت نظر ها با من در میان بگذارید تا من نیز از شما بیاموزم.