Shakib Habibi
Shakib Habibi
خواندن ۱۰ دقیقه·۴ سال پیش

دوره کارآموزی؛ مسیر یادگیری

منبع
منبع

مقدمه

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

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


دوره آموزشی

هدف

اول از هر چیز مهم است که هدفمان را از طراحی دوره بدانیم وگرنه قطعا به بیراهه می رویم. همانطور که قبلا ذکرش رفت ما دنبال دوره ای بودیم که نیازهای شرکت و کارآموز در آن دیده شود. کارآموز نیاز دارد که به شکل منظم و با همراهی، مسیر یادگیری را طی کند تا در نهایت بتواند نیازمندی ها و مهارت های اولیه کار در گروه را بدست آورد. از طرفی شرکت هم نیازهایی دارد. اول اینکه بتواند مهارت و توانایی های کارآموز را مورد ارزیابی قرار دهد. دوم اینکه بتواند یک محیط یادگیری برای کارآموز ایجاد کند. سوم اینکه بتواند کارآموز را محک بزند. چهارم اینکه دانش کسب شده توسط کارآموز در راستای دانش مورد نیاز برای پروژه ها باشد. البته که قطعا نیازها برای دو سمت بیشتر از این ها است و حتی نیازها فرد به فرد و شرکت به شرکت متفاوت هستند اما این ها مواردی بودند که ما به صورت کلی دنبالشان بودیم.

کلیت دوره

دوره شامل ۴ فاز است. در هر فاز یک سری فعالیت عملی به عنوان خروجی مد نظر است و در پایان ۴ فاز کارآموز یک پروژه واقعی به اشتراک گذاری عکس و متن را پیاده سازی کرده است. نسخه مینیمالیستی و ترکیبی توییتر و اینستاگرام.
چرا در هر فاز بخشی از یک پروژه انجام می شود تا درنهایت پروژه به نتیجه برسد؟ دلیل اول اینکه فرد با نوشتن یک پروژه واقعی اعتماد به نفس بالایی بدست می آورد موردی که نوشتن تمرین های کوچک و مجزا در اختیارش نمی گذارد. دلیل دوم اینکه با پروسه واقعی تولید یک نرم افزار تا حدودی آشنا می شود و با چالش های واقعی دست و پنجه نرم می کند.

فازها

هر فاز شامل ۵ قسمت است.

بخش اول شامل لیستی از موضوعات و تکنولوژی هایی است که کارآموز باید در آن فاز یاد بگیرد.

بخش دوم شامل لیستی از منابع پیشنهادی است. منابع گاهی بخشی از یک کتاب، یک مقاله یا یک لینک یوتیوب هستند. نکته مهم اینکه این ها صرفا منابع پیشنهادی هستند و وظیفه پیدا کردن منابع خوب و یادگیری بر عهده خود کارآموز است قطعا در این مسیر می تواند از تجربیات بقیه، از جمله منتور، استفاده کند. (در فاز آخر منبعی ارایه نمی شود و وظیفه یافتن و ارائه یک منبع خوب برای هر موضوع با کارآموز است)

بخش سوم شامل سناریویی است که باید پیاده سازی شود. علاوه بر توضیح دقیق سناریو و نیازمندی ها، در قسمت هایی که نیاز است ui و یا api هم ارائه می شود. این سناریو ها در نهایت منجر به ساخت اپلیکیشن نهایی می شوند.

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

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

نقطه پایانی هر فاز

هر فاز یک due date دارد که انتظار می رود کارآموز تا زمان مشخص شده بتواند خروجی کارهای خود، سناریو پیاده سازی شده، جواب سوالات و نتیجه فعالیت عملی، را به منتور ارایه دهد. در این مرحله منتور کدها، سوالات و نتیجه فعالیت را به دقت بررسی می کند و بازخورد های مربوطه را در اختیار کارآموز قرار می دهد. بعد از یک یا چند پروسه رفت و برگشت و تایید همه بخش ها، کارآموز وارد فاز بعد می شود.

موضوعات انتخابی

تعداد موضوعات و تکنولوژی هایی که در حوزه اندروید (و بقیه حوزه ها) وجود دارد خیلی خیلی زیاد هستند. کارآموز قرار نیست همه موارد را یاد بگیرد (البته که افراد ٍexpert هم خیلی ها را بلد نیستند) پس باید با آن مفاهیم و تکنولوژی هایی آشنا شود که در پروژه یا پروژه های شرکت مورد استفاده قرار می گیرد، مثلا rx java‌ بسیار library قوی ای است ولی اگر به هر دلیل در پروژه ها از آن استفاده نمی شود و قرار نیست استفاده بشود، لزومی ندارد در لیست موضوعات آموزشی باشد. من حتی سعی کردم دیزاین هم مطابق پروژه باشد، مثلا اگر ما در پروژه زیاد از bottom sheet‌ استفاده می کنیم قطعا این موضوع بخشی از طرح ها هست. انتخاب موضوع پروژه، دیزاین و تکنولوژی ها خیلی وابسته به شرکت و پروژه ها است.

موقعیت های واقعی

قطعا همیشه شرایط کاری باب میل ما نیست. گاهی UI ناقص است، گاهی API مشکل دارد. گاهی نیازمندی ها واضح نیست و گاهی ابر و باد و مه و خورشید و فلک به کار می افتند که پروژه به deadline نرسد. معمولا کارآموز ها این موارد را تجربه نمی کنند و برای اولین بار در پروژه واقعی با آن روبرو می شوند که ممکن است فشار مضاعفی بر آن ها وارد کند. برای همین خوب است که تعمدا اکثر این اتفاقات را در دوره بگنجانید. مثلا یکی از API ها را به گونه ای طراحی کنید که response مورد انتظار را بر نگرداند، بخشی از دیزان را جوری طراحی کنید که همه نیازمندی ها را پوشش ندهد یا اینکه یکی از deadline ها را فشرده تر در نظر بگیرید.
این کار دو مزیت دارد. اول اینکه فرد شرایط و مشکلات واقعی را تجربه می کند و دوم اینکه ما در هر موقعیت عملکرد کارآموز را می توانیم ارزیابی کنیم و راجع به آن مشورت کنیم. به هیچ عنوان هدف ما از این کار مچ گیری یا اعمال فشار بر کارآموز نیست. برای مثال اگر کارآموز کار را با همان API نیمه کاره تمام کرد برایش توضیح می دهیم که API مشکل داشته است و ما انتظار داریم در این مواقع مشکل گزارش شود نه اینکه به هر شکلی کار انجام شود. یا اینکه متوجه می شویم که deadline خیلی به کارآموز استرس وارد می کند که می شود راجع به این قضیه مشورت کرد و تجربیات را انتقال داد.


سخنی با منتور

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

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

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

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


سخنی با کارآموز

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

تا جایی که می توانید سوال بپرسید. اول از همه سوالتان را از گوگل بپرسید. اگر کامل همه چیز را زیر و رو کردید و نتیجه ای حاصل نشد، از همکارانتان بپرسید. پیشنهاد من این است که به دنبال گرفتن جواب نهایی از افراد نباشید بلکه از افراد بخواهید به شما یک منبع خوب معرفی کنند یا اینکه key word های برای سرچ به شما معرفی کنند.

در نهایت اینکه به کاری که می کنید متعهد باشید. اگر وظیفه ای به شما محول شده است آن را به طور کامل (تا حد توان) و به موقع انجام دهید و اگر به هر دلیل مشکلی در جهت رسیدن به هر کدام از این دو است آن را با منتور مطرح کنید که بتوانید با مشورت همدیگر مجددا برنامه ریزی کنید.


سخن پایانی

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

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