برنامه نویسی در ۱۰ سال

 

Keyboard

چرا همه این قدر عجله دارند ؟

تو هر کتاب فروشی که بروید ، کلی کتاب می بینید که می خواهند در چند ساعت یا چند روز به شما کامپیوتر یا برنامه نویسی یاد بدهند (از ویندوز و اینترنت گرفته تا ویژوال بیسیک و جاوا و …) من جستجوی زیر را در آمازون انجام دادم:

pubdate: after 1992 and title: days and

(title: learn or title: teach yourself)

یعنی کتاب هایی که از سال ۱۹۹۲ تا الان چاپ شده و در عنوانشان کلمات days و یادگیری یا خودآموز وجود دارد. نتیجه شامل ۲۴۸ مورد بود. ۷۸ کتاب اول کتاب های مربوط به کامپیوتر بودند. عبارت days را با hours جایگزین کردم ؛ نتایج مشابه قبلی بود: ۲۵۳ مورد که ۷۷ تای اول در مورد کامپیوتر بودند. از ۲۰۰ کتاب صدر نتایج جستجو (در کل) ۹۶ درصد مربوط به کامپیوتر بود.

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

خب ببینیم عنوانی مثل آموزش پاسکال در ۳ روز چه معنی ای دارد:

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

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

آموزش برنامه نویسی در ۱۰ سال

محققان نشان دادند که برای متخصص شدن در بسیاری از زمینه ها (از شطرنج گرفته تا آهنگ سازی ، اپراتوری تلگراف ، نقاشی ، نواختن پیانو ، شنا ، تنیس ، عصب شناسی ، …) حدود ۱۰ سال زمان لازم است. نکته ی مهم انجام کار پیوسته و با توجه است ، نه صرفا کاری را مدام تکرار کردن ، بلکه به چالش کشیدن خودتان با کارهایی که فراتر از توانایی فعلی تان است و تحلیل کارایی تان قبل و بعد از انجام ان کار و اصلاح اشتباهاتتان. و بعد تکرار کنید. و دوباره تکرار کنید. هیچ میانبری وجود ندارد: حتی موزارت که در ۴ سالگی اعجوبه ای در موسیقی بود ، ۱۳ سال طول کشید تا بتواند اولین کار حرفه ای و جهانیش را بسازد. گروه موسیقی بیتلز در سال ۱۹۶۴ با وارد شدن به صحنه ی موسیقی اکثر کارهایشان جزو کارهای محبوب (و به قولی نامبر وان) بودند ولی فراموش نکنید که اعضای گروه از سال ۱۹۵۷ در کلوب های کوچک لیورپول و هامبورگ فعالیت می کردند و اولین موفقیت بزرگشان Sgt. Peppers در سال ۱۹۶۷ عرضه شد. در یک مطالعه بر روی دانش آموزان در آکادمی برلین ، محققان اعضای برتر ، متوسط و پایین کلاس را مقایسه کرده و از آن ها پرسیدند که چقدر تمرین کرده اند:

همه (از هر سه گروه) نواختن را از حدود ۵ سالگی شروع کرده و در سال های اول هر کس به یک میزان فعالیت می کرد (حدود ۲ یا ۳ ساعت در هفته) اما در حدود ۸ سالگی تفاوت های واقعی نمایان شد. کسانی که در کلاس هایشان بهترین بودند ، بیش از بقیه تمرین می کردند: ۶ ساعت در هفته در سن ۹ سالگی ، ۸ ساعت در ۱۲ سالگی ، ۱۶ ساعت در ۱۴ سالگی و الی آخر تا سن ۲۰ که هفته ای بیش از ۳۰ ساعت کار می کردند. در سن ۲۰ سالگی افراد برتر نزدیک به ۱۰۰۰۰ ساعت از عمرشان را به تمرین گذرانده بودند. دانش اموزان رده بعدی حدود ۸۰۰۰ ساعت و دانش اموزان معمولی (معلمین موسیقی در آینده!) حدود ۴۰۰۰ ساعت.

شاید هم ۱۰۰۰۰ ساعت ان عدد جادویی باشد نه ۱۰ سال. به نظر ساموئل جانسون (۱۷۰۹-۱۷۸۴) زمان بیشتری لازم است:

برتری در هر رشته ای فقط با یک عمر کار به دست می آید و با قیمت کمتری قابل خرید نیست و اما دستورالعمل من
برای موفقیت در برنامه نویسی:

به برنامه نویسی علاقه داشته باشید. اطمینان حاصل کنید که انقدر از برنامه نویسی لذت می برید که حاضر باشید ۱۰ سال از عمرتان را صرفش کنید.

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

برنامه بنویسید. بهترین نوع آموزش ، انجام دادن است. در واقع حداکثر سطح کارایی برای افراد در هر رشته ای ، به طور خودکار با تجربه ی بیشتر حاصل نمی شود بلکه نیاز به تلاش تعمدی برای بهبود دارد.
می توانید تحصیلاتتان را در دانشگاه هم ادامه بدهید. این کار باعث می شود از رشته تان درک عمیق تری به دست آورده و همچنین به کارهایی مشغول شوید که نیاز به مدرک دانشگاهی دارند. البته اگر از مدرسه و درس لذت نمی برید ، می توانید تجربه ی مشابهی را در کار کسب کنید (البته با تلاش بیشتر) Eric Raymond در دیکشنری هکر ها می گوید: مطالعه و تحصیلات آکادمیک در رشته ی کامپیوتر یک شخص را تبدیل به یک برنامه نویس حرفه ای نمی کند ، همانطور که یک فرد فقط با مطالعه ی رنگ و قلم مو نمی تواند نقاش شود. یکی از بهترین افرادی که در عمرم استخدام کردم Jamie Zawinski ، فقط تا دبیرستان درس را ادامه داده بود؛ با این وجود این شخص نرم افزار های خیلی خوبی تولید کرده (موزیلا و xemacs) و گروه خودش را در googlegroups دارد و حتی انقدر پول دراورد که بتواند یک کلوب شبانه بخرد.

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

روی پروژه های دیگران کار کنید. برنامه هایی که دیگران نوشتند را مطالعه کنید. سعی کنید باگ های برنامه های دیگران را رفع کنید. به این فکر کنید که چطور برنامه هایتان را طراحی کنید که کار کسانی که می خواهند ان را نگهداری کنند آسان تر شود.

کلی زبان برنامه نویسی یاد بگیرید. یک زبان که از شی گرایی و کلاس ها پشتیبانی کند (مثل جاوا یا سی پلاس پلاس) ، یک زبان تابعی (مثل لیسپ یا ML) (م: یا Haskell) ، یک زبان اعلانی (مثل پرولوگ یا قالب ها در سی پلاس پلاس) ، یک زبان که از coroutine ها پشتیبانی کند (مثل Scheme یا Icon) (م: امروزه زبان های دیگری از جمله سی شارپ هم coroutine را دارند) و یک زبان که از برنامه نویسی موازی پشتیبانی کند (مثل Sisal) (م: و Erlang)
یادتان باشد که ما با کامپیوتر سر و کار داریم. بدانید که چقدر طول می کشد تا کامپیوترتان یک دستورالعمل را اجرا کند، یک کلمه را از حافظه واکشی کند (در هر دو حالت وجود و نبودش در کش) ، کلماتی متوالی را از دیسک بخواند ، یا به یک مکان از دیسک برود (seek) (م: منظور نویسنده آشنایی با معماری کامپیوتر است. آقای Stroustrup خالق سی پلاس پلاس هم روی این نکته تاکید دارند)

درگیر استاندارد سازی یک زبان شوید. حالا می تواند کمیته ی ANSI C++‎ باشد یا استاندارد شخصی تان برای کدنویسی (مثلا این که برای تورفتگی از ۲ فاصله استفاده کنید یا ۴ تا) در هر حال یاد می گیرید که بقیه چه چیزهایی را در یک زبان دوست دارند و همینطور علت این دوست داشتن را.

با در نظر گرفتن این موارد ، این سوال پیش می آید که صرفا با مطالعه ی کتاب چقدر می توانید یاد بگیرید. قبل از تولد اولین بچه ام ، تمام کتاب های چگونه… How To… را خواندم بودم و باز هم حس می کردم مبتدی ام. ۳۰ ماه بعد (پس از تولد دومین فرزندم) دیگر سراغ کتاب هایم نمی رفتم؛ به جایش به تجربه ی شخصی ام تکیه کردم که معلوم شد خیلی مفیدتر و مطمئن تر از هزاران صفحه کتاب هایی است که توسط متخصصین نوشته شده اند. آقای Fred Brooks در مقاله ی No Silver Bullets طرحی سه بخشی برای پیدا کردن بهترین طراحان نرم افزار مشخص کرد:

۱- به طور سیستماتیک و هر چه زودتر طراحان برتر را مشخص کنید

۲- یک مربی حرفه ای به آن ها اختصاص دهید تا مسئول و مراقب کار باشد

۳- فرصت هایی را فراهم بیاورید که این افراد از طریق ارتباط و برانگیختن همدیگر ، رشد کنند

آلن پرلیس می گوید: هر کسی می تواند حجاری یاد بگیرد: میکل آنژ باید یاد می گرفت چطور این کار را نکند. در مورد برنامه نویسان بزرگ هم همینطور است

باشه ، بروید و ان کتاب جاوا را بخرید؛ احتمالا به دردتان بخورد ولی زندگی تان یا تخصصتان در کل در طول ۲۴ ساعت ، روز یا حتی ماه تغییر چندانی نخواهد کرد.

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *