برنامه نویسی از زبان ریاضیات برگرفته شده و پایه و اساس ان قواعد ریاضی هستند که در حال تکرار اند پس این حرف که برای برنامه نویسی نباید ریاضی قوی داشته باشیم حرف کاملا بی ثباتی هست در ادامه بیشتر بهتون میگم راجبش تا قانع بشید
یکی از دوستان سوالاتی را با توجه به این موضوع پرسیدهاند که من همواره تاکید میکنم، برنامهنویسی بدون ریاضیات نمیشود. ایشان پرسیدهاند که از کجا باید یادگیری را شروع کنیم؟ افرادی که ریاضیات آنها ضعیف است چه کاری باید انجام دهند و در نهایت اینکه، کدام مباحث ریاضی برای برنامهنویسی از اهمیت بیشتری برخوردار هستند. باید توجه داشت که اصلا در برنامهنویسی و به طور کلی در این فضا، مهمتر از چیزی که فرد هست، چیزی است که میتواند باشد. در بحث ریاضیات نیز، مهمتر از چیزی که فرد در حال حاضر بلد است، چیزی است که میتواند بیاموزد و ذهن ایشان پذیرش آن را دارد. فردی که فضای «الگوریتمیک» (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