معرفی گرایش نرم افزار در مهندسی کامپیوتر

معرفی گرایش نرم افزار در مهندسی کامپیوتر

کامپیوتر، حدود 80 سال پیش از پدری به نام مهندسی برق و الکترونیک (و جدی به نام فیزیک) و مادری به نام ریاضیات متولد شد. در سال 1939، تلاش های 5 ساله جان وینسنت آتاناسف (John Vincent Atanasoff)، مهندس الکترونیک، فیزیکدان و ریاضی دان آمریکایی بلغاری تبار  و استاد دانشگاه آیووا به همراهی کلیفورد بری (Clifford Berry) که یک مهندس برق و فیزیک فارغ التحصیل بود منجر به خلق یک ماشین محاسبه خودکار الکترونیکی به نام ABC شد که کامپیوتر آتاناسف - بری هم نامیده می شود. جان ماکلی (John Wiliam Mauchly) که فیزیک دان آمریکایی دانشگاه پنسیلوانیا بود در جریان کوشش های آتاناسف و بری برای خلق ماشین ABC  بود. ماکلی از سال 1943 با همکاری یک مهندس برق به نام جان آدام پرسپر اکرت (John Adam Presper Eckert) یک ماشین حساب الکترونیکی دیجیتالی همه منظوره مقیاس بزرگ به نام انیاک (ENIAC) را ساختند که بسیاری از مردم آن را نخستین رایانه رقمی (کامپیوتر دیجیتال الکترونیک) می دانند. همین امر بعدها کار  آتاناسف و ماکلی را بر سر امتیاز اختراع کامپیوتر به دادگاه کشاند و در سال 1973 دادگاه به سود آتاناسف رأی داد و اعلام کرد که بیشتر اندیشه های ماشین آنیاک در اصل از آتاناسف و ماشین ABC بوده است.

در پروژه ساخت انیاک (ENIAC: Electronic Numerical Integrator And Computer)، ماکلی مدیر مشاور برنامه نویسی و نرم افزار و اکرت سرمهندس بخش سخت افزار بود. در ماشین انیاک، علاوه بر اجزای الکترومکانیکی، از 19000 لامپ خلاء استفاده شده بود (چون هنوز  در مهندسی الکترونیک، ترانزیستور به دنیا نیامده بود). این ماشین 130000 وات انرژی مصرف می کرد و 1500 فوت مربع جا اشغال می کرد و 30 تن وزن داشت (در زیر تصویری از انیاک را مشاهده می کنید). انیاک در سال 1946 در دانشگاه پنسیلوانیا آماده نصب و راه اندازی شد و قادر به انجام 300 عمل ضرب در ثانیه بود و یک کار 300 روزه را در یک روز انجام می داد. این رایانه که در زمان خود پیچیده ترین دستگاه الکترونیکی جهان به شمار می رفت در ابتدا برای محاسبات شلیک موشک ها و بعداً به صورت عمومی تر برای محاسبات بمب های هیدروژنی مورد استفاده قرار گرفت. انیاک در سال 1956 از رده خارج شد و جای خود را به کامپیوترهای قدرتمندتری داد که سرعت رشد تکنولوژی آنها سرسام آور بود.

تصویر

مهندسی کامپیوتر از ابتدا ترکیبی از سخت افزار و نرم افزار بود. سخت افزار، به اجزای فیزیکی قابل لمس کامپیوتر گفته می شود که در ابتدا الکترومکانیکی و الکترونیکی بود. این اجزای فیزیکی در واقع همان پردازنده (CPU)، حافظه، دیسک، مادربورد و تراشه های کنترل کننده روی (یا متصل به) آن، مانند کارت صدا، کارت گرافیک، کارت واسط شبکه و غیره و نیز دستگاه های ورودی خروجی مثل مانیتور، کیبورد، ماوس، پرینتر و اسکنر  هستند. ساخت این دستگاه ها کار مهندسان برق و متخصصان فیزیک، الکترومکانیک، اپتیک و غیره است. به همین دلیل رشته سخت افزار  از ابتدا به نام های مختلفی مانند الکترونیک دیجیتال در دانشکده های برق دنیا تدریس می شد. هنوز هم بسیاری از دانشکده های مهندسی برق دنیا (مانند دانشگاه شریف و دانشگاه تهران) رشته الکترونیک دیجیتال را ارائه می دهند.

اگر سخت افزار را به جسم انسان تشبیه کنیم و پردازنده یا واحد پردازش مرکزی (CPU: Central Processing Unit) و حافظه آن را با مغز انسان قیاس کنیم، نرم افزار  که بخشی غیر قابل لمس و غیرفیزیکی است را شاید بتوان به ذهن، افکار  و شاید حتی روح انسان قیاس کرد. در واقع سخت افزار بدون نرم افزار مانند یک جسم بی جان است که هیچ کاری نمی کند. نکته مهم در معماری پردازنده و معماری کامپیوتر این است که انسان برای اولین بار به جای ساختن یک دستگاه خاص منظوره مثل ماشین لباسشویی، یا تلویزیون توانسته است یک ماشین همه منظوره بسازد که می تواند برنامه  (Program) بپذیرد و با اجرای برنامه های مختلف در کاربردهای گوناگون مانند شبیه سازهای پیچیده علمی، گرافیک و انیمیشن، بازی های رایانه ای، پخش فیلم و موزیک، حسابداری، تایپ و ویرایش متن، صفحه گسترده، وب گردی، شبکه های اجتماعی و غیره مورد استفاده قرار بگیرد. برنامه ها که نقش تفکر، ذهن یا روح سخت افزار را بازی می کنند موجب شده اند که کامپیوتر دیگر یک ماشین خاص منظوره نباشد، بلکه یک دستگاه همه منظوره است و جای هزاران ماشین دیگر مانند رادیو، تلویزیون، ماشین حساب، ضبط و پخش صوت، دوربین عکاسی و فیلم برداری، پخش فیلم و غیره را گرفته یا حتی به شکل یک ربات در  می آید و جای انسان را در بسیاری از مشاغل پر  می کند. CPU یک مجموعه از دستورالعمل ها (Instructions) را می فهمد و با اجرای پشت سر هم آنها به فرمان برنامه نویسان یک کاربرد خاص را انجام می دهد. در واقع، برنامه متشکل از تعدادی از دستورالعمل های محاسباتی، منطقی، ورودی، خروجی، ذخیره، بازیابی، کنترلی و شرطی و غیره است که توسط برنامه  نویس یا مهندس نرم افزار زیر هم نوشته می شود و به پردازنده مرکزی امر می کند که چگونه رفتار کند و چه کاری را و به چه ترتیبی انجام دهد. بنابراین سخت افزار «کار را انجام می دهد» و نرم افزار  در قالب یک برنامه، تفکرات ذهن برنامه نویس را به آن دیکته می کند و به سخت افزار می گوید «چه کار کن و چگونه و به چه ترتیبی آن را انجام بده». برنامه ها داده های ورودی را گرفته و با پردازش آنها توسط پردازنده، اطلاعات ارزشمند خروجی را برای انسان ها تولید می کنند. در زیر تصویر خانم های برنامه نویس کامپیوتر انیاک را می بینیم که جزو اولین برنامه نویسان دنیا بوده اند.

تصویر

انواع نرم افزار 

1) نرم افزارهای سیستمی که مدیریت کامپیوتر رابر عهده دارند و به سخت افزار نزدیک ترند و برنامه نویسان آن ها باید جزئیات بیشتری از سخت افزارها را بدانند. مهم ترین نرم افزار سیستمی، و البته سیستمی ترین آنها، سیستم عامل (مانند ویندوز، لینوکس، اندروید، مک و  IOS) است که کامپیوتر را راه اندازی می کند (Boot Strap)  و از دید کاربر همیشه در حال اجرا است و دو نقش مهم را بازی می کند. اولاً مدیر منابع سخت افزاری و منطقی  و داده ها و برنامه ها است و استفاده بهینه و درست از ماشین و جلوگیری از هرج و مرج و تداخل برنامه ها در کار یکدیگر و حفاظت از آنها را بر عهده دارد. دوماً یک انتزاع ایجاد می کند و به عنوان واسطی بین کاربر و برنامه های کاربردی یا حتی سیستمی سطح کاربر (مانند کامپایلرها) از یک طرف، و منابع فیزیکی سخت افزاری از طرف دیگر قرار می گیرد و استفاده از کامپیوتر را برای برنامه نویسان و کاربران ساده و سهل می کند. به مدد و لطف سیستم عامل، کاربران به جای کار با سخت افزار خشکی که 0 و 1 و دستورالعمل های پیچیده را می فهمد از طریق واسط های گرافیکی، پنجره ها، آیکون ها و منوها و کلیک ساده روی آنها کار خود را به سادگی و راحتی انجام می دهند. اگر سیستم عامل نبود، کار با کامپیوتر فقط از عهده تعداد اندکی از مهندسان علاقه مند و بسیار حرفه ای بر می آمد.

2) نرم افزارهای کاربردی (مانند فوتوشاپ، کورل درا، مدیا پلیر، متلب، یونیتی، مایا، بلندر  و غیره) که برنامه های مورد استفاده کاربران را در کاربردهای گوناگون مانندشبیه سازی محیط فیزیکی، گرافیک و انیمیشن، بازی های رایانه ای، پخش فیلم و موزیک، حسابداری، تایپ و ویرایش متن، صفحه گسترده، وب گردی، شبکه های اجتماعی و غیره تشکیل می دهند.

مفاهیم نرم افزار و زبان های برنامه نویسی (مانند نظریه زبان ها و ماشین ها یا اتوماتا، طراحی الگوریتم ها و ساختمان های داده و طراحی کامپایلرها) ریشه در ریاضیات دارد. اگرچه مهندسی برق (که خود فرزند فیزیک است)، پدر علم کامپیوتر به شمار می رود و کامپیوتر  مانند فرزندی است که ژن های  سخت افزاری اش را از پدر به ارث برده است، اما نمی توان به نقش پر رنگ مادری به نام ریاضیات اشاره نکرد که مفاهیم مهمی مانند زبان های برنامه سازی و الگوریتم ها را زائیده است. به همین دلیل در دهه های اول پیدایش کامپیوتر، جنبه های نرم افزاری آن توسط ریاضی دان ها توسعه یافت و در دانشکده های ریاضی در قالب علوم کامپیوتر و ریاضیات کاربردی ارائه می شد. بعدها از دهه 1970 در دنیا (و 1980 در  ایران، مثلاً در دانشگاه شریف)  کم کم دانشکده جدایی به نام دانشکده یا دپارتمان مهندسی کامپیوتر  تأسیس شد و مهندسی سخت افزار  یا معماری کامپیوتر را از دل رشته الکترونیک دیجیتال و دانشکده برق و مهندسی نرم افزار را از دل رشته علوم کامپیوتر و دانشکده ریاضی بیرون کشیدند. اولین دوره کارشناسی مهندسی کامپیوتر در سال 1972 در دانشگاه کلیولند در ایالت اوهایو در غرب امریکا آغاز شد.

روش های ورود به دنیای دانش کامپیوتر و گرایش نرم افزار

اگر بخواهید از طریق شرط معدل و یا کنکور سراسری رشته ریاضی وارد مقطع لیسانس (دوره کارشناسی) شوید و از دانش و فناوری کامپیوتر بهره ببرید، تنها 2 رشته برای ورود به این فضا وجود دارد:

1- لیسانس مهندسی کامپیوتر در مقطع کارشناسی پیوسته: در رشته مهندسی کامپیوتر در دوره کارشناسی دانشجو هم با جنبه های فیزیکی و برقی (الکترونیک دیجیتال) کامپیوتر یعنی سخت افزار آن آشنا شده و مفاهیم پایه ای و اصول طراحی و ساخت آن را مطالعه می کند (مانند مدارهای الکتریکی، مدارهای الکترونیکی، الکترونیک دیجیتال، سیگنال ها و سیستم ها، مدارهای منطقی، معماری کامپیوتر و ریزپردازنده ها) و هم جنبه های نرم افزاری آن را که ریشه در ریاضیات دارد و در علوم کامپیوتر بیشتر به آن پرداخته می شود درک خواهد کرد. برنامه نویسی یاد می گیرد و با طراحی ساختمان داده ها و الگوریتم ها آشنا می شود و در دنیای نرم افزار، مفاهیم نظریه زبان ها و اتوماتا را فرا می گیرد. وی کم کم از جنبه های ریاضی و علمی نرم افزار به سمت جنبه های مهندسی آن روی می آورد.  با اصول طراحی کامپایلرها و سیستم عامل ها آشنا می شود. طراحی پایگاه های داده را می آموزد و دروس مهندسی نرم افزار  را می گذراند که به مهندسین توان تجزیه و تحلیل، طراحی، تست، اشکازدایی و توسعه سیستم های نرم افزاری بزرگ را  می بخشد. همچنین دانشجو با مفاهیم پایه رشته هوش مصنوعی آشنا می شود.

2- لیسانس علوم کامپیوتر در مقطع کارشناسی پیوسته: این رشته معمولاً در دانشکده های ریاضی یا علوم کامپیوتر ارائه می شود و همان طور که قبلاً اشاره کردیم ریاضیات مادر رشته کامپیوتر است و علم نرم افزار  ریشه در ریاضیات دارد. به خصوص جنبه هایی از نرم افزار مانند نظریه زبان ها و ماشین ها و طراحی الگوریتم ها و محاسبات، شاخه ای کاربردی از علم ریاضی به حساب می آید.

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

مطالب مرتبط مهندسی کامپیوتر - نرم افزار کارشناسی ارشد