هناك كثير من الكتب في لغه الجافا متوفرة في السوق أو المواقع الالكترونية ، فكيف تختار الكتاب الجيد الذي سوف يفيدك أثناء التعلم ؟ وما هي الكتب المناسبه لك حالياً؟
هذه المقالة سوف تجيبك على تلك الأسئلة ، وسوف نقسم الموضوع الى 3 سلات Buckets (وليست مستويات) لأن الفكرة هو ان تقطف من هنا وهناك وليس الجلوس في مكان واحد خصوصاً بعد معرفة أساسيات البرمجة.
هذه المقالة جزء من سلسلة كيف تحترف لغة الجافا وهي موجهة لأي مطور OOP ويستخدم لغة الجافا
- الإسلوب الصحيح لكتابه Utility Classes
- هل مللت من دالة البناء Constructor ؟
- استخدام ال Builder Pattern في دالة البناء
- لا تستخدم Public الا وقت الحاجة
- كيف تصمم الPackages جيداً في تطبيقات جافا
- جافا دائماً Passing by Value
- نظرة حول الدالة Equals
- خارطة طريق لتعلم الجافا (المقال الحالي)
السلة الأولى: اللغه والمكتبات
في هذه السله سوف تحتاج الى أن تتعلم قواعد اللغه Grammar والمكتبات في اللغه Foundations Classes وقد تحتاج الى تعلم مكتبات خارجيه اخرى Third-Party Libraries من المكتبات الجيدة. مثلاً مكتبة Guava وهو توفر Collections و String Processing API وغيرها من قوقل ، أو مكتبة JodaTime للتعامل مع الوقت والتاريخ.
بخصوص قواعد اللغه فسوف تجدها مشروحة بشكل جيد في اغلب كتب الجافا المتوفرة ، لذلك يمكنك قرائة اي منها كما تشاء لأنها ممتازة ، فاذا كنت جديد على البرمجة وهذه أول ايامك بها وليس لك اي ممارسات سابقة ، فهذه الكتب مناسبة:
الكتاب مناسب للمبتدئين ، وهو يحتوي على كميه من الامثلة والتمارين بأخر الفصول حتى تمرن نفسك اكثر في البرمجة ، يشرح الكتاب اساسيات البرمجة (المصفوفات، التكرار ، الدوال) وغيرها بالتفصيل مما يجعله مناسباً كأول كتاب في مسيرتك البرمجية بالجافا
ايضاً الكتاب سهل وممتع ومليئ بالصور التوضيحية، يشرح الكثير من المفاهيم بشكل سلس وهو يمكن أن يكون كتابك الأول عند تعلمك الجافا.
واجهات المستخدم GUI والوصول لقواعد البيانات JDBC Database وبرمجة الشبكات Network Programming وأساسيات ال Threading تنطوي تحت السله وسوف تجدها في الكتب اعلاه ، لأنها مجرد API سوف تستخدمها بعد أن تتعلم المنطق البرمجي، لذلك عليك بفهمها وربما تكتب برامج صغيرة بها ولكن هذا ما زال تحت المبتدئ.
لذلك قرائه كتاب شامل للأساسيات مثل Java How to Program مفيد جداً للمبتدئ,, اذا كانت لديك خلفية ممتازة بلغة اخرى فيمكنك اختيار Core Java 2 فهو مناسب جداً لمن لديهم خبرة في البرمجة.
Core Java Volume 1 — Fundamentals
كتاب Core Java مكون من جزئين ، الجزء الاول يتناول الأساسيات بشكل عميق ويتناول معظم الأشياء الضرورية لتقوية اساس مبرمج الجافا مثلاً Generic Programming وبرمجة ال GUI والLayouts ويدخل في ال Multithreading ويتحدث بشكل جيد عن ال Exceptions وأساسيات ال OOP. لذلك ان كنت قادم من سي++ أو أي لغه اخرى وتعرف المنطق البرمجي فهذا مناسب لك لكي تتعلم الجافا بشكل جيد.
Core Java Volume 2 — Advanced Features
الجزء الثاني يدخل في مواضيع مهمه بدئاً من الIO وبرمجة الشبكات ويمر على Advanced GUI والعمل مع XML والDatabase والتشفير Security & Cryptography وكيف تكتب تستدعي كود سي++ بالجافا JNI وغيرها. اعتبره من المراجع الرئيسية لي في العمل.
هذه اهم الكتب في هذه السله، هناك كتب اخرى شهيره مثلاً كتاب بروس اكيل Thinking in Java وان كنت أرى ان ال Core Java أشمل وأوسع منه
السله الثانية: تفاصيل اللغه بشكل أعمق
بعد أن تتعلم الأساسيات وتستطيع بناء برامج بسيطة ، عليك العودة مرة أخرى للغه وتدرس تفاصيل اللغه بشكل اعمق حتى تعرف الاستخدام الامثل لها Practical Usage (مثلاً لماذا يفضل استخدام static factory على دالة البناء ، وكيف تكتب دالة hash code بشكل جيد ، ولماذا يجب عليك أن تحاول أن تجعل اي كلاس لديك Immutable اذا استطعت الخ) كل هذه المواضيع السابقة لن تجدها في كتب الأساسيات وتحتاج لكتب مختصه بهذه التفاصيل ,,
وهذا هو فاصل جيد بين شخص مبتدئ باللغه وشخص خبير باللغه، ايضاً هذه السلة سوف تحتوى على مواضيع الConcurrency وكيفية بناء برنامج يستخدم امكانيات الجهاز (جميع الCores ويستغلها بشكل جيد)، وسوف تمر على مرحلة أعمق في OOP وهي طرق التصميم Design Pattern وكيف تبنى هيكلية احترافيه للمشروع، ومروراً بكيفة كتابة كود عالى الجودة Quality Code وعمل تغيير في هيكلة الكود بحيث تضمن مقروئية وصيانته Refactoring ،، السله مليئة هذه المرة بكثير من الأمور ولكنها فاصل واضح بين مبرمج مبتدئ وشخص متوسط أو خبير في اللغه.
الكتب التالية هي مفتاحك:
اذا أردت كتابه اي برنامج فيه أكثر من Thread واحد ، فهذا هو افضل ما ستقرئه على الاطلاق، هذا الكتاب مناسب لمصممي الأنظمة أو ال Infrastructure للغير مثلاً تريد كتابه Web Server أو تعمل في مشروع يتطلب أن تدير اكثر من Request في آن واحد في شتى المجالات بدئاً من تجربة الخوارزميات ومعالجة الصور والالعاب والخ.
كتاب جوشا (أحد مبرمجي Collections API) هو من افضل الكتب لفهم الكثير من التفاصيل حول اللغه التي يحتاج أي خبير ان يعرفها، حتى لو كنت مبرمج بلغه اخرى فهذا الكتاب سوف ينفع معك لأنه يناقش مواضيع كثيرة مثلاً Serialization أو كيف تكتب Exception وتقوم بعمل mange لها في بشكل صحيح ، والخ ، الكتب السابقة تعلمك كيف تقوم هذا الكتاب يعلمك لماذا تقوم .
كتاب أنكل بوب الشهير ، يوضح لك كيف تكتب كود مقروء وواضح، اذا كنت تكتب دوال فيها اكثر من 100 سطر وكلاسات متداخله الأبعاد فأنت بحاجه الى قرائه هذا الكتاب
اسهل طريقة لتعلم اساسيات ال Design Pattern هو من خلال هذا الكتاب، بعد هذا الكتاب ستبدأ بالشعور بالانتقال من مرحلة Junior الى مرحلة Senior أو البداية في الArchitecture بشكل جيد
هل تصدق أن الكتاب عمره قارب ال15 سنه، ومازال يحتفظ بقيمته الى الآن، الكتاب يوضح لك كيف تحسن ال Design لمشروعك الحالي، ويحتوى على نصائح توضح لك متى تقوم بعملية التنظيف أو التحسين هذه ولماذا تقوم بها ، الكتاب لحسن الحظ أمثلته بلغه الجافا ولكنه يعمل على باقي اللغات (اذا لاحظت ان اغلب الكتب في هذه السله تكون من هذه النوعيه، وهي طريق جاد لكي تصبح مبرمج خبير).
لأن أي مبرمج يمكن أن نطلق عليه مصمم للدوال API Designer فإن ال API هي من أهم الأمور التي يجب الاعتناء بها في مشروعك أو شركتك حتى تستفيد منها فيما بعد ، هناك اساسيات في كتابى الAPI حتى يستخدمها المبرمجين فيما بعدك ، هذا الكتاب يتناول تفاصيل كثيرة حول بناء ال API (وهناك كتاب أخر شهير ولكن بسي++) ، مؤلف هذا الكتاب هو احد مؤسسي ال Netbeans ومكاتنه معروفه في مجتمع الجافا
السله الثالثه : الأدوات
هذه الأيام لا يمكن أن تسمى نفسك مبرمجاً هذه الأيام بدون استخدام أدوات مساعدة، هذه الأدوات تسهل عملك وتجعله اوتوماتيكي وجعل الحاسب يقوم بالأمور الممله وحفظ وقتك للأمور الأهم ،، لذلك يمكن القول أن تعلم منهجية تطوير (مثلاً Agile) بالاضافة الى الأدوات المطلوبة لأي مبرمج (أدوات Source Control ، أدوات Unit Testing ، أدوات Building ، أدوات Continuous Integration) ، الكتب التالية هي ما يجب النظر اليه اذا كنت لا تستخدم اي أدوات سوى ال IDE :
من أفضل الكتب في جافا التي تتحدث عن الأدوات (Documentation , Unit Testing, Source Control , Bugs Checking والخ) الكتاب قديم منذ 2008 الآن لأنه يتكلم عن أدوات ، و الأدوات تتطور مع الوقت لكنه يفيد لأخذ فكرة عن كل أداه ودورها في عملية التطوير
Pragmatic Unit Testing in Java with JUnit
الثلاثي المرح من اصدار سلسله The Pragmatic Programmers ، هي قديمة منذ 2005 ولكنها كانت وما زالت من الكتب الجيدة ، فكتاب Ship It يوضح لك منهجية بسيطة في تطوير المشاريع وما هي الأمور الذي يجب عملها في اي مشروع برمجي سواء كانت في الأدوات المستخدمه في طريقتك اثناء التطوير (عمل قائمة المهام وكيف تتفاعل مع فريقك) ، كتاب Unit Testing with JUnit هو الكتب القديمة ايضاً عن JUnit والمكتبة حصلت فيها تغييرات كثيرة بعد ذلك ولكنه ما زال يشرح الفكرة والهدف الأساسي من Unit Testing بشكل سلس ومبسط، أما كتاب Automation فهو للمبرمجين الذين لا يستخدموا IDE وهو بصراحة جيد ويبدأ بتعليمك كيف عمل المجلدات في المشروع Folder Structure واين تضع الكود وكود الاختبار وكيف تستخدم ال Building Tool وينتقل تدريجياً بك حتى تصبح عملية الBuild وTesting وال Deployment هي بضغطة زر واحدة ، الكتاب يستخدم Scripts لأنه موجود قبل ان تشتهر ال Continuous Integration ولكنه مفيد مع ذلك.
الكتاب يعلمك كيف تقوم بعمليات ال Unit Testing وما هي فوائدها، هو اكثر حداثه من الكتاب السابق الخاص ب Junit حيث يتناول الاصدار 4 ويمكن القول بأنه اشمل مرجع عن Unit Testing سواء في تطبيقات ال SE وحتى في ال Enterprise Application.
السله الرابعه: هندسة البرمجيات
هذه المرحلة لن تهتم كثيراً بالSyntax أو بالأمور التقنية ، ولكن سوف تنظر للأمور من بعد أعمق، كيف تطور المشروع من البدايه الى النهايه ، وكيف تدير الأشخاص العاملين ، وكيف يمكن ان تتخذ القرارات المناسبة اثناؤ سير المشروع ، كل ذلك ينطوي تحت ادارة المشروع واي مبرمج يجب أن يلم من جانب هندسة البرمجيات وكيفية بنائها من البدايه الى النهايه والا سوف يكون متوقف عند نطقة اللغه.
الكتاب الأول لكل مهندس برمجيات وهو يتناول قضايا كثيرة في تطوير البرمجيات بدءاً من المتطلبات وكيفة العمل مع الفريق واختيار اللغه المناسبه للمشروع والتقديرات والخ ، اذا أردت أن تكون مهندس برمجيات فعليك بهذا الكتاب.
مهم أيضاً ان تتعلم كيف تحدد زمن المشروع أو المهمة التي عليك انجازها ، كثير من اسباب فشل المشاريع هي في تحديد الوقت الخاطئ وبالتالي ترصد ميزانيه خاطئة ،، هنا قرائه :
الأحداث غير المتوقعه و التحديات اثناء المشروع هي من الامور التي تواجه اي مدير للمشروع أو اي مبرمج مسؤول عن العمل، هذا الكتاب يتناول فكرة الخطط التي تتغير على حسب حالة المشروع وكيف أن الخطة تكون متغيرة طوال فترة المشروع، ويتناول الكثير من القضايا الاخرى في هذا الجانب وفي جانب التقدير بالشكل الصحيح .
من اسهل الكتب حول منهجية ال Agile ، كتابي المفضل وقد قمت بتخليصه على هذه المدونة وقريباً سيتم الانتهاء من العمل وجمعه على كتاب عربي، الكتاب يوضح لك كل ما تريد عن ال Agile بدئاً من اليوم الأول في مشروعك وكيف تبدأ وكيف تخطط وتنفذ مشروعك باتقان، لا غنى عنه لأي مبرمج هذه الأيام.
أنكل بوب مرة آخرى ولكن هذه المرة في تجاربه ونصائحه التي تعلمها بعد سنوات طويلة من العمل والتطوير ، سوف يوضع نقاط عملية في امور كثيرة مهمه للمبرمج مثلاً التقدير وكيف تتعامل مع مديرك وكيف تقول الحقيقة، وكيف تتعامل مع ضغوط العمل، وكيف تدير وقتك، صراحة الكتاب رائع جداً وهناك الكثير من النقاط المفيدة فيه.
السله الخامسه: نظرة حول الصندق JVM
جافا الآن هي ليست الجافا فقط ، بل هي لغه جافا والJVM ، قد لا تصدق ولكن JVM زادت شهرتها عن الجافا لأنها أصبحت منصه تعمل فوقها لغه الجافا واللغات الأخرى التي تعرف ب Polyglot مثلاً Groovy, Scala, Clojure . هذه السله سوف تنظر للأمور واسع اكثر وتزيد من حصة معرفتك في JVM.
افضل كتاب تتعلم فيه ال JVM ماهيته ودوره ، وكيف تقوم باعداده (عمل Performance Tunning) حتى يعمل على مشروعك الكبير هو كتاب Java Performance ، فأغلب برامج جافا الكبيرة تحتاج لما يسمى Performance Engineer يقوم بتناول قضايا الJVM وال Memory وكيف يمكن اعداد وتهئية الGC المناسب لبرنامجك (مثلاً برنامجك تريده ان يعمل 24 ساعه فكيف تريده أن يعمل -سريع في العمل أم سرعه في الاستجابه أم معايير اخرى).
احياناً سوف تحتاج لتعلم بعض التفاصيل الLow Level عن الجافا مثل Byte Code وكيف يمكن حمايه برنامجك أو العكس كيف يمكن عمل Reverse لبرنامج الجافا ، وكيفية تشويش الكود وكيفية صناعه License System باستخدام ال Digital Signature (يضمن لك أن المستخدم لن يستطيع توليد مفاتيح تسجيل) هناك الكثير من الأمور الممتعه في هذا الكتاب اذا كنت من هواة ال Cracking
The Well-Grounded Java Developer
كتاب جديد نوعاً ما في الجافا ومفيد للمطورين المتوسطين أو الخبراء، مقسم مثل هذه المقالة الى الامور الواجب ان يعلمها اي مطور جافا (وهي ما تحتويه السلات السابقة) مثل الأدوات المهمه وال API الجديدة في جافا 7 ، وال Concurrency وال JVM Tunning وال Polyglot Programming ويأخذ مثال على Scala وGroovy، صراحة الكتاب قيم لكنه متقدم ولا ينفع للمبتدئين على الاطلاق.
ملاحظات
- لا غني لأي مبرمج عن المشاركة في الOpen Source Projects فهي السبيل لكي ترى ثمرة ما تقرئه واكتساب خبرة حقيقية في البرمجة ، القرائه لا تكفي وحدها.
- الكتب اعلاه تتناول ناحية الSoftware Engineering Skills الواجبة لأي Modern Java Developer (وكما لاحظت كثير من الكتب اعلاه تصلح لأي مبرمج بغض النظر عن اللغه) ، لكن اذا أردت التعمق في الGUI أو Network Programming أو Image Processing أو Collection Intelligence فلكل منها كتبها الخاصه،
- بنفس الفكرة لم نستعرض كتب ال Java Enterprise وهذا يحتاج لموضوع اخر ولكن اليك الخبر السعيد اذا قطفت من السله الأولى والثانية والثالثة والرابعه والخامسة فال Enterprise لن تكون معقده لك (ستأخذ وقتاً في أولها حيث التقنيات كثيرة ولكن بعد ذلك سوف تستطيع كتابه كود أفضل بكثير من غيرك البرمجين لأنك تعرف جيداً ما تفعل).
- حتى تكون مبرمج جيد عليك أن تضيف شيئاً في الProblem Solving Skills ولو في Algorithms And Data Structure هكذا سيزداد ثقلك، كتب Data Structure بالجافا كثيرة وجيدة في الغالب، وهذا الكتاب Beginning Algorithms رائع فهو يدمج الData Structure مع ال Unit testing ويجعلك تكتب Unit Testing مع اي Structure تقوم بكتابته (Array, Linked List, Stack) وسوف تتعلم الUnit Testing جيداً بهذه الطريقة.
- نذكر أن التقسم كان على اساس سلات وليس (مبتدئ ، متوسط ، محترف) اذ ان المبتدئ يمكن (أو يجب) ان ينتقل ويأخذ من هنا وهناك، كل ما تزداد معرفتك وتضع في الToolbox الخاصه بك كمية أكبر، كلما تنتقل من مستوى مبتدئ الى متوسط وهكذا ،، فقط استمر بالقرائه والتكويد.
مجهود جبار و تنسيق رائع
الله يوفقك دنيا وآخر و ينفع بك وبعلمك ويحقق لك أمانيك
مقال رائع جداً، وسيستفيد منه شريحة كبيرة من المطورين.
بالنسبة لمكتبة JavaFx، هل تعرف كتب جيدة في هذا المجال؟ المكتبة جيدة جداً وربما تتفوق على الـ swing، ولكن ينقصها التوثيق. من الجيد أنهم جعلوها من ضمن الـ JDK 🙂
واصل في كتابة المقالات، مقالاتك شيّقة (ننتظر منك خارطة طريق تعلم JavaEE :D).
لم استخدم JavaFx الا للتجربه ولكني ما زلت مستخدم لSwing 🙂 ,, ان شاء الله نكمل في ذلك
لك التحية
شكرا جزيلا لك أخى العزيز
بس أنا لى رائى لعلى أن أكون على صواب أو خطأ
هذة الكتب المفروض أنها تباع بمبالغ مالية, وإذا دخلنا على موقع كمثال أمازون سنجد أنها تعرض الكتب وبجوارها سعر الكتاب,
فكيف لنا أن نستخدم أشياء ليست مجانية ونوزعها على أنها مجانية, وهى فى الاصل هو مجهود مؤلف الكتاب قام ببذل مجهود لكى يصدر هذا الكتاب ولكى يرزق منة بالمال, فكيف لنا ان نساعد على توزيعة مجانا وهو فى الاصل ليس مجانى, هذة خسارة لصاحب الكتاب, ضع نفسك مكانة إذا بذلت مجهود فى إنشاء كتاب أو تطبيق كـبرنامج أو سكربت, وبعد ذلك قمت بعرضة للبيع ووجدت بعد ذلك شخص أخذة وقام بعرض مجانا للجميع, هل تقبل هذا (فقد ضاع مجهودك ووقتك الذى قضيتة فى إنشائة) .
ومن هنا نقول ان هذا بالنسبة للدين لا يرضى الله (لاضرر ولا ضرار).
أتمنى أنى ما أكونش ثقيل عليكم لكن هذا رائى .
حياك الله أخي الفاضل،،
الروابط الموجودة هي مباشره لأمازون .
وشكراً لك لمداخلتك,,
شكرا جزيلا على هذا المقال الرائع المنظم والمرتب للافكار —- يا ليت كل من سلك طريق وعر مظلم ووصل الي نهايته ان يلتفت ليساعد من خلفة على الاقل بإضاءة الطريق …. مشكور
جزاك الله خيرا ، ما شاء الله موضوع مفيد ومهم لكل مبتدء او فى المستوى المتوسط
سمعت كثيرا عن Unit Test ولكني لا استطيع استيعاب فائدة أني أشغل نفسي بإختبارات للبرمجيات. في حين -من وجهة نظري المحدودة- انه اكتب الكود، إذا عمل فخير وبركة وإذا لم يعمل اطلع على رسالة الخطأ ومكانها في الكود واصلحه.
يا ليت لو تكتب مقال عن شرح أهمية هذا الموضوع بإسلوب مبسط إن أمكن هذا. لماذا تهتم بال Test؟
المشكلة في كل مرة تضيف كود أو تعدل على جزئية وتريد ان تختبر كل الأجزاء الباقية (هل ستقوم باختبار كافة وظائف النظام لمجرد اضافة او تعديل واحد)؟
هذا سيكلفك وقت كثير وقد تنسى اختبار تأثرت بالتعديل وحدثت مشكلة بها وأنت لا تدري
لذلك الtests عندما تكون موجودة سوف تضمن انك كل شيء يعمل على ما يرام خصوصاً لو كان ال test يغطي الأجزاء المهمة من النظام.
سوف نتحدث عنه ان شاء الله في جزء من سلسلة الأساسيات من تصميم البرمجيات.
وشكراً.
السلام عليكم
اردت ان اسئل عن كتاب او سلسلة فديوهات او مقالات تتحدق عن Java networking كيف يمكن ان احمل ملف معين من موقع هن طريق ال java
على سبيل المثال اردت ان اصنع برنامج يمكن المستخدم من كتابة اسم كتاب ويقوم البرنامج بالدخول الى موقع للكتب ويعيد للمستخدم لائحة باسماء الكتب و امكانية التحميل
هناك سلسلة دروس لي في السابق عن ال Java networking موجودة في الفريق العربي للبرمجة في قسم الجافا، على اي حالة أفضل ان يكون التطبيق يعتمد على ال HTTP وبالتالي لن تدخل في متاهات السوكت وايضاً عمل mutilthreaded socket server امر صعب والأسهل ان تستخدم اي ويب سيرفر جاهز بدلاً من اعادة كتابة كل شيء خصوصاً لو كان هناك هدف غير التعلم في الأمر.
مثلاً قم بكتابة Web service بالجافا ترجع القائمة، ومن تطبيقك قم بالاتصال بهذه السيرفس واحصل على القائمة، وبمجرد ان يختار المستخدم اي اسم تقوم باستدعاء ويب سيرفس اخرى تقوم بتحميل الكتاب. وايضاً بالHTTP هذا سهل وهناك الكثير من المكتبات تسهل لك بعدة اسطر فقط.
وشكراً.
كتاب patterns of enterprise application architecture للكاتب مارتن فولر، وهو من الكتب القوية في برمجة تطبيقات الأعمال ولكنه قديم. فهل هناك كتاب في الوقت الحالي بنفس القوة مع تحديث للموضوعات؟
في الدوت نت يوجد الكثير، سوف تجد المصادر في اخر الموضوع وتتحدث عن ال Enterprise Patterns :
https://informatic-ar.com/solid/
بينما في الجافا لا يوجد الكثير، ولكن هذا الكتاب قد يناسب – قد جلبته من فترة ولكن لم اقراه بعد-
https://www.amazon.com/Java-Architects-Handbook-Second-applications/dp/0972954880
وشكراً لكم.
السلام عليكم ورحمة الله ..
ماشاء مهندس وجدي مجهود كبير ومقال رائع بارك الله فيك ..
ولكن استغربت من عدم وجود الكتاب الرائع Java The Complete Reference للمؤلف Herbert Schildt حيث يعد من اقوى مراجع الجافا .
يا بشمهندس ربنا يجازيك خير يا رب . بس كيف أني أشارك في open source projects ؟
merçi beaucoup