قبل از اینکه ببینیم رشته علوم کامپیوتر چیست شاید لازم باشد روشن کنیم چرا اصولاً پاسخ به این سؤال مهم است و چرا بدیهی نیست. ابتدا اینکه هنوز هم بعد از گذشت 50 سال از شروع تدریس این رشته در دانشگاههای دنیا، بین کارشناسان و پیشگامان این رشته درباره تعریف دقیق آن اختلاف نظر وجود دارد. بنابراین، خیلی مهم است که وجه مشترک این تعاریف را بدانیم. ثانیاً فهم درست از تعریف این رشته اهمیت زیاد در موفقیت شغلی فارغالتحصیلان آن پس از ورود به بازار کار خواهد داشت. اگر مطمئن نباشیم جامعه از فارغالتحصیلان این رشته چه توقعی دارد، در بازار کار هم چندان موفق نخواهیم بود. ثالثاً بعضی از دانشجویان در پیدا کردن مهارتهای متناسب با سرفصلهای دروس دانشگاهی دچار تردید هستند. در این مقاله، علاوه بر تعریف علمی و آکادمیک این رشته، آن را از منظر مهارتهایی که هنگام ورود به بازار کار باید داشته باشید نیز تعریف خواهیم کرد.
قبل از اینکه بدانیم تعریف دانش کامپیوتر چیست، بهتر است روشن کنیم برداشتهای ناقص یا نادرست از این رشته کدامند. اولاً برخی تصور میکنند «دانش کامپیوتر» علم شناخت کامپیوترها است. این تقریباً مثل این است که علم نجوم را معادل تلسکوپشناسی بدانیم یا علم زیستشناسی را معادل میکروسکوپشناسی! وقتی صحبت از دانش میکنیم، منظورمان صرفاً مطالعه ابزارهای آن رشته نیست. کامپیوتر ابزار یک کارشناس علوم کامپیوتر است، ولی دانش او فراتر از این ابزار است. ثانیاً این تصور عمومی وجود دارد که رشته علوم کامپیوتر (یا حتی مهندسی کامپیوتر) درباره طرز نوشتن برنامههای کامپیوتری است. این هم برداشت ناقصی از واقعیت است. برنامهنویسی نیز مانند خود کامپیوترها یک ابزار است. ابزاری که به کمک آن کارشناس کامپیوتر ایده یا راهکار خود را به آزمایش و اجرا میگذارد. ثالثاً بسیاری از مردم تصور میکنند علوم کامپیوتر درباره طرز کار با کامپیوترها و نرمافزارها است. واقعیت این است که این روزها اغلب مردم بلدند با کامپیوتر و حتی نرمافزارهای پیچیده کار کنند. مضحک خواهد بود اگر با وجود این، یک رشته دانشگاهی بخواهد به مردم یاد بدهد چطور با کامپیوتر و نرمافزارها کار کنند.
یکی از بهترین تعاریف این رشته 30 سال پیش توسط دو کارشناس کامپیوتر در مجله انجمن صنفی متخصصان کامپیوتر جهان (ACM) به نامهای نورمن گیبس و آلن تاکر ارائه شد. مطابق این تعریف، در مرکز این رشته علم شناخت و بررسی الگوریتمها قرار دارد. مهمترین کار یک کارشناس علوم کامپیوتر طراحی و به آزمایش گذاشتن این الگوریتمها است. در شمارههای آینده ماهنامه شبکه به طور مفصلتر به موضوع الگوریتمها خواهیم پرداخت، اما به طور خلاصه تعریف رشته علوم کامپیوتر با محوریت الگوریتمها عبارت است از:
• مطالعه رفتار الگوریتمها و توصیف ریاضی آنها.
• طراحی و تولید سیستمهای کامپیوتری که این الگوریتمها را اجرا کند (جنبه سختافزار).
• طراحی زبانهای برنامهنویسی و نوشتن برنامههایی که الگوریتمها را به برنامههای قابل اجرا روی سختافزارها تبدیل کند.
• فهم مسائل و چالشهای علمی، فنی و مهندسی و تبدیل آن مسائل به الگوریتمهایی که توسط کامپیوتر قابل اجرا باشند.
برای پاسخ به این پرسش، توضیح کوتاهی از وبسایت دانشگاه کارنگی ملون (یکی از برجستهترین دانشگاههای دنیا) احتمالاً سرنخهای لازم را به دست خوانندگان میدهد. بر این اساس از فارغالتحصیل این رشته انتظار میرود این مهارتها و تواناییها را داشته باشد:
• پیادهسازی راهکارها و راه حلهایی برای مسائل مختلف در زمینه ماشینهای هوشمند، گرافیک کامپیوتر، تصویرسازی، ارتباط بهینه میان انسان و کامپیوتر، از طریق بهکارگیری اصول علمی در این حوزهها و تولید راه حل برای چالشهای فعلی علم و فناوری.
• شناخت، کاربرد، طراحی، توسعه و تحلیل الگوریتمها به همراه توانایی اثبات این موضوع که یک الگوریتم بهخصوص از کارآمدی و راندمان لازم برخوردار است و برای حل مسئله مورد نظر بهینه شده است.
• فهمیدن نحوه پیادهسازی برنامهها و زبانهای برنامهنویسی متفاوت و پارادایم متفاوت آنها.
• توصیف، مشخص کردن و توسعه سیستمهای نرمافزاری در مقیاس کلان یا نامحدود که مشمول مشکلاتی از قبیل توان محدود، کارایی محدود و یا منابع محدود هستند. (برای خوانندگان ماهنامه شبکه مثال شناخته شده در این زمینه، محاسبه، تخمین و ارزیابی ظرفیت و کارایی شبکههای انتقال داده ـ مانند سرویس اینترنت ـ روی شبکه موبایل است.)
• توضیح و ارائه مفاهیم فنی و تخصصی کامپیوتر به زبان ساده برای کسانی که تخصصشان این نیست (مانند همکاران محل کار یا مشتریان).
• توانایی کار کردن هم به طور انفرادی و هم به صورت کار گروهی با همقطاران.
• قوه تشخیص آثار مثبت و منفی فناوری روی جامعه، داشتن حس مسئولیتپذیری و آشنایی با جنبههای حقوقی و قانونی و اخلاقی کار در حوزه آیتی.
واقعیت این است که هریک از شاخههای رشته کامپیوتر در دانشگاه حوزه وسیعی را پوشش میدهند و در عین حال با یکدیگر همپوشانی دارند. اگر میخواهید بدانید هریک از رشتههای اصلی کامپیوتر در دانشگاه با یکدیگر چه تفاوت و شباهتهایی دارند، مقالات بخش دانش کامپیوتر در شماره 196 ماهنامه شبکه را مطالعه کنید. رشته علوم کامپیوتر از نظر محتوا به رشته مهندسی نرمافزار شبیه است. تفاوت اصلی در این است که بسیاری از دروس پایهای سختافزاری در دوره مهندسی جای خود را به دروس پایهای ریاضی دادهاند. اگر هدفتان این است که وارد مشاغل نرمافزاری مانند برنامهنویسی شوید، خبر خوب این است که در دنیای واقعی بازار کار، برای اغلب کارفرمایان اهمیت چندانی ندارد که پیشینه علمی شما در دانشگاه کدامیک از شاخههای رشته کامپیوتر است. اما بعضی از مشاغل خاص هستند که سطح علمی بالایی از کارشناس طلب میکنند. تعداد این مشاغل محدود است و علاوه بر اینکه درآمد بالاتری نسبت به میانگین جامعه دارند، حال و هوای علمیتر نیز دارند.
جدولهای 1 و 2 و 3 بهترتیب دروس پایه و اصلی و تخصصی این رشته را (طبق مصوبه وزارت علوم) فهرست کردهاند. دروس عمومی مانند زبان انگلیسی یا فارسی یا دروس دینی در این جداول نیامدهاند و برای تمام رشتههای دوره کارشناسی در ایران یکسان هستند. دروس پایه نیز کمابیش برای اغلب رشتههای علمی و فنی در ایران مشابه و شامل چند درس ریاضی و فیزیک پایه هستند. پایه ریاضی رشته علوم کامپیوتر درس ریاضیات گسسته است که تار و پود الگوریتمهای کامپیوتری روی آن بنیان گذاشته شده است. مهمترین دروس این رشته دو بحث پایهای هستند. فهرست کامل سرفصلها و منابع درسی پیشنهادی وزارت علوم را میتوانید از طریق لینک زیر دانلود کنید.