در این پست قصد داریم مقولهٔ Coding (کدنویسی) را از سه جنبهٔ در ظاهر متفاوت اما اساساً مرتبط با یکدیگر مورد بررسی قرار دهیم که عبارتند از:
- آیا کدنویسی یک علم است؟
- آیا کدنویسی یک نوع مهارت است؟
- و آیا کدنویسی نوعی هنر است؟
آن دسته از افرادی که اعتقاد دارند برنامهنویسی نوعی علم میباشد بیشتر کسانی هستند که مبنای قضاوت ایشان چیزهایی همچون الگوریتمها است. به عبارت دیگر، باتوجه به اینکه نوشتن الگوریتمهای پیچیدهٔ حوزهای همچون هوش مصنوعی ملغمهای است از ریاضیات، آمار، احتمالات و غیره، ایشان کدنویسی را دقیقاً مصداق عینی یک علم میدانند.
آنهایی هم که به کدنویسی به عنوان یک مهارت نگاه میکنند بیشتر جزو کسانی هستند که همچون هر مهارت دیگری منجمله نجاری، مکانیکی، تعمیر وسائل برقی و غیره، کدنویسی را راهی برای کسب درآمد نگاه میکنند و مادامی که راهی برای کسب درآمد داشته باشند، دیگر خیلی برایشان مهم نیست که کُد بزنند یا چکش!
همانطور که اشاره کردیم، برخی هم بر این باورند که کدنویسی هنر است و این قبیل افراد بیش از آنکه روی این مسئله تمرکز کنند که آیا نرمافزار مشکل کاربر را حل میکند یا خیر، بیشتر به مقولهٔ به اصطلاح Aesthetic (زیباییشناسی) قضیه توجه دارند؛ به طوری که چیزهایی همچون تمیز بودن سورسکد، حرفهای به نظر رسیدن نرمافزار از خارج و چیزهایی از این دست برایشان حائز اهمیت است.
متأسفانه یا خوشبختانه، داستان به اینجا ختم نمیشود چرا که میتوان کدنویسی را از جنبههای به مراتب بیشتری نسبت به سه مورد فوق نگاه کرد. به عنوان مثال، میشود کدنویسی را همچون یک صنعت دید؛ صنعتی همچون دیگر صنایع مثل پتروشیمی، خودرو، کشاورزی و غیره که ثروت کلانی هم از کنار آن میشود به دست آورد و یا میشود کدنویسی را به عنوان یک تفریح در نظر گرفت و شاهد چنین ادعایی هم اینکه خیلی از دولوپرها، بهخصوص فعالان کامیونیتی اپنسورس، کدنویسی و پروسهٔ توسعهٔ نرمافزار را به شکل یک به اصطلاح Fun نگاه میکنند. حتی میشود کدنویسی را به عنوان ابزاری برای آموزش دیگر مهارتها قلمداد کرد به طوری که امروزه در کشورهای جهان اول روی آموزش کدنویسی به بچهها سرمایهگذاریهای عجیبغریبی میشود با این امید که آشنایی با اصول کدنویسی منجر به بهبود دیگر مهارتها و علوم در کودکان میشود.
باز هم پیرامون ارتباط تنگاتنگی که این مفاهیم با یکدیگر دارند باید گفت که گاهی اوقات ما با دیدی علمی/مهندسی به کدنویسی نگاه میکنیم اما نتیجه به معنای واقعی کلمه هنر است! برای روشنتر شدن این مسئله، مثالی میزنیم. فرض کنیم که با استفاده از روشهای علمی، ریاضیات، جبر، احتمال، آمار و دیگر مباحث مربوطه دست به توسعهٔ الگوریتمی در حوزهٔ هوش مصنوعی و یادگیری ژرف میزنیم که قرار است تابلوهای نقاشی هنرمندی همچون پیکاسو را به عنوان اینپوت (ورودی) دریافت نموده و با مد نظر داشتن روحیات این نقاش، عصری که در آن به سر میبرده و بسیار اِلِمان دیگر از این دست، الگوریتمهای هوشمند این سیستم حدس بزنند که اگر مثلاً وی بیست سال بیشتر عمر میکرد، چه تابلوهای دیگری از خود بر جای میگذاشت؛ به عبارت دیگر، مبداً کاملاً علمی بود اما مقصد (نتیجه) چیزی است کاملاً هنری!
درآمدی بر ریشهٔ هنر
باز برای اینکه داستان را از آنچه هست پیچیدهتر کنیم، اشاره به این نکته هم خالی از لطف نیست که واژهٔ Art به معنی هنر ریشه در لاتین دارد که در نهایت به واژهای همچون Ars به معنی Skill (مهارت) میرسیم؛ اما اگر باز هم به عقبتر بازگردیم، به واژهٔ τεχνη در یونانی میرسیم که به معنی Technology (فناوری) است!!!
برای اینکه از موضوع بیش از این منحرف نشویم، عنوانی همچون آیا برنامهنویسی علم است یا مهارت و یا حتی هنر؟ را مجدد یادآوری میکنیم. به نظر میرسد که میشود گفت علم بدون هنر اثربخشی لازم را ندارد و صحت هنر بدون علم هم همواره زیر سؤال میرود!
به طور کلی، میتوان گفت که این قضیه فقط در مورد کدنویسی نیست بلکه در مورد بقیهٔ چیزها همچون موسیقی هم صحت دارد و شاهد این ادعا هم عرضهٔ کتابی با عنوان The Art of Piano Playing: A Scientific Approach است. همانطور که میبینیم، مؤلف اساساً پیانو زدن را کاری هنری تلقی میکند اما وقتی که قصد دارد فروش کتاب خود را بالا ببرد، گزارهٔ «یک رویکرد علمی» را به عنوان کتاب میافزاید (کتابهایی با چنین عناوینی زیاد هستند؛ مثلاً کتاب The Science of Art نوشتهٔ Robert E. Mueller).
از دید بنده، پروسهٔ توسعهٔ نرمافزار یا به طور خلاصه کدنویسی در آنِ واحد هم میتواند علم باشد، هم مهارت، هم هنر، هم تفریح و هم ابزاری برای آموزش دیگر علوم و مهارتها که فقط مهم نگاه ما به این پروسه هست. برای روشنتر شدن این مسئله، مثالی میزنیم.
فرض کنیم قصد راهاندازی استارتاپی در ارتباط با E-Commerce (تجارت الکترونیک) داریم. مسلماً نیاز به توضیح نیست که کسبوکارهای آنلاین بیش از هر زیرساخت دیگری، نیاز به یک پلتفرم نرمافزاری قوی دارند. حال با این تفاسیر، ما با همکاری تیمی متشکل از متخصصین مختلف منجمله معمار نرمافزار، طراح دیتابیس، دولوپرهای فرانتاند و بکاند، متخصصین سئو، کپیرایترها و ... شروع به توسعهٔ فروشگاه آنلاین خود میکنیم. به عبارت دیگر، کاملاً علمی و حسابشده برنامهریزی کرده و پیش میرویم و اینجا است که میشود گفت توسعهٔ نرمافزار یک علم است چرا که در غیر این صورت اگر کارمان پایه و اساس منطقی و علمی نداشته باشد، گویی روی شِن فروشگاه خود را بنا نهادهایم!
وقتی که کمی از کار پیش رفت، مشاورین به ما میگویند که اِندیوزر (کاربر نهایی اپلیکیشن که معمولاً فردی معمولی است) تفاوت بین معماری نرمافزاری خوب و بَد را اساساً متوجه نمیشود؛ به عبارت دیگر، اگر نام فروشگاه ما aaa.ir باشد، کاربر معمولی نمیتواند از دید علمی تمایزی مابین فروشگاه ما با یک فروشگاه فرضی دیگر به آدرس bbb.ir متصور شود اما در عین حال آنچه را که میتواند به خوبی تشخیص دهد، خروجی کار است.
به عبارت دیگر، چقدر فروشگاه ما تجربهٔ کاربری خوبی برایش رقم میزند یا اینکه چقدر فروشگاه از بُعد ظاهری برایش جذاب و دلپسند است و اینجا است که میگوییم کدنویسی یک هنر است. در حقیقت، همانطور که یک هنرمند میداند چه فیلمی بسازد که با اِقبال عمومی مواجه شود، چه قطعهای را بنوازد که هوش از سر مخاطبین ببرد، چه نقشی بر روی بوم بزند که بیننده را محصور خود کند و چه طرحی روی قالیچه بیندازد که کسی دلش نیاید روی آن پا بگذارد، یک هنرنویس (هنرمند + برنامهنویس) حرفهای هم از همان قوانین در سایر حوزههای هنری استفاده خواهد کرد تا مخاطب را به سوی خود بکشاند (در همین راستا، میتوانید به مقالهٔ نگاهی همچون هنر و هنرمند به توسعهٔ نرمافزار و توسعهدهندگان! مراجعه نمایید.)
گفتیم که برخی افراد کدنویسی را به عنوان یک تفریح تلقی میکنند. در این مثال فرضی به خوبی میشود مصداق عینی این قضیه را دید بدین صورت که گاهی اوقات دولوپرها منتظرند تا از لایههای بالای مدیریتی تَسک بعدی ارجاع داده شود که در چنین مواقعی ایشان زمان آزاد به نسبت بیشتری در مقایسه با روزهای دیگر دارند و اینجا است که کدنویسی تبدیل به یک Fun (سرگرمی) میشود.
به عبارت دیگر، همچون کسی که در تایم آزاد خود به گشتزنی در شبکههای اجتماعی، مطالعه، گپ و گفتگو با دوستان، وبگردی و غیره میپردازد، دولوپرهایی که کدنویسی را به شکل سرگرمی نگاه میکنند در چنین مواقعی از روی بیکاری شروع به نوشتن یک پلاگین کاربردی اپنسورس میکنند یا چیزی توسعه میدهند که زندگی را برای دیگر همکارانشان راحتتر کند و یا دست به کار شده و الگوریتمهای اپلیکیشن خود را ریفکتور میکنند تا بلکه پرفورمنسشان بهبود یابد.
کدنویسی را به عنوان یک ابزار آموزشی هم میتوان دید که در مقالهای تحت عنوان چکیدهٔ ارائهٔ «ضرورت آموزش برنامهنویسی به کودکان» در اولین گردهمایی بزرگ برنامهنویسان ایران این مسئله به تفصیل مورد بررسی قرار گرفت.
به نظر شما آیا برنامهنویسی اساساً علم است یا مهارت و یا حتی هنر؟