همه ایده‌های من: ایده زود بازده آموزش دادن!

اینم یه تجربه پراکنده دیگه!

خب من مدت‌هاست سعی می‌کنم از ایده‌هام بنویسم. مهمترین دلیل این نوشتن اینه که بتونم اول از همه خودم رو خلاص کنم. دوم اینکه این ایده‌ها اینجا ممکنه نظرات یا بازخوردهایی رو داشته باشه که من رو به این نتیجه برسونه که روی ایده بیشتر کار کنم یا اصلاحش کنم.

من به دلیل اینکه پدرم معلم هستن، همیشه به معلمی و درس دادن علاقه داشتم و دوستانی که من رو از نزدیک می‌شناسن یا شاگرد من(من بصورت آماتور استاد دانشگاه هستم) بودن میدونن که کم یا زیاد از پس درس دادن بر میام و حداکثر سعیم رو میکنم که مطلبی که باید انتقال پیدا کنه رو انتقال بدم. پس همیشه دوست داشتم که درس بدم و هنوز هم دوست دارم. این علاقه باعث شده که یکم فکر کنم تا ببینم چطور می‌تونم از این راه کسب در آمد کنم.

چرا آموزش

توی یکی از پستهای قبلی، نوشته بودم که با استفاده از یه روش ساده شما یه تخمین از این داری که کدوم یک از ایده‌هات در کوتاه مدت یا دراز مدت چقدر بازدهی خواهد داشت. ایده آموزش دادن هم یکی از اون ایده‌ها بود که به نظر میرسید از کارهای دیگه زود بازده تر باشه چون شما هزینه ساعاتی که وقت میگذاری رو مستقیم می‌گیری اما خیلی قابلیت بزرگ شدن نداره.

دوم اینکه الان یه مشکلی که تقریبا تمام شرکت‌ها با اون مواجه هستن نیروی انسانی هست. یعنی ما خیل عظیمی از داشنجوهای تازه فارغ التحصیل رو داریم که اونها آمادگی‌های لازم برای حضور در محیط کار رو ندارن. همچنین شرکت‌ها کلی زمان و هزینه‌شون رو صرف یاد دادن به نیروهای تازه واردشون می‌کنن. این یاد دادن د دوتا ضرر برای شرکت‌ها داره، اول اینکه معمولا حق‌الزحمه‌ای به نیروهای تازه کار داده میشه و دوم اینکه یکی از نیروهای متخصص یا با تجربه شرکت مجبوره کار خودش رو کنار بگذاره و نیروی تازه وارد رو آموزش بده. این آموزش تقریبا ۲ تا ۳ ماه طول می‌کشه که خب زمان به نسبت طولانی هست.

سوم اینکه من خودم همیشه به آموزش دادن علاقه داشتم و دارم!

مزایا و معایب آموزش دادن

مزایای آموزش به نظر من اینهاست
* علاقه شخصی منه
* به نسبت پول خوب در میاره
* نیاز به سرمایه گذاری آنچنانی نداره و بیشتر سرمایه گذاریش از جنس وقت و زمان مدرسه

معایب آموزش هم اینه که
* خیلی قابل توسعه نیست و شما بیشتر از ۸ ساعت در روز نمیتونی درس بدی
* بصورت فصلی میتونی روش حساب کنی و دائم نیست

روش‌هایی که من اگه آموزش بدم دوست دارم ازش استفاده کنم

خب من رفتم گشتم و دیدم که دنیا عوض شده حتی دنیای آموزش اگه احتمالا من بخوام آموزش بدم از روش کلاس وارونه استفاده می‌کنم. توی کلاس وارونه شما مطالب رو خودت قبلا توسط روشهای مثل کتاب، جزوه یا فیلم توی خونه می‌خونی و توی کلاس میای مساله حل می‌کنی یا از اون علمی که یادگرفتی استفاده می‌کنی. میگن در این روش به علت دست و پنجه نرم کردن دانش‌اموزها با مواد آموزشی و استفاده عملی از اونها توی کلاس عمق یادگیری خیلی بالاتر میره.

خب پس اگه من بخوام کلاسی برگزار کنم با علم فعلیم شروع میکنم به تولید یه سری محتوای آموزشی که بصورت احتمالا فیلم و جزوه کوتاه خواهد بود و بعد با دانش‌اموزان کلاسم مسائل واقعی رو در کلاس حل خواهیم کرد.

چه چیزهایی رو آموزش خواهم داد

من اگه واقعا بخوام به شخصه چیزی رو آموزش بدم یکی از موارد زیر رو انتخاب می‌کنم:

  • نحوه کار و استفاده از pfsense: چون از نظر من یه روتری هست که کل کارهای یه شرکت به نسبت بزرگ تقریبا ۲۰۰ نفره رو الان دارم باهاش انجام میدم و خیلی کم هزینه تر و بهتر از مشابه‌هاش عمل می‌کنه
  • به دیگران python یاد میدم: به نظر من python یه زبان بسیار ساده و خوبه که خیلی از کارها توش به سادگی و راحتی انجام میشه و ارزش داره که همه اونهایی که توی نرم‌افزار کار میکنن یه سری بهش بزنن.
  • دروپال یاد میدم: چون تقریبا یک سال و نیم ازش استفاده کردم و میدونم قابلیت‌هایی داره که به درد خیلی از آدمها میخوره. لازم به ذکر میدونم که بگم کلاس بار طراحی و وبش کمتر از دورپال خواهد بود چون من خیلی وب و front end بلد نیستم
  • به آدمها سی توی لینوکس یاد میدم: یکی از جاهایی که آدم واقعا عمق کامپیوتر رو درک میکنه وقتیه که داری با سی سرو کله میزنی

یه چیز دیگه‌ای که خودم واقعا دوست دارم انجامش بدم و دیدم که آرش میلانی عزیز هم داره سعی میکنه انجامش بده اینه که میرم و توی شرکت‌ها میبینم که فردی که قراره استخدام بشه به چه مهارتهایی نیازمنده و اون مهارتها رو بصورت خاص منظوره یادش میدم. این باعث میشه که شرکت‌ها و خود تازه واردها کلی جلو بیفتن

جمع بندی و نتیجه گیری

احتمالا با توجه به اینکه سر من خلوت شده و پروژه‌ای که دستم بود تموم شده بعد از یه مدت دیگه شروع به فکر کردن در مورد کلاسها میکنم و اونها رو تبلیغ می‌کنم تا ببینم کسی توی کلاسها شرکت می‌کنه یا نه. در صورتی که این کلاسها به حد نصاب رسید در یک فرصت مناسب مطالب رو آماده می‌کنم و بهشون میدم تا کلاس شروع بشه و در کلاس هم سعی میکنم با مسائل واقعی در گیرشون بکنم.

اما اگه این تبلیغات به نتیجه نرسه و کسی نخواد توی کلاسها شرکت کنه این ایده‌هم مثل خیلی از ایده‌های دیگه ابتر میمونه و به علت عدم وجود نیاز به نتیجه نمیرسه.

فعلا همین!

لذت برنامه نویسی! نگهداری و مدیریت نسخه‌ها و آنچه گذشت!

اینم یه تجربه پراکنده دیگه!

من مدت‌های زیادی هست که برنامه نویسی می‌کنم و توی این مدت سعی کردم در مورد تکنیک‌های و شگردهایی که در دنیا برای برنامه‌نویسی استفاده میشه اطلاع کسب کنم. از اولین چیزهایی که باهاش آشنا شدم سیستم‌های کنترل و مدیریت نسخه یا همون Version Control System هست. حالا میخواستم یکم بیشتر در این مورد توضیح بدم چون دیدم که خیلی‌ها علاوه برا اینکه از این ابزارهای استفاده نمی‌کنن اعتقادی هم به استفاده ازش ندارن.

بصورت ساده این سیستم‌های به روش‌های مختلفی نسخه‌های مختلف فایل رو نگهداری می‌کنند یا «آنچه گذشت» رو مدیریت می‌کنند. این ابزار برای برنامه نویس‌ها و تقریبا هر کسی  که یه سری فایل رو بصورت مداوم بروز رسانی می‌کنه (مثلا متن یک قرار داد، یا یک مقاله علمی و …) مهمه. وقتی کار جدی می‌شه خیلی وقت‌ها به این نیاز میشه که بدونیم:

  • تغییرات این نسخه نسبت به نسخه قبل چیه؟ یا بدونیم که قبلا چی بود و الان چی هست.
  • در صورتی که این فایل‌ها توسط بیشتر از یک نفر دارن مورد ویرایش قرار می‌گیرن همیشه این سوال وجود داره که آخرین نسخه فایل چیه؟
  • سوال بعدی که پیش میاد اینه که چه کسی مسئول اضافه کردن این بخش به فایل(به عنوان مثال قرار داد) هست که بعدا خودش تصحیحش کنه.

اما برای استفاده از این سیستم‌ها همیشه یه مقاومتی وجود داره که دلایل معمولش اینا هستن:

  • اولین و معمولا مهمترین دلیل مقاومت در مورد این سیستم‌ها اینه که افراد در قبال تغییر مقاومت میکنن و همیشه دوست دارن توی وضعیت فعلی بمونن. معمولا اجباره که باعث میشه آدم‌ها از وضعیت فعلیشون خارج بشن و یه چیز جدید یادبگیرن
  • دومین دلیل اینه که دلیل و اهمیت استفاده از این سیستم‌ها رو درک نکردن. یعنی نمیدونن که اگه از این سیستم‌ها استفاده کنن چه سودی نصیبشون میشه و درصورت عدم استفاده چه چیزی رو از دست میدن. من خودم به شخصه جز این دسته از آدمها بودم و الان بعد از مدت‌ها استفاده از این سیستم‌ها حتی سعی میکنم تاریخچه کارهای بی اهمیتم رو هم داشته باشم
  • سومین دلیل که به دلیل اول هم مربوط میشه اینه که «ترک عادت موجب مرض است» یعنی آدمها باید روندی رو که خیلی روزمره است و خیلی بهش عادت دارن عوض کنن.

اگه بخوام اسمی از این ابزارها بیارم لیستشون خیلی زیاده و دعوا هم سر اینکه کدوم بهتره زیادن. مثلا دوستانی که با ابزارهای مایکروسافت کار میکنن TFS رو با دنیا عوض نمی‌کنن. دوستانی که در محیط لینوکس برنامه نویسی میکنن و یکم هم قدیمی هستن از SVN تا خون در رگ دارن دفاع میکنن. و اونایی که «اوپن سور باز» هستن هم GIT رو میپرستن. اما دقت داشته باشید که از دید من مهم‌ترین قسمت اینه که یکی از این سیستم‌ها در محیط شما مورد استفاده قرار بگیره و اینکه اون ابزاری رو انتخاب کنید که اکثریت آدم‌ها نسبت بهش نظر خاصی ندارن و یا با اون سیستم به اصطلاح «راحتن».

اما لیست برنامه‌های کنترل نسخه اینا هستن:

  • Team Foundation Server: این برنامه توسط مایکروسافت تولید میشه که یک مجموعه کامل مدیریت پروژه نرم‌افزاریه که شامل برنامه کنترل نسخه هم هست. این نرم افزار جزء نرم‌افزارهای مدیریت نسخه متمرکزه.
  • GIT: این سیستم که توسط لینوس توروالدز نویسنده هسته لینوکس برای مدیریت کدهای هسته لینوکس مورد استفاده قرار گرفته. این سیستم جز سیستم‌های مدیریت نسخه غیر متمرکزه
  • CVS: تقریبا قدیمی ترین برنامه کنترل نسخه متمرکزیه که من میشناسم
  • SVN: یک سیستم مدیریت نسخه متمرکز است که طراحی شده تا با CVS همخوانی داشته باشه و اشکالات این سیستم رو رفع کنه
  • HG: هم تقریبا همزمان با GIT توسعه پیدا کرده و هدفش این بوده که سیستم مدیریت نسخه غیر متمرکز باشه.
  • Bazaar: سیستم کنترل نسخه غیر متمرکزه که توسط شرکت canonical پشتیبانی میشه

حالا اگه خواستید از سیستم‌های کنترل نسخه استفاده کنید قبل از اینکه بخواید روی اینکه از کدوم ابزار استفاده کنید باید روی این کار کنید که آدم‌های شما بخوان از این سیستم‌ها استفاده کنن.

همین

شنا در سطح یا غواصی در اعماق: نیاز به دانایی در بازار نرم افزار ایران

خب اینم یه تجربه پراکنده دیگه

جادی یه متن نوشته بود که اگه یه نفر قرار شروع به یادگیری کنه چه زبانی رو یادبگیره و هر کدوم چه سود و زیان‌هایی داره. حالا من از یه منظر دیگه میخواستم که به همین موضوع بپردازم و اونم اینه که در مجموع یه فعال نرم افزار توی ایران چقدر نیاز به دانش داره.

خب من دوستانی دارم که هر کدومشون به معنای واقعی عالم دهرند و واقعا کارهایی در صنعت کامپیوتر و نرم افزار این مملکت انجام دادند که هیچکس به نظر من انجام نداده. کارهای بسیار بزرگ تا کارهای خیلی پول زا. اون هم با تنوع زیاد، یه نفر یه سیستم خیلی با کیفیت با .net نوشته. اون یکی دیگه به دوتا از شرکت‌های موبایل کمک کرده سرویس‌های عجیب غریبشون رو مدیریت کنن. اون یکی دیگه تونسته که کل مدیریت یه دیتا سنتر رو اتوماتیک کنه و …

اما با توجه به برخوردهای من با این دوستان در مجموع به نظر من یک نفر به عنوان فعال نرم افزار بایستی چند تا نکته رو در نظر بگیره:

  • هیچوقت یادش نره که بایستی غواصی کنه: منظورم اینکه شما بایستی قدرت یادگیری و عمیق شدن رو در خودتون تقویت کنید. الان حوزه نرم افزار شکل خاص و درست نداره و نیازمندی‌هاش بصورت مداوم در حال تغییره. صنعت کامپیوتر در ایران بالاخص خیلی جونه و ما بایستی توانایی تطبیق با این تغییرات رو داشته باشیم
  • دوم در صورت نیاز غواصی کنه چون غواصی طولانی باعث میشه علاوه بر مو، دندون ها آدم هم بریزه: تاکید زیاد بر عمیق شدن آدم رو برای کارهایی آماده میکنه که بهتره بگم مثل شکوندن شاخ دیو میمونه. یعنی خیلی کمه یا غیر ممکنه. پس هرچه عمیقتر بشید احتمال کار پیدا کردنتون کم میشه اما احتمال گنج پیدا کردنتون زیاد.
  • سوم اینکه شناگر ماهری باشه تا اگه مجبور شد بتونه جون خودش رو با شنا نجات بده: داستان گذران زندگی چیز عجیبی نیست یه وقتایی آدم مثل اون جوکه «مجبوره! مفهمید!» و بایستی بتونه با شنا کردن جون خودش رو نجات بده

همین!