مسیر پیشنهادی من برای یک دانشجوی سال اولی مهندسی کامپیوتر

۹۶۱۱۳۰/۱سلامیکی از دوستان ترم ۲ هستن (یعنی این ترم برنامه‌نویسی پیشرفته دارن که با زبان سی پلاس پلاس تدریس میشه) و بین زبان‌های جاوا و پایتون هم موندن کدوم رو انتخاب کننعلاوه بر این اون جوری که به من توضیح داد همزمان سعی داره لینوکس رو هم خیلی دقیق و حرفه‌ای یاد بگیره.خب اینا همه خوبه! خیلی عالیه که سعی داری مهارت‌های مختلف (و لازم) رو هر چه زودتر یاد بگیری. این روز‌ها یه مهندس کامپیوتر باید تقریبا از همه چیز سر در بیاره! حداقل تو مملکت ما که این جوریه.به علاوه اگه قرار باشه یه «مهندس» واقعی باشی و سیستم طراحی کنی باید از سطوح خیلی پایین کامپیوتر رو درک کنی تا سطوح خیلی انتزاعی و مرتبط با سناریویی که سیستم برای اون طراحی شده.اما..خودتون رو شقه شقه نکنین! چون فایده نداره.با این که راجع به مطالب مختلفی که به گوشتون میخوره از مبتدی‌ترین تا trendترین مباحث خیلی موافقم چون واقعا دید شما رو باز می‌کنه و اطلاعات عمومی خوبی بهتون میده ولی در حد مطالعه‌ی WIKI باشه کافیه! نه این که هر چیزی که به گوشتون میخوره و کسی بهتون میگه مهمه رو بلافاصله شروع کنین یادگرفتن و وارد لایه‌های عمیقش شدن و در نهایت هم رها کردن نیمه‌کاره..پس در کنار این که مطالعات وسیعتون رو در حد سطحی نگه میدارین (برای جلوگیری از این شاخه اون شاخه پریدن) در آن واحد فقط رو یک یا نهایتا دو چیز تمرکز کنین و ببریدشون جلو! وگرنه به هیچ کدومشون نمیرسینراستی جالبه بدونین که WIKI مخفف What I Know Is است و صراحتا به شما این رو اعلام می‌کنه که متنی که داری میخونین به صورت community-based تهیه و تدوین شده و اگرچه میتونه معتبر و به‌دردبخور باشه اما لزوما از کیفیت‌های لازم برخوردار نیست.اما نکته‌ی جالب اینه که از وقتی که تفکر Community-based وارد انتقال علم و دانش و تجربیات و نهایتا صنعت شد، سرعت پیشرفت دنیا چند برابر شد. پسمال خودمه و نمیخوام بقیه یاد بگیرن و در انحصار خودمه دیگه دورانش سر اومده!در مورد اون دوست عزیزمون باید بگم که:تجربه‌ی شخصی من اینه که اگه قراره به طور دقیق لمس کنی که نرم‌افزار چه جوری کار می‌کنه و کورکورانه شروع به توسعه‌ی نرم‌افزار نکنی و تحمل سختی‌ها رو داری، بهتره بعد از C/C++ بری سراغ یه زبانی که زیاد راحت نباشه کار باهاش، خصوصا زبانی که در لایه‌های مختلف اجازه‌ی برنامه‌نویسی به ما بده و به زبان‌های C/C++ هم نزدیک باشه.صریح‌تر بگم عقیده‌ی من اینه که بعد از C++ خیلی خوبه که مدتی Java یا C# کار کنی تا مجبور بشی خیلی چیزا رو یاد بگیری. ولی این مسیر برای افراد دل‌نازک توصیه نمیشه. چون productivity پایین‌تری نسبت به سایر زبان‌ها دارن و ناایمد کننده هستن.طبیعتا بعد از این که به اندازه‌ی لازم کار با یکی از این دو زبان رو یادگرفتی پیشنهاد می‌کنم بری سراغ کار با پایگاه‌داده‌های مبتنی بر SQL (رابطه‌ای)از این جا به بعد میتونی تصمیم بگیری که میخوای روی چه پلتفورمی کار کنی. توسعه‌دهنده‌ی چی میخوای بشی و شاید لازم باشه زبانت رو عوض کنی که قطعا یکی از بهترین‌ انتخاب پایتونه که بدون درد و خونریزی باهاش همه کاری میشه کرد. حتی اگر طرف رشته‌اش کامپیوتر هم نبوده باشه و تو عمرش برنامه‌نویسی نکرده باشه میتونه خیلی زود باهاش کارهای تحقیقاتی و صنعتی انجام بده.قطعا یادگیری شبکه هم خیلی مهمه خصوصا وقتی که قرار باشه اپلیکیشنی توسعه داده بشه که روی اینترنت یا یه شبکه‌ی داخلی میخواد کار کنه.طبیعتا یادگیری Git این روزا الزامیه!و همچنین توصیه می‌کنم حتما حتی اگر قصد توسعه وب هم ندارین یه مدت طراحی وب کار کنین و با HTML و CSS و JavaScript آشنا بشینلازم به ذکر است که java و javaScript تقریبا هییییچ ربطی به هم ندارن. پس فکر نکنین این یه حالت خاصی از اونه یا برعکس.داستان مثل VB و VBScript نیست!ضمنا این روزا همه‌مون بهتره کار با یه توزیع user-friendly لینوکس رو بلد باشیم. ولی این که خیلی بخوایم عمیق مطالعه‌ش کنیم بیشتر وقتی مطرح میشه که قرار باشه کار DevOps یا System Administration روی سیستم‌های مبتنی بر لینوکس انجام بدیم.این هم فراموش نشه که زبان یه ابزاره و وقتی اصول کار رو بلد باشی یادگیری کار با ابزار جدید وقت زیادی نمی‌بره.پس نگران این نباشین که مثلا اگه فلان زبان رو شروع کنین به یادگرفتن بعدا ممکنه مجبور بشین زبانتون رو عوض کنین پس از اول بهترین زبان رو پیدا کنین که دیگه مجبور نشین زبان عوض کنین.این [شرمنده] احمقانه‌ترین تصوره و اگه این جوری برید جلو قشنگ تا مدت‌ها هیچ چیزی رو شروع نمی‌کنین. من دیدم طرف ترم ۱۰ ۱۲ شده هنوز داره مشاوره می‌گیره که برم کدوم زبون رو شروع کنم!زبان کمترین اهمیت رو داره تو سواد شما. به این فکر کنین که اگه مفاهیم برنامه‌نویسی و الگوریتم‌نویسی و توسعه‌ی نرم‌افزار و روش کار سیستم‌های کامپیوتر رو ندونین، حتی اگر دنیا به قدری پیشرفت کنه که دیگه نیازی به کد نوشتن نباشه و فقط کافی باشه به کامپیوتر توضیح بدین چی میخواین، باز هم نمی‌تونین چیزی توسعه بدین!چون نمی‌تونین توضیح بدین میخواین چی کار کنین! اگر هم بتونین نمی‌تونین امکانسنجی کنین که اصلا ایده‌ی شما شدنی هست یا نهدیدم که میگم..راستی؛من اصلا احساس شاخ بودن ندارم.هیچوقت هم نداشتم.خیلی چیزا هست که بلد نیستم و خودم از چند نفر خواهش کردم بهم کمک کنن تا یاد بگیرن. دمشون هم گرم.این رو هم بگم که پیشنهاد می‌کنم یه نفر رو از اولین ترم تحصیلی از بین اساتید یا دانشجوهای سال‌بالایی‌تون به عنوان الگو انتخاب کنین.الگوبرداری از یه نفر که به نقطه‌ای رسیده که شما دوست دارین برسین می‌تونه خیلی کمک کنه که مسیر بهتری رو به سمت هدفتون طی کنین یا زودتر متوجه بشین که هدفتون رو اشتباه انتخاب کردین.من در طول ۴ سال تحصیلم نزدیک ۱۰ تا الگو برای خودم از بین سال‌بالایی‌ها و اساتیدم فراهم کرد.برای هر موضوعی الان یه راهنما دارم که میتونم باهاش چک کنم و مسیر خودم رو اصلاح کنم.حتما نباید اسوه‌ی شما یه آدم خیلی معروف و سلبریتی و قهرمان باشه. حتما هم قرار نیست تا آخر عمرتون همون یه اسوه رو داشته باشین.تازه ممکنه بعد از مدتی این رابطه شکل دو طرفه بگیره و شما هم خودتون در مواردی اسوه بشین و اسوه‌های شما از شما کمک بگیرنفداییان مرحوم استیو جابز بد نیست راجع به مهندس استیو وزنیاک هم مطالعه کنن تا ببینین کی قهرمان‌تره حتی تو یه شرکتنه صفر باشیدنه یک