۱۳۸۷ تیر ۸, شنبه

گزارش کتاب - اولین گام در دنیای برنامه نویسی با PYTHON


عنوان كتاب: اولين گام در دنيای برنامه نویسی با Python
عنوان انگليسى: The First Step in the World of Programming with Python
نويسنده: مهندس احمد مصلی نژاد
ناشر: انتشارات ناقوس
نوبت چاپ: اول 1382
تعداد صفحه: 400 صفحه
شمارگان: 2000 نسخه
قيمت: 30,000 ريال
شابك: 9-069-377-964

هيچ موقع يادم نمی رود آن بعد از ظهر خواب آلود روزهای گرم اول مهر را که من در کلاس اول راهنمائی نشسته بودم و مشتاقانه منتظر بودم تا معلم درس انگلیسی وارد شود و یک زبان جديد و عجیب را به ما یاد بدهد. معلم وارد شد. اما نه آن گونه که من انتظار داشتم. با خشم و قدم های بلند. پيرمردی بود با قدی بلند و هیکلی بسیار درشت و شکمی برآمده. همانطور که از در وارد می شد با خشم کلماتی را به ما گفت که تا آن روز نشنیده بودیم!
Good Morning
Good Morning
How are you?
Thank you. I'm Fine (یا یک چیزی شبیه این!!!)
معلم همانطور که اينها را از حفظ می خواند تا آخر کلاس رفت و برگشت و در کلاس را با شدت بست و بعد دوباره شروع کرد به بلغور کردن همین کلمات! جملات را چنان با لحن یکنواختی تکرار می کرد که اصلاً شما نمی فهمیدید این یک مکالمه دو نفره است و در واقع رو خوانی درس اول کتاب است! روش عجیبی بود که حسابی توی ذوق من زد!
ساعت دوم شروع کرد به نوشتن حروف الفبا از A تا Z روی تخته و بعد کلی انگلیسی بلغور کرد که هیچ کدام از ما چیزی نفهمیدیم. آخر سر یک دفترچه برداشت با ترکیب انگلیسی و زبان اشاره حالیمان کرد که باید از روی حروف الفبا دو صفحه بنویسیم! من از روش خشن درس دادنش دلگیر بودم و از اینکه چیزی نمی فهمیدم ناراحت. اما همین که فهمیدیم باید چه کار کنم بر سر ذوق آمدم و شروع کردم به رسم حروف عجیب و غریبی روی تخته در دفترچه نو و دو خطه زبان انگلیسی! از آنجا که آن روزها هنوز کمی شوق اول بودن هنوز در من زنده بود، با حداکثر ذوق و بیشترین شوق الفبا را رونویسی کردم و بردم پیش معلممان که پشت میزش نشسته بود و پاهایش را انداخته بود روی میز و صندلی را به عقب تکیه داده بود و در آستانه چرت زدن بود! با رسیدن من معلم مجبور شد پایش را از روی میز بردارد و صندلی هم زیر وزن سنگین او، صاف شد و پایه جلوی آن که در هوا بود با صدا به زمین خورد! ومن را از جا پراند. دفترچه را از دست من گرفت و سرسری نگاهی به آن انداخت. اما من که از اضطراب داشتم می مردم، به عادت قدیمی شروع به گاز گرفتن ته خودکارم کرده بودم! که ناگهان معلممان دستش را به سمت جیبش برد و آن را گشت و وقتی ناامید شد چیزی به انگلیسی گفت و اشاره کرد که من از مفهومش اینطور برداشت کردم که قلم می خواهد. با عجله خودکارم را به او دادم و او گرفت! و ناگهان اوضاع درهم و برهم شد! چون خودکار من به گوشه کلاس پرت شد و من چنان پس گردنی خوردم که سرم به میز خورد و معلم که تا آن لحظه حتی اسمش را به ما به زبان انگلیسی گفته بود! شروع کرد به بد و بیراه گفتن به زبان شیرین فارسی! و اين شروعی بود بر پایان یادگیری زبان انگلیسی من! اين معلم دو ماه بعد بازنشسته شد و معلمی بسیار جوانتر و خوش اخلاقتر به نام آقای دوامی برایمان آمد. او یکی از فعالترین معلم های دور راهنمائی ما بود. و بسیار دلسوزانه به تک تک بچه ها توجه می کرد. حتی این او بود که برای اولین بار متوجه نزدیکبین بودن چشم های من شد و به خانواده پیغام فرستاد که این بچه را به یک دکتر چشم نشان بدهید و وقتی خانواده اندکی کاهلی کردند، تهدید کرد که اگر خودتان نمی برید من ببرمش که این تهدید مثمر ثمر واقع شد و اين شد که از آن روز تا بحال من چهارچشمی شدم! اما همه تلاش اين بنده خدا در طی سه سال دوره ی راهنمائی و همچنین معلم های دیگر در چهار سال دوره ی دبیرستان و اساتید دانشگاه در شش واحد درس زبانی که در دانشگاه گذراندم و یکی دو ترمی که در آکادمی گذراندم و حتی گرفتن معلم های خصوصی طاق و جفت و زندگی کوتاه مدت در خارج کشور، هیچ کدام نتوانست زبان انگلیسی من را خوب کند و یا حداقل اعتماد به نفس «زبان دانستن»، را در من زنده کند. به محض گفتن اولین کلمه به زبان انگلیسی به طور ناخودآگاه به ياد آن پس گردنی می افتم و خودم را عقب می کشم!
مدتهاست که آن معلم بنده خدا را بخشیده ام! چه توقعی می توان از یک انسان داشت. اگر من را هم در آستانه بازنشستگی و بعد از 35 سال به اجبار برسرکلاس بفرستند و بچه ای خودکار آغشته به آب دهان خود را به من بدهد! نه تنها یک پس گردنی به او می زنم بلکه با یک لگد او را از کلاس هم بیرون می کنم. البته آن موقع توقع من برای یادگیری یک زبان این بود که اول الفبا را باید یادبیگیریم، بعد کلمات و بعد در آخر سر جملات را! و چیزی از listening و Reading و Writing نمی دانستم و کسی هم نبود که برایم توضیح بدهد . در خانه نیز کسی نبود که کمکم کند و با برخورد معلم اشتیاق اولیه را هم از دست دادم هر چند امروزه در آرزوی دانستن زبان انگلیسی هستم، اما دیگر فرصت کلاس رفتن و تمرین کردن را ندارم.
عقده زبان نداستن همیشه من را دنبال می کرد و می کند. اگر کسی جرات نگاه کردن به کارنامه من را داشته باشد می بیند که در هفت سال تحصیل راهنمائی و دبیرستان تنها سال سوم راهنمائی بود که من یک ضرب قبول شدم و اگرنه هر سال تجدیدی زبان را داشتم و در کنارش آنقدر نمره 10 از این درس آورده ام که ناپلئون را هم رو سفید کردم! اما بالاخره در دانشگاه توانستم به گونه دیگری انتقام بگیریم! حقیقتش وقتی دیدم که در یادگیری زبانهای طبیعی استعداد ندارم، سراغ زبانهای مصنوعی رفتم و یکی یکی شاخ غولها را شکاندم! بله منظورم زبانهای برنامه نویسی است. از پاسکال و سی و بیسیک گرفته تا زبانهای خاص مثل LISP و Prolog و AutoLisp و از زبانهای دانشگاهی مثل Ada و Modula (که حتی هیچ وقت نتواستم کدی از آنها کامپایل کنم) تا زبانهای سطح پایین مثل زبان ماشین و Assembly ، از زبانهای شئی گرا مثل سی++ و جاوا و Object Pascal گرفته تا زبانهای از نسل ویندوز مثل ویژوال بیسیک و دلفی و سی شارپ و از زبانهای باستانی مثل فورترن و کوبول تا زبانهای تازه از راه رسیده ای مثل Perl و PHP و از انواع و اقسام زبانهای پایگاه داده مثل FoxPro و dBase تا زبانهای مورد نياز محیطهای وب مثل HTML و XML و جاوا اسکریپت، خلاصه سراغ هر چیزی بگویید رفتم و یادگرفتم و برنامه نوشتم و حرفه ای شدم! تا عقده زبان ندانستم را
بپوشانم!
همه این مقدمه بلند را گفتم تا درک کنید چرا وقتی اسم یک زبان برنامه نویسی جدید به اسم Python را شنیدم، یک چیزی توی مغزم دونگی صدا کرد و صدا کرد و صدا کرد تا اینکه مجبور شدم بروم یک کتاب درباره این زبان بخرم و در این بی وقتی مدتها اين کتاب خاک خورد تا اینکه به سراغش رفتم و یک ماهی وقت گذاشتم و هر روز صبح در فاصله ده دقیقه ای که سرور و کامپیوتر خودم بالا می آمدند آن را خواندم و بالاخره به این نتیجه رسیدم که عجب معجونی است!
درواقع پایتون ماری بزرگی است که هر چی زبان بوده بلعیده و از هر کدام تکه ای گرفته است و معمولاً تکه های غیر قابل هضم آنها را! چیزهای مثل بازنویسی اپراتورها از سی++ و انواع داده از نوع لیست از جاوا، تغییر نوع متغییر در زمان اجرا و عدم نياز به پیش تعریف آن از بیسیک و پیش رفتگی بعنوان محدوده کد از زبانهای باستانی و ... خلاصه بگویم چیز عجیبی است. اما یک حسن بزرگ دارد و آن ابزار مفسر آن است که در برداشتن اولين گام های برنامه نویسی و یادگیری برای نو آموزان بسیار کارآمد است و می تواند آن فاصله بین نوشتن کد، کامپایل و احیانا لینک کردن را به فاصله یک کلید Enter برساند.
در نگاه دوم، با توجه به قدرتمند بودن زبان، شئی گرائی و امکان بازنویسی اپراتورها و حذف آرایه و استفاده متنوع از لیستهای مختلف زبانی قوئی برای نوشتن برنامه ها به نظر می رسد ولی وجود چندتا مشکل کوچک مثل :
  • عدم نیاز به معرفی متغییرها
  • تغییر نوع متغییرها در زمان اجرا
  • پیش رفتگی بعنوان محدود کننده کدها (به جای Begin و End در پاسکال و یا {} در سی و جاوا)
  • ارجاع به مقدار به جای اسم برای متغیرهای ثابت!
باعث می شود که این زبان برای کارهای بزرگ و پیچیده و همچنین با برنامه نویسی تیمی زیاد هم خوانی نداشته باشد. هر چند امروزه ابزارهای خوبی برای برنامه نویسی با این زبان Open Source به باز آمده است، اما با این وجود این ابزارهای خیلی مانده است تا جای ابزارهای قدرتمندی مثل Visual Studio و یا Delphi Studio و یا JBuilder را پر کنند.
با اين وجود فکر کنم این زبان برای برنامه نویسی تحت وب که بیشتر به برنامه های پردازش رشته و کوچک یک صفحه ای محدود می شود و همچنین برنامه نویسی موبایل مناسب باشد.
و اما در مورد کتاب. کتاب هر چند برای شروع برنامه نویسی به زبان پایتون بد نیست. اما نویسنده کتاب به خوبی نشان داده است که یک نویسنده برنامه نویس حرفه ای نیست و خودش حالا حالا ها باید کار کند تا برنامه نویس بشود! و نکات بدآموز زیادی برای تازه کاران به یادگار گذاشته است. مثلا تعریف تابع ضرب به اسم ALI که در زیر آورده ام از نمونه های بی پایانی است که می توانید در مثالهای کتابها بفراوانی ببینید. هر برنامه نویس اندکی حرفه ای می داند که تعریف اسم متغییرها و توابع بر اساس کارکردشان حداقل کاری است که در هنگام کد نویسی باید رعایت کرد، هر چند تاثیری در اجرای برنامه نداشته باشد. در هر صورت همین که جرات نوشتن این کتاب را داشته است خیلی مهم است و برایش آرزوی موفقیت بیشتر را می کنم.

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

*****

def ali(n):
i=1
while i > 10:
print n*i,
i=i+1
print
k=1
while k > 10:
ali(k)
k=k+1

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

برای آشنائی بیشتر با این زبان سایت اصلی زبان یعنی http://www.python.org/ پیشنهاد می شود. که از همانجا می توانید ابزارهای مناسب و مفسر آن به همراه راهنمای کامل توابع و راهنمای آموزشی را دریافت کنید.
آدرس سایتی که نویسنده بر روی جلد کتاب زده است یعنی سایت www.pythonpars.com مدتها است که بسته شده است و این احتمالاً نشان میدهد که این زبان حداقل در ایران مورد استقبال قرار نگرفته است! هر چند با کمی جستجو در گوشه و کنار انجمنهای درباره آن پیدا می کنید مثل http://www.pylearn.com/fa/forum/ و یا http://forum.p30world.com که اولی به طور اختصاصی در مورد این زبان است و در دومی هم بارها به این زبان پرداخته شده است. البته در هنگام جستجو مواظب باشید که بعضی از فارسی زبانها اسم این زبان را «پیتون» و بعضی «پایتون» تلفظ می کنند.
سایتهای فارسی خوبی مثل http://www.pylearn.com نیز برای آنهائی که مثل من مشکل زبان انگلیسی دارند، وجود دارد.
یک کتاب هم از آدرس http://ce.sharif.edu/~norouzi/projects/python.pdf می توانيد دریافت کنید که در سه سوت و نه صفحه این زبان را به شما آموزش می دهد!
در ضمن اگر علاقه دارید در لينک http://en.wikipedia.org/wiki/List_of_programming_languages می توانيد لیست زبانهای برنامه نویسی را پیدا کنید که بعضی از کارشناسان تقریب می زنند بیش از 3000 تا از آنها وجود دارد و فهرست کوچکتری به زبان فارسی هم می توانيد در اينجا پیدا کنید.
البته اگر دوست داشته باشید کتاب را تهیه کنید، می توانيد به آدرس فروشگاه الکترونیکی ناشر مراجعه کنید.

شاد و كتاب‌خوان باشيد،
كرم كتاب

5 نظرات:

ناشناس گفت...

سلام بر كرم كتاب
با يه نگاه سرسري چند تا غلط املايي به نظرم رسيد:

اما نا آنگونه <<< اما نه آن گونه
بعد از ظهر خواب آلود <<< Good Morning!!!
شروع كرد به بلغوركردند <<< بلغور كردن
یک مکالمه دو نفر است <<< یک مکالمه دو نفره است
مسمر ثمر واقع شد <<< مثمر ثمر واقع شد
طی سه سال راهنمائی <<< طی سه سال دوره ي راهنمائی
چهار سال دبيرستان <<< چهار سال دوره ي دبيرستان
در خانه نيز كسي نبود كه كمك كنم <<< كمكم كند
اولين گام ها برنامه نویسی <<< اولين گام هاي برنامه نويسي
برنامه نویسی همکاره است <<< همه كاره

با آروزي موفقيت شما

ناشناس گفت...

ای آقا یا خانم قبلی هی از کرم کتاب ما غلط املائی نگیرا !

کرم کتاب جان آخه زبونه ماری (phyton) هم شد زبون. البته یه مزیت داره اونم اینکه مثل هری پلتر مار زبان شدید.

ولی از تعریفاتون معلومه کامپایلر سبکی داره. شیطونه میگه این ویژیوال استادیو سنگین و کند رو ور دارن برم تو کار پایتون :-D

ناشناس گفت...

خوب دوست عزیز، خواستم نکاتی را نذکر دهم:

۱. نام پایتون از مار گرفته نشده و اصولا ارتباطی با مار ندارند، بلکه از سری تلویزینوی مانتی پایتون آمده است.

۲. چیزهایی که به عنوان اشکالات کوچک از آن ها یاد کرده اید، در واقع از امتیازات بزرگ پایتون به شمار می آیند:

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

در واقع این ها باعث می شود که پایتون برای چنین کارهایی (تیمی و بزرگ) مناسب باشد.

۳. قرار نیست زبان های برنامه نویسی جای یکدیگر را پر کنند، بلکه هر یک و ابزارهای مربوط را باید برای کاری که برای آن ساخته شده و مناسب تر است به کاز برد.

۴. برای «برنامه نویسی تحت وب که بیشتر به برنامه های پردازش رشته و کوچک یک صفحه ای محدود می شود» بهتر است از زبان پرل یا روبی که برای این کارها طراحی شده اند استفاده کنید.

۵. هدف پایتون آموزش نیست. هر چند برای این کار بسیار مناسب است.

کرم کتاب گفت...

سلام؛
چند نکته کوچک:
1) از دوست عزیزی که زحمت تصحیح انشاء من را کشیده بود ممنونم. در هر صورت من هیچ وقت از املاء و انشاء نمره خوبی نمی گرفتم! فقط در مورد Good Morning تقصیری از من یا معلم من نبود، توی کتاب اینجوری نوشته شده بود! بقیه مطالب را تصحیح کردم. و امیدوارم بازهم غلط هایم را بهم تذکر بدهی.
2) از آقای داریوش جلالی هم که زحمت تذکر چند نکته را کشیده بودند، بسیار ممنونم. خوب مسلماً دیدگاه های من با ایشان در مورد این زبان کم فرق می کند، ضمن اینکه باید دقت داشت که آشنائی من با این زبان در حد همین کتاب و تست چندتا از تمرینهای آن است. در بعضی از جنبه های این زبان که با بقیه فرق دارد، باید بگویم که من آن را با دید عادتهای خودم نگاه کردم بنابراین بعضی از نکات خارج از عادت ممکن است برایم آزار دهنده باشد. مثلاً همان بحث مربوط به نگارش و پیش رفتگی ها و این که نمی شود خطهای طولانی را به راحتی شکست به نظر من هنوز هم نا مناسب است؛ در مورد هدف طراحی زبان پیتون و موارد دیگر مرجع من همین تک کتابی بود که خوانده بودم، اگر تقصیری هست از نویسنده است، نه از من حقیر. در هر صورت از نظراتتان متشکرم و امیدوارم بازهم با ارسال نظراتتان کمکم کنید.

ناشناس گفت...

به نظر من هم پایتون زبان بدی نیست
باید عرض کنم با پایتون برنامه های متعددی نوشته شده (که اکثرا برای لینوکس هستند)
هنوز خیلی زوده تا من در مورد اینزبان حرف بزنم ولی تجربه ای که تا حالا به دست آوردم از پایتون زبان بسیار scalable هست
اوصولا متدهایی که حجم کد رو کاهش می دن مورد استقبال قرار می گیرن مثلا همین عدم نیاز به تعریف متغیر یا تغییر خودکار نوع متغییر این جور قابلیت ها کار کد نویس رو راحت می کنن
در ثانی نیاز به تعریف متغیر در خیلی از جاها ایجاد خطا می کنه
من php رو برای عدم تعریف متغیرش دوست دارم