هم از زبان برنامهنویسهای تأثیرگذار و معروف دنیا به کرات میشنویم و هم دولوپرهای تازهکار که وقتی قدم به دنیای کدنویسی میگذاریم، اختراع مجدد چرخ کاری بس اشتباه است اما حتی اگر فرض کنیم که چنین گزارهای صحیح هم باشد، در هر کار اشتباهی کماکان میشود یکسری مزایا یافت.
در چه شرایطی اختراع مجدد چرخ اشتباه است؟
در پاسخ به این پرسش باید گفت وقتی که وارد صنعت کدنویسی میشویم، قضیه کاملاً فرق میکند چرا که باید در حین توسعهٔ نرمافزار چند چیز را مد نظر قرار دهیم که عبارتند از:
- افزایش سرعت توسعهٔ پروژه
- کاهش باگها
- افزایش امنیت
- رعایت استانداردهای کدنویسی
- افزایش سرعت توسعهٔ پروژه: به عبارتی، شرکتهای نرمافزاری تمام تلاش خود را به کار میگیرند تا سرعت توسعهٔ پروژه افزایش یابد تا در نهایت هزینهٔ تمامشده کاهش پیدا کند و استفاده از لایبرریها و فریمورکهای اپنسورس این مهم را برآورده میسازند.
- کاهش باگها: وقتی پروژهای در بین دولوپرها محبوب شود، مسلماً بهترینها شروع به توسعهاش میکنند و وقتی که بهترینها روی چیزی سرمایهگذاری کنند، احتمال اینکه باگی وجود داشته باشد خیلی خیلی کم خواهد شد (اما هرگز به صفر درصد نمیرسد.) وقتی از چنین پروژههایی استفاده میکنیم، میتوانیم اطمینان حاصل کنیم آن بخشی از پروژه که وابسته به یک لایبرری یا پکیج به اصطلاح Third-party است باگفیری میباشد.
- افزایش امنیت: لایبرریها و فریمورکهای اپنسورس تا حد قابلتوجهی این اطمینان را به دولوپرها میدهند که از امنیت بالایی برخوردارند.
- رعایت استانداردهای کدنویسی: در پروژههای مطرح همواره استانداردهای کدنویسی همچون قوانین SOLID یا دیزاین پترنها رعایت میشود و وقتی که دست به اختراع مجدد چرخ نزنیم، میتوانیم این اطمینان را به مشتری بدهیم که حداقل آن بخشی از پروژه که به صورت شخصی نوشته نشده کاملاً استاندارد است.
اینها تنهای بخشی از مزایایی است که اگر به عنوان یک دولوپر دست به اختراع مجدد چرخ نزنیم، برایمان به ارمغان آورده خواهد شد اما این فقط یک روی سکه بود.
در چه شرایطی اختراع مجدد چرخ صحیح است؟
حال قصد دارم برسم به اصل مطلب و آن هم اینکه نباید کورکورانه از یک گزارهای که کاملاً صحیح است پیروی کنیم. به عبارتی، «اختراع مجدد چرخ» آنقدرها هم که فکر میکنیم کار بدی در توسعهٔ نرمافزار نیست و برخی از مزایایش عبارتند از:
- یادگیری اصولی یک چیز
- ایجاد سولوشنی ٪۱۰۰ کاستومایزشده
- اطمینان حاصل کردن از لود نشدن چیزهای اضافی
- یادگیری اصولی: اجازه دهید قبل از پرداختن به اصل موضوع، یک مثال از دنیای آشپزی، که مورد علاقهام هست، بزنم. فرض کنیم که میخواهیم کیک درست کنیم. همواره دو راهکار پیش روی ماست که یکی خرید پودر کیک آماده و دیگری درست کردن کیک به صورت کامل با دست است. مسلماً خرید پودر کیک (مثلاً پودر کیک رُشد) هم راحت است، هم از خوشمزه بودن کیک میتوان اطمینان حاصل کرد و هم کمریسک است اما در چنین مواقعی آشپز یک نقش منفعل خواهد داشت زیرا نهایت کاری که باید کند این است که پودر را داخل ظرف ریخته، یک لیوان شیر اضافه کند و داخل فر بگذارد و نیم ساعت بعد همه چیز آماده است 🎂 اما پرسش اینجا است که آیا چنین آشپزی در نهایت یاد خواهد گرفت که محتویات یک کیک چه هستند و اندازهٔ هر کدام چهقدر باید باشد؟
بعید میدانم. شاید لیستوار بتواند بگوید که مثلاً برای ساخت کیک نیاز به آرد، تخممرغ، بیکینگپودر، پودر کاکائو، شکر، شیر، زعفران و ... داریم، اما چون در عمل اینها را با هم قاطی نکرده است، عملاً نمیتواند ادعا کند که بلد است کیک درست کند و شاهد این ادعا هم بسیاری از خانمهای فامیل که وقتی میخواهند خودشان دست به ساخت بزنن، فقط نعمت خدا را حرام میکنند 😖
حال فرض کنیم که خودمان شروع به ساخت کیک میکنیم. در چنین شرایطی، شاید ده بار اول مجبور شویم کیک را با ظرف داخل سطل زباله بیندازیم، اما در نهایت یواشیواش یاد میگیریم کما اینکه کسانی را سراغ دارم که از چنین مهارتی برخوردارند و مزهٔ کیک دستساز ایشان به مراتب بیشتر زیر زبان آدم میماند 😋.
جالب اینجاست که افراد گروه دوم اگر روزی مثلاً یک مهمان سرزده برایشان بیاید و مجبور شوند که مثلاً پودر کیک آماده درست کنند، چون به صورت زیربنایی با ساخت کیک آشنا هستند، حتی می توانند چیزهایی به پودر آماده اضافه کنند و آن را بنا به ذائقهٔ خود کاستومایز کنند تا به مراتب بهتر شود و این مهارت را به این دلیل به دست آوردهاند که قبلاً دست به اختراع مجدد چرخ زدهاند.
در دنیای توسعهٔ نرمافزار هم فکر میکنم قضیه از این قرار است. دولوپری موفق میشود که خود قبلاً مثلاً یک بار یک فریمورک خیلی ساده نوشته باشد که مثلاً بتواند CRUD را انجام دهد و در توسعهٔ آن از دیزاین پترنها، اوتولودر و در یک کلام Best Practiceها استفاده کرده باشد. حال وقتی چنین کسی شروع به استفاده از فریمورکی همچون لاراول میکند، با دید خیلی شفافی میداند که پشت قضیه چه اتفاقی دارد میافتد.
- ایجاد سولوشنی ٪۱۰۰ کاستومایزشده: منتوری که برای خود انتخاب کرده بودم، دائم به من توصیه میکرد که برای کدنویسی سکان آکادمی از سیاماسهایی همچون دروپال یا وردپرس استفاده کنم تا جایی که حتی بخشی از پروژه هم روی دروپال کدنویسی شد اما وقتی که خواستم پروژه را تست کنم، شرکت هاستینگ که خیلی نسبت بهش وفادار بودم گفت روی هاستهای اشتراکی اجازه نمیدهند که دروپال نصب کنیم و از آنجا که توان خرید سرور اختصاصی نداشتم، به جای عوض کردن شرکت هاستینگ، استراتژی را عوض کردم 🤔 و از این بابت اصلاً هم ناراحت نیستم! به عبارتی، مجبور شدم سیاماس اختصاصی خود را بنویسم و الان میبینیم که این اتفاق باعث شد تا سولوشنی ٪۱۰۰ کاستومایزشده داشته باشم.
- اطمینان حاصل کردن از لود نشدن چیزهای اضافی: یک مثال میزنم. فریمورک زند نسخهٔ ۲ یک مشکل داشت و آن هم اینکه بخش قابلتوجهی از لایبرریهایش حتی اگر هم استفاده نمیشدند لود میشدند و همین باعث میشد تا پرفورمنس سایت تا حدی پایین بیاید اما در نسخه ۳ شرکت زند به درستی ادعا میکند که فقط همان چیزهایی که نیاز دارید را با کامپوزر نصب کرده و همین مسئله پروفورمنس را بالاتر میبرد و این در صورتی بود که چنین مجوزی در نسخهٔ ۲ به دولوپر داده نمیشود و او مجبور بود از قوانین فریمورک تبعیت کند.
وقتی دست به اختراع مجدد چرخ میزنیم، میدانیم که در هر ماژول پروژه، داستان از چه قرار است، کد اضافی نداریم، روابط بین بخشهای مختلف مشخص است و این یکی از نقاط قوت اختراع مجدد چرخ است.
جمعبندی
از یک دولوپر انتظار میرود که هیچ چیزی را بدون دلیل نپذیرد و به مسائل از زوایای مختلفی نگاه کند. به عبارتی، چون چند برنامهنویس یا شرکت مطرح گفتهاند که اختراع مجدد چرخ کار اشتباهی است، نباید کورکورانه این گزاره را قبول کنیم بلکه باید از زوایای مختلفی به آن نگاه کرد و حتی اگر فقط به دید آموزشی به این مقوله نگاه کنیم، گاهی اختراع مجدد چرخ ارزشش را داراست.
همچنین در مصاحبهای که با محمد نصیری داشتم، وی دیدگاههای جالبی در مورد گزارهٔ «اختراع مجدد چرخ» داشت که جهت آشنایی بیشتر، میتوانید به پادکست مصاحبه به محمد نصیری در رادیو فولاستک مراجعه نمایید یا علی فروغی که یکی از حرفهایترین دولوپرهای فرانتاند ایرانی است که میشناسم، در گپی که داشتیم گفت هرگز از فریمورکها استفاده نمیکند و چرخ را اختراع میکند که برای آشنایی بیشتر با وی میتوانید به پادکست مصاحبه با علی فروغی مراجعه کنید.
ممنون که وقت گذاشتید. جای نظر، انتقاد و پیشنهاد شما در بخش کامنتینگ است.