سلام دوستان
بعد از حدود چندین سال کار تو برنامه نویسی و خوندن ۱۲ تا کتاب روبی و چند تا دوره الان حس میکنم یه سری جاها اشتباه کردم و همزمان میخام تجربیات خودم رو بگم و بیشتر از نظر شما برای ادامه مسیر استفاده کنم. چون حس میکنم خیلی طولش دادم یه سری جاها و جدیتم هم کم بوده.
تجربم:
۱- وقتی کتاب میخونین اگر مطالبش رو تو حداقل ۲ تا پروژه تمرین نکنین زیاد به کار نمیاد و سریع فراموش میشه.
۲ - برای یاد گیری لیست بلند بالا نساز و سعی کن از چیزی که تو دستته استفاده کنی و عمیق تر یاد بگیری(دریای ۱ سانتی یعنی پیش خودت کوچیک شدن).
۳- مهترین چیز الویت بندی و کنترل هیجانی خودته. به خصوص اگه چیزای زیادی باید یاد بگیری.
۴- منعطف باش و با کتاب و ویدیو ترکیبی یاد بگیر(همیشه خوب نیست تا ته هر چیزی رو در آوردن چون نتیجه نباید بیش از حد طول بکشه)
۵- وارد بازار کار بشین در سریعترین حالت
چند تا توصیه از سمت شما نیاز دارم:
۱- من تو ریاضی و الگوریتم ضعیفم. جوری که بیشتر مصاحبه هارو رد میشم. منبع یا سورسی سراغ دارین یا روشی که خوب باشه
۲- مباحثی که برای شما چالشی بوده چیا بوده؟ مثل یه سری کارها و روش ها تو queue ها مثل مرحله ای کردنش و نگه داشتن state که اگه سیستم اومد پایین چیکار کنیم.
۳- تجربه ای که داشتین و خیلی جالب بوده و یا حرکتی زدین که خیلی باحال بوده.
درود دوست من. واقعیت امر من نمی تونم به این سؤال های شما یا ارسال تجربه پاسخ بدم چون سنیور نیستم ولی چیزی که اخیرا فهمیدم با دیدن جاب آفر هایی که در لینک دین یا … برای زبان برنامه نویسی که شما انتخاب می کنید وجوددارد مخصوصا اونایی که دنبال لید و سنیور هستند می تونه چشم انداز بسیار خوبی بده!! اول اینکه متوجه می شید بازار چی می خواهد هم اینکه مسیرتون منظم تر می شه تا زودتر به هدف نهایی می رسید.
مصاحبه کردن با شرکت های مختلف هم خیلی در این زمینه کمک کننده هست مثلا شرکت ایکس فقط مشکلش در دیستربوت کردن هست و شرکت ایگرگ مشکلش در استریم کردن هست. و اینکه مثلا چالشی که اونا برخورد کردن حتما در موردش محتوا هست از خود جاب آفرشون هم می شه کمی متوجه شد
مثلا شرکت فایند هوتل از نوع مصاحبه اش و همینطور مقالاتی که نوشته به نظر می اومد مشکل ترافیک بالای فصلی کاربران و دریافت پاسخ از API خارجی و همینطور کش کردنشون خیلی موضوع مهمی براشون بود
به نظرم بهتر هست موضوعات رو تفکیک کنید و هر کدوم رو جدا یک پست بزنید و بگید که قبلا چیکار کردید تا اساتید عزیز بیشتر کمک کنند اینجوری خیلی کلی گویی می شه در مورد ریاضی فکر کنم سرچ کنید من یادمه ۳ ۴ سال پیش خیلی صحبت شده در همین انجمن بین پست ها سام عزیز هم چندکتاب معرفی کرده
به نظر من به لول سنیور رسیدن خیلی به تجربه بستگی داره. و تجربه فقط با کار کردن به دست میاد. اما نکته مهم اینه که سنیور بودن دلیل بر خوب بودن نیست. خیلی سینور های زیادی میشناسم که کارشون خوب نیست. با اینکه تجربه دارن اما کارشون از جاهای دیگه می لنگه.
اول از همه باید سعی کرد واقع بین بود و ضعف های خودتو شناسایی کنی و برای رفعشون تلاش کنی. در کل بنظر من برای مهندس بهتری بودن باید دانشمند بهتری باشی. خیلی پیشنهاد می کنم این ویدئو رو ببینی:
ببخشید که اینقدر دیر جواب میدم. همش به فردا موکول میکردم و فرداش به فردای بعدش
خب اینش که طبیعیه. اگه به عقب نگاه کنید و اشتباهی نبینید، یعنی درجا زدید و پیشرفتی نسبت به اون زمان نداشتید. من کدهایی دارم که خداخدا میکنم کسی هیچوقت نبینتشون
برنامهنویس نباید همهی الگوریتمها و فرمولهای ریاضی رو حفظ باشه. اینکه به چه روشی فلان چیز رو حل کنید، باید توسط یه Domain Expert به شما گفته بشه (یا فردی که شرکتتون استخدام کرده فرمولهای ریاضی مورد نظر رو برای تیم برنامهنویسی طراحی کنه، یا اگه یه چیز عمومیه، باید مثلا از توی IETF بخونید و پیادش کنید)
شما برنامهنویس هستید. نه ریاضیدان. اگه کسی از شما توقع داره بهینهترین روش محاسبهی فیبوناچی رو پیاده کنید، از شما توقع زیادی داره.
طبیعیه. بیشتر شرکتها نمیدونن چطوری مصاحبه کنن و مصاحبشون هیچ ارتباطی با کاری که واقعا قراره توی اون شرکت انجام بشه نداره. صرفا چون استخدامهای قبلیشون خوب از آب در نیومده، میگن «پس باید مصاحبه رو سختتر کنیم که فیلترمون قویتر بشه» درحالی که این خودش باعث میشه یه سری آدم که عرضهی کار واقعی رو ندارن و فقط نشستن یه سری الگوریتم حفظ کردن و یه عالمه ویدیوی مصاحبههای مختلف رو دیدن و حفظش کردن، استخدام بشن. بعد توی کار واقعی بمونن و بعد دوباره تیم استخدام بگه «اینایی که استخدام کردیم خوب نیستن. فیلتر رو قویتر کنیم واسهی استخدامهای بعدی»
تهش هم کل شرکت، زمین میخوره.
من پیشنهاد میکنم اون چیزی که بهش خیلی علاقه دارید رو توی IETF پیدا کنید مثلا rfc مربوط به websocket و اونو توی یه پروژه پیاده کنید و اگه کامل انجامش دادید و خوب از آب در اومد، به عنوان یه لایبرری منتشرش کنید. هم اینکه به خودی خود، خیلی خفنه. هم باعث عمیقتر شدن درکتون در اون زمینه میشه. هم اینکه بعد از این، دیگه هیچ تسکی نیست که از پسش بر نیاید!
خب این خودش یه نقطهی شروع خیلی خوبه. من بودم با سرچ توی اینترنت و باز کردن صفحهی ویکیپدیای مربوط به این مطلب شروع میکردم. قدم بعدی خوندن رفرنسهاییه که پایین صفحهی ویکیپدیا لینک شده و مثل یه تحقیق دانشگاهی، مطالعم رو پیش میبردم تا به یه درکی از روشهای پیادهسازی اون چیز برسم بعد ببینم مثلا توی روبی که دارم باهاش کار میکنم، فلان روش اصلا پیاده نشده تا حالا و خیلی چیز جدید و خفنیه که فلان زبان استفاده میکنه. سعی میکنم خودم اون روش رو پیاده کنم.
(ویکیپدیا رو مثلا زدم برای وقتی که واقعا دیگه هیچ منبع دیگهای رو نمیشناسیم. اینجور مواقع بهترین منبع برای رسیدن به جوابه)
فکر کنم توضیح دادم چجور حرکتهایی به نظرم خفن هستن.
البته اینطور نیست که خودم ۱۰۰ بار اینکارو انجام داده باشم. ولی تاثیرش خیلی زیاد بوده. وقتی نظرم رو درمورد یه چیزی که نزدیک به اون تجربیاتم بوده میپرسن، شاید حق با من نباشه ولی حداقل یه عقیدهای توی ذهنم دارم و میتونم ازش دفاع کنم. دفعهی اولی نیست که درموردش چیزی میشنوم!
درست کردن یه وبسایت/وبلاگ و نوشتن درمورد تجربیات و نظرات هم میتونه کار خیلی مفیدی باشه. مثلا توی مصاحبههایی که شرکت کردم، بعضیاشون خودشون گفتن «وبسایتتم دیدم. باحال بود» و یه جا طرف ازم درمورد Rust پرسید، گفتم «اولش خیلی به نظرم خوب میومد، بعد یه کم یاد گرفتم و دیدم خیلی خوبه! گفتم بشینم یه برنامهی واقعی بنویسم، ولی دلم نمیخواست یه فریمورک صدا بزنم و یه صفحهی وب درست کنم باهاش. میخواستم با خود زبان کلنجار برم. تصمیم گرفتم الگوریتم MD4 رو پیاده کنم. درسته که نقص امنیتی داره ولی خیلی الگوریتم سادهایه نسبت به بقیهی الگوریتمهای هش، پس درکش خیلی سخت نیست. از طرف دیگه یه پروژست که میتونم از قابلیتهای rust برای نوشتنش استفاده کنم و احتمالا خیلی باید راحتتر از کار با C باشه و سرعت اجراش هم احتمالا باید یکی باشه دیگه! ولی بعد از یه کم پیشرفت، تازه متوجه معایب Rust شدم. تازه دیدم که ownership که اولش خیلی به نظرم ویژگی خوبی میومد، خودش اینقدر دستوپاگیر میشه که ترجیح میدم پروژه رو با C بنویسم و memory رو خودم مدیریت کنم تا اینکه بسپارمش به Rust. اتفاقا یه مطلب هم درموردش توی سایتم نوشتم و توضیح دادم که چرا به نظر من، Rust هیچوقت نمیتونه جای C رو بگیره. یه لحظه صبر کنید الآن لینکشو براتون میفرستم»
کل حرفی که زدم خیلی سطحی بود. اصلا وارد جزئیات نشدم چون واقعا درک صحیحی ازشون نداشتم. اصلا هم ربطی به اون شرکت و پروژههاش نداشت. ولی طرف کیف کرد
دروغ میگه
با این خیلی موافقم! خیلیوقتا هدف شما از مصاحبه، نباید استخدام شدن توی اون شرکت باشه!
خیلیوقتا باید رزومه بفرستید برای شرکتهایی که علاقهای برای کار کردن توشون ندارید و فقط مصاحبه بدید برای اینکه با جو حاکم، آشنا بشید!