من خیلی به افراد مورد نیاز و مسایل دیگه مورد نیاز برای کارای بزرگ فکر می کنم چون به چشم دیدم که تو تیمای خارجی در کارایی شرکت کردم که به راحتی می بایست این جا هم قابل انجام باشه. امروز فقط نظرم و تفکراتم رو راجع به لازمه های نیروی فنی خوب می نویسم که قطعا با افرادی که کارای دیگه می کنند بخشایی مشترک و بخشایی متفاوت داره. سعی می کنم ساده و کوتاه هم باشه.
مسایل روانی/فلسفی/اخلاقی
برای فرد خوب و موفقی در زمینه فنی بودن رویکرد و شخصیت خاصی لازم هست که همون شخصیتی هست که برای خوب بودن توی هر کاری و شاید توی زندگی لازمه. این ویژگیای شخصی به نظرم ایناس: اول داشتن ارزشای درستی مثل صداقت با خود و با دیگران هست که به خودمون و یا به بقیه در باره چیزی که هستیم دروغ نگیم و در کنارش نداشتن توقع تحسین/پاداش مادی/معنوی بیش از تواناییمون خیلی مهمه. داشتن این دومی یعنی توقع مناسب مستلزمی اولی هست که نخوایم میونبر بزنیم و همچنین درک مناسب از تواناییمون رو لازم داره و قبل از اون خود داری از خود عالی پنداری قبل این که تعریف عالی رو متوجه بشیم. بسیاری از افراد که سال های زیادی هست در زمینه فنی بازی فعال می کنند و کارشون/خودشون خیلی به جای خاصی نرسیده و هنوز جای پیشرفت زیادی دارند ولی متوقف شدند به نظرم و به حسم به دلایل بالا بوده و هممونم گه گاه ممکنه درگیر اینا بشیم ولی باید خودمونو بکشیم بیرون ازش.
حالا چیزای دیگه ای مثل شرایط زندگی ممکنه مثلا توقع مارو برای پاداش مالی بالاتر ببره نسبت به کسی با توان حدودا برابر و این ربطی به این که ما حس می کنیم بیش از چیزی که هستیم، هستیم نداره ولی این باعث پیشرفت نکردن نمی شه. ممکنه باعث بشه کارای بدتری بکنیم با پول بیشتر یا به دلیل تغییر اولویت ها نتونیم خیلی مثلا مطالعه کناری داشته باشیم چون باید ساعت زیادی کار بکنیم ولی پتانسیلش رو نمی کشه (امیدوارم این طور باشه)بعد از مرحله بالا این سوال پیش میاد که چرا من توی کار فنی خودمو قوی بکنم که خیلی خوب بشم و تحسین مثلا یکی در حد کارمک رو به دست بیارم یا یه انقلاب فنی تو یه بازی ایجاد کنم و چرا فلان کار دیگه رو نکنم که مارو به ویژگی بعدی یعنی علاقه و کنجکاوی می رسونه که لازمه کار هستند.
حالا علاقه خیلی وقتا پس از جست و جو و به دلیل خوب یاد گرفتن مسایل فنی پیش میاد و لزوما این شکلی نیست که شما باید از 4 سالگی عاشق کد زدن بوده باشید و برای بیشتریا هم این شکلی نبوده. شاید کسی این رو بخونه و بگه اصولا من اولویتم نیست که خیلی تو کارم خفن باشم و خوب من چیزی ندارم بهش بگم جز این که خوب این انتخاب طبیعی شما هست و همه قرار نیست تو کارشون خفن بشند، مهم اینه که توقعتون این نباشه باهاتون طوری برخورد بشه که این طور هستید. شما هم برای جامعه نیاز هستید و هم خفن نبودن توی کار اگه در کنار صداقت و دیگر ارزش های انسانی قرار بگیره باعث می شه که فایده های دیگه شما مشخص شه چون وقتی که سر خفن شدن توی کار صرف نشده صرف چیزی شده که پتانسیلشو داره که شخصیت شما رو جالب کرده باشه و یا برای کار خاصی شمارو مفید و یا در زندگی برای مساله ای دیگر بهتر شما رو برای پیشبرد بهتر مسایل آماده کرده باشه که هیچ کدومشون لزوما کم ارزشتر نیستند. هر چند بیشترمون وقتای خالیمونو طلف می کنیم وگرنه اوضاع جامعه مون این شکلی نبودش. در ضمن منظور از خیلی خوب شدن لزوما خیلی خوب شدن در مساله خاصی نیست و می تونید به شکل کلی برنامه نویس خوبی باشید.
مسایل مشخص فنی
باید دلتان بخواهد همه چیز را یاد گبیرید یا به شکل عمیق در برخی چیزها کند و کاش کنید و یا گستره وسیعی از چیزها را مقدار خوبی بدانید تا بتوانید بین آن ها روابطی برقرار کنید که بقیه نمی توانند که این نشان عمیق بودن شما در کلیت پروسه حل مساله و برنامه نویسی است و هر دو این موارد بسیار مهم و مفید هستند و به خصوص در تیم های کوچک هر دوی آن ها لازم هستند. برای یک فرد به شکل T بودن می تواند مفید باشد یعنی در یک چیز عمیق و در چندین چیز نسبتا خوب. ولی اگر هم این طور نباشید و کلیت تیم این طور باشد برایتان خوب خواهد بود و قطعا بهتر از این است که هیچ یک از شما نه generalist خوبی باشد و نه در چیزی عمیق باشد.
معنی فرد فنی عمیقی بودن این است که شما به چیزهای ساده افتخار نمی کنید و مثلا از یاد گرفتن یک api و یا استفاده از آن خیلی خوشحال دایمی نشوید. باید دلتان بخواهد هر روز ایراد های کدتان و کارتان را ببینید و یا در همان یا در کارهای بعدی برطرف کنید. باید بخواهید خود را با مسایل فنی جدید رو به رو کنید و پس از یاد گرفتن چیزی به جای خوشحالی همیشگی و سعی کردن برای این که نشان دهید چیزی که بلدید خیلی عالی است سعی کنید به دنبال یاد گرفتن چیز بعدی و تمرین و بهتر شدن باشید. اگر در همین ها استمرار داشته باشید و سعی کنید از دیگران هم مشورت بگیرید نسبت به وقت و زمانی که صرف می کنید با سرعت خوبی پیشرفت کرده و هم توانایی درک عمیق چیزی خواص و هم برقراری ارتباط بین چیزهای مختلف و حل مسایل جدیدتان بالا خواهد رفت و با ارزش و قابل تحسین خواهید شد. مانع جلوی راه هم سختی و تنبلی و شرایط زندگی و ... هستند که برای همه ما وجود دارند و گاهی باید هوشمندانه سعی کنید مانعی از راهتان بردارید ولی باید حواستان باشد که میانبر آن راه هوشمندانه نیست.
در باره میزان عمق لازم باید بگویم که حتی اگر شما بخواهید generalist باشید و یا در زمینه هایی که نمی خواهید عمیق باشید باید این قدر بفهمید که بتوانید برای حل مسایل فرضیه تولید کنید. فرضیه هایتان هم عجیب نباشد. اگر کلا چیزی را یاد نگیرید به بهانه این که می خواهید از هر چیزی کمی بدانید، اصلا چیزهای که بلدید به حدی نخواهد بود که بتوانید مساله های جدید حل کنید و در نتیجه فایده ای نخواهید داشت.
یه مساله هم هست که خیلی مهمه که شما باید از قبل این که به مشکلی بخوری دنبال مسایل جدید بری که وقتی به مساله ای می خوری ایده های خوبی برای این که کجا دنبال جواب بگردی داشته باشی و نه این که به شکل ractive بعد خوردن مشکل بری سمتش و در کنارش این هم که شما فقط مساله فنی و یا کد لحظه رو نبینی می تونه به تصمیم بهتر گرفتن در زمینه فنی بهت کمک بکنه که دیدن مسایل مختلف قطعا این رو تقویت می کنه که از زوایای فنی و غیر فنی مختلف ببینی هر چیزی رو.
چرا سعی کنم خوب باشم؟ نمی خوام همه عمرم رو صرف این کار کنم
اول این که چرا سعی کنیم خوب باشیم. سوال این جاست که پس چی کار کنیم؟ سعی کنیم بد باشیم؟ آیا از خودتون می پرسید چرا مثلا غذا/لباس/خانواده/دوست/همسر/فرزند خوبیرو بخوام؟ درجه اهمیت هر کدوم از اینا و هر چیز دیگه ای برای هر کسی فرق داره ولی همیشه توی انتخاب همه تو همه چی احتمالا بهتر رو انتخاب می کنند.
مساله این جاست که شاید فکر کنید برای خوب بودن باید روزی 18 ساعت کد بزنید و مطالعه کنید و با این که هرچی زمان بیشتری آدم روی کاری بذاره و به خصوص در جوانی احتمال زیاد مهارت بیشتری پیدا می کنه ولی برای خوب بودن حتی اگه شما سالی یک کتاب برنامه نویسی بخونید و یه هفته یه کاری که بلد نیستید رو تمرین کنید بعد 5 سال از بیشتر برنامه نویسای توی کشور و خیلیای توی دنیا جلو خواهید بود. اگه اصولا کاری که می کنید براتون اهمیت نداره و یا فکر می کنید باید به شما پول زیادی بدهند تا توی کار کم کم یاد بگیرید و این که دیگران از کارفرما تا ... به نفعشونه شما خوب شید و در نتیجه این کار اوناست و نه کار شما خوب باید بهتوهن بگم که از اون جایی که توی هر کاری رقابت هست وقتی مساله خوب بودن پیش میاد، اتفاقی که می افته اینه که یا کسی از شما بهتر برای هر کاری انتخاب می شه و یا شرکت ها به دلیل نداشتن نیرو و پول کافی برای تبدیل کردن افراد بی انگیزه به افرادی که کارشون خیلی خوبه از بین می رند و یا محصولات بی خود و ساده درست می کنند که هیچ وقت در دنیا جلو نیست و از بقیه برتر نیست.
از اون جا که این مشکل با پول قابل حل نیست و انسان پس از برطرف شدن نیاز های اولیه به چیزهای دیگری برای اهمیت دادن به هر کاری نیاز داره که در نهایتش معنا هست، نیاز هست فکر کنید که آیا این کار برای شما چه قدر مهم است و آیا ترجیح می دهید که خوب باشدی یا تیریپ خوب بودن بردارید، وانمود کنید که کار خفنی می کنید ولی نکنید و یا بدتر خود را سرگرم فعالیت های اجتماعی به ظاهر بسیار بلند مرتبه کنید از جمله توییت کردن در باره حقوق این گروه و اون گروه و این حیوان و آن انسانی که فلان فرق را دارد و یا ایراد گرفتن به همه چیز و همه کس به جز خودتان و این خلا معنا رو این طور در زندگیتون پر کنید و نه در زمینه فردی و اجتماعی فایده خاصی نداشته باشید ولی در عوض به دلیل نداشتن هیچ مسولیتی در کوتاه مدت زندگی راحتی و البته پوچی داشته باشید. این سوالی نیست و انتخابی نیست که مخصوص برنامه نویس ها باشد ولی به نظرم از دلایل اصلی هست که الآن جامعه ما این وضع رو داره و ریشه های مختلف فرهنگی هم در هممون داره ولی به هر حال ناگزیر بودم برای کامل بودن این متن و چون در عمل خیلی ها این سوال رو در این باره از خود خواهند پرسید بهش پاسخ بدم.
حس کلی من این هست که دلیل اصلی نبودن آدم های خوب با تعداد زیاد بی تفاوتی و این میانبر های بی فایده و زشت و بد هستند. دلیلش هم این است که هرگز فردی را ندیده ام که علاقه زیادی و تلاش مناسب و استعداد خوبی در کاری داشته باشد و نتوانسته باشد به نحوی کار جالبی انجام بدهد. به خصوص تا قبل از دو سه سال پیش که شرایط اقتصادی بسیار بهتر بودن و امکان انواع کار بسیار بیشتر وجود داشت. قطعا شرایط اقتصادی و فرهنگی و اجتماعی روی همه چیز اثر می گذارد اما به نظر می رسد تنها راه حل تغییرات فردی و روبرویی شجاعانه با سختی ها و آشوب موجود باشد.
چرا جست و جوی زودتر از نیاز و تجربه کرد؟
نمی دونم اگه علاقه نباشه دلیل منطقی چه قدر کمک می کنه ولی یه دلیل ساده هست و اونم این که اگه این کارو نکنید موقع رو به رویی با یک مساله نمی دونید راه حل های ممکن تا به حال بررسی شده چیا هستند و از اون مهمتر رویکرد های مختلف و زوایای مختلفی که می تونید به مساله نگاه کنید رو نمی شناسید و برای همین تصمیمات به درد بخوری نخواهید گرفت و هرگز به فرد ارشد در اون زمینه تبدیل نخواهید شد. فرق فرد ارشد این است که توانایی دارد تصمیمات درست بگیرد که این تنها با دانستن امکانات مختلف و دیدگاهای مختلف امکان پذیر هست. اگر شما تنها چیزی که از شبکه بدانید صفحات وب باشد سعی می کنید هر برنامه تحت شبکه را با درخواست های http بنویسید و بعد برای آن توجیه بیاورید و اگر کسی ایراد کارتان را بگیرد رفتارهای ناشایست می کنید، بهتان برمی خورد و یا سعی می کنید او را نادان و ... جلوه دهید.
اگر ندانید به جز بازی موبایل f2p برای ایران کارهای دیگر هم ممکن هستند دلیلی مثل تحریم یا ... می یابید و هر فکری در این باره را با این جمله که تحریم هستیم در ذهن خوبتون خفه خواهید کرد. اگر ندونید به جز با یونیتی هم می شه بازی ساخت و یا بازی ساختن با چیزی به جز یونیتی لزوما افتخار نیست به خصوص اگه اون چیز یه انجین دیگه باشه که بی امکاناتتر و سختتر هست اون وقت در این باره حرف های احمقانه که به مساله پیش رو مربوط نیست نمی زنید و اون وقت آدم های عمقتر در مساله حرف های شما را از آن به بعد حرف آدمی که نمی داند ولی حرف می زند تلقی نمی کنند. برای این نیاز دارید که جست و جو کنید. در ضمن لطفا اسم کتابای گنده و آدما و روش ها رو یاد نگیرید و بعد دو ساعت در بارشون نخونید و فرض کنید که همه چیو می دونید و شروع نکنید به نظر دادن. یاد گرفتن و جست و جو به بررسی عمیق و دلایل مخالف هر چیز و بررسی انواع استفاده، دلایل پیدایش و نظریات مقابل و تجربه شخصی در اون مورد نیاز داره.
منظورم این نیست که اگه شما تجربه چیزیو ندارید نمی تونید راجع بهش حرف بزنید ولی در یک فن شما اگه ازش استفاده بکنید چیزهایی یاد می گیرید که در نظریات قابل یاد گیری نیستند. در مسایل غیر فنی اصلا این طور نیست و برای این که بفهمید مصرف مواد مخدر خوب نیست یا یک خانواده با پدر و مادر کامل می شود یا بچه نیاز به خانواده دارد، مجبور نیستید روش های مخالف را تجربه کنید و بفهمید که زندگیتان را سخت و دردناکتر از چیزی که مجبور است باشد می کنند. از توانایی های اصلی انسان فکر به چیزی و بررسی نتیجه آن و سعی برای شکف حقیقت است و هرکس ادعا کند برای انجام هر کاری به تجربه عملی نیاز است یا نمی داند راجع به چه چیزی حرف می زند، یا بسیار عقایدش در هم پیچیده شده اند و نمی فهمد چه می گوید یا قصد خوبی ندارد چون در آن صورت همه چیز یک سان و نسبی و شخصی است و نتیجه زور گفتن قدرتمند هایی است که نه ارزشی برای چیزهایی که واقعا و به طوری کلی برای فرد و جامعه بهتر هستند قایل است و نه اهمیتی به ادامه هیچ چیزی می دهد چون تجربه شخصیش و نفع شخصیش در لحظه برایش مهم است. اگر بشر این گونه عمل می کرد احتمالا ما الآن وجود نداشتیم.
اما در کاری فنی که در پروسه انجام به جز مسایل نظری شما با تصمیم گیری شخصی در رویارویی با مساله تصمیم می گیرید چیزهایی یاد خواهید گرفت و این در همه مسایل همین طور است که شما با تجربه آن چیز آن را بهتر یاد می گیرید ولی در واقعیت تجربه همه چیز نه ممکن و نه عاقلانه است و برای همین شما چیزهایی را تجربه می کنید که به نظر درستتر می رسند و هر چه قدر این چیزها از مسایل ذاتی عمومی همه موجودات و انسان ها دورتر و خاصتر باشند و نیاز به تعریف و تجربه برای شناختشان باشد شما نیاز بیشتری به تجربه مستقیم برای هر گونه درکی از نتیجه دارید. برای درک حس انجام هر چیزی تنها راه تجربه است. نتیجه مثلا استفاده از روشی برای کد زدن مثلا DOD با فکر تنها به ان دلیل خیلی سخت است که DOD در طبیعت و طول تاریخ یافت نمی شود و همه آن را درک نمی کنند و عمل برنامه نویسی در مرحله ای از abstraction قرار دارد که یک پروسه کاملا غریبه را بدون تجربه در آن نمی توان به خوبی سنجید مگر ده سال دیگر که استدیو های زیادی این کار را کرده اند و تجربه شان کم کم به دانش لغوی abstract تبدیل شده که این کار را راحتتر می کند چون انواع زیادی از مساله توسط انواع مختلف فرد و تیم با آن حل شده. در دنیای کامپیوتر به عنوان دانشی جوان ما هنوز به آن مرحله در باره بسیاری از مفاهیم نرسیده ایم و ذات کارمان هم به دلیل خاص بودن و پیچیدگی خیلی از مسایل مقاومت خوبی در این زمینه در برابر ما می کند. در نتیجه فعلا یاد گیری خوب چه به شکل عمومی و چه عمیق در مساله خاصی نیاز به کار عملی دارد و شبیه کار مجسمه ساز ها و نجار ها است، هر چند دانش نظر مورد نیاز نیز به حد خوبی زیاد و غیر قابل نادیده گرفتن است. بازی سازی به عنوان کاری که کاملا با ساخت تجربه جدید سر و کار دارد (بازی سازی مستقل) اوضاع را تجربیتر هم می کند.