
تفسیر آیهٔ وَیلُ لِلمُطَفِفِین و نگاهی به کمفروشی در حوزهٔ توسعهٔ نرمافزار
یکی از چیزهایی که در قرآن مجید به کرات نسبت به آن هشدار داده شده و شدیداً مورد تقبیح قرار گرفته است، چیزی است تحت عنوان کمفروشی تا جایی که یک سورهٔ کامل به نام مُطَفِفِین به این مبحث اختصاص داده شده است. جالب است وقتی صحبت از کمفروشی به میان میآید، خیلی از افراد به فکر بَقالی، قصابی، لبنیات فروشی و سایر مشاغل مشابه میافتند که سر و کارشان با ترازو است و مثلاً اگر شما یک کیلو گوشت بخرید اما در عمل وزنی معادل با 980 گرم دریافت کرده باشید، فروشنده مرتکب فعل کمفروشی شده است. آنچه در این مقاله قصد داریم مورد بررسی قرار دهیم این است که آیا در دنیای توسعهٔ نرمافزار و برنامهنویسی نیز میتوان کمفروشی کرد یا خیر! که در این مقاله قصد داریم با ذکر مثالهایی از دنیای واقعی، این قضیه را اثبات کنیم.
پیش از توضیح پیرامون قضیهٔ کم فروشی در صنعت توسعهٔ نرمافزار، توجه شما را به نتایج تحقیقی که در یکی از دانشگاههای ایالات متحده صورت گرفت جلب میکنیم. تعدادی محقق به خوابگاههای دانشجویی رفته و خوراکیهایی را در ظرفی قرار داده و داخل یخچال خوابگاه قرار دادند. پس از مدتی، مشاهده شد که دانشجویان بدون توجه به این که خوراکیهای مد نظر متعلق به چه کسی است، شروع به استفاده از آنها کردند و آب از آب هم تکان نخورد!
حال نوبت به فاز دوم این کار تحقیقاتی رسید. محققین چند دلار روی همان یخچال قرار داده و منتظر فیدبک دانشجویان نشستند. آنچه مشاهده شد این بود که باگذشت مدت زمانی نسبتاً طولانی -این در حالی است که خوراکیها ظرف چند ساعت تمام شدند- هیچ کدام از دانشجویان دست به دلارها هم نزد، چه رسد به این که آنها را تصاحب کند!
نتیجهای که محققین از این آزمایش گرفتند این بود که ما انسانها در طول زمان یکسری Mindset (جهانبینی) نسبت به محیط پیرامون خود پیدا میکنیم و همین جهانبینی باعث برخی تصمیمگیریها در طول زندگیمان میشود.
در جامعهٔ امروز، برداشتن گوشی موبایل یک فرد دیگر، خالی کردن حساب بانکی، زدن جیب شخص و امثالهم برچسبی معادل با دزدی میخورند اما این در حالی است که برداشتن کمی از خوراکی همخوابگاهی از داخل یخچال، استفاده از پاککن دوست بغل دستی بدون کسب اجازه، برداشتن یکی دو عدد نخودچی کشمش از روی میز همکار کناری و … اصلاً دزدی محسوب نمیشوند اما در عین حال، تمامی این موارد نوعی تصاحب اموال سایرین محسوب میگردند ولی از آنجا که هیچکس به ما از دوران کودکی تا بزرگسالی گوشزد نکرده که دزدی، دزدی است، چه یک عدد حبه قند باشد چه ۳ هزار میلیارد، ما هم اینگونه بزرگ شدهایم که در خوابگاه دانشگاه به راحتی از داخل یخچال خوراکی برمیداریم اما دست به اسکناسهای روی یخچال نمیزنیم!
کمفروشی در توسعهٔ نرمافزار چگونه نمود عینی پیدا میکند؟
با این توضیح، حال نوبت به اصل مطلب که بررسی مسألهٔ کمفروشی در صنعت توسعهٔ نرمافزار است میرسیم و میخواهیم ببینیم که آیا در توسعهٔ یک نرمافزار هم میتوان کمفروشی کرد یا خیر. در یک کلام، پاسخ به این سؤال آری است.
در واقع، وقتی ما یک پروژهٔ نرمافزاری را به مشتری تحویل میدهیم، خواهیم توانست به معنای واقعی کلمه کمفروشی کنیم اما از آنجا که جهانبینی ما به گونهای تنظیم شده که فقط و فقط میزان نبودن دو کفهٔ ترازو را معادل با کمفروشی در نظر میگیریم، خیلی اوقات ناخواسته در توسعهٔ نرمافزار دست به کمفروشی میزنیم. برای روشنتر شدن این مسئله، مثالی میزنیم.
در زبان برنامهنویسی PHP، استانداردی وجود دارد تحت عنوان PSR که این استاندارد منجر شده تا تمامی دولوپرهای این زبان برنامهنویسی با دستخط یکسانی کدنویسی کنند تا کدهای یکدیگر را به مراتب راحتتر متوجه شوند. برای مثال، به قطعه کد زیر توجه کنید:
class MyClass
{
public $property = '';
public function setMethod()
{
}
public function getMethod()
{
}
}
همانطور که در کد فوق مشاهده میشود، نامگذاری کلاس، پراپرتی و متدها بر اساس استاندارد خاصی است و بزرگ و کوچک بودن حروف، روش نامگذاریها، فواصل مابین بخشهای مختلف سورسکد و ... از قوانین خاصی تبعیت میکنند. حال فرض کنیم یک شرکت برنامهنویسی داریم که یکی از تعهداتی که به مشتری خود دادهایم این است که ما بر اساس استاندارد PSR کدنویسی میکنیم تا اگر در آینده دولوپری خواست سورسکد نرمافزار را مشاهده و ویرایش کند، کدها ساده و قابلفهم باشند. بخشی از کدی که برای مشتری نوشتهایم را مد نظر قرار میدهیم:
class MyClass {
public $p= '';
public function setmethod(){
}
public function get()
{
} }
در کد فوق میبینیم که فاصلهگذاریها و نامگذاریها اصلاً رعایت نشدهاند (در واقع، دولوپر بعدی هرگز قادر نخواهد بود تا به سادگی مفهوم پراپرتی p$ را متوجه شود). درست است که این کد به خوبی کار خواهد کرد و کسی هم از این قضیه بویی نخواهد برد، اما سؤال اینجا است که آیا ما به تعهدات خود پایبند بودهایم یا خیر؟ به همین سادگی میشود در کدنویسی دست به کمفروشی زد!
خیلی اوقات برای آن که مشتری را مجاب کنیم که ما تمام مسائل امنیتی را در توسعهٔ نرمافزار مد نظر قرار میدهیم، در جلسات عقد قرارداد به مشتری میگوییم که اطلاعات حساس مشتریان -مثل رمزعبور- را نه تنها دو بار هَش میکنیم، بلکه اصطلاحاً از Salt هم برای امنیت بیشتر استفاده میکنیم اما واقعیت امر این است که صرفاً به یک بار استفاده از الگوریتم sha1 اکتفا میکنیم که این هم مصداق دیگری از کمفروشی است (توضیح مفاهیمی همچون Hash و Salt خارج از هدف این مقاله بوده لذا به منظور جلوگیری از طولانی شدن مطلب، از توضیحات تکمیلی پیرامون این مفاهیم خودداری میکنیم).
طراحی رابط کاربری هم جزو حوزههایی است که تا دلتان بخواهد میشود در آن کمفروشی کرد! برای اینکه قرارداد با مشتری بسته شود، در جلسهٔ عقد قرارداد دست به هر نوع وعده و وعیدی میزنیم که یکی از رایجترین آنها، ریسپانسیو بودن تمامی صفحات سایت در تمامی دیوایسها است اما زمانی که سایت تکمیل میشود، متوجه میشویم که بسیاری از جزئیات به دست فراموشی سپرده شدهاند.
در حوزهٔ بهینهسازی سایت برای موتورهای جستجو (SEO) هم خیلی میبایست مراقب بود. فرض کنیم که یک مشتری سئو داریم و یکی از مفاد قرارداد این است که کلیهٔ اصول بهینهسازی از دید گوگل و سایر موتورهای جستجو همچون بینگ مد نظر قرار داده خواهند شد. جالب است بدانیم که موتور جستجویی همچون گوگل چیزی در حدود 200 مؤلفه را برای رنکینگ صفحات مد نظر قرار میدهد حال چگونه ممکن است که یک سئوکار بتواند کلیهٔ این اصول را برای تکتک صفحات سایت مشتری مد نظر قرار دهد!
در بهینهسازی خیلی از بدیهیات هم گاهیاوقات نادیده انگاشته میشوند مثلاً به مشتری میگوییم که به منظور بهبود رتبهٔ سایت، از Semantic HTML در طراحی رابط کاربری استفاده خواهد شد اما ردپایی از تگهای <header> یا <footer> به چشم نمیخورد چه رسد به تگ <section> و امثالهم!
مثالهای بسیار زیادی میشود از چیزهایی زد که در ظاهر اصلاً مهم نیستند اما در اصل، مصادق عینی کمفروشی در توسعهٔ نرمافزار میباشند. اگرچه دیدگاهی که خیلی از توسعهدهندگان نسبت به کدنویسی دارند مشابه مثال خوراکی، یخچال و اسکناس است که در بالا به آن اشاره کردیم، اما ما گاهیاوقات نیاز به Unlearn کردن برخی از دیدگاههای خود داریم. به عبارت دیگر، چشمها را شسته و طور دیگری به مسائل پیرامون خود نگاه کنیم (برای آشنایی بیشتر با مفهوم Unlearn، به مقالهٔ مفهوم سواد در قرن ۲۱ام: برخورداری از مهارتهای Unlearn ،Learn و Relearn مراجعه نمایید).
در قدیم برای نشان دادن نهایت دقت محاسبات الهی، گفته میشد که حتی یک دانه گندم هم مد نظر قرار داده خواهد شد که به نظر میرسد برای برنامهنویسان بایستی گوش زد کرد که «حتی یک اسپیس هم مد نظر داده خواهد شد!»
حال نوبت به نظرات شما میرسد. آیا رعایت موارد طرح شده در بالا و بسیاری موارد دیگر که از قلم افتادهاند اما نوعی کمفروشی در صنعت توسعهٔ نرمافزار به حساب میآیند و به طور کلی با آنچه در این پست مطرح شد موافق هستید؟ نظرات، دیدگاهها و تجربیات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.