یکی از رشتههای پرطرفدار در دوره کارشناسی رشته «مهندسی کامپیوتر» است. در ایران، این رشته شامل سه یا چهار زیررشته مهم است که عبارتند از «نرمافزار»، «معماری سیستمهای کامپیوتری»، «رایانش امن» و «فناوری اطلاعات». اما در تعریف ارائه شده از سوی انجمن بینالمللی ACM منظور از رشته «مهندسی کامپیوتر» چیزی است که در ایران با گرایش «معماری سیستمهای کامپیوتری» (همان رشته «مهندسی سختافزار» سابق) شناخته میشود. بعضی از داوطلبان ورود به دانشگاهها با تصویری مبهم از هدف و محتوای این رشته تحصیلات خود را آغاز میکنند. در این مقاله، ضمن مرور اجمالی بر یک تعریف صحیح از این رشته در استاندارد بینالمللی، با محتوای دروس آن در دانشگاههای ایران آشنا میشویم.
هدف رشته «مهندسی کامپیوتر»
صرف نظر از نام دقیق این رشته تحصیلی در کشورها و دانشگاههای مختلف، «مهندسی کامپیوتر» در تمام دنیا (حتی در ایران) رشتهای است با وزن و تأکید بیشتر روی جنبههای سختافزاری سیستمهای کامپیوتری. به زبان ساده، فارغالتحصیلان باید بتوانند وارد بازار کار طراحی دستگاههای کامپیوتری شوند. البته کامپیوتر و کاربردهایش شاخههای مختلفی دارد، اما لزوماً هر تخصصی در دنیای کامپیوتر به توانایی طراحی و تولید دستگاههای کامپیوتری منجر نمیشود. مثلاً ممکن است یک «مهندس شبکه» مهارت زیادی در استقرار و نصب شبکههای کامپیوتری داشته باشد. این نوع تلقی از تخصص شبکهای را باید بیشتر زیرفصل رشته «مهندسی فناوری اطلاعات» دانست تا رشته «مهندسی کامپیوتر»، زیرا بیشتر معطوف به طراحی توپولوژی شبکه و نصب و استقرار ادوات شبکه است. البته گاهی اوقات طراحی شبکهها (مثلاً طراحی مراکز داده یا کلاودها) خود به یک موضوع پیچیده مهندسی تبدیل میشود. واضح است که انجام موفقیتآمیز پروژههایی در این سطح ترکیبی از تخصصهای گوناگون ـ از جمله مهندسی کامپیوتر ـ را نیاز دارد. به همین ترتیب، یک «کارشناس نرمافزار» ممکن است از توانایی بالایی در برنامهنویسی برخوردار باشد، اما فعالیت او معطوف به تولید انبوه یک نرمافزار توسط یک شرکت نباشد. مثلاً اغلب برنامهنویسان سایتهای وب از این گروه هستند. هیچکدام از این دو تخصص لزوماً به معنای آن نیست که یک متخصص توانایی طراحی و تولید یک دستگاه یا سیستم کامپیوتری را داشته باشد.
جدول 1 فهرست دروس اصلی رشته «مهندسی کامپیوتر» و جدول 2 فهرست دروس تخصصی گرایش «معماری سیستمهای کامپیوتری» را در دانشگاههای دولتی ایران نشان میدهد. با مرور این جدولها میتوانید قضاوت بهتری درباره محتوا و هدف این رشته داشته باشید.
«مهندسی کامپیوتر» رشتهای با محوریت اقتصاد تولیدی است. توانایی نوشتن برنامههای کامپیوتری یا مهارت در سرهم کردن و نصب تجهیزات شبکه، بهتنهایی «مهندسی کامپیوتر» محسوب نمیشوند.
مثالی ساده از یک کار مهندسیوار
لازم نیست دستگاه یا سیستمی که قرار است طراحی و تولید شود، پیچیده و بزرگ باشد. حتی لازم نیست تمام قطعات و اجزای این سیستم توسط یک شرکت یا یک تیم مهندسی طراحی شده باشد. کافی است با استفاده از قطعات و سیستمهای کوچکتر موجود در بازار، یک سیستم یا دستگاه بزرگتر ساخته شود. مثلاً این سیستم میتواند بهسادگی یک دستگاه رزبریپای باشد. یک کیت رزبریپای را میتوان با افزودن امکان و قطعات دیگر به یک دستگاه کاربردی تبدیل کرد.
مثلاً با متصل کردن یک دوربین و حسگرهای مناسب و نوشتن برنامهای برای ارسال دادهها به اینترنت و ذخیره کردن آنها روی یک ابزار ذخیرهسازی شبکهای (مانند کلاود) میتوانید یک سیستم حفاظتی برای منزل شخصی خودتان بسازید تا بتوانید در هنگام غیبتتان از منزل، حریم خانه خود را زیر نظر داشته باشید. برای انجام موفقیتآمیز این کار باید به خیلی از مسائل فکر کنید و دستگاه کاملتری بسازید که کیت رزبری فقط قسمت اصلی آن است. مثلاً اگر ارتباط دستگاه با اینترنت قطع شود، چه مکانیسمی پیشبینی کردهاید تا دستگاه به طور خودکار و بدون نیاز به دخالت شما یا شخص دیگری خودش مشکل ارتباطی را برطرف کند؟ یا مثلاً چه فکر برای برقرسانی به دستگاه کردهاید؟ آیا دستگاه در سرما و گرمای شدید عملکردش مختل نمیشود؟ چطور میتوانید وسیله را از راه دور خاموش یا روشن کنید؟ چطور میتوانید با استفاده از حسگرهای نوری و با استفاده از آشکارسازی حرکت اشیا و افراد مقابل دوربین، به دستگاه سیگنال بدهید که از حالت آماده به کار خارج شود و شروع به ضبط تصاویر و ارسال آنها به اینترنت کند؟ این یک کار بسیار ساده مهندسی است.
بازار کار رشته «مهندسی کامپیوتر»
بعضی مردم تصور میکنند در میان شاخهها و گرایشهای مختلف کامپیوتر (از قبیل «علوم کامپیوتر» یا IT) رشته مهندسی کامپیوتر سختترین و باکلاسترین رشته است و حقوق و مزایای آن بیشتر و بازار کارش بیشتر است. به هیچ وجه چنین نیست. همه رشتهها و شاخههای کامپیوتر به یک اندازه از اعتبار علمی برخوردارند و به یک اندازه دشوارند و ظرفیت درآمدزایی همه آنها یک اندازه است. در واقع، اگر به سرفصلها و دروس و هدف دقیق این رشته توجه کنید، دستکم در ایران و خاورمیانه (که صنایع تولیدی در حوزه کامپیوتر محدودند) انتظاراتی که دانشجویان و فارغالتحصیلان دارند مقداری غیرواقعبینانه است. در کشورهایی که تولید دستگاهها و سیستمهای کامپیوتری محدود است، تخصص و دانش فارغالتحصیلان «مهندسی کامپیوتر» ممکن است بیشتر از نیاز بازار باشد. در بسیاری از کشورها (و نه فقط ایران) دانش مورد نیاز بازار در حد دانش مهندسی استقرار و نصب سیستمها است و برای این منظور آگاهی از نحوه کارکرد درونی سیستمها اگرچه مفید است، اما ضروری نیست.
ذکر چند مثال از کار واقعاً «مهندسی» در حوزه کامپیوتر میتواند تصور روشنتری از بازار کار اصلی این رشته بهدست بدهد. بهعنوان نمونه، طراحی دستگاههای کارتخوان بانکی و یا دستگاههای عابر بانک یک کار مهندسی است. طراحی دستگاههایی که مأموران شرکتهای برق و گاز برای ثبت کارکرد کنتور مشترکین استفاده میکنند یا دستگاههایی که مأموران پلیس برای ثبت و تولید برگ جریمه رانندگی همراه خود دارند، کار مهندسی است.
گروه بزرگی از مهندسی کامپیوتر در شرکتهای تولید و انتقال انرژی (مانند صنعت نفت) کار میکنند. البته در ایران گاهی این متخصصان بیشتر وقتشان صرف نگهداری یا تعمیر سیستمهایی میشود که در کشورهای دیگر تولید شدهاند.
یک مثال دیگر، تولید دستگاههای کامپیوتری است که صنف پزشکان در بخشهای مختلف از جمله بیمارستانها و اتاقهای عمل جراحی و آزمایشگاهها استفاده میکنند. البته این سیستمها بسیار پیشرفتهاند و دانش مخصوص خود را دارد که اصطلاحاً «مهندسی پزشکی» نامیده میشود.
بازار کار تولید سیستمهای کامپیوتری در دنیا بسیار بزرگ و گسترده است. تمام وسایل کامپیوتری مانند خود کامپیوترها، لپتاپها، تبلتها، گوشیهای هوشمند و دستگاههای بازی کامپیوتری محصول کار مهندسان کامپیوتر است. دستگاههای پخش MP3، طراحی بخش کامپیوتری دوربینهای عکاسی و فیلمبرداری دیجیتال و نیز تلویزیونهای هوشمند از جمله محصولات عمده مهندسان کامپیوتر است.
همپوشانی مهندسی کامپیوتر با مهندسی الکترونیک دیجیتال
ممکن است این سؤال پیش بیاید که مرز میان «مهندسی الکترونیک دیجیتال» و «مهندسی کامپیوتر» کجا است؟ در واقع این دو رشته با یکدیگر همپوشانی دارند. اما موضوع تمرکز این دو رشته متفاوت است. در حالی که تمرکز رشته الکترونیک روی طراحی بهینه قطعات کوچکی است که سیستمهای دیجیتالی را میسازند، تکیهگاه اصلی مهندسی کامپیوتر طراحی معماریهای دیجیتالی است که این قطعات کوچکتر را به یکدیگر متصل میکنند. مثلاً طراحی تراشههای ریزپردازنده یا CPU بیشتر در حوزه «مهندسی الکترونیک دیجیتال» معنا پیدا میکند. ولی طراحی کامپیوترهایی که قطعات مختلف مانند CPU و RAM و دیسک را به یکدیگر ارتباط میدهد، بیشتر در حوزه «مهندسی کامپیوتر و سختافزار» معنا میدهد.
همپوشانی «مهندسی کامپیوتر» با «مهندسی نرمافزار»
در ایران این امکان وجود دارد که دانشجویان رشته «مهندسی کامپیوتر» در گرایشهای «نرمافزار» یا «فناوری اطلاعات» چند درس تخصصی با گرایش نرمافزاری بگذرانند. این دروس آنان را با مبانی تولید نرمافزار آشنا میکنند، اما ـ دستکم در ایران ـ آشنایی کاملتر با رشته مهندسی نرمافزار نیازمند ورود به دوره کارشناسی ارشد است. دروسی که در این مقطع تدریس میشود، در واقع دروسی هستند که میشود در همان مقطع کارشناسی به دانشجو ارائه کرد، اما محتوای دروس مقطع کارشناسی کامپیوتر آنچنان مشغول انتقال مباحث مربوط به «طراحی و تولید سیستمهای کامپیوتری» است که خیلی دیر نوبت به مهندسی نرمافزار میرسد.
یک نکته بسیار مهم که غالباً اشتباه میشود، فرق بین «مهارت برنامهنویسی» و «مهندسی نرمافزار» است. برنامهنویسی کامپیوتر یک مهارت مهم و پیچیده است که به خودی خود یک شغل مستقل در بازار کار است، اما مهندسی نرمافزار فراتر از مهارت برنامهنویسی است. مهندسی نرمافزار نیز همچون مهندسی کامپیوتر رشتهای با محوریت تولید است. بنابراین، یک مهندس نرمافزار در کنار مهارت برنامهنویسی به مهارتهای دیگری هم نیاز دارد. جالب اینکه «مهندس کامپیوتر» نیز حتماً باید در کنار دانش سختافزاری مهارت برنامهنویسی داشته باشد.
رشته «مهندسی نرمافزار» را مفصلاً در شمارههای آتی ماهنامه شبکه معرفی خواهیم کرد، اما به عنوان نمونههایی از کارهای ارزنده مهندسی در حوزه نرمافزار میتوان سیستمهای مدیریت اطلاعات در بانکها و سایر سازمانهای بزرگ را برشمرد. مثلاً طراحی و پیادهسازی شبکه بینبانکی شتاب در ایران مجموعهای از تخصصهای مختلف در رشته مهندسی کامپیوتر ـ از شبکه و سختافزار تا برنامهنویسی و مهندسی نرمافزار ـ را به خدمت گرفته است.