چگونه برنامه نویس شویم! مسیر کاری من...

وز ۲۵۶ام هر سال مطابق با ۱۳ سپتامبر (۲۲ شهریور) به عنوان روز برنامه‌نویسان نام گرفته‌است. من هم این پست رو به دعوت شرکت داتین نوشتم تا تجربیات خودم رو در ۲۰ سال اخیر که در این حوزه فعال بوده‌ام بنویسم. اینکه چطور وارد این حوزه شدم، چطور پیش رفتم و چه نقاطی در زندگی کاریم بعنوان نقاط عطف زندگیم بود و منجر به رشد و توسعه خودم شد.آغاز برنامه نویسی: دبیرستان و کیو بیسیکحدود سالهای ۷۵ بود که در دبیرستان QBasic وارد زندگی ما شد و من با یک کامپیوتر ۲۸۶ شروع کردم به کدنویسی و بر خلاف بقیه بچه های مدرسه که معمولا از این درس فراری بودند، من عاشق برنامه نویسی شدم. بجز تمرینات ساده ای که معلممون بعنوان تمرین به ما میداد، من سعی میکردم برنامه های جذاب تری بنویسم و حداقل خودم از اجرای اونها لذت ببرم. دموهای گرافیکی که با زبان سی یا بیسیک میساختیماولین برنامه هایی که نوشتم یک ماشین حساب و یکسری دموی گرافیکی بود که تصاویر گرافیکی خاصی را (با کدهایی که توی لوپ میذاشتیم) روی صفحه می کشید و اون سالها برای همه جذاب بود. ورود به دنیای ویژوالدنیای ویژوال همیشه برای من جذاب بود و من هم کم‌کم با زبان Visual Basic آشنا شدم و این زبان شد یار همیشگی من. پس از نوشتن چندین برنامه کوچولو توی این محیط، شروع کردم به نوشتن اولین برنامه جدی‌ام که یک برنامه آموزش زبان برای بچه ها بود. برنامه آموزش زبان Hello babyاسم این برنامه رو Hello Baby گذاشتم و سعی کردم از دانش فتوشاپم هم توش خیلی استفاده کنم. برنامه شامل چند تا بازی پازل و کارتون کوتاه و صفحات یادگیری زبان بود. عکسی از این نرم افزار رو در بالا می بینید. دیگه کم کم ویندوز ۹۸ وارد بازار شده بود و جا افتاده بود و دیگه مشخص بود که سیستم عامل های بعدی همگی روی محیط ویژوال سرمایه گذاری خواهند کرد. ورود به دنیای برنامه نویسی وباوقات فراغت من معمولا اینجوری میگذشت که از ۱۰ صبح تا ۱۲ شب پای کامپیوتر بودم و در حال تست کردن کدهای مختلفی که توی کتابهای برنامه نویسی میخوندم. حدود سال ۲۰۰۰ بود که به برنامه نویسی صفحات وب علاقمند شدم و کار با HTML رو یاد گرفتم. سعی کردم کار با هاست و دامنه رو یاد بگیرم تا بتونم صفحات خودمو روی اینترنت منتشر کنم. و اولین سایتم رو با HTML و کمی CSS منتشر کردم. اون زمان داشتن یک صفحه contactUS خیلی چیز شاخی توی سایت محسوب میشد و مشکل این بود که این صفحات، نیازمند کدنویسی داینامیک سمت سرور بود. ASP classicمن که مدتی روی زبان VB کار کرده بودم، برنامه نویسی ASP classic رو در یک موسسه شروع کردم و حالا می تونستم خودم صفحات داینامیک ساده ای رو بسازم. کم کم شروع کردم با دیتابیسها کار کردن. یادم میاد که برای وصل شدن به دیتابیس Access سه تا کتاب مختلف خریدم تا اینکه نمونه کد یکی از اونها کار کرد و من تونستم اطلاعاتم را از صفحه وب بگیرم و توی دیتابیس کار کنم. اینجا حدود سال ۸۱ بود و یه حس خداگونه ای به من دست داده بود... حالا میتونستم برنامه های داینامیک تحت وب بنویسم!ارایه خدمات طراحی و ابزارهای وبلاگیدر کنار سایت خودم که مقالات تخصصی را توش مینوشتم، یه سایت راه اندازی کردم که توش خدماتی رو به وبلاگ نویسان ارایه میداد. خدماتی مثل قالب وبلاگ و کدهای جاوااسکریپت بانمک برای وبلاگها. بازدید سایت به چندین هزار نفر در روز رسیده بود و هزینه های نگه داریش دیگه داشت سخت میشد. اینجا بود که با گروه پرشین بلاگ آشنا شدم و بعد از سه ماه کار ازمایشی، بعنوان طراح وب در پرشین بلاگ استخدام شدم.کار تیمی در پرشین بلاگاز سال ۸۴ که همکاریم رو با پرشین بلاگ شروع کردم، ده‌ها سایت مختلف رو اونجا طراحی و برنامه نویسی کردم و این همکاری تا سال ۹۱ طول کشید. توی اون دوران کم کم سر و کله تکنولوژیهای دات نت مایکروسافت پیدا شد و من هم به VB.net و ASP.net رو آوردم. Microsoft .netاستفاده از استَک ASP.net (که بقیه تیم ما هم ازش استفاده می کردند) کمک میکرد که بتونم با بقیه بچه های تیم برنامه نویسی (که تجربه های خیلی بیشتری از من داشتند) همراه بشم. اون موقع بخشی از شرکت ما از PHP استفاده میکرد و همیشه بین تیم ما و اون یکی تیم کل‌کل بود که کدوم بهتره :)) این کل کل ها تا وقتی که منجر به یادگیری بیشتر و شور و شوق بیشتر در شما بشه، خیلی مفیده و باعث میشه توی استک مورد علاقه خودتون پیشرفت کنید. یه چیز خیلی مهم در کارهای تیمی، برقراری ارتباط سالم بین افراد تیم با هم و یا با سایر تیم های داخل شرکت است. در خیلی از موارد یک تیم معمولی، اما همدل و منسجم، خروجی بهتری از یک تیم خفن که یکی دو تا خودشاخ‌پندار توشون هست دارند. علتش هم مشخصه. کار تیمی نیازمند همکاری است. اگر شما از مهارت های ارتباطی خوبی برخوردار نباشید یا علاقه ای به کار تیمی نداشته باشید، مهم نیست که چقدر کارتون خوبه! باید از تیم جدا بشید. (و گاهی هم باید از شرکت جدا بشید!)به روز رسانی دانش برنامه نویسیدر حوزه برنامه نویسی، آپدیت کردن شما وظیفه خودتونه. این باید طرز فکر شما باشه آپدیت کردن شما وظیفه خودتونه و در این راه میتونید از همکارانتون هم کمک بگیرید. اما ۹۰٪ کار رو تلاش خودتون شکل میده. اگر بخواهید فقط هرچی که شرکت ازتون میخواد رو انجام بدید و چیزی فراتر از اون یاد نگیرید، پس از یکی دوسال کاملا outdated میشید و از قافله عقب می مونید. پس همیشه کیفیتی فراتر از انتظار مدیرتون ارایه بدید و پیشرفت کاری و مالی را در ادامه می بینید.سرویس وبلاگ دهی پرشین بلاگما توی شرکت یکسری وظایفی داشتیم که مستقیما از سمت مدیرمون به ما داده میشد و در عین حال یکسری وقت آزاد هم داشتیم که ایده هایی رو برای شرکت، طراحی و برنامه نویسی می کردیم و خیلی از این ایده هایی که اول شوخی بودند، کم کم تبدیل به سایتهای بزرگی شدند.این دوران بیشترین زمانی بود که من روی یادگیری تکنولوژی های گوناگون وقت میگذاشتم و هر روز یک شگفتی بود. هر تکنیک جدید راه رو به دنیای جدیدی از امکانات توسعه وب باز میکرد. یکی از تکنولوژیهایی که خیلی جذاب بود RegEx بود که تونستم باهاش ابزاری برای ترجمه قالبهای وبلاگ سیستم های مختلف به همدیگه بنویسم و بعدها این ابزار کلی کار منو جلو انداخت. چون به جای اینکه یه کار رو دستی انجام بدم، ابزاری ایجاد کرده بودم که اینکار رو بصورت اتومات در یک ثانیه انجام میداد. (این ابزار کمک میکرد که شما بتونید مثلا یک قالب وبلاگ بلاگفا را روی پرشین بلاگ استفاده کنید. و برعکس البته)سختی های یادگیری برنامه نویسیدر دهه هشتاد، یادگیری برنامه نویسی کار سختی بود. چون منابع خیلی کم بود و StackOverflow هم نبود که به دادمون برسه. تنها منبع ما کتابهای برنامه نویسی بود که به ندرت گیر می‌اومدند. اما امروزه وجود اینترنت و کامیونیتی های گوناگون برای برنامه نویسان، کمک خیلی زیادی به رشد و یادگیری سریع ما میکنه. اگه الان با اینهمه امکانات هنوز روی یادگیری خودتون سرمایه گذاری نمیکنید، واقعا باید بگم که دارید به خودتون خیانت میکنید و شمای پنج سال بعد، از شمای امروزتون خیلی شاکی خواهد بود. تمرکز روی طراحی محصول و فرانت-انداز حدود سال ۹۳ بود که دیگه تمرکزم را روی طراحی فرانت و مدیریت پروژه ها گذاشته بودم و بخش بک-اند رو با تیمی متشکل از چند دوست خارج از شرکت پیش می بردم. دنیای تکنولوژی های وب در حال گسترش بود و نمیشد روی همه ابعادش متمرکز باقی ماند. از همون سالها بود که مدیریت محصول و مدیریت طراحی برام جذاب شد و حالا دیگه تمرکزم را روی این بخش گذاشته بودم. گرچه دانش برنامه نویسی همیشه کمک بسیاری به من در بخش مدیریت محصول کرده و برای کسانی هم که میخوان وارد حوزه مدیریت محصولات نرم افزاری بشن، همیشه پیشنهادم اینه که از برنامه نویسی شروع کنند تا محدودیت ها و قابلیت های توسعه رو بفهمند و بعدها که تجربه بیشتری پیدا کردند و مدیر پروژه ای شدند، بتونن با تیم برنامه نویسی ارتباط موثر برقرار کنند. سخن پایانیشاید یک مهندس عمران بتونه با مدرکی که گرفته تا ۲۰ سال خونه بسازه و کار کنه. اما برنامه نویسی اینجوری نیست و حتی تکنولوژی های ۵ سال پیش هم دیگه به درد نمی خورند. شما بعنوان برنامه‌نویس، شغل پر چالشی را انتخاب کرده اید و بقول معروف در لبه تکنولوژی قدم میزنید. باید همواره در حال یادگیری باشید تا از دنیای تکنولوژی که با سرعت وحشتناکی داره پیشرفت میکنه عقب نمونید. روزتون هم مبارک :)