آموزش ریفکتورینگ: نشانه‌ها و تکنیک‌ها

در این دوره ریفکتورینگ کدها را فارغ از زبان و سطح دانش برنامه‌نویسی می‌آموزیم. ریفکتورینگ چیست؟ فرایند تغییر کد کثیف یا پرداختن (Technical Debt). هدف ریفکتورینگ جنگیدن با بدهی فنی آن است. این دوره برای ... ادامه

ارائه دهنده:  مکتب‌خونه  مکتب‌خونه
مدرس دوره:
سطح: مقدماتی
 پلاس
  
زمان مورد نیاز برای گذارندن دوره:  4 ساعت
مجموع محتوای آموزشی:  4 ساعت ویدئو
 (قابل دانلود می‌باشد)

آنچه در این دوره می‌آموزیم:

 یادگیری عمیق تمامی مفاهیم اصلی ریفکتورینگ

 تسلط بر مباحث تئوری شی‌گرایی و کد تمیز

 کمک به مصاحبه با شرکت‌های خارجی و داخلی

 تسلط بر مباحث پیشرفته‌ برنامه‌نویسی فارغ از هر زبانی

 کمک به دریافت جاب آفر یا پروژه‌های بین‌المللی

پیش‌نیاز‌ها

برای گذراندن دوره آشنایی با یک زبان برنامه نویسی و آشنایی با اصول پایه برنامه نویسی شیء گرا (OOP) نیاز است.

سرفصل‌های دوره آموزش ریفکتورینگ: نشانه‌ها و تکنیک‌ها

مقدمه
تعاریف پایه
  ریفکتورینگ چیست؟
"04:22  
  کد تمیز چیست؟
"09:07  
  بدهی فنی چیست؟
"05:31  
  علل ایجاد بدهی فنی
"16:04  
شروع ریفکتورینگ
  کی ریفکتور کنیم؟
"05:55  
  چگونه ریفکتور کنیم؟ (Checklist)
"05:51  
  دسته بندی نشانه‌ها
"04:51  
Bloaters
  مقدمه Bloaters
"03:30  
  Long Method
"19:45  
  Large Class
"07:30  
  Primitive Obsession
"10:01  
  Long Parameter List
"07:13  
  Data Clumps
"05:05  
Object Orientation Abusers
  مقدمه Object Orientation Abusers
"02:02  
  Switch Statements
"11:12  
  Temporary Field
"04:46  
  Refused Bequest
"07:52  
  Alternative Classes with Different Interfaces
"04:59  
Change Preventers
  مقدمه Change Preventers
"02:09  
  Divergent Change
"06:15  
  Shotgun Surgery
"05:59  
  Parallel Inheritance Hierarchies
"05:26  
Dispansables
  مقدمه Dispansables
"02:23  
  Comments
"11:22  
  Duplicate Code
"15:41  
  Lazy Class
"04:22  
  Data Class
"08:44  
  Dead Code
"03:27  
  Speculative Generality
"05:51  
Couplers
  مقدمه Couplers
"03:18  
  Feature Envy
"05:01  
  Inappropriate Intimacy
"07:48  
  Message Chains
"05:28  
  Middle Man
"04:34  
باقی نشانه‌ها
  Incomplete Library Class
"06:53  
سخن پایانی
  منابع تکنیک‌ها
"02:37  
  معرفی کتاب برنامه‌نویس عملگرا
"03:21  

درباره دوره

در این دوره ریفکتورینگ کدها را فارغ از زبان و سطح دانش برنامه‌نویسی می‌آموزیم. 

ریفکتورینگ چیست؟ 

فرایند تغییر کد کثیف یا پرداختن (Technical Debt). هدف ریفکتورینگ جنگیدن با بدهی فنی آن است. 

این دوره برای چه کسانی مناسب است؟

  • برنامه‌نویسان در هر سطح از Junior تا Senior با هر زبان برنامه‌نویسی 
  • کسی که می‌خواهد به یک سطح پیشرفته‌تر در برنامه‌نویسی برسد 
  • مدیران پروژه‌های IT 
  • هر کسی که علاقه‌مند به مشارکت در پروژه‌های منبع‌باز است 
  • کسی که interview با شرکت‌های خارجی برای job offer یا قصد دریافت پروژه‌های بین‌المللی دارد. 

درباره استاد

maktabkhooneh-teacher پویا صبرآموز

پویا صبر آموز، دانش‌آموخته کارشناسی ارشد مهندسی کامپیوتر گرایش نرم‌افزار و دارای ۱۳ سال سابقه کار و تدریس برنامه‌نویسی به زبان‌های مختلف است. ایشان تجربه راه‌اندازی استارتاپ به‌عنوان هم‌بنیان‌گذار فنی در کاربوم، یک‌پی و اسکرام اسکول را داشته‌اند، و البته به‌عنوان مشاور و منتور در شرکت‌های داخلی و بین‌المللی فعالیت می‌کنند. از تجربیات بین‌المللی ایشان می‌توان به مشاوره شرکت Smart IT Solutions انگلستان و برنامه‌نویسی و مدیر فنی در Bison Solutions کانادا اشاره کرد. همچنین ایشان تجربه راه‌اندازی و مشاوره فنی استارتاپ‌های متعدد در ایران و امارات را داشته و در حال حاضر هم‌بنیان‌گذار استارتاپ scrumschool در هلند هستند. از سوابق آموزشی ایشان می‌توان به سابقه سال‌ها تدریس در بهترین مجتمع‌های فنی تهران و تدریس دوره‌های مختلف برنامه‌نویسی، ریفکتورینگ، گیت، میکروسرویس‌ها، دیتابیس و... اشاره کرد.

مشاهده پروفایل و دوره‌‌های استاد

نظرات کاربران

تا کنون نظری برای این دوره ثبت نشده است. برای ثبت نظر باید ابتدا در دوره ثبت نام کرده و دانشجوی دوره باشید.

دوره‌های پیشنهادی

سوالات پرتکرار

پس از سپری شدن زمان دوره، به محتوای دوره دسترسی خواهم داشت؟
بله؛ پس از سپری شدن مدت زمان دوره شما به محتوای دوره دسترسی خواهید داشت و می توانید از ویدئوها، تمارین، پروژه و دیگر محتوای دوره در صورت وجود استفاده کنید ولی امکان تصحیح تمارین توسط پشتیبان و دریافت گواهی نامه برای شما وجود نخواهد داشت.

یک نرم‌افزار برای اینکه بتواند طول عمر بیشتری داشته باشد همواره نیاز به نگهداری، به‌روزرسانی و رفع مشکلات دارد. بیشتر این پاک‌سازی‌ها روی کدهای قبلی صورت می‌گیرند. در واقع کدهای کثیف و بهینه نشده هزینه‌ها را بسیار بالا خواهد برد. ریفکتورینگ (Refactoring) یک عمل و یا بهتر بگوییم راه‌حلی کاربردی برای ازبین‌بردن کدهای کثیف و کاهش‌دادن هزینه‌ها در آینده محسوب می‌شود که اکثر برنامه‌نویسان از آن برای نگهداری از نرم‌افزارهای خود استفاده می‌کنند.

عمل Refactoring منجر می‌شود تا شما کدهایی خواناتر و تمیزتر از قبل داشته باشید، بدون اینکه در رفتارها و عملکردهایشان تغییری ایجاد شود. هدف اصلی ریفکتورینگ مبارزه با بدهی فنی است که در نهایت کدهای کثیف را تبدیل به کدهای تمیز و ساده و قابل‌فهم می‌کند.

اما بدهی فنی چیست؟

مارتین فالوور در وبلاگ خود می‌گوید: بدهی فنی مانند بدهی مالی است، دقیقاً مانند بدهی مالی وقتی شما پولی که وام‌گرفته‌اید را به‌موقع پرداخت نکنید مجبور به پرداخت سود اضافه به‌ازای دیرکردتان خواهید شد، در واقع شما جریمه می‌شوید که اگر بخواهیم به برنامه‌نویسی تشبیهش کنیم؛ همان تلاش‌های اضافی است که بعدها برای توسعه کدِ نوشته شده می‌کنیم، قبلاً ما قبلاً کدی نوشته‌ایم که کثیف بوده و در واقع کمبود تمیزی داشته است.

راه‌حل‌هایی که پیشروی ماست این است که می‌توانیم درگیر تلاش‌ها و کارکردن‌های اضافی شویم و همچنان به کدنویسی سریع و کثیف ادامه دهیم و برای توسعه آن مجبور به‌صرف هزینه‌های اضافی شویم و یا اینکه با حفظ یک سری اصول و قواعد، کدهای جدیدتر را به‌گونه‌ای بنویسیم که تمیزتر باشد و با استفاده از همین قواعد کدهایی که قبلاً نوشته شده را بهتر کنیم، هرچقدر ما کدهای تمیزتری بنویسیم، جریمه‌ای که بعداً برای توسعه آن پرداخت می‌کنیم کمتر خواهد بود.

آموزش ریفکتورینگ در برنامه نویسی به صورت حرفه‌ای و جامع

گاهی مواقع کدهای یک برنامه، نرم‌افزار یا وب‌سایت به گونه‌ای نوشته می‌شود که لازم است کدهای آن بازنویسی و پاک‌سازی شود تا عملکرد برنامه بهبود یابد. به فرایند بازنویسی و پاک‌سازی کدهای یک برنامه با هدف بهینه‌سازی ساختار کدها، ریفکتورینگ (Refactoring) گفته می‌شود. ریفکتورینگ در برنامه نویسی به هیچ عنوان عملکرد برنامه را تغییر نمی‌دهد؛ ولی درک کدها را برای تیم توسعه‌دهندگان، آسان‌تر می‌کند و کدهای کثیف و پیچیده را بهبود می‌بخشد. وقتی کدهای تمیزتر باشند، تعداد باگ‌های برنامه کاهش می‌یابد و افزودن قابلیت‌ها و ویژگی‌های جدید به آن آسان‌تر می‌شود.

مزایای و فواید مختلف ریفکتورینگ در برنامه نویسی باعث شده است که بسیاری از متخصصان کدنویسی، دنبال یادگیری و آموزش این تخصص کارآمد باشند. با یادگیری این مهارت می‌توانید نقش یک برنامه‌نویس کلیدی و موثری را در سازمان‌ها و کسب و کارهای مختلف ایفا کنید.

اصول ریفکتورینگ در برنامه نویسی

ریفکتورینگ در برنامه نویسی، اصول و قوانین خاص خودش را دارد و لازم است که این اصول به صورت کامل رعایت شود تا فرایند بازنویسی و پاک‌سازی کدها به خوبی صورت گیرد. در ادامه چند مورد از اصول ریفکتورینگ را به صورت مختصر و مفید معرفی و بررسی خواهیم کرد:

  • در ریفکتورینگ، می‌خواهیم کدها را بازنویسی و پاک‌سازی کنیم تا قابلیت خوانایی آن‌ها آسان‌تر شود. برای رسیدن به این هدف باید کدها را به اجزای کوچک‌تر و قابل فهم تقسیم کنیم. 
  • برای رفکتورینگ در برنامه نویسی، دنبال این هستیم که از الگوهای طراحی کمک بگیریم. این الگوها به ما کمک می‌کنند که به کدها، ساختاری منسجم‌تر، مناسب‌تر و انعطاف‌پذیرتری بدهیم.
  • یکی از اصول تردیدناپذیر و اساسی بازنویسی و پاک‌سازی کدها این است که پس از اتمام کار، عملکرد کدها را تست کنیم و مطمئن شویم که ریفکتورینگ ما تأثیری بر عملکرد برنامه نگذاشته است. بدون این مرحله ممکن است ریفکتورینگ به جای بهبود وضعیت کدها، عملکرد برنامه را به کلی زیر سوال ببرد.
  • به طور کلی ریفکتورینگ در برنامه نویسی به ما کمک می‌کند که کدهای تمیز بنویسیم. کد تمیز، کدی است که برای اعضای جدید تیم توسعه‌دهندگان، کاملاً واضح و خواناست. این دسته از کدها، عمدتاً کم‌حجم هستند و بلاک، متد و کلاسی با کد تکراری ندارند.

رعایت کردن همین اصول ساده در هنگام بازنویسی و پاک‌سازی کدها به ما کمک می‌کند که کدهای تمیزتر و شفاف‌تری داشته باشیم و اعضای تیم توسعه‌دهنده بتوانند با کدها، خیلی راحت‌تر ارتباط برقرار کنند.

مزایای ریفکتورینگ در برنامه نویسی

یادگیری و آموزش ریفکتورینگ در برنامه نویسی، مزایا و فواید مختلفی به همراه دارد و همین مزایاست که علاقه و تمایل افراد برای یادگیری این مهارت را افزایش داده است. در ادامه به چند مورد از مزایای یادگیری ریفکتورینگ اشاره خواهیم کرد:

1. اضافه کردن قابلیت نگهداری و توسعه‌پذیری به کدها

وقتی نویسنده‌ای کتابی را در دوران جوانی می‌نویسد، آن کتاب خیلی به دلش می‌نشیند و با خواندن، غرق غرور و لذت می‌شود؛ اما هر چه نویسنده، باتجربه‌تر و کارآزموده‌تر می‌شود، می‌فهمد که آن کتاب، اشکالات فراوان داشته و اساساً مایه خجالت است. این ماجرا برای برنامه‌نویس‌ها هم پیش می‌آید. آن‌ها پس از مدتی می‌فهمند برنامه‌ای که چند سال پیش کدنویسی‌اش را انجام داده‌اند، کدهای کثیف، پیچیده و ناجور دارد. پس می‌آیند و از طریق ریفکتورینگ، به کدهای نوشته‌شده، سر و سامان می‌دهند. در واقع با این کار، کدها قابل نگهداری می‌شوند.

مزیت دیگری که ریفکتورینگ دارد، افزودن قابلیت توسعه‌پذیری به کدهای نوشته‌شده است. وقتی کدها بی‌نظم و ساختار مشخص باشند، توسعه‌دهندگان جدید برای توسعه، بهبود و به‌روزرسانی آن به مشکل می‌خورند؛ چون برای تغییر دادن کدها دچار شک و تردید می‌شوند. کدهای منظم و ساختارمند، کار توسعه کدها را راحت می‌کند و توسعه‌دهندگان را ترغیب می‌کند که نظم، الگو و قاعده را حفظ کنند.

2. ریفکتورینگ در برنامه نویسی؛ راهی برای بالا بردن قابلیت خوانایی کدها

یکی از رسالت‌های اصلی ریفکتورینگ در برنامه نویسی، بالا بردن خوانایی کدهای نوشته‌شده است. وقتی یک کد، خوانا و قابل فهم نباشد، توسعه‌دهندگان ترجیح می‌دهند که برای اصلاح و پاک‌سازی آن‌ها هیچ اقدامی نکنند. از طرفی وقتی کدها به صورت تمیز و ساختارمند نوشته می‌شوند، فرایند پیدا کردن مشکلات موجود در آن‌ها آسان‌تر و سریع‌تر می‌شوند؛ در نتیجه کار توسعه‌دهندگان و کسانی که روی برنامه کار می‌کنند، بسیار آسان خواهد شد.

3. بهبود کارایی برنامه؛ هدفی مهم و غیرمستقیم برای ریفکتورینگ

یکی دیگر از اهداف مهم و اساسی ریفکتورینگ، بهبود کارایی برنامه‌هاست. در تعریف ریفکتورینگ می‌خوانیم که اصلاً هدفمان این نیست که کارایی و عملکرد برنامه را تغییر دهیم؛ بلکه می‌خواهیم کدها را بازنویسی و پاک‌سازی کنیم. این در حالی است که وقتی کدها را ساختارمند، درست و پاک‌سازی می‌کنیم، عملکرد برنامه هم بهبود می‌یابد، سریع‌تر عمل می‌کند و از ظرفیت‌های سرور نیز کمتر استفاده می‌کنید.

4. کاهش بدهی فنی و داشتن یک برنامه حرفه‌ای، سرپا و سرحال

منظور از بدهی فنی یا اصطلاحاً « Technical Debt»، تلاش‌های اضافی برای اصلاح کدهاست. در واقع وقتی کدهای یک برنامه از همان ابتدا، به‌هم‌ریخته و ناهماهنگ باشد و توسعه‌دهندگان، بدون اصلاح کدهای قبلی، فرایند توسعه را جلو می‌برند، در نهایت کل سیستم با باگ‌ها و اشکالات مختلفی روبرو می‌شود. حاصل این ماجرا، تلاش‌های اضافی برای پاک‌سازی کدها از ابتدا و صرف زمان، انرژی و هزینه چشمگیر خواهد بود. یکی از مزایای ریفکتورینگ در برنامه نویسی این است که بدهی فنی برنامه‌ها را کاهش می‌دهد و برنامه‌ها را حرفه‌ای‌تر، کارآمدتر و پویاتر می‌کند.

انواع ریفکتورینگ در برنامه نویسی

به طور کلی می‌توان ریفکتورینگ را به دو دسته «ساختاری» و «رفتاری» تقسیم کرد. در ادامه هر کدام از این دو نوع ریفکتورینگ را به صورت مختصر و مفید بررسی خواهیم کرد:

1. ریفکتورینگ ساختاری

در ریفکتورینگ ساختاری، در پی این هستیم که ساختار کدنویسی برنامه را بهبود ببخشیم. در این نوع پاک‌سازی و بازنویسی، اصلاً قرار نیست که رفتار برنامه دچار دگرگونی و تغییر شود. تقسیم کد به کلاس‌ها یا توابع کوچک‌تر، استفاده از الگوهای طراحی و حذف کدهای تکراری، همگی جزو ریفکتورینگ ساختاری محسوب می‌شود.

2. ریفکتورینگ رفتاری

زمانی دنبال ریفکتورینگ رفتاری هستیم که قصد تغییر در ساختار کدنویسی برنامه را نداریم و فقط به بهبود رفتار برنامه می‌اندیشیم. تغییر ترتیب عملکردهای یک کلاس، اضافه کردن یا حذف پارامترهای یک تابع و تغییر نوع داده‌های یک متغیر، همگی مثال‌هایی برای ریفکتورینگ رفتاری محسوب می‌شوند.

توضیحی کوتاه در مورد فرایند ریفکتورینگ 

یکی از سوالاتی که غالباً برنامه‌نویسان یا علاقه‌مندان به فرایند ریفتورینگ مطرح می‌کنند این است که ریفتورینگ چگونه صورت می‌گیرد؟ فرایند ریفتورینگ به صورت کلی چگونه است؟ معمولاً ریفکتورینگ در پنج مرحله صورت می‌گیرد که در ادامه این پنج مرحله را بررسی خواهیم کرد و در مورد هر مرحله اندکی توضیح خواهیم داد:

1.     در گام اول کدها تجزیه و تحلیل می‌شوند. در این گام، برنامه‌نویس‌ها در پی کدهای تکراری، پیچیده یا غیر قابل خوانش هستند.

2.     گام دوم برای ریفکتورینگ، شناسایی نقاط ضعف کدهاست. شناسایی نقاط ضعف به توسعه‌دهندگان کمک می‌کند که بفهمند سراغ کدام قسمت از کار بروند و تغییر چه کدهایی را آغاز کنند.

3.     اکنون که کدهای به خوبی تجزیه و تحلیل شده و نقاط ضعفشان شناسایی شده است، می‌توان تکنیک مناسب را برای ریفکتورینگ برگزید. تکنیک‌های مختلفی برای ریفکتورینگ وجود دارد که در دوره آموزش ریفکتورینگ آموزش داده می‌شود و افراد با استفاده از همین تکنیک‌ها می‌توانند به بازنویسی و تمیزسازی کدها بپردازند.

4.     گام مهم بعدی در فرایند ریفکتورینگ در برنامه نویسی، اجرای تکنیک است. در گام قبلی، تکنیک و استراتژی خود را تعیین کردیم و اکنون باید این تکنیک را به صورت کاملاً درست و حرفه‌ای پیاده کنیم.

5.     یکی از مهم‌ترین گام‌ها در فرایند ریفکتورینگ، تست کردن برنامه است. بدون تست کردن برنامه، نمی‌توانیم بفهمیم که فرایند ریفکتورینگ به درستی انجام شده است یا خیر! پس باید خیلی دقیق، برنامه را تست کنیم و از درست بودن پاک‌سازی‌ها و تغییرات، مطمئن شویم. در صورتی که اختلالی در عملکرد برنامه وجود دارد، باید دوباره کدهای برنامه را بررسی و اشکالات موجود را رفع کنید تا برنامه به‌درستی اجرا شود.

روش‌های مختلفی برای یادگیری و آموزش ریفکتورینگ در برنامه نویسی وجود دارد. برخی از افراد دوست دارند که برای یادگیری این مهارت، در کلاس‌های حضوری شرکت کنند و برخی دیگر به دلیل محدودیت‌های زمانی و مکانی، کلاس‌های آنلاین و غیرحضوری را ترجیح می‌دهند. پیشنهاد ما به شما این است که در هنگام انتخاب دوره برای یادگیری مهارت ریفکتورینگ، حتماً به مجموعه‌ها یا پلتفرم‌های آموزشی معتبر و باتجربه مراجعه کنید.

پلتفرم آموزشی مکتب‌خونه یکی از مراکزی است که دوره آموزش ریفکتورینگ در برنامه نویسی را در وب‌سایت خود عرضه کرده است تا علاقه‌مندان و متقاضیان بتوانند ویدیوهای این دوره را تماشا کنند و کلیه مهارت‌های و ریزه‌کاری‌های لازم را فرابگیرند. مزیت این دوره، تدریس یکی از بهترین اساتید کدنویسی در آن است. همچنین در صورتی که متقاضیان بتوانند نمره قبولی را از آزمون این دوره بگیرند، یک مدرک معتبر به آن‌ها اعطا می‌شود. در صورتی که قصد دارید مهارت ریفکتورینگ در برنامه نویسی را به صورت آنلاین و غیرحضوری یاد بگیرید، پیشنهاد می‌شود که در دوره آموزشی مجموعه مکتب‌خونه شرکت کنید.

 

poster
  
برگزار کننده:  مکتب‌خونه
  
زمان مورد نیاز برای گذارندن دوره:  4 ساعت
مجموع محتوای آموزشی:  4 ساعت ویدئو
 (قابل دانلود می‌باشد)