تجربه من از شروع برنامه نویسی و چالش های این مسیر!

سلام به دوستان عزیزم. دوستانی که مثل من عاشق برنامه نویسی هستن و میخوان در این مسیر پیشرفت کنند. چند سالی هست که در حوزه ی برنامه نویسی وب با زبان PHP فعالیت میکنم و با وردپرس و لاراول هم کار کردم (چه شرکتی و چه شخصی) ولی تو این سال ها با خیلی از مشکلات دست و پنجه نرم کردم تو دنیای برنامه نویسی و همینم سرآغاز مشکلات من شد و باعث شد که حتی یه مدت کوتاه برنامه نویسی رو رها کنم و برم سراغ حوزه های دیگه مثل دیجیتال مارکتینگ و یا کلا مدتی از کد دور بودم به فعالیت های دیگه میرسیدم ?‍♂️ (حدود 2 سال از عمرم بدون کد تلف شد متاسفانه). اما چرا؟ چرا این مشکلات بوجود اومد و من رو از کد خسته کرد و حتی اجازه نداد من اونطوری که باید در مسیرم رشد کنم؟ چون برنامه نویسی رو اصولی و مهندسی یاد نگرفته بودم بلکه کد نویسی رو یادگرفته بودم. صرفا بلد بودم کدی بنویسم که کار کنه و ذوق میکردم که به به، عجب برنامه ای نوشتم ?ولی دوباره مشکل از جایی شروع میشد که قرار بود برنامه رو توسعه بدم و یک ویژگی جدید به سیستم اضافه کنم؟ یا اینکه منابع سیستم کم میومد درصورتی که منابع سیستم واقعا خوب بود برای میزبانی از اون نرم افزار. یا اینکه یه فرد دیگه میومد نرم افزار رو توسعه بده ولی نرم افزار انقدر بد نوشته شده بود که دیگه اون فرد به این راحتی نمیتونست توسعه نرم افزار رو انجام بده و اگرم موفق میشد که توسعه بده بالاخره یک جایی به نتیجه میرسید که سیستم دیگه قابل نگه داری نیست و باید از نو سیستم رو بنویسن و توسعه بدن و این مستلزم این هست که کارفرما هزینه و سرمایه گذاری مجدد انجام بده و وای به اون روزی که اون فرد جدید هم یک کدنویس باشه و نه یک برنامه نویس که دیگه خدا به داد برسه میشه قوز بالای قوز. اینجاست که من به عنوان یک کدنویس، نه برنامه نویس، بیشترین ضربه رو به اون شرکت یا اون فرد زدم چون من بنیان اون برنامه رو اشتباه چیدم و این میشه حق الناس که من روش به شدت حساسم ?. بگذریم، دید که چقدر مشکلات بوجود اومد فقط به واسطه ی اینکه من مسیر آموزشیم رو اشتباه رفتم. من اول زبان PHP یادگرفتم. بعدش شی گرایی بصورت سطحی و نه عمقی (مثل هزاران آموزش سطحی شی گرایی در سطح وب)، بعد یه دوره آموزش طراحی قالب و افزونه وردپرس دیدم. بعد برای خودم چندتا قالب و افزونه وردپرس درست کردم و اینجا بود گفتم من خدای توسعه وردپرسم. بعد رفتم سراغ لاراول و آموزش لاراول دیدم و همزمان یه فروشگاه اینترنتی هم نوشتم و اینجا بود که گفتم تبریک به تو تبریک به من و تبریک به همه، محمد حسن تو الان شدی یک برنامه نویس تاپِ لاراول. تا اینکه رفتم مصاحبه و قبول شدم و روز اول خوشحال رفتم سرکار و کد رو به من دادن برای مطالعه (شرکتش هم قوی بود انصافا و برنامه نویس داشتن نه کد نویس) و اینجا من هنگ شدم ? چرا؟ چون چیزهایی رو دیدم که اصلا تا اون روز ندیده بودم! اصلا کدها و ارتباطاتشون نمیفهمیدم? اون کدا پُر بود از دیزاین پترن ها و الگوریتم ها و ساختمان داده ها و معماری های قشنگ و ... که من فقط اسمشون شنیده بودم و هیچ وقت به سراغشون نرفته بودم. خلاصه آقا من فقط چند ماه تو اون شرکت دَووم آوردم و از شرکت بصورت دو طرفه خداحافظی کردم ?. البته علت خروجم از شرکت فقط دانش کم فنیم نبود و مسائل دیگه هم بود مثل راه دور و ....خلاصه اومدم بیرون از اون شرکت و بعدش فهمیدم که اَی دل غافل ?‍♂️ خیلی چیزای مهم تر برای برنامه نویس شدن وجود داره و اصلا عیار یه برنامه نویس به همون چیزاس که من اصلا اونها رو نداشتم و بهشون بها نمیدادم. خلاصه نشستم و شروع کردم به خوندن در مورد اونها ولی بصورت سطحی ولی بعضی از اونها رو بطور عمیق مطالعه کردم، خودم فهمیدم کدهایی که میزنم نسبت به گذشته بهتر شده بود. به همین دلیل دوباره وارد کار شدم و کار کردم و در کنار افراد با تجربه بیشتر یادگرفتم. خلاصه تجربه های چالش برانگیز زیاد داشتم و چندتا پروژه فریلنسری انجام دادم که خوب بود واقعا. دیگه الان هم جایی مشغول به کار نیستم چون به زودی قرار هست که برم به خدمت مقدس سربازی ?‍♂️. ولی بعد از همه‌ی این تجربه ها تصمیم گرفتم خیلی خیلی عمیق شروع کنم به مطالعه‌ی اصول مهندسی نرم افزار و مطالبی که یک برنامه نویس باید بلد باشه تا بتونه هم رشد کنه و هم از چالش های کاریش لذت ببره?.الان هم که این داستان برای شما میتوسم یک پروژه در دست دارم که یک سیستم آزمون آنلاین هوانوردی است برای افرادی که در صنعت هوانوردی مشغول به فعالیت هستند و شکر خدا ازش استفاده هم میشه و بدون مشکل داره کار میکنه ? و همزمان هم در حال توسعه‌ش هستم و هم در حال ریفکتورینگ. حالا چرا ریفکتورینگ؟ چون هر روز دارم بواسطه مطالعه و یادگیری هام کدهایی که نوشتم رو بهتر و اصولی تر و خوانا تر و از همه مهمتر، قابل نگهداری تر میکنم که مهمترین ویژگی یک نرم افزار هست.حالا همه ی اینهارو گفتم که این مشکلات برای دوستانی که میخوان وارد حوزه‌ی برنامه نویسی بشن دیگه بوجود نیاد و تجربه من رو که احتمالا برای خیلی ها بوجود میاد، تجربه نکنن و بدونن در کنار ابزارها و فریم ورک هایی که یاد میگیرن باید چه مطالبی و عنوان هایی رو مطالعه کنن که واقعا تبدیل به یک برنامه نویس یا مهندس نرم افزار بشن تا اینکه صرفا فردی باشن که فقط بلده مثلا با لاراول کد بزنه ولی از پشت پرده و مباحث اصلی کاملا بی اطلاع هست که این واقعا میتونه در آینده به ضرر افراد بشه. و اگرم تجربش میکنن بدونن که باید چه کاری برای برطرف کردنش انجام بدن. من خودم خیلی خیلی دنبال رفع این مشکلاتم بودم و همچنان هم هستم و براش واقعا هزینه میکنم (البته هزینه برای کلاسای درست نه کلاسای الکی) چون برام مهمه که رشد کنم و در نهایت تبدیل بشم به یک مهندس نرم افزار واقعی که واقعا دوستش دارم. مثلا همین الان که دارم این تجربه رو برای شما عزیزان مینویسم همزمان در کلاس الگوهای طراحی آکادمی سون لرن هم شرکت کردم تا در این موضوع هم پیشرفت کنم و یکبار برای همیشه پرونده دیزاین پترن هارو ببندم و واقعا پیشنهاد میکنم در کلاس های اساتید خوب مثل استاد کیوان علی محمدی شرکت کنید چون ارزشش رو داره. من خودم بسیار از ایشون یادگرفتم و تا ابد شاگرد ایشون هستم.اما دوستان دیزاین پترن ها تنها قدم برای تبدیل شدن به یک مهندس نرم افزار نیست و ما باید قدم های دیگری هم برداریم. اما قدم اول برای تبدیل شدن به یک مهندس نرم افزار چی هست؟ مطالعه عمیق و کاربردی ساختمان داده و الگوریتمساختمان داده و الگوریتماز امروز سعی دارم کتاب ها و مقالاتی که میخونم و یا قبلا خوندم رو با شما دوستان عزیز به اشتراک بزارم تا باهم و در کنار هم رشد کنیم تا انشاءالله تبدیل به یک برنامه نویس با ارزش بشیم و از کار و زندگیمون لذت ببریم.امیدوارم سرتون درد نیومده باشه ???. دیگه بریم آماده بشیم برای اولین مطلب آموزشیمون که در مورد ساختمان داده و الگوریتم هست و قطعا چندین بخش هم داره ? و قراره چند جلسه‌ای رو از محضرش فیض ببریم??.