محمد امین خشخاشی‌مقدم
محمد امین خشخاشی‌مقدم
خواندن ۴ دقیقه·۷ سال پیش

کار در کنار تحصیل - قسمت ۲ - چرا باید درس بخونیم؟

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

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


ساختمان داده و طراحی الگوریتم

مسئله: می‌خوایم برای سرچ دیوار Query Prediction داشته باشیم، یعنی مثلاً اگر کاربر دو حرف «مو» رو وارد کرد بهش دو کلمه «موبایل» و «موتور» رو پیشنهاد بدیم.
جواب: می‌تونیم از یک Trie استفاده بکنیم. کافیه به ازای هر گره درختمون بدونیم که پراستفاده ترین گره توی زیردرختش چیه و اونها رو پیشنهاد بدیم.


آمار و احتمال مهندسی

مسئله: می‌خوایم بر اساس یه کلمه‌ای که کاربر وارد می‌کنه بهش یه دسته بندی رو پیشنهاد بدهیم. مثلاً کلمه خانه رو که می‌نویسه بهش پیشنهاد بدیم که بره تو دسته‌بندی املاک.
جواب: کافی هستش که احتمال وجود اون کلمه داخل یک آگهی دیوار به شرط این که داخل اون دسته بندی‌باشه رو حساب بکنیم و ببینیم که این احتمال زیاد هستش یا نه. برای این کار از قانون بیز می‌شه استفاده کرد.


بازیابی پیشرفته اطلاعات

مسئله: می‌خوایم جستجوی آگهی‌هامون رو بهبود بدیم. اصلاً بهبود دادنش یعنی چی؟ از کجا بفهمیم داریم آگهی‌های خوبی رو به کاربر نمایش می‌دیم؟ از کجا بدونیم داریم تمام آگهی‌های مرتبط رو نمایش می‌دیم؟جواب: کافیه از تکنیک‌های رایجی مثل Normalization و Lemmatization برای بهبود جستجو استفاده کنیم. معیارهای Precission و Recall معیارهایی برای اندازه‌گیری کیفیت جستجو هستند که شما توی این درس باهاش آشنا می‌شید.


پایگاه داده

مسئله: آگهی‌های دیوار توی دسته‌بندی‌های مختلف، فیلد‌های مختلفی دارند. مثلاً آگهی‌های املاک متراژ دارند، آگهی‌های خودرو میزان کارکرد دارند و گوشی‌های موبایل برند دارند. حالا اگر بخوایم این‌ها رو توی دیتابیس ذخیره کنیم چیکار کنیم؟ یه ستون بگیریم که گاهی‌اوقات ممکنه مقدارش خالی باشه یا آگهی‌ها رو توی جداول مختلف ذخیره کنیم؟
جواب: همه‌ی این تکنیک‌ها توی درس پایگاه داده بررسی می‌شه و این که آیا Normalize کردن جدول به سربارش می‌ارزه یا نه، چقدر باید data redundancy داشته باشیم تا سرعت پاسخمون قابل قبول باشه و این که اصلاً چه مدل پایگاه‌داده‌ای به دردمون می‌خوره رو توی این درس یاد می‌گیرید.


سیستم عامل

مسئله: هر پراسس جانگو که میاد بالا چندصد مگابایت حجم می‌گیره. حالا اگر بخوایم به درخواست‌ها موازی جواب بدیم چجوری می‌تونیم صدها پراسس جانگو بیاریم بالا؟ برای این که دیتاهای مهم کاربران نپره بهتره که از چه RAID ای استفاده بکنم؟ چرا فلان قسمت سیستم کند شده، آیا مشکل از هارد دیسکه، یا CPU Usage مون زیاده، یا مشکلات شبکه‌ای داریم؟
جواب: فرق پراسس و ریسه (thread) و این که از کدوم کجا می‌شه استفاده کرد، در مورد file systemها و تمامی این مفاهیم پایه‌ رو در در درس سیستم عامل یاد خواهید گرفت.


شبکه

مسئله: تعداد کاربران خیلی زیاد شدند و بعضی‌هاشون نمی‌تونن به سرور وصل بشن. چه کنیم؟!
جواب: می‌تونید با تنظیمات شبکه سیستم عامل بازی کنید، نذارید کسی زیاد کانکشن باز نگه داره به سیستم. می‌تونید در لایه DNS بار رو روی چندین سرور توزیع کنید. می‌تونید caching ایجاد کنید تا به درخواست‌ها سریعتر پاسخ داده بشه و کلی تکنیک دیگه که تو درس شبکه یاد خواهید گرفت.


برنامه‌نویسی پیشرفته

مسئله: می‌خوایم تمیز کد بزنیم!
جواب: خوبه که با تکنیک‌های refactoring و تمیز کد زدن آشنا باشیم و یه شهودی از شیءگرایی هم داشته باشیم.

لزوماً تمامی درس‌ها اینقدر نمود مستقیمی در کار صنعتی ندارند اما به نظرم اکثرشون به آدم ایده می‌دن. مثلاً اولین بار تو درس معماری کامپیوتر در مورد LRU Cache صحبت می‌شه و دقیقاً همون مفاهیم caching رو در سمت نرم‌افزار هم داریم. از معدود درس‌هایی که خیلی کم استفاده شدند به نظرم می‌شه محاسبات عددی و مبانی مدارهای الکتریکی و الکترونیکی رو نام برد!

شاید اساتید درس‌ها رو خوب ارائه نکنند، شاید درس تمارین خوبی نداشته باشه اما خود مفاهیم درس قطعاً ارزشمند هستند. سیلابس اکثر دانشگاه‌ها همینه و اگر به دانشگاه خودتون اعتماد ندارید به سیلابس‌ ACMاعتماد کنید! یکی از بهترین فواید دانشگاه این هستش که شما رو مجبور می‌کنه تمامی این دروس رو بخونید، پس لطفاً سعی نکنید که تنها کاری که باید در دانشگاه انجام بدید رو هم بپیچونید!

شاید از این پست‌ها خوشتان بیاید