
بعد از ۶ سال از شروع برنامهنویسی، احساس میکنم میتونستم خیلی بهتر عمل کنم و یکسری اشتباهات رو نداشته باشم. زمان برنمیگرده ولی حداقل میشه چیزهایی که توی ذهنم هست و اگر برمیگشتم عقب انجام میدادم رو بنویسم تا شاید برای کسی که اول اون ۶ سال ایستاده یا هرکس دیگهای مفید باشه.
شاید یکی از بزرگترین اشتباهاتم این بود که خیلی دیر وارد کار تیمی شدم. اون زمان من تهران نبودم بخاطر یکسری مسائل و محیط کاری اون شهر رو دوست نداشتم در نتیجه فقط خودم بودم و اینترنت. واقعیت اینه که درسته که همهچیز در اینترنت هست و شما میتونید به راحتی به هرچیزی که میخواید دسترسی پیدا کنید اما نکته اینجاست، چه چیزی میخواید؟
وقتی اول راهید، شما حتی نمیدونید چه چیزی میخواید که برید دنبالش و پیداش کنید در نتیجه باید خیلی انرژی اضافه بذارید تا متوجه بشید اصلا چه چیزی رو باید دنبال کنید در صورتیکه اگر کسی به عنوان راهنما و منتور کنارتون باشه میتونید خیلی سریعتر به چیزی که میخواید برسید و اصطلاحا سرنخهای بهتری رو در زمان کمتر در اختیار دارید.
میتونید به صورت پارهوقت و حتی رایگان برای شرکتی کار کنید و فقط توی اون جمع باشید! بله، فقط توی اون جمع باشید. این به شما کمک زیادی میکنه که ببینید افراد باتجربهتر درمورد چه چیزهایی صحبت میکنند، دغدغههاشون چیه، وقتی به مشکل برمیخورن توی کار چجوری حلش میکنند و مهمتر از همه آداب کار تیمی رو یاد میگیرید. راه دیگهای که کمک کننده است توی این زمینه، دنبال کردن آدمهای فعال حوزه مورد علاقه خودتون در اینترنته. یادم میاد اون وقتها من نوشتههای سالار کابلی رو زیاد میخوندم چون دغدغه طراحی داشت و منم علاقه زیادی به طراحی داشتم. حقیقتا خیلی چیزها از سالار و اشتراکگذاری نوشتههاش و تصمیمگیریهاش درمورد پروژههایی که روش کار میکرد یاد گرفتم و ممنونم ازش.
وقتی شروع به برنامهنویسی میکنید به احتمال خیلی زیاد مثل من با یک ترس بزرگی مواجه میشید و اون ترس از عقب موندن و بهروزنگهداری خودتون توی این صنعت بیانتها است.
البته که از جهاتی این ترس، ترس خوب و لازمیه برای پیشرفت اما باید بدونید دقیقا از چی بترسید!
کتابخونهها و فریمورکها ابزارهایی هستند برای هرچه بیشتر آسونتر کردن کار ما برنامهنویسها و تعدادشون هم کم نیست اما آیا واقعا باید از ندانستن ابزاری ترسید؟ اگر اینطور باشه و فرض کنیم که شما JS دولوپر هم باشید، در نتیجه باید هر شب قبل از خواب به اعتقاداتتون متوسل شید که فردا یه X.io دیگه به اون چندصدتای قبلی اضافه نشه.
اما واقعیت اینه که همه این ابزارها بر روی یک اصولی بنا شدند تا پاسخی به نیاز خاص ما باشند درنتیجه چیزی که باید ازش بترسید ندانستن چیزهایی مثل Design Pattern های رایج و یا روشهای برنامهنویسیه.
مثلا اگر JS دولوپر هستید و به خود JavaScript به خوبی مسلطید و همینطور Functional Programming رو بلدید، نیازی نیست ترس زیادی داشته باشید چون هر ابزاری رو به راحتی میتونید در زمان کوتاهی یاد بگیرید.
بعد از اینکه یکم فعالیتم بیشتر شد و چندتا پروژه فریلنس انجام دادم، فکر کردم که من خیلی بلدم!
اما واقعا برنامهنویسی این نیست که بشینیم و یه کدی رو بنویسیم و تمام. پروسه طراحی و ساخت یک نرمافزار مراحل زیادی داره که نوشتن کد فقط یک مرحله از اونه.
به عنوان یک برنامهنویس از شما انتظار میره که علاوه بر اینکه به استاندارد کدهایی که مینویسید فکر کنید به نیاز محصول، کاربر و بیزینس هم فکر کنید. بتونید کارهاتون رو اولویتبندی کنید و کارهایی که بیش از حد بزرگ هستند رو تشخیص بدید و به کارهای کوچکتر تقسیم کنید. حالا این انتظار، بسته به اینکه در چه سطحی از تجربه هستید متفاوته اما خوبه که در مورد این مسائل هم علاوه بر برنامهنویسی مطالعه داشته باشید. با این کار، دلیل خیلی از تصمیمگیریها رو توی محیط کاری متوجه میشید و این باعث میشه که تنش کمتری با دیگر اعضای تیم داشته باشید.
هرچقدر جلوتر میرید، سطح شرکتی که داخلش کار میکنید قاعدتا باید بالاتر بره و این بالاتر رفتنه مستلزم اینه که بتونید وارد اون شرکت بشید.
توی سطوح بالاتر، افرادی که با شما مصاحبه میکنند مایلند بدونند که شما چقدر به جعبه ابزارتون مسلطید. اگر توی رزومهتون نوشتید که با ابزار X کار کردید، اونها از شما سوالاتی میپرسند که متوجه عمق درک و تجربه شما از اون ابزار بشوند درنتیجه خیلی مهمه که اولا واقعا با اون ابزار توی یک یا دو پروژه واقعی کار کرده باشید و چالشهاش رو تجربه کرده باشید و دوم اینکه وقتی دارید داکیومنت میخونید باید به صورت مداوم دنبال چرایی باشید! چرا این متد اینطور کار میکنه؟ چرا این API اینجوری دیزاین شده؟ چرا باید این مقادیر رو ست کنم؟ چرا باید این دیتا رو برای فلان متد فراهم کنم؟
خیلی وقتها بعد از پرسیدن این سوالات مجبور میشید تا سورس کد اون ابزار رو بخونید که با همین کار، شما هم Design Pattern یاد میگیرید، هم نحوه کد استاندارد نوشتن یاد میگرید و هم متوجه میشید که تیمهای بزرگ هم از فضا نیومدند و شما هم میتونید اون کد رو بنویسید و اعتماد به نفستون بیشتر میشه.?
تصور کنید وارد یک مغازه طلافروشی میشید و میخواید طلا بخرید. روی دیوار پر از مدارک و جوایزه و آقا/خانم فروشنده به شما میگه که تا الان به این لیست از افراد خدمات دادیم و همگی راضی بودند. شما به ویترین نگاه میکنید و میبینید حتی یک جنس هم وجود نداره! پیش خودتون چی فکر میکنید؟ آیا به حرف فروشنده و چندتا تابلو اعتماد میکنید یا کمی مردد میشید؟
Talk is cheap. Show me the code.
- Linus Torvalds
واقعیت اینه که دنیای open-source درحال حاضر نقش زیادی رو برای اعتبار سنجی تجربیات شما بازی میکنه و یجورایی همون ویترین شماست. شاید به عنوان یک برنامهنویس عادی که یک نتورک قوی و مارکتینگ شرکتهای بزرگ پشتش نیست نتونید پروژهای با 10K استار توی گیتهاب داشته باشید اما میتونید در قدم اول به بقیه نشون بدید که چطور کدهاتون رو مینویسید و در قدم بعد تلاش بیشتری کنید تا استار بیشتری هم برای پروژهتون به دست بیارید. فعالیت توی گیتهاب، این رو به همکارهای آینده شما نشون میده که شما درحال یادگیری هستید و وقتی رو برای پروژههای جانبی میذارید که این ارزشمنده. همینطور ممکنه شما تمام تجربه کاریتون در زمینه JS بوده باشه ولی زبان Kotlin رو هم بلدید و دوست دارید تجربه بعدی کاریتون توی اون حوزه باشه. خیلی راحت میتونید پروژهای که با Kotlin نوشتید رو در گیتهابتون منتشر کنید تا گواهی بر این باشه که شما Kotlin رو بلدید.
آخرین نکتهای که دوست دارم حتما بگم زبان انگلیسیه! تمام موارد قبلی به کنار، این مورد به کنار. واقعیتش اگر شما زبان انگلیسیتون رو تقویت نکنید، نمیتونید داکیومنت بخونید، کنفرانس ببینید، پادکست گوش بدید، توی دنیای open source فعالیت کنید و بعد از اینها اگر قصد مهاجرت داشته باشید، تقریبا براتون غیر ممکنه!
توی دنیای امروز شرکتهای نرمافزاری بخصوص استارتآپها که نیاز به رشد و حرکت سریع دارند، مهمتر از کدی که مینویسید و ابزاری که باهاش کار میکنید اینه که بتونید با تیمتون تعامل مستمر و سودمند داشته باشید. بتونید مسائل و مشکلات پیچیده برنامهنویسی رو از طرف مقابلتون دریافت کنید و در مقابل بتونید به کسی دیگه به صورت واضح منتقل کنید. شاید یکی از مهمترین دلایلی که برنامهنویس های هندی بیشتر از برنامهنویسهای ایرانی از آسیا درحال کار توی شرکتهای اروپایی و آمریکایی هستند همین باشه. شاید لهجه خیلی خوبی نداشته باشند(گاهی هم چیزی از نیتیو اسپیکر کم ندارند) اما بدون هیچ مشکلی مطلب رو درک میکنند و مطلبشون رو ارائه میدهند و برای هیچ کس(جز ما ایرانیها?) لهجه مهم نیست و تعامل مهمه. در نتیجه این مورد شاید بشه گفت مهمترین چیزیه که باید روش بیشتر کار میکردم.
همین! اینها چیزهایی بود که فکر کردم از بقیه موارد مهمتر هستند و دونستنشون میتونه کمک کننده باشه. از اینکه این نوشته نسبتا طولانی رو خوندید ممنونم و امیدوارم کمکی کرده باشه بهتون.