یادگیری برنامه نویسی در 10 سال

elahi

مدیریت
مدیر کل انجمن

چرا همه برای یاد گیری برنامه نویسی عجله دارند ؟

داخله هر کتاب فروشی ای که برین کلی کتاب هست با عنوان های یاد گیری برنامه نویسی در 21 روز ، 7 روز و ....

در صورتی که در گوگل دنبال کتاب باشید کلماتی مانند hours و days در عنوان کتاب های زیادی پیدا می کنید.

این نشون دهنده اینه که مردم عجله دارند که برنامه نویسی رو خیلی سریع یادبگیرند یا فکر می کنند که یادگیری برنامه نویسی آسونه ، اما در علم های دیگه مانند فیزیک ، شیمی و... کتابی با عنوان یادگیری در 21 روز پیدا نمی کنید.
زمانی که آنها می گویند: "برنامه نویسی بد آسان است. احمقها می توانید آن را در 21 روز یاد بگیرید.

خوب بزارین تجزیه کنیم که کلمه " یادگیری برنامه نویسی c++ در سه روز " چه معنی ای میده :

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


خودتان برنامه نویسی رو در 10 سال یاد بگیرید

تحقیق محققان(( Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) نشان داده که یادگیری بسیاری از علوم به صورته حرفه ای مانند : شطرنج ، شنا ، ساخت موزیک و ... بیش از 10 سال زمان می برد.
راه حل انجام این کار به صورت مشورتی است : فقط نباید این کار رو دوباره و دوباره انجام داد ، اما خودتون رو با توانایی فعلی تون به چالش بکشید ، سعی تون رو بکنید ، کار آیی خودتون رو بسنجید قبل و بعد از انجام این کار و اشتباه هاتون رو تصحیح کنید .این کار رو تکرار کنید ، و دوباره.
هیچ میانبر واقعی ای وجود ندارد : حتی موزرات که در سن 4 سالگی یه نابغه موسیقی بود ، 13 سال طول کشید تا اولین موسیقی حرفه ای در سطح جهانیش رو بسازه.در گروه دیگر موسیقی مانند بیتلز که بیشتر موزیک هاشون در سال 1964 محبوب بود ، توجه کنید این گروه هم از سال 1957 در مکان های کوچک تر برنامه اجرا می کردند.مالکوم گلدل یکی از تحقیقاتش را گزارش می کنید که در این تحقیق از دانش آموزان سطح بالا ، سطح متوسط و سطح پایین آکادمی برلین می خواهد بگویند که آنها چقدر تمرین کرده اند :
همه ، در هر سه سطح تقریبا در سن 5 سالگی شروع کرده اند.در چند سال اول همه تقریبا همان 2 تا 3 ساعت تمرین در هفته تمرین داشته اند.اما اطراف سن هشت سالگی به صورت کاملا متفاوت شروع کرده اند.اون هایی که در کلاس بهتر بودن زودتر و بیشتر از دیگران تمرین کرده بودند : 6 ساعت در هفته در سن 9 سالگی ، 9 ساعت در هفته در سن 12 سالگی ، 16 ساعت در هفته در سن 14 سالگی و بالا تر و بالاتر تا اینکه سن شان به بیست می رسد و تمرین شان به 30 ساعت در هفته می رسد.با رسیدن به بیست سالگی آن ها بیشتر از 10،000 ساعت تمرین کرده اند .دانش آموزان رده پایین تر 8،000 ساعت و معلمان آینده موسیقی 4،000 ساعت تمرین کرده اند.

ممکنه که مدت زمان مورد نیاز برای یاد گیری برنامه نویسی 10،000 ساعت باشه نه 10 سال
( Henri Cartier-Bresson گفته اند : "10،000 عکس شما بد ترین آنها هستند" )
( Samuel Johnson فکر می کردم زمان بیشتری نیاز هست : "دستیابی به برتری در هر بخش و کاری فقط با یک عمر کار بدست می آید و با چیز دیگری قابل خریدن نیست")
(Chaucer شکایت می کند : "زندگی کوتاه است ، بنابراین یادگیری هنر طول می کشد")


بنابراین شما می خواین یک برنامه نویس باشید ؟ این توصیه ها برای شماست.



دستورالعمل برای موفقیت در برنامه نویسی.



  • علاقه مند شوید به برنامه نویسی ، دلیل تون این باشه که اون سرگرم کننده است. و مطمئن شوید که به آن علاقه مند می مانید ، چون قرار است 10 سال یا 10،000 ساعت از عمرتان را روی آن بگذارید.
  • برنامه .بهترین نوع یادگیری ، یادگیری بصورته عملی است.
  • با دیگر برنامه نویس ها صحبت کنید;سورس برنامه ها را بخوانید. این کار از هر کتابی یا هر درس آموزشی ای مهم تر است.
  • اگر شما می خواهید 4 سال از عمرتان را در دانشگاه بگذرانید .این کار به شما دسترسی می دهد به شغل هایی که نیاز به این اعتبار دارند ، و این کار به شما فهم عمیقی از این حوزه می دهد ،اما اگه شما از دانشگاه خوشتان نمی آید شما می تونید تجربه متفاوتی در کار بدست بیارین.در هر موردی ، آموزش تنها فقط با کتاب نمی تونه کافی باشه. Eric Raymond نویسنده "The New Hacker's Dictionary" می گوید : " آموزش علوم کامپیوتر نمی تونه هیچ کسی رو برنامه نویس حرفه ای بسازه مانند اینکه مطالعه قلمو و رنگدانه نمی تونه شما رو نقاش کنه". یکی از بهترین برنامه نویسانی که من تا الان استخدام کردم فقط تا دبیرستان درس خوانده بود. اون بزرگترین نرم افزار ها رو تولید کرده ، اون گروه گوگل خودش رو داره و انقدر پول در آورد که بتونه کلوپ شبانه خودش رو بخره.
  • روی یک پروژه با دیگر برنامه نویس ها کار کنید.در بعضی پروژه ها بهترین و در بعضی دیگر بد ترین باشید.هنگامی که شما بهترین هستید ، شما امتحان کنید توانایی تون رو برای مدیریت یک پروژه و الهام بخش دیگران باشید.هنگامی که شما بد ترین هستید ، یا بگیرید که مدیر چکار می کند ، و یاد می گیرید که چه چیز را دوست ندارند که انجام بدهند.(چونکه از شما می خوان این کار رو انجام بدین)
  • بعد از دیگر برنامه نویسان روی پروژه کار کنید.نوشتن برنامه نوشته شده به وسیله دیگران رو درک کنید .ببینید که برنامه نویس اصلی چه کاری رو نفهمیده و انجام نداده و شما آنرا کامل کنید. به اینکه چطور برنامه هاتون رو طراحی کنید که برنامه نویسی که قرار از اون نگهداری کنه کارش آسونتر بشه.
  • حداقل نصف زبان های برنامه نویسی را یاد بگیرید. شامل یک زبان که پشتیبانی کند ویژگی کلاس رو (مانند : c++ , java) ، یک زبان که از ویژگی تابع پشتیبانی کند(مانند ML یا lisp) ، یک زبان که اعلان رو پشتیبانی کنه (Prolog یا C++ templates) ، یک زبان که از coroutines پشتیبانب کنه(Icon یا Scheme) و یک زبان برای اینکه از برنامه نویسی موازی پشتیبانی کند (Sisal)
  • یادتون باشه که ما در "علوم کامپیوتر" با کامپبوتر سروکار داریم.بدانید که چقدر طول می کشد که کامپیوتر شما دستورالعمل رو اجرا کنه ، یک کلمه رو از حافظه برداره (با حافظه کش و بدون آن) ، کلمات پشت سر هم رو از هار بخونه ، یا به یک مکان جدید روی هارد بره.
  • تلاش کنید که یک زبان رو استاندارد کنید. اون می تونه کمیسیون ANSI C++‎ باشه یا می توانید کد نویسی خودتون رو استاندارد کنید مانند تعداد فرو رفتگی ها . در هر صورت شما یاد میگیرید که مردم چه چیز هایی رو در یک زبان دوست دارند ، چه مقدار این حس رو دارند و در نهایت اینکه حتی ممکنه مقداری هم درباره اینکه چرا آنها این حس رو دارند.
  • تلاش کردن برای پیاده سازی استاندارد در یک زبان در سریع ترین زمان احساس خوبی داره.


با توجه به تمام این مسائل ، این سوال به وجود میاد که شما فقط با کتاب تا چه حد می تونید یاد بگیرید.قبل از به دنیا اومدن اولین بچه ام ، همه کتاب های "چگونه می توان ..." رو خونده بودم ، هنوز احساس می کردم یک تازه کارم. 30 ماه بعد ، هنگامی که بچه ی دوم من به دنیا آمد ، آیا من به کتاب های تازه تر بر می گشتم ؟ خیر . به جای آن من به تجربه شخصیم تکیه می کردم.به عقیده من تجربه شخصی ام مفید تر و کامل تر از هزاران صفحه از نوشته های کارشناسان است.


Fred Brooks در مقاله خود به نام " No Silver Bullet" برنامه ای سه بخشی برای شناسایی طراحان بزرگ نرم افزار طرح می کند :


  1. با روش سیستمی بهترین طراحان نرم افزار رو پیدا کنید.
  2. یک مربی حرفه ای مسئول توسعه چشم انداز اختصاص بدهید.
  3. فرصتی به وجود بیارن تا طراحان با یکدیگر در ارتباط باشند و در صدد تحریک هم بر آیند.

بر این فرض است که بعض از مردم ویژگی هایی که نیاز است تا طراح بزرگی شوند را دارند;کار اینه که اون ها رو کنار هم به درستی قرار داد.

Alan Perlis به صورته علمی تر می گوید : " همه می تونن به حجاری آموزش داده شوند ، Michelangelo باید یاد میگرفت که چطور این کار رو انجام نده. پس باید برنامه نویسان هم همین طور است."
همچنین Alan Perlis گقت : "بعضی نوابغ ، ویژگی داخلی شان فراتر از آموزش آنهاست." اما این ویژگی از کجا میاد ؟ ذاتی است ؟ یا اینکه آنها با سعی و تلاش آنرا توسعه می دهند؟ "همه می تونن برنامه نویس بشند اما اونی بزرگ میشه که بی باک باشه."

Anton Ego می گوید : " همه نمی تونن بازیگری بزرگ بشند ، اما یک بازیگر بزرگ می تون از هر جایی بیاد."


پس برین و کتاب های Java/Ruby/Javascript/PHP و غیره رو بخرید ; احتمالا شما کمی از آنها استفاده کنید. اما شما نمی تونید زندگی تون رو عوض کنید ، یا تخصص کل واقعی حرفه ای تون رو در برنامه نویس رو در 24 ساعت ، روز یا حتی در یک هفته .چگ.نه است که بیشتر از 24 ماه به صورته مستمر و سخت کار کنید برای بهبود بخشیدن آن ؟ خوب شما شروع می کنید به گرفتن جایی ...




اجرای دستور معمولی
1/1,000,000,000 sec = 1 nanosec
واکشی از حافظه کش L1
0.5 nanosec
شاخه misprediction
5 nanosec
واکشی از حافظه کش L2
7 nanosec
mutex قفل / باز کردن
25 nanosec
واکشی از حافظه اصلی
100 nanosec
ارسال 2 kb روی شبکه 1Gbps
20,000 nanosec
خواندن پی در پی 1MB از حافظه
250,000 nanosec
واکشی از محل دیسک جدید (seek)
8,000,000 nanosec
خواندن پی در پی 1MB از دیسک 20,000,000 nanosec
ارسال اطلاعات آمریکا به اروپا و برگشت
150 milliseconds = 150,000,000 nanosec



ضمیمه : انتخاب زبان برنامه نویسی

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


  • از دوست تان استفاده کنید . هنگامی که میپرسه : " از چه سیستم عاملی استفاده کنم ، ویندوز ، لینوکس یا مک ؟" ، معمولا پاسخ من این است : " از هر چیزی که دوستت استفاده می کنه استفاده کن" با این کار از مزیت یادگیری از دوستت استفاده می کنی ، با این کار فرق بین همه سیستم عامل ها و زبان های برنامه نویسی رو کنار خواهید گذاشت.همچنین دوستان آینده خود را در نظر بگیرید : شما بخشی از جامعه برنامه نویسان خواهید بود اگر ادامه بدهید.زبان مورد انتخاب شما دارای جامعه دارای رشد است یا در حال مرگ ؟آیا کتاب ، وب سایت ، انجمن آنلاین برای دریافت پاسخ وجود دارد ؟ آیا مردم داخله این انجمن را دوست دارید ؟
  • ساده نگهش دار .زبان های برنامه نویسی مانند c++ ,java برای پروژه های بزرگ طراحی شده اند ک توسعه دهندگان به وسیله تیم های بزرگ با تجربه از آن استفاده می شود که بهروه وری زمان اجرا برایشان مهم است.در نتیجه این زبان برای این شرایط طراحی شده است.شما نیاز ندارید از این زبان استفاده کنید زیرا قصد شما یادگیری برنامه نویسی است.شما به پیچیدگی نیازی ندارید.شما یک زبان برنامه نویسی را می خواهید که برای آموزش آسان برنامه نویسی طراحی شده باشد و در یاد یک برنامه نویس جدید بماند.
  • کدام راه را برای یادگیرفتن پیانو می پسندید : راه اول اینکه پس از فشار دادن هر کلید پیانو صدای نت را می شنوید یا اینکه بعد از فشار دادن همه کلید ها صدا را بشنوید ؟ معلوم است ، شما راه تعاملی را بیشتر می پسندید.توصیه می کنیم که از یک زبان برنامه نویسی تعاملی استفاده کنید.



توصیه من این است که شما از Python یا Scheme استفاده کنید.اما شرایط شما ممکن است متفاوت باشد ، و دیگر انتخاب های خوبی وجود داشته باشد. اگر سن شما تک رقمی باشد، شما ممکن Alice یا Squeak (زبان آموزان مسن تر ممکن است این لذت بردن) را ترجیح می دهند. نکته مهم این است که شما را انتخاب کنید و شروع کنید.


نکته : به دلیل قدیمی بودن مقاله اصلی ممکن است بعضی زبان های نام برده شده دیگر کاربرد نداشته باشند.

مترجم : سید احمد الهی
ایمیل : AHMAD@gomail.ir
سایت مترجم : www.progforum.ir



منابع مقاله :


Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.
Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.
Bryan, W.L. & Harter, N. "Studies on the telegraphic language: The acquisition of a hierarchy of habits. Psychology Review, 1899, 8, 345-375
Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.
Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4, 55-81.
Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.
http://www.norvig.com/21-days.html




مقاله به صورته pdf پیوست شد.
 

پیوست ها

آخرین ویرایش:

alborz

کاربر تازه وارد
تازه وارد
پاسخ : یادگیری برنامه نویسی در 10 سال

ممنون از مطلبتون
 

x_ali20

کاربر تازه وارد
تازه وارد
پاسخ : یادگیری برنامه نویسی در 10 سال

!:75
 
بالا