دانش یعنی آنچه به صورت آکادمیک به شکل تعاریف و مفاهیم و توضیحات در مستندها وجود داره دو حالت دونستن و ندونستن ایجاد میکنه و تجربه یعنی توانای اجرا و انجام کارها هم تونستن و نتونستن رو. برای همین ۴ دسته برنامه نویسی داریم:
کسایی که نمیدونن و نمیتونن
اینها فقط از برچسب برنامه نویس خوششون میاد، یعنی با برنامه نویسها میگردن ازشون ویدیو اموزشی میگیرن و خودشون رو مشتاق و پیگیر نشون میدن، در میتاپها شرکت میکنن، شاید گاهی دو قسمت از این ویدیوها رو هم ببینن ولی تا حالا تو عمرشون یک زبان برنامه نویسی رو یاد نگرفتن و یک پروژه معمولیهم لانچ نکردن و فقط از این که تو محیط باشن خوششون میاد.
اینها یا استعداد ندارن و یادگیری واسشون اینقدر سخت هستن که هر بار شروع میکنن به این نتیجه میرسن که سخته و نمیفهمن، یا علاقه کافی به خود کار ندارن و یه چیز دیگه احتمالا علاقشون هست و ازش انرژی میگیرن مثلا مطرح بودن و جلب توجه دیگران یا حتی ممکن هست عاشق یک برنامه نویس شده باشه و برای نزدیک شدن به اون داره اینکار میکنه ? و... . خلاصه که یک مشکلی این وسط وجود داره که لازم هست رفع و رجوع بشه که البته گاهی هم شدنی نیست.
شاید بگید خب به این که نمیگن برنامه نویس چرا اوردی تو دسته بندی، بخاطر این که اغلب جوری فیلم بازی میکنن و تو رزومه و سایتها میزنن برنامه نویس که به واضحی این متن نیست و باید باشون کمی بگردی تا بفهمی. واسه همین بهتره بدونید این دسته بندی هم هست و ممکن هست شخص جز این باشه.
کسایی که میدونن ولی نمیتونن
اغلب مدرسها در این گروه هستن. اینها فقط مستندها و اموزشها رو میببینن و نهایتا یک تست کوچیک هم میکنن و بعد میان اموزش میدن و اغلب در هیچ پروژه اینترپرایز و تیم جدیای نبودن و نهایتا از این تیمها دوستانه دانشجویی بوده برای همین توانایی عملیاتی کمی دارن. درسته دانش دارن ولی تجربه لازم رو ندارن و دیدم که اغلب از این تجربه کردن هم فراری هستن.
این گروه برای آزمونهای استخدامی عالی هستن چون در آزمونهای استخدامی مخصوصا ما ایرانیها یکسری مطالب آکادمیک پرسیده میشه که الزاما دونستن یا ندونستنش برای مثلا یک جونیور یا میدلول چندان ملاک تصمیم گیری نمیتونه باشه. این ازمونها ممکن هست منجر به جذب این افراد بشن و با این که دانش خوبی دارن ولی تیم به نتیجه مطلوبی نمیرسه و در اجرا لنگ میزنه.
به نظرم برای آموزش و مشورت در مورد انتخاب تکنولوژی و معماری چون مطالعه اینها زیاد هست گزینه خوبی میتونن باشن ولی برای اجرا میشه به دو گروه بعد فکر کرد.
کسایی که نمیدونن ولی میتونن
اغلب بچههای عملیاتی در این دسته هستن، منظورم کسانی هست که در شرکتها استخدام شدن یا فریلنسری کار میکنن و تسکهای پروژه رو جلو میبرن. منظور از نمیدونن این نیست که کلا هیچی نمیدونن، نه، قطعا یکسری چیزها رو میدونن که میتونن ولی منظور این هست مفاهیم، تعاریف و عملکردهای سطح بالا و پنهان رو خیلی کامل و جامع نمیدونن.
مثلا این که موتور جاوا اسکریپت چطور رفتار میکنه و کد چطور پردازش میشه.یا مثلا یک دولوپر ممکن هست function و کلاس رو بتونه توسعه بده ولی دقیقا ندونه مزایا و معایب هر کدوم چیه و الان طبق کدوم منطق بهتره از کدوم استفاده کنه و دیدم که عموما سلیقهای و حسی رفتار میکنن نه با استدلال و دلایل قابل اثبات.
البته خیلی از بچههای عملیاتی اعتقاد دارن اصلا به ما چه بدونیم تعریف closure چی هست و call stack به چه دردی میخوره و موتور پردازش چطور رفتار میکنه و در پشت ماجرا چه اتفاقاتی رخ میده ولی فرق senior با mid level و junior دقیقا در دونستن یا ندونستن همین جزئیات هست و کسی نمیتونه ادعا کنه من senior هستم ولی تا به حال حداقل یک بار رفرنس مرجع رو نخونده باشه و از جزئیات با خبر نباشه و حداقل در حد کم نتونه این مفاهیم و ساختارها رو توضیح بده که چی هستن و چطور کار میکنن.
کسایی که میدونن و میتونن
اگر بگیم تعریف senior همین هست چندان غلط نگفتیم. کسی که هم از ریز جزئیات و دانش عمیق اطلاع داره و هم در عمل توانایی اجرای خوبی داره. به نظر من برای این سنیور باید دانش و تجربه بالا رو هم زمان داشته باشه چون باید بتونه تیم رو مدیریت کنه.
وقتی میگیم تیم یعنی ادمهای مختلف با دانشهای مختلف و نحوه کد نویسیها متفاوت پس شخص باید بیشتر از همشون بدونه که اونها از هر ساختاری هم استفاده بکنن این قبلش از اون اطلاع داشته باشه و در code review کردن مدام سورپرایز نشه و به تیمش غر نزنه که این چیه! برای همین mid level و junior چون انفرادی کار میکنن شاید لازم هم نباشه در حد senior اطلاعات داشته باشن ولی اگر بدونن عالیه و باید بشون جایزه داد.?
شاید بگید خب گوگل جان هست دیگه چه کاریه یادگیری؟ من خودم حافظه خوبی ندارم پس حداقل من از کسی انتظار ندارم همه چیز رو ۱۰۰٪ برای همیشه بتونه حفظ کنه?. درسته همه چیز رو میشه گوگل کرد ولی سوالم این هست ایا در مورد چیزهایی که اصلا اطلاعی از بودن و نبودنش ندارید هم میتونید گوگل کنید؟ اصلا بنویسید چی میخوام؟ قطعا باید یک بار دیده باشی تا حداقل بدونی چنین چیزی هست، درسته به وقت نیاز میری گوگل میکنی کاملش رو دوباره مرور میکنی.
پس شاید الزاما نیاز نباشه ۳۶۵ روز سال و همیشه ۱۰۰٪ مطالب و مفاهیم رو بدونیم که البته جدای از نظر ما اگر از یکسری چیزها استفاده نکنیم خود به خود از ذهنمون پاک یا کمرنگ میشه و دست ما هم نیست ولی حداقل باید یک بار وقت کافی گذاشته باشیم و مطالعه کرده باشیم و بدونیم تا بعدا گوگل کنیم.
جمع بندی
به جز گروهی که نه میدونن و نه میتونن ۳ دسته دیگه هر کدوم در جای خودشون ارزشمند و مهم هستن و در این مطلب هدفم این بود که بدونم این چند جایگاه هست و ما بر اساس این که دوست داریم در کدوم باشیم و در کدوم راحتتریم برنامه ریزی کنیم و به هدفمون برسیم و از همه مهمتر همه این گروهها رو در یک گروه به نام برنامه نویس کنار هم قرار ندیم و جزئیتر ببینیم.
نظر خودتون رو در تکمیل و اصلاح این مطلب در کامنتها بنویسید تا مطلب کاملتر و پختهتر بشه.
روزگار به کام / محمد ابراهیمی اول / فروردین ۱۴۰۰