بهزاد مرادی

آیا برنامه‌نویسی علم است یا مهارت و یا حتی هنر؟

بهزاد مرادی مدرس، کپی‌رایتر و دولوپر

این محتوا بدون نظارت تیم سکان آکادمی تولید شده و صرفاً نظرات شخصی بهزاد مرادی می‌باشد.

در این پست قصد داریم مقولهٔ 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 (سرگرمی) می‌شود.

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

کدنویسی را به عنوان یک ابزار آموزشی هم می‌توان دید که در مقاله‌ای تحت عنوان چکیدهٔ ارائهٔ «ضرورت آموزش برنامه‌نویسی به کودکان» در اولین گردهمایی بزرگ برنامه‌نویسان ایران این مسئله به تفصیل مورد بررسی قرار گرفت.

به نظر شما آیا برنامه‌نویسی اساساً علم است یا مهارت و یا حتی هنر؟

ایدهٔ خود را در سکان‌پلاس بنویسید!

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
arshazm
arshazm برنامه نویس وب - علاقمند تدریس و استارتآپ
۱۳۹۷/۰۴/۱۲
برنامه نویسی "علمی" است که با کسب "مهارت" در آن و با بکار بردن "هنر" میتواند مارا به هدف خود برساند.
بهنام صباغی
بهنام صباغیتوسعه‌دهنده c++ (دیتا ویژوال و nosql)
۱۳۹۷/۰۴/۰۴
من فکر میکردم علمه تا این که بعد یه مدت دیدم من و دوستانی که دارم طبق یک آموزش واحد داریم به حالت های مختلفی کد میزنیم که همشون هم درسته ولی بعضی کدها طوری هنرمندانه هست که وقتی عمیق میشی توش کیف میکنی .
alireza
alireza
۱۳۹۷/۰۴/۰۳
برای شخص من خود علم یه هنره یه زیبایی خاص مثلا بعضی ها این تابلو های نقاشی که روش یه لکه رنگ هست رو هنر میدونن اما تابلوی پیکاسو براشون ارزشی نداره و برای بعضی های این موضوع برعکسه و هر کس هنر و زیبایی رو از چشم خودش میبینه برای من زیباتر از تابلو های نقاشی ادم های مشهور یا قطعه های موسیقی گاها آزار دهنده علم ریاضی و فیزیک هست جایی که همه چی بر اساس یه نظم و قانون زیبا استوار هست یه هارمونی جذاب که ادمو غرق خودش میکنه و از اونجایی که به کامپیوتر علاقه دارم همه ی این ها رو رو توی برنامه نویسی میبینم دنیای کوچیک و هدفمندی که نظم داره جذابه و میشه از از همه چیزش سر در اورد
الیاس شرفی
الیاس شرفیعلاقه مند به زبان های برنامه نویسی php و java
۱۳۹۷/۰۴/۰۳
همانطور که مشخص است علم و مهارت و هنر به یک مفهوم برگشت میکنند به نام ادراک (ادراک تنها مفهومات ذهنی را شامل می شود و احساس هم مفهومات ذهنی و هم مفهومات خارجی)؛
به نظر من برنامه نویسی در ابتدای شروع یک علم است چرا که در معنای علم در فرهنگ دهخدا میخوانیم که به معنای دانستن است و ما دو مقوله داریم یکی دانستن است و یکی داشتن است علم صرف آگاهی است یعنی مثلا یک نفر میداند که در رانندگی اگر ترمز بگیرد ماشین متوقف می شود اما در عمرش یک مرتبه هم ترمز نگرفته ، این صرفا میداند اما تاکنون این دانستن تبدیل به داشتن نشده (این داشتن را برخی تجربه هم قلمداد میکنند).
اما مقداری که این دانستن پرورش یافت این شخص مهارت پیدا می کند ، مهارت عملگرایی بودن است و شخص وارد میدان می شود و شروع به برنامه نویسی می کند (برنامه نویسی واقعی ، چون آنچه ما در حین برنامه نویسی یاد میگیریم با آنچه واقعا در انجام پروژه می خواهیم انجام دهیم بسیار متفاوت است و اکثر افرادی که تازه وارد یک شرکت برنامه نویسی می شوند اغلب دچار این مشکل می شوند که در ذهنشان این است که همه چیز را میدانم اما برای تست دست به کد که می شود ته دلش می گوید : یا خدا !!! چه اشتباهی کردم آمدم برای تست ...
اما به هر حال این شخص که تا به حال در عمرش ترمز نگرفته بود یا ماشین را گاز نداده بود حالا دیگر هم ترمز میگیرد و هم گاز میدهد و این می شود بخش مهارت ماجرا.
و در ادامه برنامه نویس به یک هنرمند مبدل میشود و چنان با کدها بازی می کند که همچون نانوا با خمیر و این هنرمندی هست که به تمام قسمت های قبل یعنی علم و مهارت ارزش میدهد و بدون رسیدن به این پله نمی توان ادعای برنامه نویس حرفه ای بودن، داشت.
به هر حال دیگر حالا برنامه نویس جریان ما نه تنها گاز میدهد و ترمز میگیرد بلکه در مسابقات رالی یا مسابقات خیابانی هم شرکت می کند و هنرش را به رخ دیگران میکشد .
این بود انشای من :)
موفق باشید💐