دوستدار نرمافزار، فلسفه و ادبیات. وب سایت:http://www.alihoseiny.ir
وظایف اخلاقی یک مهندس نرمافزار در قبال دنیا
بدون ذرّهای اغراق، ما داریم در دنیای نرمافزارها زندگی میکنیم. اقتصاد، سلامت، کشاورزی، حمل و نقل، ارتباطات و حتّی جنگ و کشتار هم در دنیای امروز تحت سیطرهی نرمافزارها مدیریت میشوند.
یک خطای نرمافزاری میتواند جان میلیونها انسانرا بگیرد یا دهها میلیون دلار پولرا از بین ببرد (خدایی ناکرده انتظار ندارید که با این وضع اقتصادی با ریال و تومان مثال بزنم؟).
حالا نرمافزارها تحت مدیریت و باتلاش و طرّاحی چه افرادی تولید میشوند؟ مهندسین نرمافزار. افرادی که با توجّه به وسعت اثرگذاری کارشان در دنیا، به نظر من، بیشترین مسئولیت اخلاقی حرفهای را در دنیای امروز دارند.
قسمت بد ماجرا این است که تقریباً همهی مهندسین نرمافزار به تکنولوژیها و متدها فکر میکنند، نه به اخلاقیات. برای جبران این کوتاهی که سالها است همهی ما آنرا مرتکب میشویم، بیایید امروز کمی در مورد مسئولیّت اخلاقی مهندسین نرمافزار در قبال دنیای پیرامونمان صحبت کنیم. مسئولیّتی که به نظر من در ۷ عنوان اساسی خلاصه میشود:
۱-صداقت
شما به عنوان یک مهندس نرمافزار نباید از قابلیّتها و تواناییهایتان برای رفتارهای غیرصادقانه استفاده کنید یا از آنها به طریقی استفاده کنید که موجب بدنامی حرفهی مهندسی نرمافزار شود.
چرا؟ چون در روابط انسانی اعتماد همهچیز است. چرا این روزها اعتماد خیلیها به پزشکان و تشخیصهای آنها از بین رفته؟ چرا گرایش مردم به شبهدرمانها بیشتر شده؟ چرا اگر یک پزشک چیزی در شبکههای اجتماعی بگوید اکثریّت علیه او جبهه میگیرند؟ چون رفتار برخی پزشکان موجب بدنامی حرفهی پزشکی شده است.
اگر مهندسین نرمافزار این اصل اخلاقی را رعایت نکنند دچار سرنوشت پزشکان ایرانی میشوند. حاصل این سرنوشت، علاوه بر اینکه درآمد برنامهنویسان را متزلزل میکند، جان انسانهای زیادی را به خطر میاندازد.
همانطور که در مقدمه هم گفتم، دامنهی تأثیرگذاری کار یک مهندس نرمافزار خیلی بیشتر از یک پزشک است. عدم اطمینان به یک پزشک باعث میشود که بیماران دیگر به دستورات و تشخیصهای او عمل نکنند و جان عدهای (شاید چند صد نفر در سال) به خطر میافتد.
حالا فرض کنید که اعتماد عمومی نسبت به مهندسان نرمافزار از بین برود و مدیر فلان شرکت خودروسازی دیگر به هشدارهای مهندسین نرمافزارش توجه نکند. اینطوری نه تنها جان میلیونها نفری که از آن خودروها استفاده میکنند به خطر میافتد، بلکه جان عدهی خیلی بیشتری که در مسیر تردد این خودروها قرار میگیرند هم تهدید میشود.
ناایمن بودن یک نرمافزار میتواند جان انسانهای خیلی خیلی زیادی را فارغ از موقعیّت جغرافیایی و زمان به خطر بیندازد.
۲-محرمانگی
یک مهندس نرمافزار در حالت عادی باید به محرمانگی اطلاعات و سفارشات مشتریان و کاربران احترام بگذارد، حتّی اگر یک قرارداد محرمانگی رسمی بینشان بسته نشده باشد (چند مورد پایینتر درمورد حالت غیرعادی هم صحبت میکنیم).
چرا باید به این اصل پایبند بود؟ اوّلین دلیل که همان صحبتهای مربوط به اعتماد در بخش قبلی است. امّا اینجا یک بحث اخلاقی دیگر هم مطرح است. بگذارید با یک مثال توضیح بدهم:
فرض کنید صبح از خواب بیدار میشوید و میبینید فروشندهی داروخانهی محل درون هر خانهای یک کاغذ انداخته است. آن هم با تیتر:«خریدهای هفتگی آقا/خانم x» و به جای x هم اسم شما را نوشته. حالا در این برگه شرح داده که شما در هفتهی اخیر ۳ ورق قرص فشار خون، یک قطرهی چشم، یک بسته کاندوم با طعم آناناس و… خریده اید. چه حسی پیدا میکنید؟ آیا این کار اخلاقی است؟
حالا اگر به هر نحوی اطلاعات مشتری یا کاربرتانرا منتشر کنید، دقیقاً همین کار غیر اخلاقی از شما هم سرزده است. با این تفاوت که علاوه بر اثر روانی ممکن است اثر مالی هم داشته باشد.
البته من درمورد اطلاعاتی که مشتری خودش اجازهی انتشار آنها را داده صحبت نمیکنم. بهعلاوه نشان دادن محصول نهایی مشتری (بخشهایی که به صورت عمومی در دسترس اند) به عنوان نمونه کار قطعاً مشکلی ندارد. اما انتشار چیزهای بیشتر امری غیر اخلاقی است.
۳-رعایت حقوق داراییهای معنوی
شما باید حقوق داراییهای معنوی یا همان کپیرایترا رعایت کنید. عدم رعایت کپیرایت علاوه بر اینکه حق سازندهی آن محصولرا ضایع میکند، امکان تولید محصولات خوب را هم درآینده کاهش میدهد. چون دیگر کسی میلی به ساخت محصول خوب نخواهد داشت.
فراموش نکنید که دنیای مارا نرمافزارها میگردانند و اگر ما کاری بکنیم که به خاطر آن نرمافزارهای خوب کمتری تولید شوند، مسئول منابع هدر رفته و جانهای بهخطر افتاده خواهیم بود.
البته وقتی در کشوری مثل ایران درمورد کپیرایت صحبت میکنیم همواره به مشکل میخوریم، چون امکان تهیّهی خیلی از محصولات به شکل قانونی در ایران وجود ندارد.
راه اخلاقی ممکن برای ما این است که تا جای ممکن از محصولات مشابه رایگان استفاده کنیم. امّا بعضی محصولات جایگزینی ندارند و دیگر چارهای باقی نمیماند.
۴-تضمین بالاترین کیفیت
یک مهندس نرمافزار باید مطمئن شود که محصولاتش و تغییراتی که در آنها ایجاد میکند حداکثر استانداردهای حرفهای ممکن را دارد.
ابتدا به این خاطر که مشتری برای چنین چیزی دارد به شما پول میدهد. دوم به این خاطر که در غیر این صورت اطمینان افراد در طولانی مدّت از بین میرود و مشکلات شرح داده شده در بخش اوّل رخ میدهند.
البته این وسط یک مشکل دیگر هم وجود دارد که در بخش بعدی آنرا میبینیم.
۵-حفاظت از محیط زیست
حالا که بخشهای زیادی از دنیا با نرمافزار اداره میشوند، باید انتظار اینرا هم داشته باشیم که نرمافزارها آسیبهای زیادی را به دنیا وارد کنند.
هرروز کارهای بیشتری با نرمافزارها انجام میشوند و کامپیوترهای بیشتری برای رفع نیازها استفاده میشوند، پس بخش بزرگی از انرژی جهانرا نرمافزارها برای انجام پردازشها مصرف میکنند.
طبق آمار در سال ۲۰۱۵، در هر ثانیه برای پردازش نتایج جست و جو های گوگل حدود ۵۰۰ کیلوگرم کربن مونوکسید وارد هوا میشد. آماری که مطمئناً امروز بیشتر شده است. فراموش نکنید که جستوجوی گوگل یکی از صدها استفادهای است که مردم دنیا در ماه از نرمافزارها میکنند.
معماریهای بد، پیادهسازیهای بد، کدهای کثیف که نیاز به کدهای بیشتری برای نگهداری دارند و هرکار غیر اصولی ای که من و شما انجام میدهیم باعث میشود زمین بیشتر از آن چیزی که باید گرم و آلوده شود.
بله، من و شما حتّی اگر با دوچرخه این طرف و آن طرف برویم، سیگار نکشیم و از کیسهی پلاستیکی استفاده نکنیم، بهخاطر کدهای بدمان مسئول مشکلات زیستمحیطی ای هستیم که انسانها و دیگر موجودات را به دردسر انداخته است.
۶-عدم مشارکت در آسیب به انسانها
یک مهندس نرمافزار نباید در پروژههایی که منجر به کشتار انسانها میشوند شرکت کند. شاید خیلیها با این حرف مخالف باشند، امّا من مشارکت در هر کاری که منجر به کشتار انسانی میشود را غیر اخلاقی میدانم.
امروزه دولتها و معارضانشان دنبال موشکهای دقیقتر، سلاحهای خودکار هوشمند، پهپادهای کشندهتر و … هستند که همگی نیازمند مشارکت مهندسی نرمافزار اند.
مهم نیست که شما چه احساسی نسبت به ارتش کشورتان دارید یا چقدر بهانه برای ساخت یک سلاح میتوانید بیاوید، مسئله کاملاً روشن است. در جنگ تنها بیگناهان کشته میشوند و انسانهایی حاصل زحمات چندین سالهشان را از دست میدهند.
هروقت پول زیاد یک پروژهی نظامی وسوسهتان کرد، تصویر کودکانی را تصور کنید که در جنگی که قرار است شما هم جزو قاتلانش باشید کشته میشوند.
۷-مقاومت دربرابر موارد آسیبزا
زمان خیلی کم است و مدیر پروژه از شما میخواهد که هرطوری که شده برنامهرا تحویل بدهید. از طرفی میدانید برنامه درست نیست و ممکن است با این باگ برای کاربران ضرر مالی جدّی ایجاد کند.
سرمایهگذارها منتظر اند و اگر ربات جرّاح فردا آماده نباشد گروه را منحل میکنند. امّا شما میدانید باگهای این ربات میتواند باعث مرگ بیماران بشود.
وظیفهی اخلاقی یک مهندس نرمافزار در موارد مشابه چیست؟ باید سکوت کند، پولشرا بگیرد و مسئولیّترا روی دوش نفر بالایی بیندازد؟
مطمئناً خیر. یک مهندس نرمافزار باید با توجّه به احتمال وقوع آسیب، وسعت آسیب و افرادی که تحت تأثیر آن قرار میگیرند تصمیم گیری کند.
ممکن است با توجّه به این موارد مشکل را با احترام با همان مسئول بالادستی درمیان بگذارید و او را قانع کنید، یا با رئیس او ملاقات کنید و مشکل را بگویید. حتّی ممکن است در مواردی که خطر بزرگتر است و کسی به حرفتان گوش نمیدهد مجبور شوید رسانهها را از موضوع با خبر کنید.
اخلاق حرفهای حکم میکند که تمامی تلاشتان را بکنید تا با وجود آن مشکل خطرناک محصول منتشر نشود. امّا اگر واقعاً هیچ کدام از تلاشهایتان نتیجه نداد باید به خاطر اخلاقیات و انسانیت آن مجموعهرا به نشانهی اعتراض ترک کنید.
من سعی کردم در این نوشته مباحثی که مربوط به دنیای بیرون از دنیای نرمافزار میشد را پوشش بدهم. به همین خاطر هم حرفی از موارد اخلاقی در محیط کار و… نزدم. آنها بمانند برای دفعات بعد.
اگر مبحث اخلاقی مهمی جا افتاده یا با بخشی مخالف هستید در بخش نظرات من و دیگر خوانندهها را از نظراتتان آگاه کنید. همگی خوشحال خواهیم شد.
پینوشت: عنوان موارد: ۱،۲،۳ و ۷ در کتاب Software Engineering آقای Sommerville ذکر شده اند و عنوان مورد چهارم در IEEE-CS/ACM Code of Ethics آورده شده. امّا توضیحات آنها را خودم اضافه کرده ام. توصیه میکنم این دو مورد را هم مطالعه کنید.بدون ذرّهای اغراق، ما داریم در دنیای نرمافزارها زندگی میکنیم. اقتصاد، سلامت، کشاورزی، حمل و نقل، ارتباطات و حتّی جنگ و کشتار هم در دنیای امروز تحت سیطرهی نرمافزارها مدیریت میشوند.
یک خطای نرمافزاری میتواند جان میلیونها انسانرا بگیرد یا دهها میلیون دلار پولرا از بین ببرد (خدایی ناکرده انتظار ندارید که با این وضع اقتصادی با ریال و تومان مثال بزنم؟).
حالا نرمافزارها تحت مدیریت و باتلاش و طرّاحی چه افرادی تولید میشوند؟ مهندسین نرمافزار. افرادی که با توجّه به وسعت اثرگذاری کارشان در دنیا، به نظر من، بیشترین مسئولیت اخلاقی حرفهای را در دنیای امروز دارند.
قسمت بد ماجرا این است که تقریباً همهی مهندسین نرمافزار به تکنولوژیها و متدها فکر میکنند، نه به اخلاقیات. برای جبران این کوتاهی که سالها است همهی ما آنرا مرتکب میشویم، بیایید امروز کمی در مورد مسئولیّت اخلاقی مهندسین نرمافزار در قبال دنیای پیرامونمان صحبت کنیم. مسئولیّتی که به نظر من در ۷ عنوان اساسی خلاصه میشود:
۱-صداقت
شما به عنوان یک مهندس نرمافزار نباید از قابلیّتها و تواناییهایتان برای رفتارهای غیرصادقانه استفاده کنید یا از آنها به طریقی استفاده کنید که موجب بدنامی حرفهی مهندسی نرمافزار شود.
چرا؟ چون در روابط انسانی اعتماد همهچیز است. چرا این روزها اعتماد خیلیها به پزشکان و تشخیصهای آنها از بین رفته؟ چرا گرایش مردم به شبهدرمانها بیشتر شده؟ چرا اگر یک پزشک چیزی در شبکههای اجتماعی بگوید اکثریّت علیه او جبهه میگیرند؟ چون رفتار برخی پزشکان موجب بدنامی حرفهی پزشکی شده است.
اگر مهندسین نرمافزار این اصل اخلاقی را رعایت نکنند دچار سرنوشت پزشکان ایرانی میشوند. حاصل این سرنوشت، علاوه بر اینکه درآمد برنامهنویسان را متزلزل میکند، جان انسانهای زیادی را به خطر میاندازد.
همانطور که در مقدمه هم گفتم، دامنهی تأثیرگذاری کار یک مهندس نرمافزار خیلی بیشتر از یک پزشک است. عدم اطمینان به یک پزشک باعث میشود که بیماران دیگر به دستورات و تشخیصهای او عمل نکنند و جان عدهای (شاید چند صد نفر در سال) به خطر میافتد.
حالا فرض کنید که اعتماد عمومی نسبت به مهندسان نرمافزار از بین برود و مدیر فلان شرکت خودروسازی دیگر به هشدارهای مهندسین نرمافزارش توجه نکند. اینطوری نه تنها جان میلیونها نفری که از آن خودروها استفاده میکنند به خطر میافتد، بلکه جان عدهی خیلی بیشتری که در مسیر تردد این خودروها قرار میگیرند هم تهدید میشود.
ناایمن بودن یک نرمافزار میتواند جان انسانهای خیلی خیلی زیادی را فارغ از موقعیّت جغرافیایی و زمان به خطر بیندازد.
۲-محرمانگی
یک مهندس نرمافزار در حالت عادی باید به محرمانگی اطلاعات و سفارشات مشتریان و کاربران احترام بگذارد، حتّی اگر یک قرارداد محرمانگی رسمی بینشان بسته نشده باشد (چند مورد پایینتر درمورد حالت غیرعادی هم صحبت میکنیم).
چرا باید به این اصل پایبند بود؟ اوّلین دلیل که همان صحبتهای مربوط به اعتماد در بخش قبلی است. امّا اینجا یک بحث اخلاقی دیگر هم مطرح است. بگذارید با یک مثال توضیح بدهم:
فرض کنید صبح از خواب بیدار میشوید و میبینید فروشندهی داروخانهی محل درون هر خانهای یک کاغذ انداخته است. آن هم با تیتر:«خریدهای هفتگی آقا/خانم x» و به جای x هم اسم شما را نوشته. حالا در این برگه شرح داده که شما در هفتهی اخیر ۳ ورق قرص فشار خون، یک قطرهی چشم، یک بسته کاندوم با طعم آناناس و… خریده اید. چه حسی پیدا میکنید؟ آیا این کار اخلاقی است؟
حالا اگر به هر نحوی اطلاعات مشتری یا کاربرتانرا منتشر کنید، دقیقاً همین کار غیر اخلاقی از شما هم سرزده است. با این تفاوت که علاوه بر اثر روانی ممکن است اثر مالی هم داشته باشد.
البته من درمورد اطلاعاتی که مشتری خودش اجازهی انتشار آنها را داده صحبت نمیکنم. بهعلاوه نشان دادن محصول نهایی مشتری (بخشهایی که به صورت عمومی در دسترس اند) به عنوان نمونه کار قطعاً مشکلی ندارد. اما انتشار چیزهای بیشتر امری غیر اخلاقی است.
۳-رعایت حقوق داراییهای معنوی
شما باید حقوق داراییهای معنوی یا همان کپیرایترا رعایت کنید. عدم رعایت کپیرایت علاوه بر اینکه حق سازندهی آن محصولرا ضایع میکند، امکان تولید محصولات خوب را هم درآینده کاهش میدهد. چون دیگر کسی میلی به ساخت محصول خوب نخواهد داشت.
فراموش نکنید که دنیای مارا نرمافزارها میگردانند و اگر ما کاری بکنیم که به خاطر آن نرمافزارهای خوب کمتری تولید شوند، مسئول منابع هدر رفته و جانهای بهخطر افتاده خواهیم بود.
البته وقتی در کشوری مثل ایران درمورد کپیرایت صحبت میکنیم همواره به مشکل میخوریم، چون امکان تهیّهی خیلی از محصولات به شکل قانونی در ایران وجود ندارد.
راه اخلاقی ممکن برای ما این است که تا جای ممکن از محصولات مشابه رایگان استفاده کنیم. امّا بعضی محصولات جایگزینی ندارند و دیگر چارهای باقی نمیماند.
۴-تضمین بالاترین کیفیت
یک مهندس نرمافزار باید مطمئن شود که محصولاتش و تغییراتی که در آنها ایجاد میکند حداکثر استانداردهای حرفهای ممکن را دارد.
ابتدا به این خاطر که مشتری برای چنین چیزی دارد به شما پول میدهد. دوم به این خاطر که در غیر این صورت اطمینان افراد در طولانی مدّت از بین میرود و مشکلات شرح داده شده در بخش اوّل رخ میدهند.
البته این وسط یک مشکل دیگر هم وجود دارد که در بخش بعدی آنرا میبینیم.
۵-حفاظت از محیط زیست
حالا که بخشهای زیادی از دنیا با نرمافزار اداره میشوند، باید انتظار اینرا هم داشته باشیم که نرمافزارها آسیبهای زیادی را به دنیا وارد کنند.
هرروز کارهای بیشتری با نرمافزارها انجام میشوند و کامپیوترهای بیشتری برای رفع نیازها استفاده میشوند، پس بخش بزرگی از انرژی جهانرا نرمافزارها برای انجام پردازشها مصرف میکنند.
طبق آمار در سال ۲۰۱۵، در هر ثانیه برای پردازش نتایج جست و جو های گوگل حدود ۵۰۰ کیلوگرم کربن مونوکسید وارد هوا میشد. آماری که مطمئناً امروز بیشتر شده است. فراموش نکنید که جستوجوی گوگل یکی از صدها استفادهای است که مردم دنیا در ماه از نرمافزارها میکنند.
معماریهای بد، پیادهسازیهای بد، کدهای کثیف که نیاز به کدهای بیشتری برای نگهداری دارند و هرکار غیر اصولی ای که من و شما انجام میدهیم باعث میشود زمین بیشتر از آن چیزی که باید گرم و آلوده شود.
بله، من و شما حتّی اگر با دوچرخه این طرف و آن طرف برویم، سیگار نکشیم و از کیسهی پلاستیکی استفاده نکنیم، بهخاطر کدهای بدمان مسئول مشکلات زیستمحیطی ای هستیم که انسانها و دیگر موجودات را به دردسر انداخته است.
۶-عدم مشارکت در آسیب به انسانها
یک مهندس نرمافزار نباید در پروژههایی که منجر به کشتار انسانها میشوند شرکت کند. شاید خیلیها با این حرف مخالف باشند، امّا من مشارکت در هر کاری که منجر به کشتار انسانی میشود را غیر اخلاقی میدانم.
امروزه دولتها و معارضانشان دنبال موشکهای دقیقتر، سلاحهای خودکار هوشمند، پهپادهای کشندهتر و … هستند که همگی نیازمند مشارکت مهندسی نرمافزار اند.
مهم نیست که شما چه احساسی نسبت به ارتش کشورتان دارید یا چقدر بهانه برای ساخت یک سلاح میتوانید بیاوید، مسئله کاملاً روشن است. در جنگ تنها بیگناهان کشته میشوند و انسانهایی حاصل زحمات چندین سالهشان را از دست میدهند.
هروقت پول زیاد یک پروژهی نظامی وسوسهتان کرد، تصویر کودکانی را تصور کنید که در جنگی که قرار است شما هم جزو قاتلانش باشید کشته میشوند.
۷-مقاومت دربرابر موارد آسیبزا
زمان خیلی کم است و مدیر پروژه از شما میخواهد که هرطوری که شده برنامهرا تحویل بدهید. از طرفی میدانید برنامه درست نیست و ممکن است با این باگ برای کاربران ضرر مالی جدّی ایجاد کند.
سرمایهگذارها منتظر اند و اگر ربات جرّاح فردا آماده نباشد گروه را منحل میکنند. امّا شما میدانید باگهای این ربات میتواند باعث مرگ بیماران بشود.
وظیفهی اخلاقی یک مهندس نرمافزار در موارد مشابه چیست؟ باید سکوت کند، پولشرا بگیرد و مسئولیّترا روی دوش نفر بالایی بیندازد؟
مطمئناً خیر. یک مهندس نرمافزار باید با توجّه به احتمال وقوع آسیب، وسعت آسیب و افرادی که تحت تأثیر آن قرار میگیرند تصمیم گیری کند.
ممکن است با توجّه به این موارد مشکل را با احترام با همان مسئول بالادستی درمیان بگذارید و او را قانع کنید، یا با رئیس او ملاقات کنید و مشکل را بگویید. حتّی ممکن است در مواردی که خطر بزرگتر است و کسی به حرفتان گوش نمیدهد مجبور شوید رسانهها را از موضوع با خبر کنید.
اخلاق حرفهای حکم میکند که تمامی تلاشتان را بکنید تا با وجود آن مشکل خطرناک محصول منتشر نشود. امّا اگر واقعاً هیچ کدام از تلاشهایتان نتیجه نداد باید به خاطر اخلاقیات و انسانیت آن مجموعهرا به نشانهی اعتراض ترک کنید.
من سعی کردم در این نوشته مباحثی که مربوط به دنیای بیرون از دنیای نرمافزار میشد را پوشش بدهم. به همین خاطر هم حرفی از موارد اخلاقی در محیط کار و… نزدم. آنها بمانند برای دفعات بعد.
اگر مبحث اخلاقی مهمی جا افتاده یا با بخشی مخالف هستید در بخش نظرات من و دیگر خوانندهها را از نظراتتان آگاه کنید. همگی خوشحال خواهیم شد.
پینوشت: عنوان موارد: ۱،۲،۳ و ۷ در کتاب Software Engineering آقای Sommerville ذکر شده اند و عنوان مورد چهارم در IEEE-CS/ACM Code of Ethics آورده شده. امّا توضیحات آنها را خودم اضافه کرده ام. توصیه میکنم این دو مورد را هم مطالعه کنید.
مطلبی دیگر از این انتشارات
ریفکتورینگ - بدهی فنی ( Refactoring - Technical debt) – بخش دوم
مطلبی دیگر از این انتشارات
بخش سوم، یک برنامه ساده با Python Flask Framework
مطلبی دیگر از این انتشارات
پایتونیک - معرفی Virtual Environmentها قسمت اول