برنامه نویسی , ریاضی 453 بازدید

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

پادکست پیرامون ریاضیات لازم برای برنامه نویسی

ذخیره کردن این فایل صوتی: لینک دانلود

نسخه نوشتاری

یکی از دوستان سوالاتی را با توجه به این موضوع پرسیده‌اند که من همواره تاکید می‌­کنم، برنامه‌نویسی بدون ریاضیات نمی‌­شود. ایشان پرسیده‌اند که از کجا باید یادگیری را شروع کنیم؟ افرادی که ریاضیات آن‌ها ضعیف است چه کاری باید انجام دهند و در نهایت اینکه، کدام مباحث ریاضی برای برنامه‌نویسی از اهمیت بیشتری برخوردار هستند. باید توجه داشت که اصلا در برنامه‌نویسی و به طور کلی در این فضا، مهم‌­تر از چیزی که فرد هست، چیزی است که می‌­تواند باشد. در بحث ریاضیات نیز، مهم‌­تر از چیزی که فرد در حال حاضر بلد است، چیزی است که می‌­تواند بیاموزد و ذهن ایشان پذیرش آن را دارد. فردی که فضای «الگوریتمیک» (algorithmic) را توانسته درک بکند، فکر نرم­‌افزاری دارد.

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

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

حالا می‌توان حل این مساله را روی کاغذ انجام داد و یا انجام آن را با برنامه‌نویسی به کامپیوتر سپرد. این، همان دانشی است که فرد به آن نیاز دارد؛ یعنی چیزی فراتر از بلد بودن یک مساله ریاضی است. می‌توان از مسائل خیلی ساده هم شروع کرد. مثلا من در «دوره آموزشی جاوا»، محاسبه «شاخص توده بدنی» (Body mass index | BMI) را انجام دادم که نرخ سلامتی یک نفر را با توجه به قد و وزن او، نشان می‌دهد. خب BMI فرمول ساده‌ای دارد؛ اما این دید ریاضی را شما باید داشته باشید. به عنوان مثالی دیگر، می‌توان به مساله محاسبه اقساط یک وام اشاره کرد که می‌توان با زبان‌های برنامه‌نویسی گوناگون آن را حل کرد و پیاده‌سازی مربوط به آن را انجام داد. با بهره‌گیری از برنامه‌نویسی، از این محاسبات ساده ریاضی گرفته تا یک بحث پیچیده را می‌توان انجام داد.

مثلا فرض کنید که از گوشه یک کاغذ، عکسی را گرفته‌اند. عمود که نیست؛ این امر موجب می‌شود که زاویه قائمه کاغذ، در عکس قائمه دیده نشود. زاویه قائمه است، ولی به خاطر زاویه دوربین، قائمه بودن دیده نمی‌شود یا بعضی چیزها دوران پیدا می­‌کنند. این را چطور می­‌توان اصلاح کرد؟ این یک مساله هندسی و در واقع یک مساله ریاضی است که ریشه آن برای مثال به ماتریس­‌ها باز می‌گردد. شما باید کار با ماتریس‌­ها و محاسبات ماتریسی را بلد باشید تا بتوانید این مساله را حل کنید و این موضوع نیاز به مطالعاتی دارد. گاهی هم خیلی از مسائل تبدیل می‌شوند به یک گراف، یعنی شما باید مساله­ را به شکل یک مساله ریاضی توصیف کنید و بعد، پیدا کردن یک مسیر روی گراف یک پاسخ برای مساله فرد می‌­شود که نمونه آن را می‌توان در بسیاری از «موتورهای جستجو» (Search Engines) و «سیستم‌های توصیه‌گر» (Recommender system) مشاهده کرد.

گاهی فرد می‌خواهد برای مثال تخمین بزند و پیش‌بینی انجام بدهد. در چنین مواردی نیاز به یک مثلا الگوریتم «برازش منحنی» (Curve Fitting) دارد. ولی، مبانی ریاضی این کار را باید بداند. یک زمانی هست که فرد می‌خواهد یک عدد تصادفی را با یک توزیع خاصی درست کند؛ در اینجا باید مبانی آمار و احتمال را بلد باشد. واقیعت این است که شما در برنامه‌نویسی غیر از مباحث خیلی مجرد مانند جبر و چنین مواردی که آن‌ها هم کاربرد دارند ولی در نگاه اول خیلی ضروری نیستند، به سایر موارد تقریبا احتیاج پیدا می‌کنید. ولی چیزی که عمومی است و اغلب برای افراد خیلی کاربرد دارد، مواردی هستند که در ادامه بیان خواهم کرد.

این موارد را می‌گویم که افراد یاد بگیرند و در حد همان ریاضیات سال اول دبیرستان هم بلد باشند کافی است. لازم نیست که برای همه این حوزه­‌ها فوق‌لیسانس ریاضی بگیرید. نه؛ اتفاقا در حد همان ریاضیات دبیرستان کافی محسوب می‌شود. یکی بحث نظریه گراف است که اهمیت بسیار بالایی دارد و دیگری نظریه اعداد شامل هم‌نهشتی، بخش­‌پذیری، تعاریف و الگوریتم‌هایی که در آن مطرح می‌شود و چنین مسائلی است. البته شاید یک ذره در این حوزه نیاز باشد بیشتر عمیق شد، زیرا کاربرد­هایی در رمزنگاری دارد.

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

متاسفانه، اغلب ما به صورت ذاتی ارزشی برای این نوع از محتوا قائل نیستیم. در صورتی که مهم هستند. شما فقط کافی است نگاهی به کشورهایی داشته باشید که برای علوم پایه و ریاضیات در آن‌ها واقعا و به معنای واقعی کلمه دارد سرمایه‌گذاری می‌­شود؛ آن‌ها کجا هستند و وضعیت ما چیست؟ برای این مسائل وقت بگذارید. از یاد گرفتن ریاضیات و تفکر ریاضی هیچ وقت ضرر نخواهید کرد. برای کار در حوزه برنامه‌نویسی، پردازش تصویر، پردازش سیگنال، پردازش گفتار، «متن‌کاوی» (Text Mining)، هوش مصنوعی و بازی‌سازی به ریاضیات نیاز است؛ بدانید که کلید ورود به همه این دنیاها ریاضیات است. بدون ریاضیات نمی‌توان دنیای پردازش تصویر یا دیگر موارد بیان شده را اصلا درک کرد. شما هر کجا که قدم بگذارید، ریاضیات زبان ارتباطی شما با آن مساله است. اگر جایی می‌­بینید که در بحث آموزش ریاضیات دارند اهمال می‌­کنند، مطمئن باشید که نمی‌توانند شما را آماده ورود به دنیای حرفه‌­ای بکنند.

نگاهی به گفتگوها و دغدغه‌های «استک اورفلو» (Stack Overflow) و دیگر «تالارهای گفتگو» (Internet Forum) خارجی و دغدغه و سبک گفتگوی ما در ایران داشته باشید؛ زمین تا آسمان با هم فرق دارند. اینجا متاسفانه انگار اصلا برنامه‌نویسی با قهر با دنیای ریاضیات مترادف شده است. همچنین چیزی اصلا درست نیست. به همین دلیل، این صنعت در ایران اگر بخواهد به این صورت پیش برود واقعا محکوم به شکست است؛ این تفکر نمی‌تواند جواب بدهد. به خاطر همین اکیدا توصیه می‌­کنم خودتان را جایی که حتی شاید نیاز هم نیست، باز با ریاضیات درگیر کنید؛ اشکالی ندارد. این چیزی است که برای شما می‌ماند، چون این تفکر، راه را برای شما ساده‌تر و خیلی چیز­ها را برای شما بهتر خواهد کرد.

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

برای دانلود و شنیدن دیگر پادکست‌های دکتر سید مصطفی کلامی هریس در مجله فرادرس، روی این لینک [+] کلیک کنید.

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

آیا این مطلب برای شما مفید بود؟

یک نظر ثبت شده در “ریاضیات لازم برای برنامه نویسی — پادکست پرسش و پاسخ

  1. ریاضیات یکی از علوم پایه است و غیرممکن هستش که داخل زمینه ای بهش برنخوری داخل یک زمینه زیاد یکی کم من خودم تا قبل اینکه وارد AI بشم از ریاضیات دوری میکردم ولی بعد وقتی دیدم با ریاضیات چه کارهای شیرینی میشه کرد بصورت جدی شروع کردم به مطالعه و کسب اطلاعات جامع تا قبل اون حتی جدول ضرب هم حفظ نکرده بودم 😅ولی الا . . .

نظر شما چیست؟

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