وقتی شروع به برنامه نویسی در یکی از شاخه های کامپیوتر میشویم عاشق اجرای برنامه خود میشویم مثلا وقتی ما شروع به یادگیری برنامه نویسی اندروید میکنیم هنگامی که برای اولین بار بتونیم یک برنامه ساده بنویسیم که مثلا یک باتن داشته باشه که هنگام تاچ کردن اون باتن کلمه " hello world " چاپ شود در تصوراتمون خودمونو تشویق میکنیم .
این خوب است که به کارمون علاقه نشان بدهیم . در کل هنگامی که نتیجه ای از کارمون میبینیم خیلی احساس خرسندی میکنیم بی آنکه اصلا متوجه شویم چگونه این کار انجام شد.
در اوایل بیشتر به دنبال مفهوم نیستیم و اکثرا به دنبال چگونه کد زدن هستیم تا در نهایت یک اجرایی از برناممون بگیریم و همین برای ما کافیست ولی بیشتر که درگیر یک شاخه از برنامه نویسی میشویم کم کم متوجه میشیم که چندین و چند روش برای انجام یک کار وجود داره و ما قبلا تنها راهی که بلد بودیم رو عملی میکردیم که شاید بدترین روش هست . منظور از بدترین روش یعنی ممکن است سرعت اجرای این روش در مقابل روش های اصولی پایین باشد یا امنیت این روش کمتر باشد یا ... .
ما وقتی روشی یا یه تکنولوژی در برنامه نویسی یاد میگیریم باید بتونیم چندین سوال رو از اون جواب بدیم به طور مثال اصلا این چیه؟ کجا به درد میخوره؟ چرا ایجاد شده؟ در پشت پرده چه اتفاقی میفته؟ ایده ایجاد این تکنولوژی چه بود؟ روش های دیگه چطورین؟ بهترین روش کدومه و چرا؟ و ...
درسته یادگیری به این صورت مدت زمان زیادی لازم داره ولی شما قرار است تو یه شاخه خاص خیلی عالی شوید و اگه اینجوری یاد نگیرید فقط روش ها رو حفظ میکنید و تو این ضمینه نمیتونید صاحب نظر باشید.
اولا یه مطلبی رو داخل پارانتز بگم ، شما باید تو یه شاخه خاص بهترین باشید تا بخواین هی از این شاخه به اون شاخه بپرید . مثلا تو اندروید بهترین باش تا بخوای هم اندروید یاد بگیری هم ios هم سرور و ... چون اگه از این شاخه به اون شاخه بپری هیچکدومو نمیتونی به صورت تخصصی یاد بگیری و از هدف دور میشی.دنیای امروز نیازمند تخصص حتی تو یه شاخه خیلی کوچیکه.
حالا که پیاده سازی یک feature رو بلدیم و اگر الان در مورد ایجاد آن ازمون بپرسن به صورت ذهنی تقریبا میدونیم چه کارهایی باید بکنیم دیگر وقت آن رسیده که به دنبال درک عمیق از عملکرد و چرایی تکنولوژی ها برویم . من میخوام حرفمو با یه مثال ملموس بگم. از این به بعد میخوام کم کم وارد اندروید شویم به همین خاطر مثال هامو از اندروید بهتون میگم.
هنگامی که یک activity جدید میسازیم احتمال دارد که به صورت ذهنی حفظ کرده باشیم که مثلا ما باید تمامی view هامونو داخل متد ( )onCreate اکتیویتی بنویسیم .
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = findViewById(R.id.textview);
}
ولی ما نمیدونیم که چرا view هامونو داخل این متد initial میکنیم حتی بیشتر چیز ها را در مورد این تکه کد شاید ندونیم مثلا ندونیم R چیه یا ندونیم خط ; super.onCreate(savedInstanceState) برای چیه .البته الان اینا رو بررسی نمیکنیم و فقط به عنوان یه مثال به این قضیه نگاه کنید.
پس ما بصورت عمیق یادنگرفته ایم فقط یاد گرفتیم چطوری یه کاری رو عملی کنیم.
مزایای یادگیری عمیق و فهمیدن طرز کار یک چیز اینه که پیاده سازی های دیگه رو سریع تر یاد میگیریم همچنین میتونیم خودمون روشی ابدا کنیم و در مورد یک روش اظهار نظر کنیم ، به سختی یک مفوم از یادمون میره و از همه مهم تر وقتی مفهومو یاد بگیری دیگه تکنولوژی واست مسخره میشه و با هر کدوم از تکنولوژی های ایجاد شده برای اون کار میتونی کارتو راه بندازی.
اگه چند سالی برنامه نویسی میکنی و به صورت عمیق دنبال مفاهیم عمیق و یادگیری عمیق اونا نرفتی یا حتی تازه میخوای شروع کنی بهتره بیشتر به دنبال مفاهیم بری چون پیاده سازیش برات آسون تر میشه.
من قصد دارم تو پست های بعدیم به صورت عمیق به مفهوم ها وچالش های برنامه نویسی و به صورت حرفه ای تر برنامه نویسی اندروید بپردازم اگر قصد یادگیری عمیق در مورد مفاهیم اختصاصی اندروید دارید پست های مرا دنبال کنید.