آریا بهروزیان
آریا بهروزیان
خواندن ۷ دقیقه·۲ سال پیش

تاثیر ریاضیات و تفکر ریاضیاتی در برنامه نویسی و شاخه های مهندسی کامپیوتر

برنامه نویسی از زبان ریاضیات برگرفته شده و پایه و اساس ان قواعد ریاضی هستند که در حال تکرار اند پس این حرف که برای برنامه نویسی نباید ریاضی قوی داشته باشیم حرف کاملا بی ثباتی هست در ادامه بیشتر بهتون میگم راجبش تا قانع بشید

اریا بهروزیان اسپیسیفای هوش مصنوعی aryia behroziuan spacify qisource ceo co founder
اریا بهروزیان اسپیسیفای هوش مصنوعی aryia behroziuan spacify qisource ceo co founder

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

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

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

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

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

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


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

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

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

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

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

About me: https://redl.ink/C8Nl8

spacify platform: https://www.spacify.ir

anchor podcasts: https://anchor.fm/aryia-behroziuan

spotify: https://open.spotify.com/show/18tbZGHEJqziUHXqsNXBi7

youtube channel: https://www.youtube.com/channel/UCBRi1oF9Gf-h1rFJNagvFOg



برنامه نویسیریاضیاتیادگیریاموزشیمهندسی
مدیر عامل و بنیان گذار کوییت سورس
شاید از این پست‌ها خوشتان بیاید