X
تبلیغات
آشنايي با رشته علوم کامپیوتر

آشنايي با رشته علوم کامپیوتر

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

درباره وبلاگ
در این وبلاگ با رشته علوم کامپیوتر (‍Computer Science)،
گرايش هاي آن و همچنين تفاوت این رشته با رشته مهندسي كامپيوتر آشنا خواهيد شد.

مطالب این وبلاگ مستقیما توسط نویسنده وبلاگ تالیف یا ترجمه شده و به هیچ وجه از منابع فارسی کپی برداری نشده است (مگر با ذکر منبع). لطفا شما نیز این کار را نکنید.

در صورت تمایل، لطفا فقط با ذکر منبع از مطالب استفاده کنید.
اگر فکر  می کنید مطالب این وبلاگ مفید است، به آن امتیاز دهید تا رتبه اش در گوگل افزایش یابد.
با تشکر

دانشگاه ها
رشته علوم كامپيوتر در دانشگاه هاروارد

دانشكده مهندسي برق و علوم كامپيوتر دانشگاه MIT

مركز تحقيقات علوم كامپيوتر و هوش مصنوعي دانشگاه MIT

دانشكده علوم كامپيوتر دانشگاه كاليفرنيا در لس آنجلس (UCLA)

دانشكده علوم كامپيوتر دانشگاه كلمبيا

دانشكده علوم كامپيوتر دانشگاه استنفورد

دانشكده علوم كامپيوتر دانشگاه ایلینویز

دانشكده علوم كامپيوتر دانشگاه پرینستون

دانشكده علوم كامپيوتر دانشگاه بروون

دانشكده علوم كامپيوتر دانشگاه ویرجینیا

دانشكده علوم كامپيوتر دانشگاه بُستون

دانشكده علوم كامپيوتر دانشگاه جورجيا

دانشكده علوم كامپيوتر دانشگاه شیکاگو

دانشكده علوم كامپيوتر دانشگاه دارتموث

دانشكده علوم و مهندسی كامپيوتر ایالت میشیگان

دانشكده علوم كامپيوتر دانشگاه آلاباما

دانشكده علوم كامپيوتر دانشگاه رایس

دانشكده علوم كامپيوتر دانشگاه منچستر

دانشكده علوم كامپيوتر دانشگاه میسی سیپی

دانشكده علوم كامپيوتر دانشگاه تورنتو

دانشكده "علوم و مهندسي" كامپيوتر دانشگاه واشنگتن

دانشكده "علوم و مهندسي" كامپيوتر دانشگاه اوهايو

دانشكده علوم كامپيوتر دانشگاه دهلي (هند)


سلام
تا حالا چند نفر از دوستان از نتیجه کنکور کارشناسی ارشد بنده پرسیده اند و سوالاتی مانند اینکه "با چه رتبه ای تهران قبول می شوم" و مانند اینها. به همین خاطر تصمیم گرفتم که در این پست به اونها جواب بدم.

رتبه من در کنکور ارشد علوم کامپیوتر امسال 63 شد و دانشگاه تبریز قبول شدم. در پایین هم کارنامه بنده رو ملاحظه می فرمایید.

کارنامه ارشد من

البته ترتیب انتخاب رشته من باعث شد که تبریز قبول بشم و اگر همه دانشگاه های تهران رو بالای تبریز می زدم، تهران قبول می شدم (مثلا دانشگاه تربیت مدرس)

1. دانشگاه های شریف - تهران - امیرکبیر
2. دانشگاه شهید بهشتی
3. دانشگاه تبریز
4. دانشگاه تربیت معلم (رشته مهندسی دانش)
5. دانشگاه تحصیلات تکمیلی زنجان
6. دانشگاه تربیت مدرس
7. بقیه دانشگاه ها ...

برای مثال امسال در دانشگاه شهید بهشتی تا رتبه 60 هم قبولی داشتیم (بد شانسی من!). من دانشگاه تبریز رو بالاتر از بقیه زدم چون به گرایش هاش علاقه داشتم (گرایش های سیستم های کامپیوتری - سیستم های هوشمند).

*** رتبه و محل قبولی بعضی از دوستانم (کنکور کارشناسی ارشد علوم کامپیوتر سال 90)
رتبه 30 --> دانشگاه تهران
رتبه 31 --> دانشگاه امیرکبیر (گرایش سیستم های هوشمند)
رتبه 81 --> دانشگاه علوم اقتصادی تهران (رشته مهندسی دانش)


در کل اگر بخواهید به هر نحو که شده شهر تهران قبول بشید، رتبه شما حدودا باید کمتر از 100 باشه (البته این فقط تخمینی است که من از روی رتبه و محل قبولی دوستانم می زنم)

در مورد اینکه روزی چند ساعت درس میخوندم هم پرسیده بودید
من صبح از 9 تا 1 میخوندم. بعد از ظهر هم از ساعت 5.5 تا 10 می خوندم  و 4 ماه آخر از ساعت 10 تا 11 زبان انگلیسی کار می کردم. البته در ضمن درس خواندن استراحت های کوتاه مدت هم داشتم + شام و ناهار . از اول تابستان شروع به درس خوندن کردم. سال اولم بود که کنکور می دادم. متاسفانه اونقدر که تلاش کردم به همون اندازه رتبم خوب نشد، ولی کنکوره دیگه چیکار میشه کرد!

امیدوارم که توی کنکوری که در پیش دارید موفق باشید.

سایت مانشت یک انجمن (Forum) خوب و فعال در زمینه کنکور کارشناسی ارشد کامپیوتر (علوم و مهندسی و IT) است که می توانید سوالات خود را در آنجا نیز مطرح کنید.









3. ریاضیات گسسته

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

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


توجه:
در طول این سال ها سوالات خیلی کمی از مباحث "رابطه" و "مجموعه های مرتب" (فصل های 2 و 4 از کتاب قلی زاده) مطرح شده است و از نظر کنکوری اهمیت زیادی ندارند. در عوض بیشتر سوالات مربوط به مباحث  منطق، شمارش، ترکیبات و نظریه گراف بوده است. بنابراین خیلی روی مباحث کم اهمیت وقت نگذارید! قبل از اینکه شروع  به خواندن کل کتاب کنید، ابتدا سوالات کنکورهای سال های قبل را بررسی کنید تا مطمئن شوید کدام مباحث اهمییت کنکوری بیشتری دارند.

کتاب تست:
برای تست زدن می توانید از کتاب ریاضیات گسسته از انتشارات پوران پژوهش استفاده کنید. این کتاب هم از نظر نکات کنکوری و هم از نظر تعداد تست ها یک کتاب خوب و کامل است و نیاز به کتاب دیگری برای تست زدن نخواهید داشت.
کتاب تست "ساختان گسسته"  از انتشارات سپاهان هم در بازار موجود است که تقریبا فرقی با کتاب پوران پژوهش ندارد (ولی کتاب پوران پژوهش کمی کامل تر است).

4. ساختمان داده ها و الگوریتم ها

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

کتاب تست:
من برای کنکور کتاب تست ساختمان داده مقسمی را خریدم ولی خریدن این کتاب را خیلی مفید نمی دانم. کتاب مقسمی گردایه ای از تست های ساده کنکور است! سوالاتی که با حل آنها تسلط شما بر مطلب خیلی زیاد نمی شود، چون ساده اند! و همچنین نکات کنکوری آن هم خیلی کم است.
من برای خواندن نکات کنکوری، جزوه ساختمان داده از موسسه پارسه را پیشنهاد می کنم. جزوه پارسه چندین برابر این کتاب نکته کنکوری دارد و از این جهت توصیه می کنم که حتما آن را مطالعه کنید.

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

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

اگر تجربه شخصی در زمینه کتاب ساختمان داده پوران پژوهش دارید لطفا در قسمت نظرات قید کنید تا بقیه هم مطلع شوند.

5. اصول سیستم های کامپیوتری

همانطور که قبلا هم ذکر شد برای این مجموعه درسی باید فقط درس معماری کامپیوتر را مطالعه کنید و نیازی نیست درس طراحی دیجیتال را بخوانید (البته مباحث پایه ای مثل تبدیل مبنا، جمع و تفریق دودویی و مفاهیم کلی مدارهای ترتیبی و ترکیبی را باید به یاد داشته باشید، اگر این مباحث را فراموش کرده اید آنها را از کتاب طراحی دیجیتال موریس مانو مطالعه کنید).
برای آماده شدن برای این درس دو کار باید انجام دهید. ابتدا باید مفاهیم مربوط به سیستم های کامپیوتری را یاد بگیرید. اگر گرایش شما در دوره کارشناسی چیزی غیر از سخت افزار بوده و درس معماری کامپیوتر را پاس نکرده اید (یا هیچ چیز از آن را به یاد ندارید!)، توصیه می کنم که حتما کتاب معماری کامپیوتر موریس مانو را مطالعه کنید، چون این کتاب مفاهیم سیستم های کامپیوتری را خیلی روان و گام به گام توضیح می دهد و برای کسانی که چیز زیادی از معماری کامپیوتر نمی دانند مناسب است.
البته کتاب معماری کامپیوتر مانو به تنهایی برای کنکور کافی نیست چون برای کنکور به جز مفاهیم نیاز به تقریبا 10 فرمول دارید که می توانید این فرمول ها را در کتاب معماری کامپیوتر پترسون یا کتاب های تست معماری کامپیوتر پیدا کنید.
اگر گرایش شما سخت افزار بوده و قبلا درس معماری کامپیوتر را خوانده اید، نیازی به مطالعه کامل کتاب مانو ندارید و می توانید از کتاب مانو به عنوان مرجع استفاده کنید و در عوض بیشتر وقتتان را صرف مطالعه کتاب های تست کنید.
کتاب معماری کامپیوتر موریس مانو مفاهیم را به خوبی شرح می دهد ولی شامل روابط محاسباتی زیادی نیست. کتاب معماری کامپیوتر پترسون در توضیح مفاهیم خیلی موفق نیست (نظم موضوعی خوبی ندارد - بدون ارائه پیشنیازهای یک مبحث وارد آن می شود) ولی بیشتر روی محاسبات تکیه دارد.
برای کنکور هم به مفاهیم نیاز دارید و هم به محاسبات. (تقریبا 70% سوالات محاسباتی هستند و 30% مربوط به مفاهیم). البته دقت داشته باشید که تا مفاهیم را یاد نگیرید، نمی توانید چیزی را محاسبه کنید!

سوال: آیا کتاب معماری کامپیوتر تننباوم برای کنکور ارشد مناسب است؟
خیر! کتاب تننباوم سیستم های کامپیوتری را بیشتر از نظر مسایل تجاری و سیر تحول و معرفی تکنولوژی های جدید و مدرن امروزی بررسی می کند (به سبک نگارش خاص آقای تننباوم!) و برای کنکور توصیه نمی شود.

توجه: بیشتر سوالات مربوط به اعداد ممیز شناور (Floating Point Numbers)، معماری خط لوله (Pipeline)، کارایی(Performance) و حافظه اصلی(RAM) است.

توجه: از مبحث کنترل ریز برنامه نویسی شده سوالی طرح نمی شود (تا به حال در هیچ سالی برای کنکور علوم کامپیوتر از این مبحث سوالی طرح نشده است).

توجه: مبحث I/O اهمیت زیادی از نظر کنکوری ندارد (تا به حال سوالات خیلی کمی از این مبحث طرح در کنکور علوم کامپیوتر طرح  شده است).

کتاب تست:
می توانید از کتاب تست معماری کامپیوتر از انتشارات پوران پژوهش استفاده کنید. کتاب خوب و کاملی است.

6. نظریه زبان ها و ماشین ها

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

از کتاب "نظریه زبان ها و ماشین ها" از سودکمپ هم به عنوان منبع کمکی استفاده کنید. کتاب پیتر لینز از نظر نظم موضوعی و مطابقت با مباحث کنکوری از کتاب سودکمپ بهتر است.
کتاب "1000 مسئله نظریه زبان ها و ماشین ها" شامل سوالات فراوانی است (به همراه حل آنها) که برای تسلط بر مفاهیم می توانید از آن استفاده کنید.

کتاب تست:
از کتاب "نظزیه زبان ها و ماشین ها" از انتشارات گسترش علوم پایه یا کتابی با همین عنوان از انتشارات پوران پژوهش استفاده کنید.

7. آنالیز عددی

همانطور که قبلا هم ذکر شد برای این مجموعه درسی باید دو درس "جبر خطی عددی" و "آنالیز عددی" را مطالعه کنید.
کتاب "آنالیز عددی" از انتشارات راهیان ارشد و کتاب "محاسبات عددی" از انتشارات پوران پژوهش کتاب هایی هستند که می توانید از آنها استفاده کنید.
کتاب آنالیز عددی راهیان ارشد هم شامل مباحث آنالیز عددی و هم شامل مباحث جبر خطی می شود ولی کتاب محاسبات عددی پوران پژوهش فقط شامل مباحث مرتبط با درس محاسبات عددی (آنالیز عددی) می شود.

منابع کمکی برای مطالعه: کتاب آنالیز عددی بابلیان - کتاب جبر خطی عددی از استیون لئون (Steven J. Leon) - کتاب جبر خطی عددی از استانلی آی گراسمان


چه درس های را باید مطالعه کنم؟

     برای شرکت در کنکور کارشناسی ارشد رشته علوم کامپیوتر باید درس هایی که در جدول زیر آمده است را مطالعه کنید.


نام مجموعه درسی ضریب تعداد سوالات
زبان عمومی و تخصصی 2 30
دروس پایه (ریاضی 1و 2 ، آمار 1و 2 ، مبانی کامپیوتر) 6 35
ریاضیات گسسته 3 15
ساختمان داده ها و الگوریتم ها 3 15
اصول سیستم های کامپیوتری 3 15
نظریه اوتوماتا و زبان ها 3 15
آنالیز عددی 3 15
جمع --- 140 سوال
مواد امتحانی کنکور کارشناسی ارشد رشته علوم کامپیوتر


همانطور که ملاحظه می کنید باید 7 مجموعه درسی را مطالعه کنید. مجموعه "دروس پایه" شامل درس های ریاضی 1و 2 ، آمار 1و2  و مبانی کامپیوتر(زبان برنامه نویسی C++)  می شود و چون ضریب آن 6 است از نظر کنکوری اهمیت زیادی دارد.
اسم درس آنالیز عددی کمی غلط انداز است! زیرا تقریبا نصف سوالات این درس از "جبر خطی عددی مقدماتی" طرح می شود و شما در واقع باید دو درس "آنالیز عددی" و "جبر خطی عددی" را مطالعه کنید.
سوالات مجموعه درسی "اصول سیستم های کامپیوتری" همگی از درس "معماری  کامپیوتر" طرح می شوند و از درس "طراحی دیجیتال" هیچ سوالی طرح نمی شود (متاسفانه اسم این مجموعه درسی هم غلط انداز است!).

در ادامه هر درس را به طور جداگانه بررسی  می کنیم.


1. زبان عمومی و تخصصی

از این درس 30 سوال به صورت زیر طرح می شود:
  • 10 سوال از Vocabulary (واژه های عمومی زبان انگلیسی)
  • 5 سوال از گرامر و یا Close Test (مباحث گرامری زبان انگلیسی)
  • 15 سوال از Reading Comprehension (ادراک متن- معمولا شامل دو یا سه Passage از زبان تخصصی است)

چون از مبحث گرامر پنج سوال بیشتر طرح نمی شود، پیشنهاد می کنم بیشتر وقتتان را صرف یادگیری لغات انگلیسی کنید. اگر تا به حال از کتاب های انگلیسی برای دروس تخصصی استفاده کرده اید، مشکلی با Passage ها نخواهید داشت.

 منابع (برای یادگیری):
برای یادگیری زبان انگلیسی کتاب های فراوانی وجود دارد. مخصوصا از کتاب های آمادگی برای آزمون های زبان انگلیسی مانند  TOEFL و IELTS و.. می توانید استفاده کنید. یک کتاب خوب در این زمینه کتاب "504 Absolutely Essential Words" است که شامل تعداد زیادی کلمات دشوار انگلیسی می شود (خیلی بیشتر از 504 تا !)
در کل برای تقویت زبان انگلیسی (عمومی) خود از هر کتابی که دم دست دارید می توانید استفاده کنید چون معلوم نیست که کلمات بکار رفته در سوالات  بیشتر مربوط به کدام کتاب است (به احتمال زیاد مربوط به هیچ کتاب خاصی نیست و طراح سوال به دلخواه تصمیم می گیرد از چه کلماتی استفاده کند). در کل سعی کنید تا جایی که امکان دارد کلمات جدید و مشکل یاد بگیرید و از کتاب های آزمون هایی مثل TOEFL استفاده کنید.
برای یادگیری مقدماتی گرامر زبان انگلیسی کتاب "Essential Grammer in use"  یک کتاب خیلی خوب است. بعد از این کتاب هم می توانید کتاب "Advanced Grammar in Use" را مطالعه کنید. این دو کتاب از انتشارات دانشگاه کمبریج می باشند.

کتاب تست:
  می توانید از کتاب "زبان تخصصی کامپیوتر" از انتشارات  راهیان ارشد استفاده کنید (نگارش های جدید کتاب را بخرید چون نگارش های قدیمی این کتاب غلط های تایپی زیادی داشت)


2. مجموعه دروس پایه

مجموعه دروس پایه شامل درس های ریاضی 1و2 ، آمار و احتمال 1و2 و مبانی کامپیوتر (برنامه نویسی C++) می شود و جمعا 35 سوال از این درس طرح می شود:
  • 15 سوال از ریاضی 1و2
  • 10 سوال از آمار و احتمال 1و2
  • 10 سوال از مبانی کامپیوتر (برنامه نویسی با زبان C++)

  ریاضی 1 و 2:

      پیشنهاد می کنم از کتاب "حسابگان دیفرانسیل و انتگرال" از جیمز استوارت استفاده کنید. این کتاب یکی از بهترین کتاب های حساب دیفرانسیل و انتگرال ای است که در دانشگاه ها تدریس می شود. به گفته ناشر کتاب، این کتاب به عنوان پرفروش کتاب در زمینه حساب دیفرانسیل و انتگرال در قاره آمریکای شمالی شناخته شده و در بسیاری از دانشگاه های معتبر دنیا تدریس می شود.

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

مباحثی که معمولا مربوط به ریاضی 1 می شود:
توابع (مثلثاتی، معکوس، هذلولوی، نمایی، لگاریتمی و...) - حد - مشتق - کاربرد های مشتق - انتگرال - کاربرد های انتگرال - تکنیک های انتگرال گیری

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

کتاب تست برای ریاضی 1 و 2:
می توانید از کتاب  های "ریاضی عمومی 1" و "ریاضی عمومی 2"  از انتشارات پوران پژوهش استفاده کنید (از فرزین حاجی جمشیدی). این دو کتاب هم از جهت ارائه نکات کنکوری و هم از جهت کامل بودن کتاب های خوبی می باشند.



تجربه شخصی من در درس ریاضی!

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

 
نتیجه:
اگر می خواهید عمیق و با حوصله مطالعه کنید، ایده بسیار خوبی است، ولی زمان را فراموش نکنید!


آمار و احتمال

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

برای درس آمار و احتمال باید مطالب زیر را از کتاب جان فروند مطالعه کنید:
  • ترکیبات
  • مفاهیم مقدماتی احتمال
  • توزیع ها و چگالی های احتمال
  • امید ریاضی
  • توزیع های احتمال خاص (دو جمله ای، هندسی، پواسون،...)
  • چگالی های احتمال خاص (گاما ، نمایی، کای دو، نرمال،...)
  • ((( از فصل 7 از کتاب جان فروند (تابع های متغیر های تصادفی) فقط بخش های 2.7 و 3.7 را بخوانید. بقیه بخش ها را نیاز نیست بخوانید.)))
  • توزیع های نمونه گیری
  • ((( از فصل 9 کتاب آمار جان فروند (نظریه تصمیم) سوالی طرح نمی شود)))
  • فصل های 10 و 11 (نظریه برآورد)
  • فصل های 12 و 13 (آزمون فرض)
  • فصل 14 (رگرسیون و همبستگی) - فقط مباحث ابتدایی اول فصل را بخوانید چون سوالات زیادی از این مبحث طرح نمی شود.
در کل بیشتر وقتتان را صرف فصل های 1 تا 8 کنید (مباحث آمار 1) چون بیشتر سوالات از این مباحث مطرح می شود.

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

مبانی کامپیوتر

     سوالات درس مبانی کامپیوتر از مباحث برنامه نویسی C++ طرح می شود. تمرکز سوالات بیشتر روی مباحث الگوریتمیک و محاسباتی است و کمتر به مباحث مربوط به Syntax زبان پرداخته می شود.
محاسبه مرتبه زمان اجرا، توابع بازگشتی، الگوریتم های جستجو و مرتب سازی و مباحث مربوط به زبان  C++ مانند اشاره گرها و آرایه ها از جمله مباحثی است که از آنها سوال طرح می شود.
برای مطالعه نیاز به کتاب خاصی ندارید و می توانید از هر کتابی که در دانشگاه برای زبان C++ مطالعه می کردید استفاده کنید و خیلی هم وارد مباحث مربوط به Syntax زبان نشوید، مثلا نیازی به مطالعه مباحث شیی گرایی ندارید و فقط مباحث ابتدایی مانند دستورات ورودی خروجی، دستورات کنترلی (if, while,...) ، حلقه ها، آرایه و اشاره گرها  و عملگر ها را مطالعه کنید.
این درس ارتباط نزدیکی با درس ساختمان داده ها دارد و مباحث مشترک بین این دو درس وجود دارد. مثلا الگوریتم های جستجو و  مرتب سازی ، آرایه ها ، توابع بازگشتی و... . از این جهت برای مطالعه این درس، در وقتتان صرفه جویی خواهد شد.

کتاب تست برای درس مبانی کامپیوتر:
   متاسفانه من نتوانستم هیچ کتاب تستی برای این درس پیدا کنم! نه در بازار و نه در اینترنت. البته شاید تا این لحظه که شما این متن را می خوانید کتاب تستی برای این درس تالیف شده باشد.
تنها منبعی که می توانم به شما پیشنهاد کنم سوال های کنکور سال های قبل است که می توانید از آنها استفاده کنید (کنکور ارشد سال های 86 تا 90 - جمعا 75 سوال از درس مبانی کامپیوتر- لینک سوالات در پست های قبل در همین وبلاگ وجود دارد).

برای آشنایی بیشتر با نحوه طرح سوال از این درس یک آمارگیری مختصر انجام داده ام که نتیجه آن را در جدول زیر می بینید. در این جدول مشخص شده که در چه سالی، چه تعداد سوال و از چه مبحثی طرح شده است.

مبحث / سال سال 86 سال 87 سال 88 سال 89 سال 90
جستجو و مرتب سازی --- 1 2 5 ---
محاسبه پیچیدگی زمانی 1 1 2 3 1
Trace کردن برنامه 3 2 2 --- 3
مباحث مربوط به Syntax و توابع کتابخانه ای 1 3 --- --- 3
شناسایی عملکرد کد 4 --- 2 --- 1
توابع بازگشتی 1 --- 2 2 2
عبارات پسوندی، میانوندی و پیشوندی --- 1 --- --- ---
پیاده سازی لیست پیوندی و پشته --- 1 --- --- ---
سوالات خیلی ساده! --- 1 --- --- ---

از طریق جدول بالا می توانید بفهمید که از چه مباحثی بیشتر سوال طرح می شود.
"شناسایی عملکرد کد" : یعنی اینکه یک قطعه کد به شما داده می شود و شما پرسیده می شود که عملکرد این کد چیست. در بعضی از سوالات عملکرد کد را به شما می گویند و یک یا دو سطر از کد را به شما نمی دهند (از کد حذف می کنند) و از شما می خواهند که مشخص کنید که سطرهای حذف شده کدام سطرها بوده اند. همه این سوالات تحت عنوان "شناسایی عملکرد کد" دسته بندی شده اند.
"سوالات خیلی ساده" : سوالات متفرقه و ساده. (کنکور سال 87- سوال شماره 58 :  "یک گیگابایت چند بایت است؟" )



در پست های بعدی، منابع درس های ریاضیات گسسته، ساختمان داده ها و الگوریتم ها، اصول سیستم های کامپیوتری، نظریه اتوماتا و زبان ها و آنالیز عددی معرفی خواهد شد...


یکی از اولین دغدغه های کسانی که تصمیم گرفته اند برای کنکور کارشناسی ارشد مطالعه کنند این است که نمی دانند باید چه کتاب هایی را مطالعه کنند و یا اینکه از هر کتاب چه فصل های را بخوانند و چه فصل هایی را نخوانند.
  تقریبا نه ماه پیش که تصمیم گرفتم در کنکور ارشد علوم کامپیوتر شرکت کنم، چندین روز در اینترنت به دنبال منابع کنکور ارشد جستجو می کردم. سایت ها و وبلاگ هایی که در این زمینه مطلبی نوشته بودند بسیار کلی منابع را معرفی می کردند و یا مثلا برای هر درس 3 یا 4 کتاب معرفی می کردند که مسلماً داوطلب کنکور نمی تواند برای هر درس از 3 یا 4 کتاب مطالعه کند و باید کتابی را مطالعه کند که در وهله اول مباحث کنکوری را پوشش داده باشد و در وهله بعد شیوا و روان  باشد.

این شد که تصمیم گرفتم تجربیات کنکور ارشد و همچنین بسیاری از مطالب مفیدی که در طول این مدت از گوشه و کنار جمع آوری کرده بودم را در وبلاگم قرار دهم تا بتوانم به کسانی که می خواهند در کنکور ارشد علوم کامپیوتر شرکت کنند و از منابع کنکور آگاهی کافی ندارند کمکی کرده باشم (البته قبلا هم تعدادی از بازدیدکنندگان وبلاگم از من خواسته بودند که چنین کاری را انجام دهم)

در پست های آینده در مورد کتاب هایی که باید برای هر درس مطالعه شوند (و همچنین فصل هایی از هر کتاب که باید مطالعه شود) به طور کامل توضیح خواهم داد. همچنین اهمیت کنکوری هر مبحث درسی را نیز ذکر خواهم کرد.

امیدوارم که مفید واقع شود ...



بلاخره بعد از یک هفته کاوش در اینترنت، توانستم سوال های کنکور کارشناسی ارشد رشته علوم کامپیوتر را پیدا کنم!

توجه: سازمان سنجش از  روز 7 اسفند کلید های اولیه کلیه آزمون های کارشناسی ارشد سال 90 را بر روی سایت خودش قرار داده. چنانچه کسی به سوالات اعتراضی داشته باشد، می تواند به سایت سنجش مراجعه کند.

 

دانلود سوالات کنکور کارشناسی ارشد رشته علوم کامپیوتر سال  90

دانلود کلید سوالات کنکور کارشناسی ارشد رشته علوم کامپیوتر سال 90

 

موفق باشید.



خروجی برنامه زیر چیست؟

int x =10;
printf("%d %d", x, x++);

احتمالا فکر میکنید که خروجی "10 10" خواهد بود.
به خروجی برنامه دقت کنید. چرا عدد 11 در خروجی چاپ شده است؟ و عجیب تر اینکه چرا ابتدا 11 چاپ شده!!!


Program Output


یک سری سوالات کنکور کارشناسی ارشد علوم کامپیوتر سال های قبل رو که جمع آوری کردم، برای دانلود گذاشتم. امیدوارم که بتونید ازشون استفاده کنید.


دانلود سوالات کنکور کارشناسی ارشد علوم کامپیوتر سال ۸۹

دانلود سوالات کنکور کارشناسی ارشد علوم کامپیوتر سال ۸۸

دانلود سوالات کنکور کارشناسی ارشد علوم کامپیوتر سال ۸۷

دانلود سوالات کنکور کارشناسی ارشد علوم کامپیوتر سال ۸۶


اگر کسی سوالات سال های 85 و ماقبل رو هم داره لطفا برام میل بزنه تا با کمال میل تو وبلاگ قرار بدم. متشکرم.



آيا هرگز به اين موضوع فكر كرده ايد كه چگونه مي توان براي حل مسائل بيولوژيك راه حلي سريع تر با هزينه اي كمتر ارائه شود به گونه اي كه حل آن ها محدود به محيط هاي آزمايشگاهي نشود؟
علم ژنتيك (Genetics) به ما آموخته است كه مهمترين عامل در برنامه ريزي عملكرد سلول و ويژگي‌هاي موجود زنده «ژن» است. بنابراين براي توصيف و توجيه پديده هاي زيستي نيازمند شناخت ژن ها هستيم. اين شناخت مي تواند ما را براي بهبود بخشيدن به زندگي پيچيده ترين موجود يعني انسان ياري دهد.

آهنگ فزاينده رشد داده ها در فرآيند هاي زنده سبب مي‌شود حجم عظيمي از داده ها ايجاد شوند و اين داده ها نيز نيازمند جمع آوري، ذخيره سازي، نگهداري و نيز پردازش هستند. بديهي است كه بدون بهره گرفتن از فناوري هاي نوين اطلاعاتي نمي توان اين داده ها را مديريت كرد. بدين ترتيب پيشرفت فناوري هاي رايانه اي از طريق مديريت سيستم هاي داده در مطالعات بيولوژيك به كمك زيست شناسان آمد. پس از مديريت داده ها نوبت به تحليل آن ها و استنباط منطقي از آن ها مي رسد كه اين موضوع بر عهده‌ي علم رياضي و آمار گذاشته مي شود.
Bioinformatics

بيوانفورماتيك حوزه نويني از دانش است كه با به كارگيري رياضيات كاربردي، آمار، علوم  کامپیوتر، هوش مصنوعي، شيمي، بيوشيمي، و زيست شناسي تلاش مي كند به مسائل زيستي در زمينه هاي سلولي و مولكولي پاسخ دهد. زمينه هاي اصلي تحقيق در اين حوزه عبارتند از:

 • يافتن ژن ها در ميان توالي هاي ژنوميك
 • مرتب كردن توالي در بانك هاي اطلاعاتي براي يافتن شباهت ها و تفاوت ها
 • پيش گويي ساختار و عملكرد محصولات ژن ها
 • توضيح تعامل ژن ها با محصولاتش
 • پيشگويي ساختار پروتئين
 • مطالعه برهم كنش پروتئين-پروتئين و مدل سازي تكامل

همانطور كه گفته شد پيشرفت علم در اين حوزه نيازمند به كارگيري روش هاي رياضي-آماري و برنامه نويسي كامپيوتري است. بديهي است كه اين نياز به نوبه خود باعث ايجاد و توسعه زمينه هاي پژوهشي جديدي در اين رشته ها به ويژه در زمينه‌ الگوريتم هاي رياضي و برنامه هاي كامپيوتري براي بايگاني و جست و جوي داده ها و آناليزهاي آماري شده است.

اگر چه اين رشته دانشگاهي نوپا است، به سرعت در حال رشد است و از اين رو كاربردهاي فراواني پيدا كرده است. پيشرفت اين رشته مي‌تواند بر هر حوزه اي كه به نحوي به سامانه هاي زيستي مربوط است نظير كشاورزي، محيط زيست، علوم پزشكي، سلامتي انسان، صنايع سبز و... اثر بگذارد. به عنوان مثال اين دانش در علوم پزشكي از طريق طراحي منطقي داروها، شناسايي علل ژنتيك بيماري ها و تشخيص بيماري ها براساس اطلاعات ژنتيك ايفاي نقش مي‌كند. نقش بيوانفورماتيك درعلوم پزشكي تا آنجا پيش رفته است كه دانشمندان معتقدند بدون به كارگيري اين دانش تحقيقات دارويي متوقف خواهد شد.

اكنون بيوانفورماتيك در دو حوزه اصلي فعاليت مي كند: پروتئوميك و ژنوميك.

پروتئوميك شامل تحليل و بررسي پروتئين ها در موجودات زنده است و ژنوميك به تجزيه و تحليل داده ها و اطلاعات ژنتيكي مخصوص ژنوم موجودات زنده مي پردازد (ژنوم، توالي DNA موجود در سلول هاي يك موجود زنده است و همان عاملي است كه سبب بروز صفات وراثتي مي شود).

البته زيست سيستم (Systems-Biology) نيز در حوزه دانش بيوانفورماتيك قرار مي گيرد. دراين بخش محققان برهم كنش ميان ژنوميك و پروتئوميك را مطالعه مي كنند تا از اين طريق مدل سازي مناسبي براي سامانه هاي زيستي ارائه كنند. رشته ي بيوانفورماتيك شامل شاخه هايي هم چون طراحي پايگاه داده های مورد نیاز، طراحي نرم افزار و تحليل داده ها است. با توجه به بين رشته اي بودن دانش بيوانفورماتيك، دانش جويان رشته هاي علوم كامپيوتر، بيوشيمي، زيست شناسي مولكولي، ميكروبيولوژي و حتي مهندسي پزشكي مي توانند در آن به پژوهش بپردازند.

درايران، در سال 1381 گروهي از اساتيد رشته هاي علوم كامپيوتر، رياضيات، بيوفيزيك، ژنتيك، آمار و داروسازي اين رشته را بنا نهادند و در اثر تلاش هاي پي گير ايشان در سال 1383 اولين دوره ي دكتري بيوانفورماتيك پايه گذاري شد. هم اكنون دانشگاه هاي تهران، شهيد بهشتي و صنعتي اميركبير در اين رشته دانشجو مي پذيرند. اميدواريم در آينده اي نزديك در كشور ما اين رشته به صنعت نيز راه پيدا كند.

منبع: سایت رشد



“Knock, knock.”
“Who’s there?”
very long pause …. “Java.”


There are only 10 kinds of people in this world: those who know binary and those who don’t!


"640 KB ought to be enough for anybody."
– Bill Gates, 1981.

ought: می بایست - باید


Two strings walk into a bar and sit down.
The bartender says, “So what’ll it be?” The first string says, “I think I’ll have a beer quag fulk boorg jdk^CjfdLk jk3s d#f67howe%^U r89nvy~~owmc63^Dz x.xvcu”
“Please excuse my friend,” the second string says, “He isn’t null-terminated.”

bartender: کسی که در بار مشروبات برای مشتریان می ریزد


A guy is standing on the corner of the street smoking one cigarette after another.
A lady walking by notices him and says: "Hey, don't you know that those things can kill you? I mean, didn't you see the giant warning on the box?!",
"That's OK" says the guy, puffing casually "I'm a computer programmer" "So? What's that got to do with anything?" "We don't care about warnings. We only care about errors."


"I think there is a world market for may be five computers."
– Thomas Watson, chairman of IBM, 1943.


"There is no reason anyone would want a computer in their home."
– Ken Olson, president, chairman and founder of Digital Equipment Corp.,1977.


A mathematician, a physicist, an engineer and a computer scientist are given an identical problem: Prove that all odd numbers greater than 2 are prime numbers.

They proceed:
Mathematician: 3 is a prime, 5 is a prime, 7 is a prime, 9 is not a prime - counterexample - claim is false.

Physicist: 3 is a prime, 5 is a prime, 7 is a prime, 9 is an experimental error, 11 is a prime, ...

Engineer: 3 is a prime, 5 is a prime, 7 is a prime, 9 is a prime, 11 is a prime, ...

Computer Scientist: 1 is a prime, 1 is a prime, 1 is a prime, 1 is a prime, ... Yes, they're all primes !!!

prime: عدد اول


How many programers dose it take to change a light bulb? None – It’s a hardare problem!



دستور cout درون حلقه زیر چند بار اجرا می شود؟
for (double d = 0.0;  d != 0.1;  d += 0.01)
{
     cout<< d;
}

احتمالا فکر می کنید که دستور cout درون این حلقه 10 بار تکرار می شود. ولی واقعیت این است که این حلقه هیچ وقت متوقف نمی شود!!! می توانید امتحان کنید!

آیا دلیل این اتفاق را می دانید؟

پیچیدگی محاسباتی در کامپیوترهای کوانتومی

مسائلی که به صورت کارا توسط کامپیوترهای کوانتومی قابل حل هستند در رده BQP قرار دارند.
BQP سرنام  "Bounded error, Quantum, Polynomial time" است. کامپیوترهای کوانتومی فقط الگوریتم های احتمالی را می توانند اجرا کنند. در نتیجه رده  مسائل BQP در کامپیوترهای کوانتومی معادل با رده مسائل BPP در کامپیوترهای کلاسیک است.

BQP

در صورتی می گوییم یک کامپیوتر کوانتومی می تواند یک مسئله را حل کند که برای هر نمونه (Instance) از آن مسئله، جواب صحیح را با احتمال بالا به ما بدهد. اگر یک کامپیوتر کوانتومی بتواند این جواب را با یک پیچیدگی زمانی چندجمله ای (polynomial time) بدست آورد، آنگاه این مسئله در رده BQP قرار دارد.
BQP و NP کامل (NP-Complete) از هم مجزا هستند. همچنین مسائل موجود در P به طور کامل در BPQ قرار دارند. (P زیر مجموعه  محض BQP است). هم مسئله تجزیه اعداد و هم مسئله لگاریتم های پیوسته (discrete log) در BQP قرار دارند (پس به طور کارآمد توسط کامپیوترهای کوانتومی قابل حل هستند). هر دو مسئله ذکر شده جز مسائل NP هستند و خارج از BPP در نظر گرفته می شوند و درنتیجه خارج از P. البته این دو مسئله NP کامل نیستند.

یک تصور غلط وجود دارد که کامپیوترهای کوانتومی مسائل NP کامل را می توانند در یک زمان چندجمله ای حل کنند، ولی در حالت کلی چنین چیزی صحیح نیست. همچنین، اگر چه این کامپیوترها سریعتر از کامپیوترهای کلاسیک هستند ولی این کامپیوتر ها همچنان نمی توانند مسائلی که برای کامپیوترهای کلاسیک لاینحل است را حل کنند.

یک ماشین تورینگ می تواند کامپیوترهای کوانتومی را شبیه سازی کند. بنابراین چنین کامپیوتر کوانتومی ای هرگز نمی تواند یک مسئله که تصمیم پذیر نیست (undecidable problem) را حل کند. کامپیوتر های کوانتومی نظریه چرچ-تورینگ را نقض نمی کنند.
این طور به نظر می رسد که تئوری های گرانش کوانتومی (quantum gravity) مانند تئوری M و یا چرخه گرانش کوانتومی (loop quantum gravity) می توانند به ما اجازه دهند که حتئ کامپیوترهای سریعتری نیز بسازیم.

منبع: سایت ویکی پدیا
مترجم: مهرداد تاجدینی 


کاربردهای کامپیوترهای کوانتومی

تجزیه یک عدد صحیح بسیار بزرگ که از ضرب دو یا چند عدد اول بزرگ بدست آمده است به عامل های اول آن از نظر محاسباتی غیر ممکن است (مثلا تجزیه عددی که از ضرب دو عدد اول 300 رقمی حاصل شده است به عامل های اولش). کارآمد ترین الگوریتم موجود پیچیدگی زمانی زیر نمایی (sub-exponential) دارد. یک کامپیوتر کوانتومی با استفاده از الگوریتم شُور (Shor's Algorithm) می تواند این مسئله را به صورت کارآمد حل کند.[الگوریتم shor یک الگوریتم کوانتومی با پیچیدگی زمانی چندجمله ای است، مترجم]
این قابلیت به کامپیوترهای کوانتومی اجازه می دهد تا بسیاری از سیستم های رمزنگاری که امروزه وجود دارند را بشکنند.
بسیاری از الگوریتم های کلید عمومی (Public Key) بر این اساس طراحی شده اند که تجزیه یک عدد صحیح بزرگ به عامل های اول آن (از نظر عملی) غیر ممکن است. الگوریتم رمزنگاری RSA یکی از این گونه الگوریتم ها است. این گونه الگوریتم ها در امن سازی وب و سرویس های ایمیل و همچنین تبادل اطلاعات بین سازمان های دولتی و نظامی کاربرد دارد.

به هر حال به نظر می رسد که همه الگوریتم های رمزنگاری شکسته نخواهد شد. بعضی از الگوریتم های کلید عمومی بر مبنای مسائل دیگری طراحی شده اند (مسائلی غیر از سخت بودن تجزیه اعداد صحیح بزرگ به عامل های اولشان). درنتیجه الگوریتم Shor برای اینگونه مسائل کمکی نخواهد کرد. مانند سیستم رمزنگاری McEliece که بر مبنای مسائل نظریه کد گذاری (Coding Theory) کار می کند.
سیستم های رمزنگاری بر مبنای لاتیس (Lattice based cryptosystems) نیز به نظر می رسد که شکسته نشوند زیرا هنوز یک الگوریتم با پیچیدگی زمانی چندجمله ای برای حل مسئله زیرگروه پنهان دوسطحی (Dihedral hidden subgroup) که می تواند باعث شکسته شدن بسیاری از سیستم های رمزنگاری بر مبنای لاتیس شود پیدا نشده است.

علاوه بر بحث تجزیه اعداد، با استفاده از کامپیوترهای کوانتومی می توان برای برخی از مسائل که در کامپیوترهای کلاسیک برای آنها الگوریتم با پیچیدگی زمانی چند جمله ای یافت نشده است، یک الگوریتم کوانتومی با پیچیدگی زمانی چند جمله ای ارائه کرد.
مشهورترین مثال در این مورد "جستجوی کوانتومی در پایگاه داده" است که از طریق الگوریتم Grover انجام می شود. [الگوریتم Grover یک الگوریتم کوانتومی است برای یافتن یک عنصر در یک پایگاه داده غیر مرتب. این الگوریتم دارای پیچیدگی زمانی O(N1/2 ) است. مترجم].
مدتی بعد ثابت شد که برای چندین مسئله دیگر در زمینه جستجو در پایگاه داده، الگوریتم های کوانتومی بهتر از الگوریتم های کلاسیک عمل می کنند.

به عنوان مثالی دیگر از کاربردهای کامپیوتر های کوانتومی، فرض کنید مسئله ای داریم که داری  ویژگی های زیر است:
  1. تنها راه برای حل مسئله این است که جواب را حدس بزنیم و سپس بررسی کنیم که آیا حدس ما درست بوده یا نه. (و این کار را با سرعت و به طور مکرر انجام دهیم)
  2.  n حالت مختلف برای بررسی کردن وجود داشته باشد (و جواب یکی از این n حالت باشد).
  3. بررسی هر حالت به یک زمان ثابت k نیاز داشته باشد.
  4. در مورد احتمال اینکه کدام حالت ممکن است جواب باشد نتوانیم حدسی بزنیم.

یک مثال برای اینگونه مسائل یک برنامه کرک کننده کلمه عبور (Password cracker) برای فایل های رمز شده است. برنامه کرک کننده باید تمامی کلمه های عبور را یک به یک بررسی کند تا کلمه عبور صحیح را بیابد. یک کامپیوتر کوانتومی می تواند با الگوریتمی کوانتومی با پیچیدگی زمانی O(n1/2 ) کلمه عبور فایل رمز شده را بیابد، که این یک افزایش سرعت بسیار زیاد نسبت به کامپیوترهای کلاسیک است و می تواند زمان جستجو برای کلمه عبور را از سال ها به ثانیه ها کاهش دهد. با استفاده از این الگوریتم ها می توان به الگوریتم های رمزنگاری با کلید متقارن (symmetric-key) مانند AES و Triple DES حمله ور شد.

از آنجایی که در شیمی و نانوتکنولوژی نیاز به شناخت سیستم های کوانتومی داریم و شبیه سازی اینگونه سیستم ها با کامپیوترهای کلاسیک به صورت کارآمد مقدور نیست، بسیاری بر این باورند که شبیه سازی کوانتومی (Quantum Simulation) از جمله مهمترین کاربردهای محاسبات کوانتومی خواهد بود.

در عمل پاره ای از مشکلات برای ساخت کامپیوترهای کوانتومی بر سر راه محققین وجود دارد.
آقای David DiVincenzo از شرکت IBM این موارد را برای ساخت یک کامپیوتر کوانتومی ضروری می داند:
  • ایجاد شرایط فیزیکی لازم برای افزایش تعداد کوبیت ها
  • توانایی مقداردهی اولیه به کوبیت ها
  • خواندن راحت مقدار کوبیت ها
  • یک مجموعه از گیت های کوانتومی جهانی

ادامه دارد...
منبع: سایت ویکی پدیا
مترجم: مهرداد تاجدینی 


یک کامپیوتر کوانتومی ماشینی است که از پدیده ها و قوانین فیزیک کوانتومی برای انجام محاسباتش استفاده می کند. پدیده هایی مانند برهم نهی (Superposition) و درهم تنیدگی (Entanglement).
کامپیوترهای کوانتومی با کامپیوترهای فعلی که با ترانزیستورها کار می کنند تفاوت اساسی دارند. ایده اصلی که در پس کامپیوترهای کوانتومی نهفته است این است که می توان از خواص و قوانین فیزیک کوانتوم برای ذخیره سازی و انجام عملیات روی داده ها استفاده کرد. یک مدل تئوریک و انتزاعی از این ماشین ها، ماشین تورینگ کوانتومی (Quantum Turing Machine) است که کامپیوتر کوانتومی جهانی (Universal Quantum Computer) نیز نامیده می شود.

اگر چه محاسبات کوانتومی تازه در ابتدای راه قرار دارد، اما آزمایش هایی انجام شده که در طی آنها عملیات محاسبات کوانتومی روی تعداد بسیار کمی از کوبیت ها اجرا شده است. تحقیقات نظری و عملی در این زمینه ادامه دارد و بسیاری از موسسات دولتی و نظامی از تحقیقات در زمینه کامپیوترهای کوانتومی چه برای اهداف غیرنظامی و چه برای اهداف امنیتی (مثل تجزیه و تحلیل رمز، Cryptanalysis) حمایت می کنند.
اگر کامپیوترهای کوانتومی در مقیاس بزرگ ساخته شوند، می توانند مسائل خاصی را با سرعت خیلی زیاد حل کنند (برای مثال الگوریتم شُور، Shor's Algorithm). البته باید توجه داشت که توابعی که توسط کامپیوترهای کلاسیک محاسبه پذیر (Computable) نیستند، توسط کامپیوترهای کوانتومی نیز محاسبه پذیر نخواهند بود. این کامپیوترها نظریه چرچ-تورینگ را رد نمی کنند. کامپیوتر های کوانتومی فقط برای ما سرعت بیشتر را به ارمغان می آورند.

مبانی کامپیترهای کوانتومی
حافظه یک کامپیوتر کلاسیک از بیت (Bit) ساخته شده است، به طوری که هر بیت می تواند یا 0 و یا 1 باشد. یک کامپیوتر کوانتومی یک دنباله از کوبیت ها (Quantom Bits) را نگهداری می کند. یک کوبیت می تواند مقادیر 0 ، 1 یا هر برهم نهی حاصل از این دو را داشته باشد [یعنی هر دو حالت 0 و 1 را به صورت هم زمان داشته باشد، مترجم]. بعلاوه، یک زوج از کوبیت ها می توانند در هر برهم نهی از 4 حالت قرار بگیرند و همینطور 3 کوبیت در هر برهم نهی از 8 حالت. در حالت کلی، یک کامپیوتر کوانتومی با n کوبیت می تواند در هر برهم نهی از 2n حالت به طور هم زمان قرار بگیرد(برخلاف کامپیوترهای کلاسیک که در هر لحظه فقط در یکی از این حالت ها می توانند قرار بگیرند).
یک کامپیوتر کوانتومی با استفاده از یک سری گیت های منطقی کوانتومی (Quantum Logic Gates) می تواند کوبیت ها را دستکاری کند. دنباله ای از گیت هایی که برای این منظور استفاده می شود را یک الگوریتم کوانتومی (Quantum Algorithm) می گویند.
یک مثال برای نحوه پیاده سازی کوبیت ها در کامپیوترهای کوانتومی، استفاده از ذراتی با دو حالت اسپینی بالا و پایین است. که معمولا با علامت های  و  ، یا  و نمایش داده می شوند. اما در واقع هر سیستمی که یک کمیت قابل مشاهده (observable quantity) داشته باشد به طوری که این کمیت با گذشت زمان تغییر نکند و حداقل دو مقدار ویژه (Eigenvalues) پشت سر هم و مجزا داشته باشد، کاندید مناسبی برای پیاده سازی یک کوبیت است. چنین سیستمی جوابگوی نیاز ما است زیرا میتواند به یک سیستم با اسپین 1/2- نگاشت شود.

ادامه دارد...

منبع: سایت ویکی پدیا
مترجم: مهرداد تاجدینی 


وزارت علوم لیست درس های رشته علوم کامپیوتر(در مقطع کارشناسی) را از تاریخ  1387/10/7 تغییر داده است. در برنامه آموزشی جدید خبری از درس های اصول مدیریت و فیزیک 2 نیست (فیزیک 1 و 2 با هم ادغام شده اند) و درس های جدیدی مثل ریاضیات مهندسی، رمزنگاری، شبکه های عصبی، سیستم های خبره و اصول سیستم های کامپیوتری 2 به لیست دروس اضافه شده اند.

فایل pdf مربوط به لیست دروس و سرفصل های هر درس که شورای برنامه ریزی آموزش عالی وزارت علوم در تاریخ 1387/10/7 تصویب کرده است را می توانید از طریق لینک زیر دانلود کنید.
در زیر لیست دروس را مشاهده می فرمایید.

دانلود لیست جدید دروس رشته علوم کامپیوتر و سرفصل های هر درس (حجم: 1 MB)
دانلود لیست قدیمی دروس رشته علوم کامپیوتر (حجم: 1.24 MB)


جدول 1- دروس عمومی
نام درس تعداد واحد
اندیشه اسلامی 1 2
اندیشه اسلامی 2 2
تربیت بدنی 1 1
تربیت بدنی 2 1
فارسی عمومی 3
زبان عمومی 3
تاریخ تحلیلی صدر اسلام 2
انقلاب اسلامی ایران 2
تفسیر موضوعی قران کریم 2
آیین زندگی 2
کنترل جمعیت و تنظیم خانواده 1
جمع 21 واحد
گذراندن 21 واحد از جدول 1 الزامی است.


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


جدول 3- دروس تخصصی اختیاری-الزامی
نام درس تعداد واحد
زبان های برنامه سازی 3
شبکه های کامپیوتری 3
زبان تخصصی 2
گرافیک کامپیوتری 3
کامپایلر 3
نظریه محاسبات 3
شبیه سازی کامپیوتری 3
تحلیل و طراحی سیستم 3
پروژه کارشناسی 3
جمع 26 واحد
گذراندن 17 واحد از جدول 3 الزامی است.


جدول 4- دروس تخصص اختیاری
نام درس تعداد واحد
رمزنگاری 3
برنامه ریزی غیر خطی 3
برنامه ریزی پویا 3
سیستم های صفی و مدل کارایی 3
مبانی اقتصاد 3
مهندسی اینترنت 3
سیستم های خبره 3
اصول طراحی نرم افزار 3
شبکه عصبی 3
معادلات دیفرانسیل با مشتقات جزئی 3
مبانی فناوری اطلاعات 3
مدیریت کنترل پروژه 3
کارآفرینی 2
جمع 38 واحد
گذراندن 15 واحد از جدول 4 الزامی است. 


دروس تخصصی گرایش محاسبات علمی
نام درس تعداد واحد
برنامه ریزی خطی 3
برنامه ریزی غیرخطی 3
نرم افزار ریاضی 3
آنالیز عددی 2 4
طراحی هندسی کامپیوتری 4
جمع 17 واحد


دروس تخصصی گرایش نظریه الگوریتمها
نام درس تعداد واحد
بهینه سازی ترکیبی و آنالیز شبکه ها 3
برنامه ریزی پویا 3
نظریه گراف 3
نظریه کدگذاری 3
سیستمهای صفی و مدلهای کارآیی 3
جمع 15 واحد


دروس تخصصی گرایش سخت افزار
نام درس تعداد واحد
مدارهای منطقی 3
 معماری کامپیوتر 3
ریزپردازنده 3
جمع 9 واحد


دروس تخصصی گرایش سیستمهای اطلاعاتی
نام درس تعداد واحد
تحلیل و طراحی سیستمهای اطلاعاتی 3
متدولوژی ساخت سیستمهای اطلاعاتی 3
مدیریت پروژههای نرم افزاری 3
سیستمهای اطلاعاتی مدیریت 3
جمع 12 واحد




در زیر شاخه های علوم کامپیوتر که به صورت موضوعی دسته بندی شده اند را ملاحظه می فرمایید. بعضی از این شاخه ها مباحث بین رشته ای هستند. مثلا کامپیوترهای کوانتومی یک دانش بین رشته ای است که حاصل تلفیق فیزیک کوانتومی و علوم کامپیوتر است.
این لیست ناقص است. لطفا اگر شاخه های بیشتری از رشته علوم کامپیوتر را می شناسید، اسم آنها را در بخش نظرات قید کنید تا آن ها را به لیست زیر اضافه کنم. متشکرم.
 
  • هوش مصنوعی (Artificial Intelligence)
    • شبکه های عصبی مصنوعی (Artificial Neural Networks)
    • بینایی ماشین (Machine Vision)
    • یادگیری ماشین (Machine Learning)
      • یادگیری تقویتی (Reinforcement Learning)
      • یادگیری احتمالی (Probabilistic Learning)
    • محاسبات نرم (Soft Computing)mputing)
    • داده کاوی (Data Mining)
      • داده کاوی متن (Text Mining)
      • داده کاوی وب (Web Mining)
    • محاسبات تکاملی (Evolutionary Computation)
    • هوش ازدحامی (Swarm Intelligence)
    • هوش اجتماعی (Social Intelligence)
    • حیات مصنوعی (Artificial Life)
    • نمایش دانش و استدلال (Knowledge Representation and Reasoning)
    • سیستم های خبره (Expert Systems)
    • ادراک ماشین (Machine Perception)
    • پردازش زبان های طبیعی (Natural Language Processing, NLP)
  • نظریه محاسبات (Theory Of Computations)
    • نظریه زبانها و ماشین ها (Formal Languages and Automata Theory)
    • نظریه محاسبه پذیری (Computability Theory)
    • نظریه پیچیدگی محاسباتی (Complexity Theory)
  • محاسبات علمی (Scientific Computing)
    • محاسبات نمادین (Symbolic Computation)
    • فیزیک محاسباتی (Computational Physics)
    • شیمی محاسباتی (Computational Chemistry)
    • بیوانفورماتیک (Bioinformatics)
  • کامپیوترهای کوانتومی (Quantum Computers)
    • رمزنگاری کوانتومی (Quantum Cryptography)
    • رمزنگاری پسا کوانتومی (Post-Quantum Cryptography)
    • محاسبات کوانتومی (Quantum Computing)
    • الگوریتم های کوانتومی (Quantum Algorithms)
    • ارتباطات کوانتومی (Quantum communications)
    • پیچیدگی محاسباتی کوانتومی (Quantum Computational Complexity)
    • برنامه نویسی کوانتومی (Quantum Programming)
  • الگوریتم ها و ساختمان داده ها (Algorithms and Data Structures)
    • الگوریتم های موازی (Parallel Algorithms)
    • الگوریتم های توزیع شده (Distributed Algorithms)
    • پیچیدگی زمان و حافظه الگوریتم ها (Time and Space Complexity)
    • الگوریتم های قطعی و غیرقطعی (Deterministic and non-Deterministic Algorithms)
    • کاهش (Reduction)
    • ساختمان داده ها (Data Structures)
    • الگوریتم های تقسیم و غلبه (Divide and Conquer)
    • برنامه نویسی پویا (Dynamic programming)
    • روش های حریص (Greedy Methods)
    • برنامه نویسی خطی (Linear Programming)
    • الگوریتم های بازگشت به عقب (Backtracking)
    • الگوریتم های شاخه و حد (Branch and Bound)
  • رمزنگاری (Cryptography)
    • رمزنگاری بصری (Visual Cryptography)
    • پنهان نگاری (Steganography)
    • رمزنگاری کلید متقارن (Symmetric-key Cryptography)
    • رمزنگاری کلید عمومی (Public-key Cryptography)
    • رمزنگاری کوانتومی (Quantum Cryptography)
  • زبان های برنامه نویسی و کامپایلرها (Programming Languages and Compilers)
    • تئوری کامپایلرها (Compiler Theory)
    • تئوری زبان های برنامه نویسی (Programming Language Theory)
  • معماری کامپیوتر
    • منطق دودویی (Binary Logic)
    • طراحی مدارهای دیجیتالی (Digital Design)
    • سیستم های توزیع شده (Distributed Systems)
  • هندسه محاسباتی (Computational Geometry)
  • تئوری پایگاه داده (Database Theory)


  • طراحی مدارات VLSI
    Operating Systems
    کلمه VLSI از حروف اول Very Larg Scale Integration گرفته شده که به معنی "مجتمع سازی در مقیاس بسیار زیاد" است. طراحی مدارات VLSI شاخه ای از مهندسی کامپیوتر است که هدف آن ساخت مدارهای مجتمع (IC) بسیار پیچیده است.
    در ابتدا مدارهای مجتمع بسیار ساده بودند، یک IC معمولا شامل دهها ترانزیستور، مقاومت، دیود و خازن بود و این قطعات در مدارات دیجیتالی به نحوی به هم متصل می شدند تا عملکرد گیت های منطقی را شبیه سازی کنند و حاصل کار یک IC با دهها گیت منطقی بود. این مدارات به مدارهای SSI (مجتمع سازی در مقیاس کوچک، Small Scale Integration)  معروف هستند.
    با پیشرفت تکنولوژی تعداد گیت های این مدارها افزایش یافت و به صدها گیت در هر IC رسید. به این مدارها MSI (مجتمع سازی در مقیاس متوسط، Medium Scale Integration) می گویند. این مدارها حاوی دیکدرها، اینکدرها، جمع کننده ها و ... بودند.
    نتیجه پیشرفت های بعدی مدارهای LSI بود (مجتمع سازی در مقیاس زیاد، Large Scale Integration).این مدارها شامل دهها هزار گیت بودند.
    با پیشرفت تکنولوژی بکار رفته در طراحی و ساخت مدارات مجتمع، امروزه شاهد نسل جدیدی از مدارهای مجتمع به نام مدارهای VLSI (مجتمع سازی در مقیاس بسیار زیاد، Very Large Scale Integration) هستیم. این مدارها شامل میلیون ها گیت منطقی هستند. پردازنده های امروزی در دسته تراشه های VLSI قرار دارند.
    در طراحی مدارات VLSI با مشکلات زیادی روبرو هستیم، مشکلاتی از قبیل:
    • تاخیرات مدار
      مدارهای بسیار بزرگ و پیچیده که در فرکانس های بالا کار می کنند با یک مشکل اساسی روبرو هستند و آن مشکل تاخیر در انتشار سیگنال در گیت ها است. هر چه تعداد گیت ها افزایش یابد تاخیر هم افزایش می یابد و این یک مانع جدی برای رسیدن به سرعت بیشتر است.
    • مصرف انرژی و تولید گرمامشکل دیگر مدارهایی که در فرکانس های بالا کار می کنند، افزایش مصرف انرژی است. با افزایش مصرف انرژی، اتلاف انرژی نیز بیشتر می شود که نتیجه آن تولید گرمای بیشتر است و همانطور که می دانید گرما دشمن شماره یک قطعات الکترونیک است.
    • نحوه طراحی مدارهای VLSIبا پیچیده تر شدن عملکرد تراشه های VLSI، ساختمان داخلی آن ها نیز پیچیده تر می شود. نحوه اتصال گیت ها به هم(که باید به بهینه ترین روش ممکن صورت بگیرد) و نحوه قرار گرفتن این گیت ها در تراشه، از جمله چالش های طراحی این گونه مدارات است.

    البته طراحی مدارات VLSI صرفا به مهندسی کامپیوتر مربوط نمی شود بلکه این کار حاصل تلفیق مهندسی کامپیوتر و مهندسی برق است و در واقع یک بحث میان رشته ای است.   
    Question Mark
    چرا ساخت مدارهای VLSI یک کار مهندسی است؟
    در طراحی مدارات VLSI با مباحث زیادی روبرو می شویم. مرحله اول طراحی مدار است، سپس باید به طراحی مدار به صورت فیزیکی بیاندیشیم و موانع کار را نیز در نظر داشته باشیم. همچنین باید به مقرون به صرفه بودن روش های تولید نیز توجه داشته باشیم. مجموعه همه این کارها یک فرآیند مهندسی است.
  • ساخت سیستم های مدیریت پایگاه داده (DBMS)
    سیستم های مدیریت پایگاه داده (DataBase Managment Systems)  وظیفه دارند حجم انبوهی از داده ها را به صورت کارآمد ذخیره و بازیابی کنند (در بحث پایگاه داده، در اغلب موارد منظور از کلمه کارآمد یعنی اینکه فرایند ذخیره و بازیابی اطلاعات با سرعت بیشتری انجام شود). طراحی و ساخت سیستم های مدیریت پایگاه داده (DBMS) نیازمند داشتن دانش در زمینه ذخیره و بازیابی اطلاعات و ساختمان داده ها است.
    Question Mark
    چرا ساخت DBMS یک کار مهندسی است؟
    به طور کلی اساس کار یک DBMS را ساختمان داده های کارا و سریع تشکیل می دهد(ساختمان داده هایی مثل درخت های B-Tree و جدول های درهم سازی). مهندسین کامپیوتر با استفاده از این ساختمان داده ها می تواند سیستم های مدیریت پایگاه داده را طراحی کنند.  پس طراحی DBMS یک کار مهندسی است.
    مباحث دیگری نیز مانند امنیت (Security) و جامعیت داده ها (Data Integrity) در طراحی DBMS ها مطرح می شود که البته آنها نیز در حوزه مباحث مهندسی کامپیوتر به شمار می آیند.
  • مهندسی نرم افزار (Software Engineering)
    واژه "مهندسی نرم افزار" در بین عامه مردم یک معنی دارد و در بین متخصصین رشته های کامپیوتری یک معنی دیگر!
    عموم مردم مباحث کامپیوتری را به دو دسته کلی تقسیم می کنند. سخت افزار و نرم افزار. هر آنچه که به سخت افزار سیستم مربوط می شود را مرتبط با گرایش سخت افزار می دانند و هرآنچه که به نرم افزارهای کامپیوتری مربوط می شود را مرتبط با گرایش نرم افزار می دانند.
    این تعریف "مهندسی نر افزار" از دیدگاه عموم مردم است (تعریف عام).
    ولی یک تعریف دیگر از واژه "مهندسی نرم افزار" وجود دارد که متخصصین کامپیوتر از آن استفاده می کنند و در واقع تعریف درست و اصولی واژه "مهندسی نرم افزار" است (تعرف خاص).
     
    انجمن مهندسی نرم افزار در نهاد بین المللی IEEE ، مهندسی نرم افزار را اینگونه تعریف می کند:
    "به کار بستن روش های سیستماتیک، منظم و قابل اندازه گیری برای توسعه و عملیاتی کردن و حفظ و نگهداری نرم افزار و همچنین مطالعه و توسعه این روش ها"

    با یک مثال معنای این تعریف روشن تر می شود.
    فرض کنید شما یک تیم 20 نفره از برنامه نویسان حرفه ای دارید و یکی از سازمان های بزرگ دولتی به شما پیشنهاد می دهد که یک نرم افزار خاص و مهم را برایشان بسازید و شما هم قبول می کنید.
    خوب امروز روز اول کار است! چه کار می کنید؟ آیا مستقیما شروع به برنامه نویسی می کنید؟ اگر مستقیما شروع به برنامه نویسی کنید، به احتمال بسیار زیاد شکست می خورید! (برنامه نویسان با تجربه به خوبی این موضوع  را درک می کنند!)پروژه را چه  طور بین اعضای تیم تقسیم می کنید؟ در واقع چطور مشخص می کنید چه کسی چه کاری را انجام دهد؟ با استفاده از چه روش هایی می توانید بفهمید که این سازمان از شما دقیقا چه نرم افزاری می خواهد؟  نرم افزار را چگونه طراحی می کنید؟ (طراحی  نرم افزار با برنامه نویسی آن فرق دارد).  در طراحی چه نکاتی را رعایت می کنید که این نرم افزار در آینده به راحتی قابل به روز رسانی باشد؟(بحث حفظ و نگهداری نرم افزار) و بسیاری سوال های مهم دیگر.

    هدف مهندسی نرم افزار (یا در واقع، مهندسی کردن فرآیند تولید نرم افزار) این است که دانش و فعالیت های شما را برای رسیدن به یک نرم افزار با کیفیت جهت دهی کند. یعنی مراحل ساخت و توسعه نرم افزار را مشخص می کند.


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

  • سیستم عامل
    Operating Systems
    سیستم عامل نرم افزاری است که وظیفه آن ایجاد ارتباط بین کاربر و سخت افزار کامپیوتر است. در واقع کاربر به واسطه سیستم عامل می تواند سخت افزار سیستم را وادار به انجام کاری بکند. سیستم عامل ها وظایف گوناگونی دارند و طراحی و ساخت آنها نیاز به دانش بالا در زمینه سخت افزار و مباحث مختلف نرم افزاری دارد.
    از جمله وظایف سیستم عامل می توان به مدیریت حافظه، مدیریت I/O، زمانبندی پروسه ها، پیاده سازی سیستم فایل و ایجاد امنیت (به طور کلی) اشاره کرد. البته سیستم عامل های امروزی در کنار این وظایف اصلی که ذکر شد خود را ملزم به ارائه خدمات بیشتر به کاربران کرده اند. خدماتی مانند ایجاد یک واسط کاربری مناسب (مثلا یک واسط کابری گرافیکی، GUI) ، امکان ارتباط با بقیه کامپیوترها از طریق شبکه، پخش فایل های چند رسانه ای و... از جمله این خدمات است.
    Question Mark
    چرا ساخت سیستم عامل یک کار مهندسی است؟
    چون برای ساخت سیستم عامل از مباحث مختلف علوم کامپیوتر استفاده می کنیم. سیستم عامل یک علم نیست بلکه یک محصول است که حاصل تلفیق مباحث مختلف است. برای مثال در سیستم عامل ها برای پیاده سازی سیستم فایل از مباحث ساختمان داده ها استفاده می شود، برای ارتباطات شبکه از پروتکل های از پیش تعریف شده شبکه استفاده می شود. برای مدیریت حافظه از الگوریتم های مدیریت حافظه یا روش های ابتکاری استفاده می شود و... . پیاده سازی هر کدام از این وظایف یک کار مهندسی است.
  • شبکه
    شبکه نیز یکی دیگر از مباحث مهندسی کامپیوتر است. مبحث شبکه به طور کلی به 2 دسته تقسیم می شود.
    Operating Systems
    1. سخت افزارهای مورد نیاز شبکه
    2. نرم افزار نرم افزار شبکه

    ساخت سخت افزارهای مورد نیاز شبکه بیشتر به مهندسی برق (گرایش های الکترونیک و مخابرات) مربوط می شود ولی ساخت نرم افزارهای شبکه به عهده مهندسین کامپیوتر است. امروزه تقریبا همه سیستم عامل ها امکانات نرم افزاری برای ارتباط با شبکه های کامپیوتری را به صورت توکار دارند و در اکثر موارد نیاز به نصب برنامه جدیدی نیست. برای ساخت نرم افزارهای شبکه با موضوعات زیادی سروکار داریم، از قبیل آدرس دهی در شبکه، مسیریابی، کشف خطا، ارائه سرویس های کاربردی به کاربران (مانند  FTP, TelNet, WEB ) و ... .
    Question Mark
    چرا طراحی و ساخت شبکه های کامپیوتری یک کار مهندسی است؟
    زیرا:
    1. ساخت تجهیزات سخت افزاری شبکه به طور عمده به عهده مهندسین برق است. پس در بعد سخت افزار یک کار مهندسی است.
    2. برای طراحی و ساخت نرم افزارهای شبکه 2 کار باید انجام دهیم:
      • تعریف پروتکل های جهانی
        تعریف پروتکل های جهانی یعنی اینکه شرکت هایی که در سرتاسر دنیا تجهیزات سخت افزاری یا نرم افزاری برای شبکه های کامپیوتری تولید می کنند،محصولات خود را به گونه ای بسازند که از یک سری قوانین واحد و بین الملی برای ارتباطاتشان استفاده کنند (تا به اینصورت تمام کامپیوترهای دنیا زبان یکدیگر را بفهمند و بتوانند با هم ارتباط برقرار کنند). تعریف پروتکل ها با یک دید مهندسی انجام می شود.
      • استفاده از روش ها و الگوریتم های موجود برای طراحی نرم افزارهای شبکه
        در این قسمت از کار، هم از مباحث علوم کامپیوتر استفاده می شود (مثلا برای مسیریابی از الگوریتم دایجکسترا استفاده می شود) و هم از روش های ابتکاری برای حل مشکلات مختلف بهره می جوییم.

    در کل چیزی به نام "علم شبکه" نداریم و شبکه یک بحث کاملا مهندسی است.

ادامه دارد...



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

اصولا در هر رشته مهندسی ، کار مهندس به همین صورت است که ذکر شد. یعنی مهندس از علوم رشته های دیگر استفاده می کند و سعی در ایجاد تکنولوژی و دستگاه های جدید دارد.

به عنوان مثال رشته مهندسی مکانیک را در نظر بگیرید. وظیفه یک مهندس مکانیک چیست؟ یک مهندس مکانیک باید بتواند با استفاده از قوانین علم فیزیک، ابزار آلات و دستگاه های مکانیکی را طراحی کند و سپس بسازد. ولی آیا کشف قوانین فیزیک هم وظیفه مهندس مکانیک است؟ البته که نه! مهندس باید بتواند علوم مختلف را با هم ترکیب کند و از آنها در صنعت استفاده کند ولی پیشبرد علم وظیفه مهندس نیست. در کامپیوتر هم دقیقا چنین چیزی صادق است. علم در رشته علوم کامپیوتر تولید می شود و مهندس کامپیوتر از آن در صنعت استفاده می کند.



البته این موضوع به این معنا نیست که از یک Computer Scientist در صنعت استفاده نمی شود یا یک مهندس حق ندارد چیزی به علم اضافه کند! هیچ کس چنین قانونی را وضع نکرده است! هر کدام از این رشته ها هدف خاص خودش را دنبال می کند. امروزه شرکت های بزرگ کامپیوتری دنیا نیاز به متخصصین هر دو رشته دارند، هم علوم کامپیوتر (Computer Science) و هم مهندسی کامپیوتر (Computer Engineering).

در قسمت بعد درباره مباحث مطرح در مهندسی کامپیوتر خواهم نوشت.