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