تفکر رایانشی چیست؟

what-is-computational-thinking

تفکر رایانشی یا تفکر محاسباتی نوعی تفکر سازمان یافته با بهره گیری از مجموعه ای از مهارت ها است که منجر به ارائه راه حلی کامپیوتر-فهم برای مسائل می گردد. در ادامه مطلب خواهیم گفت که منظورمان از تفکر سازمان یافته، مهارت ها و راه حل کامپیوتر-فهم چیست. با ما همراه باشید.

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

زمانی که یک برنامه نویس در حال یادگیری نحو (syntax) یک زبان برنامه نویسی است در واقع در حال یادگیری تفکر رایانشی است. زمانی که یک تحلیلگر سیستم در حال مطالعه روش های ممکن برای ارائه یک راه حل کامپیوتری برای مسئله پیش آمده برای یک سازمان است، در حال تفکر رایانشی است. هنگامی که یک تحلیل گر داده در حال شناسایی الگوهای مشابه روی داده هاست در واقع دارد مرحله ای از تفکر رایانشی را پشت سر می گذارد و شما، زمانی که یک مسئله دشوار را به چند مسئله کوچک تر تقسیم می کنید و سعی می کنید با ارائه راه حل برای آن مسائل کوچک تر، در نهایت راه حلی برای مسئله اصلی ارائه کنید، دارید به روش تفکر رایانشی مسئله خودتان را حل می کنید. اجازه دهید با یک مثال موضوع را ادامه دهیم:

یادگیری تفکر رایانشی با مثال جشن تولد مادر 🙂

فرض کنید می خواهید یک جشن تولد حسابی برای مادرتان بگیرید (ان شاءالله که خدا سایه تمام پدرها و مادرها را بر سر فرزندانشان حفظ کند و آن ها که از دنیا رفته اند را غریق رحمت خود کند). چطور این کار را انجام خواهید داد؟ شاید بگویید به یکی از این شرکت های خدمات تشریفات مراجعه می کنیم و تمام! :). اتفاقا این هم برای خودش راه حلی است که گاهی اوقات در مهندسی نرم افزار استفاده می شود و در انتهای مطلب به آن اشاره خواهیم کرد.

اما اگر برای انجام این کار از لحاظ زمانی و مالی محدودیت داشته باشید چطور؟ به نظر می رسد حالا مسئله کمی تغییر کرد. درست است؟ پس انگار اولین کار این است که مسئله را به درستی تعریف کنیم.

مرحله صفرم: تعریف مسئله

اینکه چرا گفتیم مرحله صفرم و نگفتیم مرحله اول، به خاطر این است که در برخی منابع، تعریف مسئله را جزء مراحل تفکر رایانشی در نظر نمی گیرند و فرض می کنند که مسئله به درستی تعریف شده است و یک راست سراغ مراحل بعدی می روند. اما همیشه این طور نیست. گاهی اوقات با تعریف نادرست یک مسئله، راه حل نهایی هم که برای آن ارائه می شود ناقص یا نادرست خواهد بود. از قدیم الایام هم گفته اند که: فهم سوال، نصف جواب است! پس در مرحله اول، باید مسئله را به درستی تعریف کنیم و تمام شرایط و محدویت ها را در تعریف مسئله در نظر بگیریم. در مثال جشن تولد، ما برای برگزاری از لحاظ زمانی و مالی محدودیت داریم. پس صورت مسئله این طور می شود: می خواهیم یک جشن تولد برای مادر برگزار کنیم و فلان روز محدودیت زمانی و فلان قدر پول داریم. با این تفاسیر چکار باید کرد؟ بهتر نیست این کار بزرگ را به چند کار کوچک تر تجزیه کنیم؟

احتمالا چنین سوال هایی را باید برای انجام این کار پاسخ دهیم:

  • چه کسانی برای جشن باید دعوت شوند؟
  • هزینه هر نفر برای برگزاری مراسم چقدر می شود؟
  • جشن را کجا برگزار کنیم؟ (در خانه باشد یا بیرون از خانه؟ اگر بیرون از خانه، کجا مناسب تر است؟)
  • زمان جشن چه زمانی باشد؟ (صبح، عصر، شب؟)
  • چه هدیه ای برای جشن تولد بخریم که مناسب باشد؟
  • برای پذیرایی چه برنامه ای داشته باشیم؟
  • برای کارت دعوت چه برنامه ای داشته باشیم؟
  • چه کار کنیم که جشنی خاطره انگیز داشته باشیم؟ (سرگرمی، عکاسی، وسایل تزیینی و …)

مرحله اول: تجزیه

می بینید که با لیست کردن چند سوال، مسئله اصلی که برگزاری جشن تولد با محدودیت زمانی و مالی بود، حالا تبدیل شده به مجموعه مسائلی کوچکتر که طبیعتا حل هر کدام از آن ها ساده تر به نظر می رسد. این یکی از مهارت های مورد استفاده در تفکر رایانشی است که به آن تجزیه (Decomposition) گفته می شود. به کمک مهارت تجزیه، مسئله اصلی به مجموعه ای از مسائل کوچکتر تجزیه می شود و این کار آنقدر ادامه می یابد که برای کارهای تجزیه شده راه حلی مشخص یا از پیش آماده وجود داشته باشد و یا بتوان راه حلی برای آن ارائه کرد. در تفکر رایانشی گفته می شود که آن راه حل باید با کامپیوتر قابل انجام باشد. ما اسم این راه حل ها را راه حل های کامپیوتر-فهم می گذاریم!

در مسئله جشن تولد، ما مسئله اصلی (برگزاری جشن تولد یا محدودیت زمانی و مالی) را به 8 مسئله کوچکتر تجزیه کردیم. حالا باید برای هرکدام از آن ها به دنبال راه حل باشیم. اولین سوالی که می توانیم بپرسیم این است که آیا می توان این مسائل را باز هم به مسائل کوچکتر تجزیه کرد؟ به طور مثال در مورد «برنامه برای پذیرایی» فکر کنید. آیا این کار به اندازه کافی کوچک است و نمی توان آن را به اجزای کوچک تر تجزیه کرد؟ با قدری تامل متوجه می شویم که امکان تجزیه بیشتر وجود دارد. مثلا می توان گفت:

  • میوه و شیرینی را از کجا تهیه کنیم؟
  • کدام رستوران بهترین غذا را متناسب با بودجه ما دارد؟
  • برای پذیرایی از ظروف اجاره ای استفاده کنیم یا ظرف یکبار مصرف بخریم؟

این لیست را شاید بیشتر از این هم بتوان ادامه داد اما هدف ما در اینجا فقط توضیح این مطلب است که در مرحله تجزیه، کار از مسئله اصلی شروع می شود و مسئله اصلی به مسئله های کوچکتر تجزیه می شود. اگر مسئله های کوچکتر بازهم قابل تجزیه بودند، این کار باز هم ادامه می یابد تا زمانی که دیگر نتوان مسئله های موجود را به مسئله های کوچکتر تجزیه کرد. در اینجا مرحله تجزیه به پایان می رسد. اما این پایان ماجرا نیست. تفکر رایانشی دیگر چه کمکی می تواند به ما بکند؟

مرحله دوم: شناسایی الگو

بیایید از این مسئله شروع کنیم: «میوه و شیرینی را از کجا تهیه کنیم؟». اولین راه حلی که به ذهن تان برای پاسخ به این سوال می رسد چیست؟ احتمالا دارید به این موضوع فکر می کنید که شاید مطمئن ترین کار استفاده از تجربه های گذشته باشد. اگر این طور است شما باز هم در دام تفکر رایانشی گرفتار شدید 🙂

شناسایی الگو (Pattern Recognition) یکی دیگر از مراحل یا مهارت های تفکر رایانشی است و در آن سعی می شود مسائل موجود با مسائل قبلی که راه حلی برای آن ها وجود دارد تطبیق داده شود و اگر این کار با موفقیت انجام گردد بنابراین راه حل قبلی قابل استفاده برای مسئله کنونی خواهد بود. به مثال جشن تولد برگردیم: میوه و شیرینی را از کجا تهیه کنیم؟ از همان جایی که آخرین بار خریدیم و از خریدمان هم راضی بودیم. می بینید که چون مسئله ها با هم تطابق دارند، راه حل های قبلی برای مسائل جدید قابل استفاده هستند. این کار را می توان برای تمام مسائل کوچکتر حاصل از مرحله تجزیه انجام داد. اما اگر راه حلی از قبل وجود نداشت چه کار کنیم؟

مرحله سوم: انتزاع

جالب است بدانید که خیلی از مسائل موجود در دنیای کامپیوتر اگر به مسائلی به قدری کافی کوچک شکسته شوند، برای آن ها راه حلی از پیش آماده وجود دارد. اما با این وجود هستند مسائلی که هیچ راه حل از قبل آماده ای برای آن ها وجود ندارد. با این مسائل باید چگونه رفتار کرد. «انتزاع» که ما آن را ساده سازی می نامیم، راهکاری است که در این موارد به کمک شما می آید. منظور از انتزاع در تفکر رایانشی چیست؟ به مثال جشن تولد برگردیم؟

یکی از کارهای ما برای برگزاری جشن تولد این بود: «برای کارت دعوت چه برنامه ای داشته باشیم». فرض کنید که ما تا به حال هیچ زمانی از کارت دعوت برای مهمانی هایمان استفاده نکرده ایم و اگر بخواهیم در این مورد تحقیق کنیم یا آزمون و خطا کنیم زمان را از دست می دهیم (یادتان نرفته که محدودیت زمانی داشتیم) و از طرفی هم نمی توانیم ولخرجی کنیم و سراغ معروف ترین فروشگاه ها برای خرید کارت دعوت برویم. پس چه راهی می ماند؟ چطور می توان این مسئله را ساده تر کرد؟ بیایید به موضوع انتزاعی فکر کنیم. یعنی یک سطح بالاتر… یعنی کمی ساده تر.

ما با کارت دعوت می خواهیم چه کار کنیم؟ مگر قرار نیست که موضوع جشن به اطلاع دوستان و آشنایان و اقوام رسانده شود؟ آیا کارت دعوت تنها راه ممکن است؟ چه راه های ارتباطی دیگری برای این کار وجود دارد؟ پاسخ به این سوالات در واقع پاسخ به مسئله ای است که تا قبل از این ظاهرا جوابی نداشت! وقتی با محدودیت زمان و محدودیت مالی مواجه هستیم لزومی ندارد که کارت دعوت تهیه کنیم. می توانیم از راه های دیگری مثل، تماس تلفنی، شبکه های اجتماعی و پیام رسان ها استفاده کنیم. آیا مهمانان ناراحت نمی شوند که چرا دعوت رسمی از آن ها انجام نشده؟ ممکن است بشوند! اما آنچه که مهم است این است که با توجه به محدودیت هایی که وجود دارد جشن را بتوانیم برگزار کنیم و از جزییاتی که می توان آن ها را نادیده گرفت صرف نظر کنیم. این همان معنی انتزاع (Abstraction) است البته به زبان خیلی ساده ! عزیزان فرهیخته ای که این مطلب را می خوانند مرا به بزرگواری خودشان ببخشند 🙂

سوال: اگر انتزاع هم به کار بستیم و باز هم نتوانستیم راه حلی برای مسئله موجود پیدا کنیم (به زبان کامپیوتری یعنی نتوانستیم الگوریتمی برای مسئله ارائه کنیم) چه می شود؟ هیچ! مسئله می ماند تا زمانی که عزیزی پیدا شود و آن را حل کند (یعنی الگوریتمی برای آن طراحی کند)

مرحله چهارم: الگوریتم

خوب تا اینجا به نظر خوب پیش رفته ایم. تمامی مسائل را به مسائل کوچک تر شکسته ایم (تجزیه) و تا جایی ادامه داده ایم که برای مسائل موجود یا راه حلی از پیش آماده وجود دارد (شناسایی الگو) و یا با صرف نظر کردن از یک سری جزییات (انتزاع) می توان راه حلی برای آن ها ارائه کرد. حالا زمان آن رسیده که راه حلی جامع برای مسئله ارائه شود. این کار توسط طراحی الگوریتم انجام می شود. البته خواننده باهوش که شما باشید و یا خواننده ای که دارای تحصیلات کامپیوتری است همینجا می پرسد مگر برای هر کدام از مسئله های کوچک نیاز به طراحی الگوریتم نداشتیم؟ بله، برای آن مسائلی که راه حل (بخوانید الگوریتم) از پیش آماده وجود نداشت، ما مجبوریم خودمان دست به کار شویم و راه حلی (بخوانید الگوریتمی) برای مسئله ارائه کنیم و همان طور که ذکر شد می توانیم از ساده سازی یا انتزاع هم استفاده کنیم. اما منظور ما در اینجا، ارائه الگوریتم برای کل مسئله است.

ما راه حل هایی برای مسائل کوچک تر داریم و حالا با استفاده از آن ها باید راه حلی برای مسئله اصلی ارائه کنیم. خوب در این مثال ساده ما که برگزاری جشن تولد بوده است اگر تمامی راه حل های موجود برای مسائل کوچک تر را پشت سر هم لیست کنیم (حالا با قدری پس و پیش کردن کارها)، می توانیم به راه حل (الگوریتم) کلی مسئله برسیم. تعریف کلی و ابتدایی الگوریتم هم همین است: مجموعه ای از کارها که انجام آن ها با ترتیب مشخص، منجر به حل مسئله می گردد.

اما در مسائل پیچیده همیشه این گونه خطی، منظم و ساده نیست. گاهی اوقات، نیاز است تا مجموعه ای از کارها تکرار شوند، گاهی اوقات مسیر راه حل نهایی، چند شاخه می شود و در هر شاخه مجموعه ای از کارهای متفاوتی انجام می شود. گاهی اوقات بعضی کارهایی که به یکدیگر وابستگی ندارند، می توانند به موازات هم انجام شوند و در نهایت راه حل نهایی ممکن است یک چیزی بشود شبیه به این!

پیچیده به نظر می رسد؟ شاید!

کامپیوتری ها که می دانند؛ اما اگر عزیزانی که از سایر رشته ها در حال مطالعه این مطلب هستند نمی ترسند، باید بگوییم که این تازه فلوچارت یک سیستم نه چندان پیچیده است. می پرسید فلوچارت چیست؟ خواهیم گفت. سیستم های پیچیده طراحی های بسیار پیچیده تری دارند به طوری که اگر کسی بخواهد کل ساختار سیستم را متوجه شود باید زمان بسیار زیادی صرف کند.

فلوچارت یک نمودار تصویری برای بصری سازی الگوریتم ارائه شده برای حل یک مسئله است. فلوچارت مسیر طی شده از ابتدای کار تا انتها را به صورت تصویری نشان می دهد به طوری که تمام ورودی ها، خروجی ها، پردازش ها، تکرارها، شرط ها و سایر موارد در آن گنجانده می شود. در مطلب دیگری به تفصیل مفهوم فلوچارت را توضیح خواهیم داد.

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

نکته دوم: در ابتدای مطلب قرار شد که به یک موضوعی در انتها اشاره ای داشته باشیم (هرچند مطلب طولانی شد و عذرخواهی می کنیم). یادتان هست که گفتیم اگر بخواهیم جشن تولد بگیریم می توان به یکی از شرکت های ارائه دهنده خدمات تشریفات مراجعه کرد تا بدون دردسر کار را برایمان انجام دهند؟! در مهندسی نرم افزار گاهی اوقات با توجه به محدودیت های زمان و هزینه، به صرفه تر است که کار را برون سپاری کنیم تا اینکه بخواهیم خودمان برای آن راه حل ارائه کرده و پیاده سازی کنیم. تصمیم گیری در مورد اینکه چه زمانی باید برون سپاری کرد و چه زمانی خودمان باید کار را انجام دهیم نیاز به بررسی و تحلیل دقیق دارد. این موضوع دیگر به عهده مدیریت شرکت و جلسات آن ها با طراحان و تحلیل گران سیستم است. البته این مفهوم مختص مهندسی نرم افزار نیست و در کل صنایع مورد استفاده قرار می گیرد.

در این مطلب، تفکر رایانشی را تعریف کردیم و در مورد مراحل مختلف آن با ذکر یک مثال توضیح دادیم. البته به خاطر بیان ساده مطلب مجبور بودیم بعضی جزییات فنی را ذکر نکنیم. تفکر رایانشی می تواند در حوزه های مختلفی از علوم مهندسی به کار گرفته شود اما خواستگاه تفکر رایانشی و پیشینه آن به مهندسی نرم افزار برمی گردد و بیشترین بهره را از تفکر رایانشی نیز مهندسان نرم افزار می توانند ببرند.

مقالات مرتبط

آیا یادگیری برنامه نویسی برای نوجوانان سخت است؟

آیا واقعا یادگیری برنامه نویسی برای نوجوانان سخت است؟ بیایید بررسی کنیم که چه مواردی باعث می شود که یادگیری هر موضوعی سخت به نظر برسد؟ اگر کدام یک از شرایط زیر وجود داشته باشد می توان گفت که یادگیری یک موضوع سخت است؟

پاسخ‌ها

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *