خیلی وقتا از من سوال میشه که «چه کتابی رو برای یادگیری جاوا خوبه؟» یا حتی «چهکار کنیم که برنامهنویسی یاد بگیریم؟» و از این قبیل سوالها. مدتهاست میخوام در این مورد یه مطلب بنویسم.
اگه بخوام به کسی که از برنامهنویسی هیچچیز بلد نیست، برنامه نویسی یاد بدم، خب اول از خوندن کتابهای آقای جعفر نژاد منعش میکنم. با کمال احترامی که برای ایشون قائلم، و البته که خیلی از کتابهاشون رو خوندم، این نظر رو دارم و معتقدم کتابهای ایشون از نظر علمی در سطح خیلی پایینی هستن در حدی که کتاب جاوا ایشون رو نخوندن، یک گام به جلو برای یاد گرفتن جاواست. البته با کمال تاسف باید بگم که اساتید محترم رشتهی کامپیوتر در اغلب موارد کتابهای ایشون رو معرفی میکنن (مخصوصاً برای درسهای پایهای) و دانشجوی تازه کار رو دور تر از حدی که هست میبرن.
برای شروع برنامه نویسی، فکر میکنم زبون C++ گزینهی خوبی باشه. در حال حاضر پاسکال رو خیلیها توصیه میکنن که من با این زبون مخالفم (البته به عنوان واحد دانشگاهی این درس رو پاس کردم). سنتی بودن این زبون و قدیمی بودنش دلیل اصلی این حرف منه. دانشجوی ترم اولی پاسکال میخونه، ترم بعد همون پاسکالی رو که خونده به زبون C++ میخونه. این یعنی یک گام درجا زدن.
برای شروع یادگیری C++ من کتاب «C++: a beginner’s guide» و بعد از اون کتاب خوب «C++ nuts & bolts: for experienced programmers» که نسخهی ترجمه شدهی تقریباً خوبی با نام «راهنمای سریع C++» داره. البته به نظر من کتاب دوم هم میتونه برای شروع C++ مورد استفاده قرار بگیره. برای مرجع هم دو کتاب «C++: The Complete Reference» و کتاب معروف «C++ how to program» که ترجمههای زیادی هم از این کتاب وجود داره. من یکی از این ترجمهها رو با نام «چگونه با C++ برنامه بنویسیم» از نشر «سیمای دانش» رو خودم گرفتم که نگارش خوبی نداشت و اون رو پیشنهاد نمیکنم. این دو کتاب رو به عنوان مرجع گفتم ونه به عنوان محور آموزش. دقت کنید که اگر همین الان یکی از این دوتا رو باز کنید و از اولی بخونید، از برنامه نویسی زده میشین. درست مثل اینه که شما یک فرهنگ لغت رو بشینید از اول بخونید.
اما جاوا، راستشو بخواین دیشب که به پادکست دوم رادیو لینوکس (که کار بسیار جالبیه) گوش میکردم، حس حسادت به برنامه نویسهای C++ توی من به وجود اومد. البته هرچند به زودی چیچک رو به عنوان یه پروژهی ابتکاری توسعه میدم ولی خب برای این که بشه یه برنامه طوری که بتونه مورد اسفتادهی عموم قرار بگیره نوشت، بهترین زبون C++ خواهد بود. ولی به شخصه، من دوست دارم با زبونی برنامه بنویسم که ابهام آمیز نباشه. همه چیز اون طبق قاعده و مستند شده باشه و تفاوت میون Compilerها در ترجمهی برنامه وجود نداشته باشه. برای من سخته از کدی به شکل String.compareTo در جاوا دل بکنم و اون رو با strcmp از C++ تعویض کنم. همونقدر که از مستقل از بستر بودن جاوا نمیشه گذشت، از قدرت C++ هم نمیشه گذشت و خوشبختانه اگر در جاوا به قدرت C++ نیاز شد، میشه با Native نویسی اون رو بدست آورد.
اما برای کسانی که مایل هستن جاوا رو یاد بگیرن بگم که بهترین کتابی که من میتونم معرفی کنم، دو جلد کتاب «Core Java» از نشر «Prentice Hall» هست که به نظر من خوندن این دو جلد کتاب برای یاد گیری جاوا از هر کتابی بهتره. «The Java Tutorials» هم منبع خیلی مفیدی برای یاد گیری جاوا، به خصوص رابط گرافیکی توی اونه. اما کتابهای «آموزش جاوا در 21 روز» از نشر «نص» رو به عنوان یه کتاب برای شروع به زبون فارسی بد نمیدونم. کتاب «جاوا، جاوا، جاوا: رهیافتی شی ء گرا در حل مسائل » از نشر «جنگل» هم کتاب خوبی به حساب میاد. و البته کتاب «راهنمای جامع Java» از نشر «کانون نشر علوم» هم کتاب خوبیه و به قول میلاد، مختصر و مفید توضیح داده و برای مرجع فارسی کتاب خوبیه. البته من نسخهی اصلی این کتاب یعنی «Java™ 2: The Complete Reference» رو مرجع خوبی نمیدونم. برای مرجع بهترین چیز، مستندات جاواست که از هر کتابی میتونه مفید باشه. برای تمام مباحث جاوا هم کتابای خوبی پیدا میشه. مثلاً کتاب «Computer Graphics Using Java™ 2D and 3D» و یا کتاب «Java Network Programming».
دو چیز رو با تاکید بگم:
- برنامهنویس با کتاب خوندن برنامه نویس نشده. بدونید که تمرین و از اون مهم تر، کد خوندن، تاثیر زیادی توی تجربهی برنامه نویسی میذاره.
- اگر فکر میکنید که نمیتونید کتابهای زبان اصلی رو بخونید و دنبال کتاب فارسی میگردین، راه رو اشتباه دارین طی میکنید.
برگردین و یا از برنامه نویسی دست بکشین، یازبانتون رو قوی کنیدو بعد برنامه نویسی بخونید. بعد از اونه که میفهمید آقای جعفر نژاد چه مزخرفاتی مخصوصاً توی کتاب جاوا، به خورد شما میده.
و چیزی که من خودم هم باهاش مشکل دارم و به قول همین پادکست دوم رادیو لینوکس، مستند سازیه. از همین اولی عادت کنید که برنامههاتون رو مستند کنید. راهنما برای اونها بنویسید. منظورم راهنمای کاربر نیست، راهنمایی برای کد هاتونه.
اما جزئیات بیشتر از کتابهایی که توی این مطلب نامشون رو بردم:
Title: C++ how to program
Authors: Paul J. Deitel, Harvey M. Deitel
Publisher: Prentice Hall
ISBN: 0136152503, 9780136152507
Title: C++: a beginner’s guide
Author: Herbert Schildt
Publisher: McGraw-Hill/Osborne
ISBN: 0072194677, 9780072194678
Title: C++ nuts & bolts: for experienced programmers
Author: Herbert Schildt
Publisher: Osborne McGraw-Hill
ISBN: 0078821401, 9780078821400
Title: C++: The Complete Reference
Author: Herbert Schildt
Publisher: McGraw-Hill Osborne Media
ISBN: 0072226803, 9780072226805
Title: Core Java, Vol. 1: Fundamentals
Authors: Cay S. Horstmann, Gary Cornell
Publisher: Prentice Hall PTR
ISBN: 0132354764, 9780132354769
Title: Core Java, Vol. 2: Advanced Features
Authors: Cay S. Horstmann, Gary Cornell
Publisher: Prentice Hall PTR
ISBN: 0132354799, 9780132354790
Title: Computer graphics using Java 2D and 3D
Authors: Hong Zhang, Y. Daniel Liang
Publisher: Prentice Hall
ISBN: 0130351180, 9780130351180
Title: Java network programming
Author: Elliotte Rusty Harold
Publisher: O’Reilly Media, Inc.
ISBN: 0596007213, 9780596007218
Title: Java 2: the complete reference
Author: Herbert Schildt
Publisher: Osborne/McGraw-Hill
ISBN: 0072130849, 9780072130843
عنوان: جاوا، جاوا، جاوا: رهیافتی شی ء گرا در حل مسائل
تالیف: رالف مورلی، هادی محمدزاده (مترجم)، علی جهانیان (مترجم)
نشر: چنگل
شابک: 978-964-981-065-2
عنوان: چگونه با C++ برنامه نویسی کنیم
تالیف: هاروی دیتل، پل دیتل، علیرضا انصاری (مترجم)
نشر: زانیس
شابک: 978-964-377-302-1
عنوان: راهنمای سریع C++
تالیف: هربرت شیلد، ابوالقاسم شادمان پور (مترجم)
نشر: دانشگاه هرمزگان
شابک: 964-6426-31-X
عنوان: راهنمای جامع Java
تالیف: هربرت شیلد، فرهاد قلی زاده نوری (مترجم)، علی اصغر شریف پور (مترجم)
نشر: کانون نشر علوم
شابک: 964-8587-21-3
عنوان: برنامه نویسی جاوا: خودآموز سریع در 21 روز
تالیف: چارلز پرکینز، لورا لمی، علیرضا زارع پور (مترجم)
نشر: نص
شابک: 964-6264-21-2













من یک مبتدی هستم اون کتاب دومی C++: a beginner’s guide رو دارم میخونم ولی به فصل آرایه ها که رسیدم یه کم واسم گنگه میشه یه توضیح بدید البته واقعا کتاب خوبیه
آرایه یه چیز خیلی بدرد بخوره، یه سری متغیر هم نام که با شماره (اندیس) از هم تفکیک میشن. خوبیش اینه که میشه روی اون اندیس محاسبه هم کرد پس میشه توی حلقهها از آرایه استفاده کرد.
آرایه رو خوب یاد بگیر. یه ساختمان دادهی پایهایه.
[...] و جالبیه. اگر درک نشه، خیلی سخت خواهد بود! در کل کتاب Core Java, Volume I یک فصل رو بهش اختصاص داده که در مورد خیلی از رخدادها [...]
با تشکر از مطالب ارزنده ی شما
من هم نظر مشابهی درباره ی کتاب های اینچنینی دارم
البته متاسفانه اساتیدی در رشته ی کامپیوتر هستند که در روز بیش از چند دقیقه با کامپیوتر سر و کار ندارند
به هر حال احترامشون باید حفظ بشه
کتابی به اسم سیستم های توزیع یافته هم ترجمه ی همین استاد هست
یه نگاه بهش بندازید!
اگر در زمینه ی سیستم های توزیع یافته(distributed computing) اطلاعاتی داشته باشید ممنون میشم
سلام
دیدم یکسری کتاب برای ++C معرفی کردین گفتم این دو تا کتابم اگر ممکنه تو لیستتون اضافه کنید. برای افرادی که میخواد حرفه ای تر این زبان رو یاد بگیرن، م
The C++ Programming Language: Special Edition
C++ Primer (4th Edition)
با تشکر از پست مفیدتان
ممنون که این دو تا کتابو معرفی کردین. من توی پست کتابهایی که خودم خوندم رو نوشتم و این کتابها رو نخوندم متاسفانه. با این همه سعی میکنم یه جا برای اینها هم باز کنم.
بله حرفت را قبول دارم، درست میگی ولی خوب باید این مسئله را هم در نظر گرفت که فعلا کار ترجمه و یا تالیف در ایران با سرعت خیلی کمی داره پیش میره و اگر مترجمان خوبی در این زمینه داشته باشیم حرفت بهتر صادق هست.
برای مثال کتاب طراحی و پیاده سازی زبانهای برنامه سازی را هم جعفر نژاد ترجمه کرده و هم سالخورده حقیقی، کتاب اولی اگر اشتباه نکنم ۱۰ هزار تومان و دومی نصف قیمت.
کتاب اولی منبع اصلی درس دانشگاه پیامنور محسوب میشه در صورتی که دومی ارزانتر و به نظرم با کیفت بهتری دارد!
«برای من سخته از کدی به شکل String.compareTo در جاوا دل بکنم و اون رو با strcmp از C++ تعویض کنم.»
strcmp در واقع برای زبان C هست نه ++C. تو ++C میشه دوتا رشته رو به صورت str1 == str2 و یا از تابع compare استفاده کرد (عینه جاوا) و یا از خود strcmp. با حرف شما در مورد یاد گرفتن زبان انگلیسی و کتابهای جعفرنژاد (و به طور کلی کتابهایی که ترجمه میشن) با شما کاملاً موافقم. احساس میکنم که اکثر مترجمهای (معمولاً استاد هم هستن) کتابهای کامپیوتری یه قدری (شایدم خیلی!) از متن رو میدن دانشجو ترجمه کنه و سرهمین ممکنه یه صفحه خوب ترجمه شده باشه و یه صفحه بد.
درسته. strcmp از C و کلاس String توی C++ هم وجود داره. فراموش کرده بودم. ولی خب این یه مثال بود. شما به راحتیای که توی Java میشه Socket نوشت، توی C++ نمیشه (شایدم میشه، من بلد نیستم)!
با تشکر از مطالب خوب شما با چند مورد تا حدودی مخالفم :
1- اینکه اول زبان انگلیسی رو قوی کنیم بعد برنامه نویس بشیم که نشد راه : به هر حال هیچ برنامه نویس ایرانی رو من سراغ ندارم که از اول کتاب های انگلیسی بخونه و بعد هم بشه برنامه نویس : زبان مادری به هر حال نقش مهمی در یادگیری داره : همون طور که زبان انگلیسی رو هم از طریق زبان مادری یاد میگیریم
2-آقای جعفرنژاد هم تا انجایی که در توان داشته سعی کرده مطالب رو ساده و با مثال های قابل فهم به مخاطب ارائه بده به هر حال زحمت های ایشون در زمینه انتشار کتاب های نرم افزار در ایران نباید نادیده گرفته بشه : هدف از این کتاب ها آشنایی اولیه مخاطب با مباحث بوده و به نظر من بیشتر بچه های برنامه نویس با همین کتاب ها شروع کردند منتها وقتی تجربشون بالا میره برمیگردند و این کتاب ها رو نقد میکنند که کار درستی نیست
با تشکر
مرسی از نقدتون.
البته در مورد اول بگم که شما یک گزاره رو حذف کردین که باید اون هم دیده بشه ولی در کل حق با شماست. اصلاحش میکنم.
در مورد آقای جعفر نژاد، با کمال احترامی که برای ایشون قائلم باید بگم تا جایی میتونم که گفتههای شما رو قبول کنم که مطلب اشتباه به خورد خواننده نده و اون رو گمراه نکنه. نمونهی اشتباهی رو که توی کتاب جاوا نوشته رو فکر میکنم قبل از این توی وبلاگ گفتم. و ایراداتی که بارها به ایشون وارد میشه مثل این مورد که خیلی از کتابهای ایشون فاقد مرجع هستن. من با کتابهای آقای جعفر نژاد شروع نکردم ولی خیلی از کتابهای ایشون رو از روی اجبار (و گاهن اختیار) خوندم. توی کتابخونهی خودم هم کتابهای جاوا، جاوا اسکریپت، C، پاسکال، اسمبلی، ویژوال بیسیک و کتاب هوش مصنوعی راسل ترجمهی همین آقا رو دارم، و کتابهای دیگهای از ایشون رو مثل سیستمعامل و ساختمان داده (در ۴۰ زبان مختلف با محتویات یکسان)و C++ دیدم و خوندم. شاید تنها کتاب مفید ایشون میون این کتابها که من دیدم کتاب ویژوال بیسیک این آقا باشه. چشم بسته نقد نمیکنم.
مخصوصن توی کتاب جاوا ایشون انگار نه انگار دارن جاوا مینویسن. شیء گرایی رو به کلی فراموش کردن. پیچیدگیها رو بالا بردن. حتی در بعضی مباحث مطلب اشتباه دارن، چیزی که با واقعیت جور در نمیاد. با کمال پر رویی هم روی کتاب نوشتن مرجع کامل! با توجه به این که توی مقدمهی این کتاب از محیط جاوا نام بردن میشه حدس زد که ایشون حتی نمیدونه که جاوا محیط نداره!
به نظر من تا کتابهای بهتر از کتابهای ایشون وجود داره، نباید سراغ اینها رفت. شما برین کتاب راهنای سریع C++ رو از انتشارات دانشگاه هرمزگان با کتاب C++ این آقا مقایسه کنید. زمین تا آسمون فرق داره از نظر روانی و سهولت مطالب.
در کل ممنون از این که انتقاد میکنید و امیدوارم به وجود اومد بحث رو جبهه گیری من تلقی نکنید. یقینن وجود نظر مخالف همیشه باعث رشده.
عذر میخوام میشه بیشتر من را با آقای جعفر نژاد قمی آشنا کنید؟
دست نگه دارید! لطف کنید بیشتر کتابهای ایشون را مطالعه کنید.
امپراطوری کتابهای رشتهٔ کامپیوتر شدهاند! آن هم ترجمهٔ ضعیف!
یک مترجم خوب چند نکته را باید خیلی خوب رعایت کند:
۱- نام کتابی را که ترجمه کرده در قسمت مشخصات کتاب درج کند! همچنین نام نویسندهٔ اصلی و هیچ قسمتی از کتاب اصلی را به دلخواه خود خذف نکنند و یا در صورتی که چنین اقدامی را انجام میدهند حتما در مقدمهٔ مترجم آن را ذکر کنند.
۲- مترجم حتما باید در آخر کتاب ۲ واژهنامهٔ فارسی به انگلیسی و انگلیسی به فارسی برای راحتی خوانندگان قرار دهد. و حداقل در متن کتاب هر گاه کلمهای را به سلیقهٔ شخصی خود ترجمه میکند در پانویس همان صفحه واژهٔ مورد نظر را نام ببرد.
و خیلی از گزینههای دیگر، که اصلا ایشون مراعات حال خواننده را نمیکنند. ببینید ترجمهٔ آبگوشتی که کار سختی نیست به عمهٔ بنده هم کتاب دهید تو این دوره زمونه در عرض چند روز یک کتاب برات ترجمه میکنه. مهم رساندن منظور نویسنده و خوانندگان هست.
همچنین دور از ذهن نمیبینم که ایشون همهٔ کتابهایش را خودش نوشته باشد!
ایشون ترجمهٔ کتاب را با جزوه نویسی اشتباه گرفتهاند و فکر میکنند باید کتاب را گذاشت بالا و پایین خط به خط به صورت جزوه ترجمه کرد. بدون هیچ ساختاری!
گذشته از کارهای ترجمه ایشون تالیفاتی دارند که اصلا مغز آدم crash میکند! به قول نویسندهٔ این مقاله، اصلا انگار ایشون هنوز مفهموم شیٔگرایی جاوا را درک نکردهاند. مثل اینکه جاوا را با سی و پاسکال اشتباه گرفتهاند!!
نکتهٔ دیگر حروفچینی بسیار بد و صحافی کتابهای ایشان هست. قطعا نظر نویسنده برای ناشر خیلی مهم هست. اما نمیدونم چرا هیچکدوم از کتابهای ایشون حروفچینی مناسبی ندارند.
در آخر سر من نکتهای عرض کنم: بنده هیچ وجه خدمت بزرگی را که آقای جعفر نژاد قمی به علم کامپیوتر در ایران کردهاند را نادیده نمیگیرم (و البته باید مترجمانی با صلاحیتتر این امر خطیر ترجمهٔ کتاب را در ایران در درست گیرند و این شکاف و کمبود علمی که در ایران به وجود آمده را بهبود بخشند) و حتی ایشون کتابهای ترجمه و تالیفی خوبی هم دارند. برای مثال کتاب CLRS را خوب ترجمه کردهاند و برای دانشجویان کامپیوتر مرجع خوبی به حساب میاد.
اصلا بهتر است ایشون وارد قسمت تالیف کتاب نشوند. تالیف کتاب کار هر کسی نیست. دکتر قدسی در ارتباط با کتاب تالیفی خودشان، کتاب دادهساختارها و الگوریتمها میگویند «هرگز فکر نمیکردم تهیهٔ اولین کتاب از این مجموعه بیش از ۱۰ سال به طول انجامد.» و جای دیگر: «این کتاب به عنوان یک محصول مهم زندگی علمیام در آمد …»
مرسی میلاد جان. یه اختلاف نظری هم دارم و اون رو با یه مثال شرح میدم:
یک شخص قصد بهتر کردن (و فرض بر این) یک جاده رو داره. میاد و شروع میکنه به آسفالت کردن اون جاده ولی آسفالتش بد تر از همون جادهی خاکی قبل از اونه و اگر این کار رو نمیکرد، ممکن بود یک متخصص این کار رو بهتر انجام بده. ایشون قصد بدی نداشته (و فرض هم کردیم نیت خیر بوده) ولی راهکار رو بلد نیست. حالا میتونیم بگیم که این شخص خدمت کرده؟
مننمیدونستم CLRS هم ترجمه شده، مرسی که گفتی.
سلام
ممنونم از مطالب جالب و آموزنده شما – این کتاب های خارجی که معرفی کردین ما چطوری میتونیم تهیه کنیم ؟؟؟ امکان خرید اینترنتی که نداریم و من تو تبریز هم گشتم و نتونستم پیدا کنم
مهدی جان، متاسفانه به دلایل بسیاری (هرچند بر خلاف عقیده) ما مجبوریم قوانین Copy Right رو زیر پا بذاریم ولی من نمیخوام توی سار این کار رو کنم. شما میتونید با یه سرچ توی اینترنت، PDF یا chm این کتابها رو پیدا کنی. اگر نشد، بگو تا کمکت کنم.
منظورم خود کتاب بود از pdf از اینترنت دانلود کردم ولی میخواستم خود کتاب تهیه کنم بازم متشکرم از شما
از لطفی که به لینوکس اف ام دارین ممنونم
خیلی خوشحال میشم اگه پانزده دقیقه ای وقت بدین با شما هم راجع به جاوا و لینوکس و مباحث مربوطش یه مصاحبه ای برای رادیو داشته باشیم؟
اگه مایل بودین ممنون میشم میل بزنید
بازم از نوشته کاملتون ممنونم
فرید جان، من در حدی نیستم که با من مصاحبه بشه در مورد لینوکس و جاوا. بزرگای زیادی برای مصاحبه هستن. و خودم رو از جامعهی گنو/لینوکسی ایران منزوی نمیدونم، پس البته به قول اینجا:
و خوشحال میشم بتونم همکاری کنم (هرچند کوتاه) با لینوکس افام.
خیلی خیلی خوشحال میشیم شمارم در تیم لینوکس اف ام داشته باشیم
چه موضوعی هم بهتر از جاوا! درسته نمیشه مطالب اموزشی تو رادیو گزاشت ولی تحلیلی که میتونن باشن!
بهر حال امیدوارم همیشه شادو سرسبز باشین