برنامهنویس،علاقمندحوزههوشمصنوعیوهزارانچیزدیگه
چگونه فلان چیز رو یاد بگیرم؟
داشتم کتاب لینوکس و زندگی رو از مجموعه پروژه های جادی میخوندم که به بخش جذاب "چگونه فلان چیز رو یاد بگیرم" رسیدم، بسیار برام جذاب بود و از خوندنش لذت بردم. تصمیم گرفتم عین متنشو براتون کپی کنم و در اینجا بزارم، تا کسی که وقت خوندن کامل کتاب رو نداره بتونه حداقل این یه بخش رو بخونه.
خوندن کل کتاب برای گیک ها و دوست داران یادگیری پیشنهاد میکنم و اگر دوس داشتید میتونید از طریق این لینک به این پروژه آزاد کمک کنید.
«چطوری پایتون یاد بگیرم؟»، «چطوری توسعه کرنل رو یاد بگیرم؟»، «چطوری هک کنم؟ منظورم چگونه هکر شویم اریک ریموند نیست، منظورم کشف حفرههای امنیتی در کرنل است»، «چطوری دانشمند داده بشم؟» و ... اینها سوالهایی هستن که همیشه تکرار میشن و واقعا هم جواب ثابتی ندارن، یا بهتره بگم جوابشون بنا به شرایط هر فرد تغییر می کنه.
به زودی به این «حالت های مختلف یادگیری» نگاه خواهیم کرد ولی قبلش لازمه به یک نکته اشاره کنم: خیلی وقت ها سوال اصلی این نیست که «چگونه X رو یاد بگیرم» بلکه اینه که «من می خوام X باشم». وقتی کسی می پرسه «چطوری می تونم کرنل رو توسعه بدم» واقعا منظورش این نیست که «من می خوام چند سال برنامه نویسی یاد بگیرم و ساعتهای طولانی در روز لیست پستی کرنل رو بخونم و سوادم رو بالا ببرم و یک بخش حوصله سر بر ولی مفید (مثلا مهندسی معکوس پروتکل یک کارت شبکه بی سیم غیرمرسوم و پیاده سازی اون به زبان سی) رو انجام بدم و بعد سعی کنم یک نفر دیگه رو قانع کنم که این بخش رو قبول کنه و به توروالدز پیشنهاد بده» بلکه منظورش اینه که «من می خوام خفن باشم، راه ساده ای داره؟». همین مساله در مورد دنیای هک هم هست. یک هکر کلاه سفید به شکل طبیعی کسی است که ساعت ها و روزها و ماهها وقت می ذاره و می گه فلان لوپ در فلان روتین خاص شاید فلان مشکل رو داشته باشه یا کلی وقت می ذاره یک قرارداد تست نفوذ می بنده و بعد از روی یک لیست بلند بالا یکی یکی حالت های مختلف نفوذ رو روی یک نرم افزار تست می کنه و گزارشی تایپ می کنه که توش می گه چه مشکلات امنیتی در این نرم افزار هست و طبق قرارداد پولش رو می گیره یا شغلش اینه که کلی فرمور کلی روتر رو آپدیت کنه و این چیزها ولی خیلی ها دنبال تصویری غیر واقعی هستن که توش نصفه شب ها بیدارن و کار می کنن (و خوابشون هم نمی یاد و خسته هم نیستن) و می تونن به ایمیل همه مردم دنیا دسترسی داشته باشن و هر حساب بانکی که خواستن رو هک کنن و غافلن از اینکه اصولا در دنیا چنین آدمی وجود نداره.
خلاصه اینکه نکته اول اینه که بدونیم اصولا آیا سوال اینه که «چطور فلان چیز رو یاد بگیرم» یا سوال اینه که «می خوام فلان چیز باشم، راه ساده ای هست؟».
همیشه نقل می کنم از استاد پیران که می گفت آسانسور پیشرفت هنوز اختراع نشده و هر کس می خواد پیشرفت کنه باید قدم به قدم از پلههای ترقی بالا بره.
اما اگر سوال واقعا اینه که «چطور می تونم فلان چیز رو یاد بگیرم؟» جواب اصلی اینه: به چهار طریق.
چهار شیوه یادگیری
در علم یادگیری نظریات بسیار متنوعی است که من معمولا به یکی از سر راست ترین هاش ارجاع می دم؛ نظریه پیتر هانی و آلن مامفورد. این دو نفر در نوشتههاشون میگن که آدمها در چهار مرحله / روش یاد میگیرن:
- فعال
- انعکاسی
- تئوری
- عملگرایانه
این چهار روش می تونن در یک چرخه با هم ترکیب بشن. بنا به این نظریه بعضی افراد با نگاه کردن به رفتار دیگه یاد می گیرن (خوندن کد یا نگاه کردن به برنامه نویسی دیگران)، بعضیها با یادگیری تئوری و بعد اجرا (مثلا خوندن یک کتاب پایتون)، بعضی ها با روش فعال (یادگیری و اجرای چیزهایی که یاد گرفتن) و در نهایت گروهی با روش عملگرا (پریدن توی استخر! شروع کردن به برنامه نویسی و یادگرفتن هر چیزی که لازمه). من خودم رو بیشتر جزو گروه آخر می دونم. در سیستم من اگر قراره چیزی رو یاد بگیرم اول یک مساله براش پیدا می کنم (مثلا قراره بشمرم که در هر قوطی کبریت به طور متوسط چند تا کبریت هست) و بعد شروع به کار می کنم و اجزای لازم برای کارم رو حین کار سرچ می کنم و می خونم و یاد می گیرم. مثلا حتی ممکنه در شروع به کار با یک زبان جدید مثل جولیا لازم باشه سرچ کنم «for loop in julia» و برنامه رو پیش ببرم.
نکته مهم اینه که شما کشف کنین روش یادگیری شما چیه و بر اساس اون پیش برین. مثلا کسی که به یکی از شیوههای انعکاسی (دیدن کار دیگران و تئوریزه کردن اون) یا تئوری یاد می گیره ممکنه کلاس براش بهترین روش ممکن باشه و در مقابل برای من که روشم عملگرایانه است، تقریبا کلاس بی معناترین چیز ممکن است و می تونم قسم بخورم که تا حالا هیچ چیز فنی رو از کلاسی یاد نگرفته ام.
در ضمن لازمه شما بعد از شناخت خودتون، به روش های دیگه هم دقت کنین. مثلا اگر من تونستم با یادگرفتن چند کتابخونه و سرچ برنامه ام رو بنویسم، باید حواسم باشه که حتما وقت کافی برای مطالعه یک کتاب در مورد پایتون یا آر یا جولیا یا هر چیزی که دارم یاد می گیرم هم بخونم تا سوادم منحصر نشه به چیزهایی که در مسیرم بوده یا پیش اومده یا اگر کسی از طریق تئوری یاد می گیره لازمه به کدهای بقیه هم نگاه کنه و خودش هم برنامه بنویسه تا چرخه یادگیری رو کامل کرده باشه.
پس اگر سوال واقعا این است که «چطوری ایکس رو یاد بگیریم» جواب من اینه که اول کشف کنین که چجور روش یادگیری برای شما مفیدتره، بعد با حوصله و قدم به قدم توش پیش برین. یادتون باشه که تقریبا هر چیزی نیاز به تلاش داره و عملا هیچ چیزی نیست که بدون گذروندن چندین روز و بعد چندین ماه بشه توش حرفه ای بود. اگر در زمانی خیلی سریع دارین یاد میگرین بدونین که احتمالا دارین اشتباه می کنین یا اصولا اون چیز ارزش یاد گیری نداره چون بدیهی است (:
از اونطرف قرار نیست رنج بکشین. از نظر من اگر یاد گرفتن چیزی برام لذت بخش نیست، یعنی بهتره یادش نگیرم چون یاد گرفتن چیزی که لذت بخش نیست به معنی استفاده از چیزی است که لذت بخش نیست و شاغل شدن در چیزی که لذت بخش نیست. خب چه کاریه! اگر من از پایتون خوشم نمی یاد یا آر دوست ندارم یا اصولا کامپیوتر اذیتم می کنه، خب می رم مربی تنیس می شم!
این رو هم اضافه کنم که من شخصا برای یاد گرفتن هر چیزی اول یک مساله تعریف میکنم، بعد با عبارت هایی مثل X tutorial در اینترنت جستجو می کنم و چند راهنمای انگلیسی رو باز می کنم و همه رو یک نگاه می کنم و انتخاب می کنم که کدوم رو می خوام بخونم و تا آخر می خونمش و بعد شروع به کار با X می کنم تا کارم تا حدی پیش بره. اگر در این مرحله مطمئن شدم که می خوام X رو ادامه بدم، یک کتاب می گیرم و می خونم و بعد اگر برام جذاب بود پروژه های جدید بر می دارم و کتاب های جدید. این روزها دیدن ویدئوهای آموزشی هم بسیار مفیده و مثلا برای بیگ دیتا یا یادگیری ماشینی من حجم زیادی ویدئو دارم که وقتی بیکارم توی خونه می ذارم پخش بشه و زیر چشمی نگاهشون می کنم و هر جا لازم بشه دقتم رو بیشتر می کنم.
شناور شدن در فضا بسیار مفیده. اگر می خواین زبان یاد بگیرین، اخبار رو فقط به اون زبان بخونین. اگر R یاد می گیرین، وبلاگها و سایتهایی که جواب سرچهاتون هستن رو به فیدخون اضافه کنین و همیشه نگاهش کنین. عضو جامعه باشین تا ببینین بقیه چیکار می کنن تا ایدهها و کارهای جدید و جنبههایی که باهاش برخورد نداشتین رو هم ببینین. با اینکار جلوی ایزوله شدن خودتون - و در نتیجه حس اشتباه خود خفن پنداری - رو میگیرین.
آخرین توصیه هم ساخت صحیح زیرساختها است. اگر قراره من آمار استدلالی یاد بگیرم لازمه زیرش (مثلا آمار توصیفی یا ریاضیات پایه) رو به خوبی بلد باشم و اگر قراره دادههای بزرگ یاد بگیرم لازمه مثلا با HDFS آشنا باشم و کوچکترین نفهمیدن زیرساخت باعث می شه چیزهایی که بعدا یاد می گیرم قرص و محکم نباشن و شکسته بسته بشن. جالبه که یاد گرفتن درست لینوکس به نظر من بیشتر از دو ماه طول نمی کشه ولی خیلی ها هستن که سالها با لینوکس کار می کنن بدون اینکه این دو ماه رو وقت بذارن و ابزارشون رو دقیق بشناسن. در یاد گرفتن یک چیز باید واقعا حواسمون باشه که اون چیز رو یاد بگیرم و فقط دنبال راه انداختن کار با یک چیز نباشیم. معمولا یک حرفه ای و یک غیرحرفهای هر دو می تونن کارهای روتین رو راه بندازن ولی کسی سینیور / حرفه ای می شه که درک می کنه اون پایین چی می گذره.
از یادگرفتن لذت ببرین و سعی کنین هیچ کاری رو بدون اینکه درک کنین دارین چیکار می کنین نکنین. با این روش خیلی زود در چیزی که دارین انجامش می دین حرفه ای می شین.
مطلبی دیگر از این انتشارات
استفاده از MinIO در پروژههای Django
مطلبی دیگر از این انتشارات
ایندکس گذاری در PostgreSQL و Sequelize
مطلبی دیگر از این انتشارات
آخر هفته چیکار می کنید؟ 4 و 5 دی