وبلاگِ آریان

Should we go to university to become a programmer

برای برنامه نویس شدن دانشگاه بریم؟

چیزایی که تو دانشگاه یاد میدن بدرد بازار نمیخوره. تو این پست قراره توضیح بدم درس های مهندسی کامپیوتر دقیقا چه ارتباطی با بازارکار دارن

دانشگاه و مهندسی کامپیوتر چیه! بجاش بشین یوتیوب و کورس ببین!
۴ سال میری درس بخونی برنامه نویسی یاد بگیری؟! کورس پایتون جادی رو بخر ۲ ماهه برنامه ‌نویس شو!

آیا بدون دانشگاه، میشه برنامه نویسی یاد گرفت؟


بله.برنامه ‌نویسی «یکی» از دروسی هست که شما در دانشگاه یاد میگیرید (مبانی برنامه‌سازی و برنامه ‌نویسی پیشرفته) ولی هدف دانشگاه و رشته مهندسی کامپیوتر، تحویل برنامه ‌نویس به جامعه «نیست» بلکه تربیت «مهندس نرم‌افزار» هست.

فرق مهندس نرم‌افزار با برنامه نویس چی هست؟


برنامه نویس، صرفا با مهارتی که روی یک یا چند ابزار داره میتونه سیستمی رو برنامه‌ریزی کنه. مثلا یه اپ اندروید بسازه.اما مهندس نرم‌افزار ، برنامه‌ نویسی هست که میتونه یک سیستم رو از صفر «طراحی» ، «اجرا» و «نگه‌داری» کنه اگه بخوام مثال بزنم، مهندس نرم‌افزار مثل طراح یک ساختمون هست، ولی برنامه نویس، مثل پیمانکاری هست که وظیفه پیاده‌سازی اون طرح رو داره
همه مهندس‌های نرم افزار، از برنامه ‌نویسی شروع کردند و یاد گرفتند. چون تا کد نزده باشن محدودیت های سیستم رو درک نمیکنن و تبدیل به طراح نمیشن.

چطور میشه مهندس نرم‌افزار شد؟

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

پس بقیه درس‌ها چی میگن!؟


تو ادامه این پست، با بررسی درس‌های تخصصی رشته کامپیوتر، ارتباطشون رو با تخصص‌های موردنیاز بازار براتون توضیح میدم.
کلا دانشگاه مثل دبیرستان نیست مو به مو بهتون همه چیو بگه. راه رو بهتون نشون میده و ادامه‌اش با خودتونه… .

بریم سراغ درسها…

رشته مهندسی کامپیوتر کلا ۱۴۶ واحد هست. در کل ۸۴ واحد تخصصی و پایه و ۱۵ واحد اختیاری. بغیر از درسهای پایه (۲۱ واحد ریاضیات و غیره)، ۲۶ واحد دروس عمومی داریم که جز زبان انگلیسی و ادبیات بقیه‌اش بولشت محضه.
و حالا درسها و کاربردشون و چطور باید خودتونو برای بازارکار اماده کنید:

درس «مبانی کامپیوتر و برنامه‌سازی»


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

  • مقدمات رو یاد گرفتید حتما زبانی مثل پایتون رو استارت بزنید.

درس «برنامه سازی پیشرفته»


یکی از مهمترین و مرتبط‌ترین درسها با بازارکار. توی این دوره با یک زبان شئی‌گرا آشنا میشید و OOP رو یاد میگیرید.

  • برای موفقیت، حتما شئی‌گرایی رو درک کنید. اگه خیلی علاقمند بودید درباره OOD و OOA هم بخونید و اینکه چطور میشه یک story رو تبدیل به کد کرد.

درس «ساختمان گسسته»


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

  • درباره رمزنگاری و الگوریتمهاش تحقیق کنید کاربرد این درس رو میفهمید!

درس «زبان ماشین و اسمبلی»


این درس باعث میشه شما بتونید اتفاقاتی که برای کد سطح بالاتون میفته رو بفهمید. بعد کامپایل هر کدی، به زبان ماشین تبدیل میشه.
همچنین برای برنامه ‌نویسی cpu و میکروکنترلرها دونستن این درس نعمته.

  • برد رزبری‌پای بگیرید معماریشو درک کنید و براش کد بنویسید

درس «ساختمان داده»


خمیرمایه اولیه تمام مفاهیمی هست که قراره هرروز ازشون استفاده کنید: مثل array، queue، stack، tree، linked list…
الگوریتم sort و search بنویسید و با Redisهم کار کنید: دیتا تایپ های ردیس رو کامل یاد بگیرید هم تخصص بازاره هم کامل این درس رو میفهمید

درس «زبان تخصصی»


فرق یه مهندس نرم افزار عالی با معمولی اینه که اولی متن زبان اصلی رو میتونه مثل زبان مادریش بخونه و درک کنه!

  • یه کتابی مثل clean code یا clean architecture رو بشینید کامل بخونید! هم زبانتون خوب میشه هم بدرد میخوره یچیزی به دانش برنامه ‌نویسی شما اضافه میکنه!

درسهای «مدار الکتریکی» و «مدار منطقی»


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

  • دنبال آزمایشگاه رباتیک دانشگاهتون برید و با بچه هاشون رفیق شید!! ببینید چطور بردهارو دیزاین میکنن

درس «ریاضیات مهندسی» و «معماری کامپیوتر»


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

  • کاربردش تو طراحی و محاسبات مدار هست و از معماری کامپیوتر هم تو طراحی کامپایلرها، زبان‌های برنامه نویسی و سیستم عامل استفاده میشه

درس «طراحی الگوریتم»

اگه درس ساختمان داده و گسسته رو مسلط باشید و چیزایی که براشون گفتمو انجام بدید، این درس جزو شیرین‌ترین درسهاتون میشه چون همه اون مفاهیمو کاملتر براتون مرور میشه!

  • تو سایت HackerRank عضو شید! یه نگاهی هم به pytorch بندازید و درباره ماشین لرنینگ بخونید.

درس «سیستم عامل»


با مفاهیم thread، concurrency ، scheduler ، کرنل و.. آشنا میشید.
بعنوان یه برنامه نویس باید بدونید سیستم عاملی که قراره کدتونو اجرا کنه چطور کار میکنه.

  • لینوکس رو یاد بگیرید! این درس میتونه به شما دید بده که مثلا تو ترافیک بالا چه بلایی سر اپ پایتونتون میاد!

درس «شبکه های کامپیوتری»


جهان ما برروی شبکه ساخته شده. از موبایل تا وایفای، اینترنت، سرورها.

  • درباره پروتکل های شبکه مخصوصا http بخونید. بدونید متن RFC چی هست. یک کتاب network+ مطالعه کنید و یک وب سرور nginx روی لینوکس بالا بیارید و مفهوم پورت و ip و فایروال رو درک کنید.

درس «طراحی کامپایلر»


این درس کلا درباره optimization هست. شاید بگید به چه دردی میخوره! اما دیدی که تو این درس باید دنبالش باشید اینه که تا میتونید کدهاتون رو برای سیستم عامل بهینه کنید.

  • ماشین حالت (state machine) رو کامل درک کنید. تو تحلیل سیستم های نرم افزاری کمک بزرگیه.
    درس «پایگاه داده»
    همه دیتای نرم افزارها روی دیتابیس ذخیره میشن. تو این درس تحلیل دیتابیس رو یاد میگیرید.
  • یک دیتابیس رابطه‌ای مثل MariaDB یا PostgreSQL رو نصب کنید. ERD یک سیستم نرم افزاری نظیر دفترچه تلفن رو طراحی و بعد با یکی از این دیتابیسها پیاده سازی کنید.

درس « مهندسی نرم افزار »


درباره متدولوژی‌های پیاده سازی نرم افزار صحبت میکنه. تو این درس یاد میگیرید چطور یه پروژه رو پلن کنید و از چطور اجراش کنید. همه میتونن اسکریپت بنویسن ولی نرم افزار نوشتن اینطوری نیست! کار این درس آموزش این مهارت به شماست!

  • درباره scrum و kanban و eXtreme Programming از شرکتای خوب پرس و جو کنید و بفهمید چجوری پلن میریزن.
  • اون دفترچه تلفنی که طراحی دیتابیسش رو انجام دادید رو شروع به کدنویسی کنید و یه RESTful API براش بنویسید!
  • شروع به کد خوندن کنید! گیت‌هاب بهترین دوست شماست!

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

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

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

اینو هم اضافه کنم که اگه شما فقط «برنامه نویس» باشید و صرفا با نداشتن دید مهندسی، یه زبان رو یاد بگیرید، خودتونو محدود به یک ابزار کردید.
مهندس نرم افزار دید بازتری داره و براساس نیاز، ابزارشو انتخاب میکنه! از برد سخت افزاری تا اپ موبایل میتونه دیزاین کنه چون مفاهیمو مسلطه.

منبع

خب راستش من این مطلب رو توی توویتر دیدم و چون خودم هم کنکوری هستم واقعا به نظرم خوب اومد و نسبتا مطلب کاملی بود.

ممنون که این پست رو هم خوندین :))

آریان

تصویر آریان عمرانی

آریان عمرانی

برنامه نویس و گیک عاشق ساختن