loading...
زندگی یک پسر برنامه نویس
وحیــد بازدید : 21 یکشنبه 01 آبان 1390 نظرات (0)

آموزش برنامه نویسی در 10 سال
محققان (1) نشان دادند که برای متخصص شدن در بسیاری از زمینه ها (از شطرنج گرفته تا آهنگ سازی ، اپراتوری تلگراف ، نقاشی ، نواختن پیانو ، شنا ، تنیس ، عصب شناسی ، ...) حدود 10 سال زمان لازم است. نکته ی مهم انجام کار پیوسته و با توجه است ، نه صرفا کاری را مدام تکرار کردن ، بلکه به چالش کشیدن خودتان با کارهایی که فراتر از توانایی فعلی تان است و تحلیل کارایی تان قبل و بعد از انجام ان کار و اصلاح اشتباهاتتان. و بعد تکرار کنید. و دوباره تکرار کنید. هیچ میانبری وجود ندارد: حتی موزارت که در 4 سالگی اعجوبه ای در موسیقی بود ، 13 سال طول کشید تا بتواند اولین کار حرفه ای و جهانیش را بسازد. گروه موسیقی بیتلز در سال 1964 با وارد شدن به صحنه ی موسیقی اکثر کارهایشان جزو کارهای محبوب (و به قولی "نامبر وان") بودند ولی فراموش نکنید که اعضای گروه از سال 1957 در کلوب های کوچک لیورپول و هامبورگ فعالیت می کردند و اولین موفقیت بزرگشان (Sgt. Peppers) در سال 1967 عرضه شد. در یک مطالعه بر روی دانش آموزان در آکادمی برلین ، محققان اعضای برتر ، متوسط و پایین کلاس را مقایسه کرده و از آن ها پرسیدند که چقدر تمرین کرده اند:
همه (از هر سه گروه) نواختن را از حدود 5 سالگی شروع کرده و در سال های اول هر کس به یک میزان فعالیت می کرد (حدود 2 یا 3 ساعت در هفته) اما در حدود 8 سالگی تفاوت های واقعی نمایان شد. کسانی که در کلاس هایشان بهترین بودند ، بیش از بقیه تمرین می کردند: 6 ساعت در هفته در سن 9 سالگی ، 8 ساعت در 12 سالگی ، 16 ساعت در 14 سالگی و الی آخر تا سن 20 که هفته ای بیش از 30 ساعت کار می کردند. در سن 20 سالگی افراد برتر نزدیک به 10000 ساعت از عمرشان را به تمرین گذرانده بودند. دانش اموزان رده بعدی حدود 8000 ساعت و دانش اموزان معمولی (معلمین موسیقی در آینده!) حدود 4000 ساعت.
شاید هم 10000 ساعت ان عدد جادویی باشد نه 10 سال. به نظر ساموئل جانسون (1709-1784) زمان بیشتری لازم است: "برتری در هر رشته ای فقط با یک عمر کار به دست می آید و با قیمت کمتری قابل خرید نیست" و اما دستورالعمل من برای موفقیت در برنامه نویسی:

  • به برنامه نویسی علاقه داشته باشید. اطمینان حاصل کنید که انقدر از برنامه نویسی لذت می برید که حاضر باشید 10 سال از عمرتان را صرفش کنید.
  • با برنامه نویسان دیگر ارتباط داشته باشید. کد برنامه های دیگر را مطالعه کنید. این خیلی مهم تر از هر کتاب یا دوره ی آموزشی است.
  • برنامه بنویسید. بهترین نوع آموزش ، انجام دادن است. در واقع حداکثر سطح کارایی برای افراد در هر رشته ای ، به طور خودکار با تجربه ی بیشتر حاصل نمی شود بلکه نیاز به تلاش تعمدی برای بهبود دارد.
  • می توانید تحصیلاتتان را در دانشگاه هم ادامه بدهید. این کار باعث می شود از رشته تان درک عمیق تری به دست آورده و همچنین به کارهایی مشغول شوید که نیاز به مدرک دانشگاهی دارند. البته اگر از مدرسه و درس لذت نمی برید ، می توانید تجربه ی مشابهی را در کار کسب کنید (البته با تلاش بیشتر) Eric Raymond در دیکشنری هکر ها می گوید: "مطالعه و تحصیلات آکادمیک در رشته ی کامپیوتر یک شخص را تبدیل به یک برنامه نویس حرفه ای نمی کند ، همانطور که یک فرد فقط با مطالعه ی رنگ و قلم مو نمی تواند نقاش شود". یکی از بهترین افرادی که در عمرم استخدام کردم (Jamie Zawinski) ، فقط تا دبیرستان درس را ادامه داده بود؛ با این وجود این شخص نرم افزار های خیلی خوبی تولید کرده (موزیلا و xemacs) و گروه خودش را در googlegroups دارد و حتی انقدر پول دراورد که بتواند یک کلوب شبانه بخرد.
  • روی پروژه های تیمی کار کنید. در بعضی از پروژه ها بهترین و در بعضی دیگر بدترین برنامه نویس باشید. وقتی بهترین هستید توانایی های خودتان به عنوان یک رهبر گروه را تست کرده و به دیگر افراد الهام می دهید. وقتی هم که بدترین باشید یاد می گیرید که حرفه ای ها چه کار می کنند و همچنین چه کارهایی را دوست ندارند انجام دهند (چون این کارها را می سپارند به شما!)
  • روی پروژه های دیگران کار کنید. برنامه هایی که دیگران نوشتند را مطالعه کنید. سعی کنید باگ های برنامه های دیگران را رفع کنید. به این فکر کنید که چطور برنامه هایتان را طراحی کنید که کار کسانی که می خواهند ان را نگهداری کنند آسان تر شود.
  • کلی زبان برنامه نویسی یاد بگیرید. یک زبان که از شی گرایی و کلاس ها پشتیبانی کند (مثل جاوا یا سی پلاس پلاس) ، یک زبان تابعی (مثل لیسپ یا ML) (م: یا Haskell) ، یک زبان اعلانی (مثل پرولوگ یا قالب ها در سی پلاس پلاس) ، یک زبان که از coroutine ها پشتیبانی کند (مثل Scheme یا Icon) (م: امروزه زبان های دیگری از جمله سی شارپ هم coroutine را دارند) و یک زبان که از برنامه نویسی موازی پشتیبانی کند (مثل Sisal) (م: و Erlang)
  • یادتان باشد که ما با کامپیوتر سر و کار داریم. بدانید که چقدر طول می کشد تا کامپیوترتان یک دستورالعمل را اجرا کند، یک کلمه را از حافظه واکشی کند (در هر دو حالت وجود و نبودش در کش) ، کلماتی متوالی را از دیسک بخواند ، یا به یک مکان از دیسک برود (seek) (م: منظور نویسنده آشنایی با معماری کامپیوتر است. آقای Stroustrup خالق سی پلاس پلاس هم روی این نکته تاکید دارند)
  • درگیر استاندارد سازی یک زبان شوید. حالا می تواند کمیته ی ANSI C++‎ باشد یا استاندارد شخصی تان برای کدنویسی (مثلا این که برای تورفتگی از 2 فاصله استفاده کنید یا 4 تا) در هر حال یاد می گیرید که بقیه چه چیزهایی را در یک زبان دوست دارند و همینطور علت این دوست داشتن را.

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

(1) : 
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Bryan, W.L. & Harter, N. "Studies on the telegraphic language: The acquisition of a hierarchy of habits. Psychology Review, 1899, 8, 345-375
Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4, 55-81.
(2) http://citeseer.nj.nec.com/context/7718/0

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

  • دوستان: وقتی کسی از من می پرسد از چه سیستم عاملی استفاده کنم ، جواب می دهم: "از هر چیزی که دوستانت استفاده می کنند" مزیتی که از یادگیری از دوستانتان به دست می آورید ، هرگونه تفاوت بین سیستم عامل ها یا زبان های برنامه نویسی را خنثی می کند. البته دوستان آینده تان را هم در نظر بگیرید: جامعه ای از برنامه نویسان که شما در آینده جزئی از ان ها خواهید بود. آیا زبانی که انتخاب کردید یک جامعه ی بزرگ و فعال و در حال رشد دارد یا این که روز به روز از استفاده کنندگانش کم می شود ؟ آیا کتاب ، وب سایت و فروم های اینترنتی برای رسیدن به جواب سوال هایتان وجود دارد ؟ آیا از اعضای این فروم ها خوشتان می اید ؟
  • سادگی: زبان هایی مثل جاوا و سی پلاس پلاس برای پروژه های بزرگ و حرفه ای طراحی شده اند که توسط تیمی از برنامه نویسان حرفه ای استفاده می شوند که کارایی زمان اجرا برایشان مهم است ؛ در نتیجه این زبان ها بخش های پیچیده ای دارند تا بتوانند نیاز های این افراد را براورده کنند. اما شما نیازی به این زبان ها ندارید ، چون می خواهید برنامه نویسی یاد بگیرید. شما نیاز به زبانی دارید که یادگیری اش آسان باشد و یک برنامه نویس تازه کار بتواند به راحتی با آن کار کرده و سینتکسش در یادش بماند.
  • تفریح: کدام روش را برای یادگیری پیانو می پسندید: روش معمولی و تعاملی که به محض فشار دادن هر کلید نتی را می شنوید یا روش دسته ای که پس از اتمام یک آهنگ نت ها را می شنوید ؟ مسلما روش تعاملی یادگیری را آسان تر می کند. از زبانی استفاده کنید که حالت تعاملی (interactive mode) دارد.

با توجه به این سه مورد ، توصیه ی من برای اولین زبان برنامه نویسی ، پایتون یا Scheme است. البته اگر سنتان تک رقمی است توصیه می کنم از Alice یا Squeak شروع کنید. مهم ترین چیز این است که انتخاب کرده و شروع کنید.

نظر مترجم: (translator notes)
مقاله ی آقای Norvig الان با وجود گذشت فقط 8 سال از نگارش ، جزو مقالات کلاسیک محسوب می شود. بعضی از قسمت ها با توجه به گذر زمان مطمئنا قدیمی هستند (مثل زبانی با قابلیت coroutine) و زبانی امروزی مثل F#‎ اکثر قسمت هایی را که ایشان روی آن ها تاکید دارند پشتیبانی می کند (شاید برای این بخش بهتر باشد به نصیحت Don Syme خالق F#‎ گوش کنیم که می گوید حتما Haskell,Prolog, F#‎ , Python و سی شارپ را یاد بگیرید) ولی نکته ای که هست و هیچ وقت غبار زمان به خودش نمی گیرد این است که به صرف خواندن چند کتاب و پاس کردن چند ترم درس و چند هزار خط کد نوشتن ، کسی حرفه ای نمی شود و اگر می خواهیم در دنیای به شدت پویای نرم افزار زنده بمانیم ، باید حاضر باشیم عمرمان را (درست) صرف شغلمان کنیم.
متن اصلی : http://www.norvig.com/21-days.html
ایمیل مترجم: mehdi.asgari@yahoo.com

ارسال نظر برای این مطلب

کد امنیتی رفرش
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • آرشیو
    آمار سایت
  • کل مطالب : 8
  • کل نظرات : 0
  • افراد آنلاین : 1
  • تعداد اعضا : 0
  • آی پی امروز : 21
  • آی پی دیروز : 0
  • بازدید امروز : 11
  • باردید دیروز : 0
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 11
  • بازدید ماه : 11
  • بازدید سال : 13
  • بازدید کلی : 453