2 3 ماه پیش، در مورد تصمیمم در مورد این که در مورد موارد ... بگذریم. پس از کلی کلنجار و کلکل، کلید کلاف کلفت ... ای بابا. خیلیا ازم پرسیدن که ... :|
خلاصه این که بالاخره فرصتی به دست آمده تا بنده بتوانم یک آکادمی راه بیندازم و آموزشهای 0 تا 99.9999 را در اختیار بشریت قرار بدهم. هنوز هم فکر میکنم منابع آموزشی موجود مشکل دارن، بدون هیچ دلیلی فرآیند یادگیری رو سخت میکنن و ممکنه حفرههای بیشتری رو توی دانش مخاطب ایجاد کنن، نه فقط برای مبتدیها بلکه برای حرفهایها هم همینه. این نوشته، نظرات شخصیه و ممکنه از دید خیلیا درست نباشه.
کافیه بخواید یه مبحث رو در زمینهی برنامهنویسی شروع کنید و یاد بگیرید. فرقی نمیکنه دانش قبلیتون در مورد برنامهنویسی چقدر باشه. بهترین رفیقتون میشه گوگل. جستجو میکنید. معمولا اولین صفحاتی که بهشون سر میزنید مربوط به ویکیپدیاست. اگه قراره برنامهنویسی تحت وب رو یاد بگیرید احتما با W3Schools هم آشنا میشید. یه کم که راه میفتید، شاید برید به سمت MDN. اگه DotNet بخواید کار کنید، معمولا بهترین گزینه، مستندات خود مایکروسافته. و ...
من این مسیر رو طی کردم. چند ساله. با این که اینترنت پره از محتوایی که به آموزش برنامهنویسی و ... مربوطه و کلی برنامهنویس داریم، ولی خودم هنوز یه سیستم تمیز برای امر واقعا خطیر آموزش پیدا نکردم. اما این مستندات و آموزشهایی که توی اینترنت موجودن چه مشکلی دارن که خواب رو از چشمان خدای برنامهنویسی و متخصص کل جهان ربودهاند؟
چرا منابع آموزشی موجود، خوب نیستند؟
- نفرین دانش: انگلیسیش میشه Curse of Knowledge. منظور از این نفرین دانش چیه؟ ایشون عبارتند از حالتی که توی ذهن افراد متخصص ایجاد میشه و باعث میشه فکر کنن حرفی که دارن میزنن، بقیه خیلی راحت متوجه میشن. ربطش به بحث ما چیه؟ توی بیشتر مقالات و خودآموزهایی که توسط برنامهنویسها نوشته میشه، از اصطلاحات و کلیدواژههایی استفاده میشه که مخاطب ممکنه هیچ دیدی نسبت بهشون نداشته باشه. نویسنده هم هیچ توضیحی در موردشون نمیده، با این پیشفرض که مخاطب اون اصطلاحات رو متوجه میشه و یا خودش میره پیدا میکنه. در بهترین حالت، نویسنده یه لینکی رو برای مخاطب قرار میده تا بشه توضیحات بیشتر رو توی یه صفحهی دیگه پیدا کرد، که میشه مشکل بعدی.
- یویو: یه وبسایت مثل MDN رو باز کنید. یه مقاله رو انتخاب کنید و ببینید توش چه خبره. حجم لینکها از حجم محتواهایی که لینک نیستند بیشتره. مخاطب برای فهمیدن یک صفحه، مدام در حال پرش از این صفحه به اون صفحهس. بعضی از اوقات، برای خودم پیش اومده که توی صفحهی جدید مجبور شدم دوباره یه لینک دیگه رو باز کنم و توی صفحهی سوم باز یه لینک دیگه رو باز کنم و ... بدترین حالت اینه که بخواید از یه وبسایت برید به یه وبسایت دیگه تا محتوای وبسایت اول رو درک کنید، مثلا مجبور باشید توی گوگل جستجو کنید و از نتایجش استفاده کنید و دوباره برگردید به وبسایت اولی، یا وبسایت اول، شما رو بفرسته به یه وبسایت دیگه و ازتون بخواد بعد از خوندن اون وبسایت برگردید. این حجم از پرش، برای شخصی که میخواد یه مفهوم رو درک کنه اصلا مناسب نیست.
- مشارکت: مشکل بعدی، مشارکت در تولید محتوای این مستنداته. معمولا مستندات مرجع برای زبانهای برنامهنویسی و ... توسط جامعهی برنامهنویسها تولید و ویرایش میشه. علاوه بر مشکلی که بالاتر در مورد نفرین دانش گفتم، یکپارچگی رو هم از دست میدیم. محتوا با چند قلم متفاوت نوشته شده، احتمال ویرایش یا حذف محتوایی که یه شخص با وسواس زیاد هم مینویسه در آینده وجود داره، و ساختار هر صفحه ممکنه با بقیهی صفحات متفاوت باشه. شاید به خاطر همینه که محتوای منابعی که معمولا توسط تعداد کمی نویسنده، تولید شدن (مثل کتاب) رو راحتتر میشه دنبال کرد.
- رویه: رویههای آموزشی که توی تقریبا تمام منابع آنلاین هست، سنتی حساب میشن. همشون سعی میکنن به یه شکل معمولی و مشابه، مفاهیم رو به کاربر منتقل کنن. یه تیکه کد و یه سری توضیحات بدون پرداختن به جزئیات یا پیشنیازها (یا حداقل، مشخص کردن لیست پیشنیازها)، این که چرا اینطوریه، این که چرا اسامی اونطوری انتخاب شدن، این که اون دستور چرا استفاده شده و ... این روشها برای مخاطب مبتدی اصلا مناسب نیستند.
- اصل Pareto (یا اصل 80/20): این اصل میگه، برای بیشتر امورات و اتفاقات، 80 درصد نتایج یا اثرات از 20 درصد عوامل نشئت میگیرن. اگه بخوام این اصل رو به برنامهنویسی و توسعهی نرمافزار بچسبونم، میشه یه همچین چیزی: ما برای انجام دادن 80 درصد از حجم نرمافزارهامون (کدها) به 20 درصد از ابزارهایی که زبانها و سایر تکنولوژیها برامون فراهم کردن نیاز داریم. تا جایی که دیدم، به نظرم این اصل، درسته. به عنوان مثال، HTML رو در نظر بگیرید و ببینید از چند تا از المانهای این زبان، زیاد (در 80 درصد موارد) استفاده میکنید. حالا این قضیه چه ربطی به بحث ما داره؟ ربطش اینه که منابع موجود، معمولا بخشهای مجزایی برای 20 درصد اولیه و 80 درصد بعدی در نظر نمیگیرن. مخاطب نمیدونه چه حجمی از ابزارها یا زبانها رو باید اول یاد بگیره تا بتونه به خودش بگه «برنامهنویس». در بهترین حالت، دستهبندی به این شکله که یه سری از مقالهها برای مبتدیها نوشته شدن و یه سری هم برای حرفهایها. ولی به نظرم، کسی که اون 20 درصد رو خیلی خوب بدونه، علاوه بر این که میتونه یه برنامهنویس حرفهای باشه، میتونه 80 درصد باقیمونده رو هم راحتتر و سریعتر هضم کنه. شاید یکی از اثراتی که عدم رعایت این اصل (یا یه چیز مشابه) داره اینه که معمولا برنامهنویسها به افرادی تبدیل میشن که همیشه به تواناییهاشون شک دارن (انگلیسیش میشه Self-Doubt Developers و احتمالا همهی برنامهنویسها حداقل یک بار تجربهش میکنن).
- ویدئو: ویدئوهای آموزشی و آنلاین میتونن مفید باشن. ولی با توجه به حجم اینترنت و هزینهای که مخاطب باید پرداخت کنه، شاید برای خیلیا مقرونبهصرفه نباشه، مخصوصا وقتی باید ویدئوها رو با کیفیت نسبتا خوبی تماشا کنید تا متن و کدهای داخلش رو بتونید ببینید. از طرفی بهروز کردن ویدئو کار حضرت فیله؛ محتوای متنی رو خیلی راحت میشه ویرایش و اصلاح کرد. پیدا کردن یه محتوای خاص داخل ویدئو هم کار راحتی نیست. شاید بشه گفت، ویدئو به عنوان یه ابزار کمکی در کنار متن، مفید خواهد بود.
سایر موارد
یه سری نکته هم موند که مربوط به موضوعن و ترجیح دادم به صورت موردی بنویسم.
- پیچیدهترش کن: چند روز پیش، یکی از افرادی که توی توییتر دنبال میکنم، متن عجیبی رو توییت کرده بود.
توی هر حوزه تخصصی دو گروه هستند: ۱. افرادی که میخوان پیچیدگیها رو به زبان ساده بیان کنند تا همه بفهمند. ۲. افرادی که پیچیدهترش میکنند تا کسی نفهمه. گروه دوم نه تنها بد نیستند بلکه خوب هم هستند چون اگر نباشند دیگه کسی حاضر نمیشه برای اون تخصص پول خوبی بده.
شخصا با این دیدگاه مخالفم. اول این که افرادی که قراره تازه بیان توی اون تخصص (هر تخصصی) به شکلی غیرضروری دیرتر به متخصص تبدیل میشن. دوم این که چرا درک هر چیزی باید برای بقیه سخت بشه؟ اصن کدوم کارفرمایی میره منابع رو چک کنه و ببینه «آره. سادهس. پس پول زیادی بهش نمیدم». ملت بیکارن؟ بعدشم، اگه اینقدر سادهس و خودمون الکی پیچیدهش کردیم، پس داریم سر خودمونو شیره میمالیم دیگه.
- متناهی: در ادامهی مورد بالا، پایههای برنامهنویسی نامتناهی نیست. یه زبان خاص رو در نظر بگیرید، مثلا HTML. چه تعداد مفهوم مربوط به این زبان وجود داره؟ 100 تا؟ 1000 تا؟ هر عددی باشه، متناهیه. ولی باز هم نتونستیم این مفاهیم رو درست منتقل کنیم. راههای حل یک مساله ممکنه نامتناهی باشن ولی ابزارها متناهین. بهتر نیست این متناهی رو خیلی خوب بفهمیم؟
- ریاضت: توی بیشتر مقالاتی که در مورد یادگیری برنامهنویسی خوندم، معمولا پیشنهاد میشه که "جستجو کنید، نفهمیدید ادامه بدید، بعدا میفهمید، هر چی هست بپذیرید، تمرین کنید و خودتونو ... بدید". واقعا باید اینطور باشه؟ یا فقط من فکر میکنم باید یه راه راحتتر برای یادگیری باشه؟ میگن بهتره خودتونو وابسته به یه منبع خاص نکنید، از منابع مختلف استفاده کنید، بگردید. خوب خود این هم یعنی وابسته شدن به جستجو توی گوگل. قبلنا عادت داشتم بعد از کلی جستجو که به یه کدی توی Stackoverflow ختم میشد، همونو کپی میکردم و جواب رو میگرفتم و خلاص! این بود آرمانها؟ سوال من از شما اینه. اصن کی گفته هر چیزی رو باید توی وبسایتهایی مثل Stackoverflow پیدا کرد؟ اون کسی که جواب سوال رو میده از کجا یاد گرفته؟
- کتاب: کتاب میتونه خوب باشه. کتاب بد هم خوندم. نمونهش Eloquent JavaScript. ولی حتی اگه یه کتاب، خیلی خوب باشه، باز هم شما به مستندات مرجع نیاز دارید و با توجه به سرعت پیشرفت و تغییر تکنولوژیها، دیگه نوشتن یه کتاب مرجع، جواب نمیده. منابع آنلاین رو بهتر کنیم.
اگه از نظر شما، مشکل دیگهای رو هم میشه به منابع آنلاین نسبت داد توی نظرات بهم برسونید.
میتونی نظرتو از طریق ایمیل / تلگرام / اینستاگرام برام بفرستی.