درود!
نیکان ضیایی هستم. دانشجوی ورودی 99 رشتهی علوم کامپیوتر دانشگاه اصفهان و برنامهنویس در حوزهی بکاند.
بیاید با هم نگاهی به رشتهی علوم کامپیوتر بندازیم و ببینیم که اصلا چیه و اینجا چه خبره و چیکار میکنیم و تفاوتاش رو با مهندسی کامپیوتر بررسی کنیم.
رشتهی علوم کامپیوتر در گروه علوم پایه (و نه مهندسی) در کنار رشتههایی مثل ریاضیات و کاربردها و آمار قرار میگیره.
اگر بخوام یه توصیف کلی از این رشته ارائه بدم،میتونم بگم که علوم کامپیوتر یک پل ارتباطی بین دانش ریاضی و کامپیوتره.
پس اولین نکته اینجاست که قراره با مقدار خیلی زیادی ریاضیات سر و کار داشته باشید و به معنای واقعی کلمه "ریاضی" بخونید.
- داداش یعنی میگی اگه از ریاضیات و اثبات و این داستانا خوشم نمیاد سمت رشتهی علوم کامپیوتر نرم؟
+ بله دقیقا منظورم همینه
حالا اینکه میگم علوم کامپیوتر یه پل ارتباطی بین ریاضی و کامپیوتره اصلا یعنی چی؟
اهمیت ریاضیات در علوم کامپیوتر در اینه که :
1- ریاضیات به ما امکان این رو میده که از طریق یک زبان abstract (انتزاعی و صریح) با هم ارتباط برقرار کنیم
حالا این یعنی چی؟
برنامهنویسی کامپیوتر از یک سری زبانهای خاص استفاده میکنه که بسیار abstract هستن و برای نوشتن یک کد، شما نیازه که از یک سری دستور خاص، سمبلها و کلمات استفاده کنید.
برای کسی که هیچ آشناییای با این قضیه نداره و میخواد برای اولین بار برنامهنویسی رو شروع کنه این ممکنه خیلی ترسناک و عجیب باشه.
حالا نقش ریاضیات این وسط چیه؟
زبانهای برنامهنویسی تا حد خیلی زیادی شبیه زبان ریاضی هستن (از معادلات ساده بگیر تا چیزای پیچیدهتر)
یادگیری ریاضیات این قدرت و دید رو به متعلم میده که با هنر خوندن، درک کردن و ادا کردن پروسهی ذهنی آشنا بشه.
طبیعتا زبان ریاضی و زبانهای برنامهنویسی "دقیقا" یکسان نیستن اما اصولا کسایی که بیشتر با ریاضی آشنا هستن در شروع برنامهنویسی بهتر میتونن عمل کنن.
2- ریاضیات میتونه به تفکر قاعدهمند و الگوریتمی کمک کنه
حالا اصلا الگوریتم چیه؟
اگر بخوایم الگوریتم رو به صورت رسمی تعریف کنیم باید بگیم که "الگوریتم مجموعهای متناهی از دستورالعملهاست که به ترتیب خاصی اجرا میشوند و مسئلهای را حل میکنند. به عبارت دیگر یک الگوریتم، روشی گام به گام برای حل یک مسئله است".
بیاید یه مثال ساده رو با هم بررسی کنیم.
شما چطوری یه تخم مرغ رو نیمرو میکنید؟ اصلا مراحل نیمرو کردن یه تخم مرغ چیه؟
شاید بتونیم به این صورت تعریفش کنیم:
۱- در یخچالو باز میکنیم، سه تا تخم مرغ رو از یخچال درمیاریم و در یخچال رو میبندیم
۲- ماهیتابه رو روی گاز میذاریم، روش یکم روغن میریزیم و بعد زیر گاز رو روشن میکنیم
۳- چند دقیقه که گذشت و ماهیتابه گرم شد، تخم مرغ رو میشکونیم و در ماهیتابه میریزیم
۴- بعد از پخته شدن تخم مرغ، روش ادویههایی که دوست داریم رو میزنیم و میخوریمش
خب میدونیم که روش بالا احتمالا روش خوب و بهینهای برای درست کردن نیمروعه
اما دیگه چیکار میتونستیم بکنیم؟
در مرحلهی اول میتونستیم یه بار در یخچال رو باز کنیم، یه تخم مرغ برداریم، در یخچال رو ببندیم، دوباره در رو باز کنیم، یه تخم مرغ دیگه برداریم، در یخچالو ببندیم و به همین صورت.
آیا این روش در نهایت به ما یه نیمرو تحویل نمیده؟
بله
آیا روش بهینه و خوبیه؟
فکر نمیکنم.
حالا همین مثال رو برای یک مسئلهی ریاضی ساده بزنیم.
معادلهای به شکل زیر داریم:
x + 2 = 3
چطوری میتونیم به مقدار x برسیم؟
میدونیم که میشه با کم کردن مقداری که x باهاش جمع شده از مجموع کل مقدار x رو به دست بیاریم
اینم یه الگوریتمه برای حل این مسئلهی ساده
حالا این همه حرف زدیم که به چی برسیم؟
به این که آشنایی با ریاضیات و حل مسائل ریاضی به ما کمک میکنه که یه تفکر برای منطقی برای حل کردن مسائل به صورت بخش بخش به دست بیاریم و مسائل بزرگ رو به مسائل کوچکتر بشکونیم و اونارو حل کنیم و در نهایت با ترکیب این جوابهای کوچک به جواب مسئلهی اصلیمون برسیم.
3- ریاضیات به ما یاد میده که کار خودمون رو تحلیل و آنالیز کنیم
طبیعتا حین برنامهنویسی یا حل مسائل ریاضی قراره یک سری اشتباهات داشته باشیم.
فرض کنید معلم ریاضیمون بهمون یه مسئله داده که با استفاده از یک سری پارامتر قراره سرعت یه پراید توی جاده رو حساب کنیم.
خب فکر کنید نشستیم و حساب کردیم و در نهایت به جوابی مثل 2000 کیلومتر بر ساعت رسیدیم.
خب این جواب احتمالا غلطه و مطلوب نیست.
حالا باید چیکار کنیم؟
باید به عقب برگردیم و مرحله به مرحله قدمهامون رو بررسی کنیم و ببینیم که در کدوم قسمت محاسبهی اشتباهی انجام دادیم که به جوابی اشتباه منجر شده؟
شاید یه جا ضرب و تقسیم رو بد انجام دادیم؟
شاید تبدیل واحدمون غلط بوده؟
4- اگر همهی این مهارتهای عمومیای که ریاضیات بهمون میده رو کنار بذاریم، در نهایت ریاضیات تا حد خیلی زیادی در رشتهی علوم کامپیوتر دخیله
از اونجایی که علوم کامپیوتر در نهایت قراره با دنیای بیرون تعامل زیادی داشته باشه، نیازه که ما بیایم و با استفاده از زبان ریاضیات، دنیای بیرون رو مدلسازی کنیم.
خب این یعنی چی؟
فرض کنید میخوایم یه ماشین خودران بسازیم.
نیازه که به یه روشی رو بیاریم و یه سری پارامترهارو محاسبه و رعایت کنیم.
باید یک سری منطق ایجاد کنیم برای چیزهایی مثل فاصلهی مناسب ماشینمون تا ماشین جلویی.
این که حین دور زدن برای اینکه یه ور ماشینمون نره تو دیوار چند درجه لازمه که فرمون چرخونده بشه؟
که اینارو میشه با استفاده از ریاضیات مدلسازی و بررسی کرد.
اما آیا واقعا برای اینکه برنامهنویس خوبی باشیم، باید خدای ریاضیات باشیم؟
شخصا از جوابهایی مثل "بستگی داره" متنفرم چون گیجکننده و ملالتآوره. اما بجز "بستگی داره" نمیتونیم جواب خاصی به این سوال بدیم.
به چه چیزایی بستگی داره؟ مهمتر از همه اینه شما قراره در چه بخشی کار کنید.
همونطور که میدونید شاخههای خیلی زیادی در برنامهنویسی داریم که میتونیم برای مثال به موارد زیر اشاره کنیم:
۱- توسعهی فرانت اند
۲- توسعهی بک اند
۳- توسعه دهندهی موبایل
۴- هوش مصنوعی و مخلفاتش (پردازش تصویر)
۵- دیتا ساینتیست
۶- توسعهی بازی
و خیلی خیلی موارد دیگه.
اصولا در 90 درصد مواقع شما نیازی به ریاضیات سنگین و پیچیده نخواهید داشت و اکثرا سر و کارتون با چهار عمل اصلی (جمع و تفریق و ضرب و تقسیم) و توان خواهد بود و فراتر از اینها نیازی به چیزی پیدا نخواهید کرد.
-خب پس دقیقا کجا نیازه که از ریاضیات پیچیده استفاده کنیم؟
اولین چیزی که میتونم بهش اشاره کنم، هوش مصنوعی و مخلفاتش و دیتا ساینسه که اونجا نیازه راجع به جبر خطی (Linear Algebra) و احتمال (Probability theory) و حسابان و دیفرانسیل (Calculus) بدونید.
همچنین در برنامهنویسیهای Low-level مثل Graphics Programming نیاز هست که با جبر خطی (Linear Algebra) آشنا باشید.
- خب داداش حقیقتش من که ریاضیم خوب نیست و اصلا نمیفهممش. کلا برنامهنویسی رو ببوسم و بذارم کنار دیگه؟
نه واقعا.
اصولا خیلی چیزها رو میتونید حین کار و در کاربرد یاد بگیرید و مشکلی نداره. نیازی نیست که از ریاضیات بترسید چون در نهایت مهارتیه که با تمرین به دست میاد.
اما همونطور که بالاتر هم اشاره کردم شما در 90 درصد اوقات نیازی به ریاضیاتی فراتر از ریاضیات سوم دبستان نخواهید داشت.
- میشه یکم از تفاوتهای علوم کامپیوتر و مهندسی کامپیوتر بگی؟ شنیدم هرکی مهندسی نمیاره میره علوم چون سطح پایینتره.
خب ببینید.
اگر نگاهی به چارت هر دو رشته بندازید، اولین چیزی که توجهتون رو جلب میکنه اینه که رشتهی علوم کامپیوتر دروس ریاضیاتی خیلی زیادی داره و از اونور رشتهی مهندسی کامپیوتر دروس مربوط به مهندسی برق و فیزیک زیاد داره.
یعنی شاید بشه اینطور برداشت کرد که رشتهی مهندسی کامپیوتر، ترکیبی از علوم کامپیوتر و مهندسی برقه.
برای مثال توی مهندسی کامپیوتر دروسی مثل سیگنالها و مدارهای واسط و یه سری آزمایشگاههارو داریم اما توی علوم کامپیوتر دروس ریاضی محور مثل علوم ریاضی و منطق و مجموعهها و آنالیز ریاضی و سه نوع مختلف جبر (مبانی و عددی و خطی و یه سری خرت و پرتاشون) رو داریم.
در واقع حجم دروس عملی در رشتهی علوم کامپیوتر به نسبت مهندسی کامپیوتر خیلی خیلی کمتر هست.
نکتهی خیلی مهم اینه که رشتهی علوم کامپیوتر در دانشکدهی ریاضیات و آمار و رشتهی مهندسی کامپیوتر در دانشکدهی مهندسی ارائه میشه.
- گرفتم چی شد. حالا بگو تفاوت بازار کارشون چیه؟ برای اپلای تحصیلی و مهاجرت کاری کدوم بهتره؟
با توجه به اینکه در حوزهی مهاجرتکاری اطلاعات کافی ندارم ترجیح میدم چیزی نگم که خدایی نکرده غلط نباشه. اما در بازار کار (چه در ایران و چه در خارج از ایران) و در مهاجرت کاری اصولا کوچکترین تفاوتی ندارن چون که مدرک دانشگاهی شما نیست که موفقیت شما در این حیطه رو تضمین میکنه. چیزی که شما رو به موفقیت در کار و مهاجرت کاری نزدیکتر میکنه مهارتهایی هستن که خودتون با تلاش خودتون به دست آوردید. چه Hard skillها و چه Soft skillها (که در پستهای بعدی راجع بهشون صحبت خواهیم کرد)
- اگه بخوای یه کلید دستم بدی که کدوم رشته رو انتخاب کنم چی میگی؟
اگه خیلی با ریاضیات محض و سنگین حال نمیکنی سعی کن سمت علوم کامپیوتر نری و پی همون مهندسی رو بگیری!
مطلب مفصلی بود.
امیدوارم که براتون مفید واقع بشه.
در مراحل و پستهای بعدی بیشتر صحبت میکنیم.
خوشحال میشم که نظراتتون رو بدونم و اگر انتقادی به صحبتهام دارید بیاید که با هم صحبت کنیم.