شاید شما هم تا عنوان این مقاله را دیدید با خودتان گفتید «مگر جاوا قدیمی نشده بود؟» یا «الان با وجود زبان فلان دیگر چه کسی دنبال جاوا می رود؟» اما همین ابتدای مقاله به شما می‌گویم که جاوا هنوز یکی از قدرتمندترین و پرتقاضاترین زبان‌ها برای توسعه اپلیکیشن های مختلف حتی اپلیکیشن های وب در سطح شرکت های بزرگ (Enterprise) است. بیشتر شرکت های بزرگ صنعت بیمه و بانکی تا پلتفرم های بزرگی مثل linkedin , netflix در بسیاری از بخش‌های خود از جاوا استفاده می‌کنند و به آن وابسته هستند.

اگر برایتان جالب است که با جاوا چطور می‌توان برنامه‌های تحت وب قدرتمند تولید کرد این مقاله قدم به قدم شما را راهنمایی می‌کند که باید برای یادگیری برنامه نویسی جاوا از کجا شروع کرد و به کجا رسید.

نقطه شروع: یادگیری جاوا (Core java)

طبیعی است که برای تولید سایت‌ها و اپلیکیشن های وب با جاوا باید این زبان را بلد باشید. جاوا به عنوان پایه برنامه‌های تحت وب نوشته شده با جاوا است. نه فقط وب در هر پلتفرمی که با زبان جاوا برای برنامه نوشته می‌شود باید برای شروع این زبان را یاد گرفته باشید. برای یادگیری جاوا باید مفاهیم زیر را بلد باشید.

۱. اصول پایه (Java Fundamentals)

باید مفاهیم اولیه جاوا را به صورت کامل درک کنید. برای این کار باید سینتکس جاوا را یاد بگیرید مانند متغیر ها و انواع داده‌ها و عملگرها. بعد از آن باید با ساختارها کنترلی آشنا شوید مانند دستورات کنترلی if, else, switch. سپس نوبت حلقه های تکرار است که باید یاد گرفته شود مثل حلقه های for, while, do-while و بعد از آن ساختمان داده‌های پیشرفته ای مانند آرایه ها و لیست ها و رشته ها را باید یاد بگیرید.

۲. شی گرایی (OOP)

جاوا اساساً یک زبان شی گرا است. پس یادگیری شی گرایی و مفاهیم آن مهم‌ترین بخش یادگیری زبان جاوا است. اگر این مفاهیم را درک نکرده باشید در درک فریمورک های جاوا به مشکل خواهید خورد. مفاهیم شی گرایی آشنایی با مواردی مانند کلاس‌ها و اشیاء و بخش‌های اصلی شی گرایی مانند وراثت و encapsulation , چندریختی , abstraction است. همچنین با interface ها و نحوه کار با آن‌ها و کاربرد آن‌ها نیز باید آشنا شوید.

دقت داشته باشید که خیلی از کسانی که یک زبان برنامه نویسی شی گرا را شروع می‌کنند توجه زیادی به شی گرایی و مفاهیم آن نمی‌کنند و این باعث می‌شود که بعداً درک مفاهیم دیگری در طراحی سیستم‌ها و اینکه چرا این سیستم به این شکل طراحی شده است برایشان سخت شود و مجبور شوند دوباره به مطالعه OOP بپردازند. همچنین در یادگیری فریمورک های بعدی نیز دچار مشکل خواهند شد. تسلط به مفاهیم شی گرایی باعث بالا رفتن سطح تخصص شما خواهد شد.

3. مفاهیم تکمیلی

بعداز اینکه شی گرایی را یاد گرفتید باید به سراغ مفاهیم تکمیلی جاوا بروید که بتوانید برنامه‌های غنی بسازید. موارد تکمیلی زبان جاوا عبارتند از

  • Exception handling: که به شما این قدرت را می‌دهد که بتوانید به جنگ خطاهای زمان اجرا و استثناعات بروید و آن‌ها را مدیریت کنید.
  • Collections: به شما کمک می‌کند که مجموعه های داده‌ای را درست ذخیره و مدیریت کنید و راحت‌تر با آن‌ها کار کنید و آن‌ها را مدیریت کنید.
  • Stream: استریم یک تغییر بسیار بزرگ و مثبت در مدیریت و پردازش داده‌ها است که یادگیری آن باعث می‌شود که بتوانید کارهای سخت و پیچیده داده‌ها را راحت‌تر انجام دهید.
  • Concurrency : اینکه بتوانید همزمان چند وظیفه را انجام دهید و بخش‌های مختلف برنامه را به اجرا درآورید به شما بسیار کمک خواهد کرد. مخصوصاً در محیط وب که درخواست های بسیاری از سمت کاربران ارسال می‌شود و باید آن‌ها را همزمان پردازش کرده و به آن‌ها پاسخ بدهید.

قدم اول: ابزارهای کمکی و مدیریت پروژه

برنامه نویسی امروزه یک کار تیمی و پیچیده است و مانند ۳۰ سال پیش نیست که شما به تنهایی از صفر شروع کنید و همه کدها را از صفر بنویسید و بعد از چند سال یک برنامه تولید کرده باشید. امروزه تیم های برنامه نویسی بر روی پروژه ها کار می‌کنند و برای همین نیاز به ابزارهایی است که بتواند این تیم ها را مدیریت کند و کارهای آن‌ها را با هم همگام کند. برای همین برنامه نویسان مدرن باید بتوانند با این ابزارها کار کنند. این ابزارها عبارتند از:

1. سیستم کنترل نسخه: گیت (Git)

مهم نیست که به تنهایی بر روی یک پروژه کار می‌کنید و یا با یک تیم 200 نفره شما باید گیت را بلد باشید. گیت تاریخچه تغییرات کد شما را نگهداری می‌کند و به شما امکان می‌دهد که هرجا که لازم بود به عقب برگردید و با همکاران به راحتی کار کنید و کدهایتان را با هم ادغام کنید. پس یاد بگیرید که با گیت چطوری کدتان را کامیت کنید و عملیات pull, push را بلد باشید و ساختن branch و pull request را نیز یاد بگیرید.

2. ابزارهای بیلد (build tool) مثل maven, gradle

همانطور که گفتم امروزه ما همه چیز را برای برنامه‌های خود از صفر نمی‌نویسیم بلکه از کتابخانه‌ها و پکیج های بیشماری که توسط برنامه نویسان دیگر نوشته شده است استفاده می کنیم. حال برای اینکه بتوانیم این کتابخانه‌ها را استفاده کنیم باید آن‌ها را دانلود کنیم ولی این کار را اصلاً به صورت دستی انجام نمی‌دهیم زیرا که مدیریت دستی این همه پکیج و کتابخانه خیلی وقت‌ها غیر ممکن است و همیشه سخت است. درعوض این وظیفه را به ابزارهای بیلد می سپاریم به ابزارهای بیلد package manager هم گفته می شود. این ابزارها هر کتابخانه ای که برای پروژه لازم باشد دانلود کرده و به پروژه اضافه می‌کنند و آن‌ها را مدیریت می کنند. در جاوا ابزارهای بیلد متعددی وجود دارد که از دوتای آن‌ها بیشتر استفاده می‌شود gradle, maven. پیشنهاد من یادگیری و استفاده از maven است زیرا که هم یادگیری و هم استفاده از آن ساده‌تر است و فقط با یک فایل xml می‌توانید همه کارهای مربوط به پکیج ها و وابستگی‌های پروژه را مدیریت کنید.

قدم دوم: ورود به دنیای وب

چون قرار است که اپلیکیشن تحت وب بسازیم پس باید پایه‌ و اساس برنامه‌های تحت وب را بلد باشیم و بدانیم که وب و صفحات وب چگونه کار می کنند. برای این کار باید با موارد زیر آشنا باشید

۱. Html, CSS, Javascript

البته قرار نیست که شما متخصص فرانت اند باشید اما برنامه نویسان بک اند وب هم باید درک کنند که مرورگرها چگونه اطلاعات را به کاربر نمایش می‌دهند و اصول کار آن‌ها به چه شکل است. مثلاً برای Html باید ساختار صفحه را درک کنید و بدانید که چگونه ساختار صفحه توسط Html پیاده‌سازی می‌شود. همچنین باید حداقل آشنایی با CSS و نحوه استایل دهی و قالب بندی را بلد باشید و در مورد جاوا اسکریپت هم باید بدانید که مرورگرها چگونه کدها و منطق ها را می‌توانند اجرا کنند و حتی به سرور درخواست ارسال کنند. موارد گفته شده برای برنامه نویس جاوا در حد پایه کفایت می‌کند و نیاز نیست که حتماً متخصص باشید و یا به سراغ یادگیری React یا Angular بروید.

2. پروتکل HTTP

این پروتکل کلید اصلی ارتباطات در دنیای وب است. شما باید بدانید وقتی که آدرس یک سایت را در مرورگر وارد می‌کنید چه اتفاقاتی می‌افتد تا سایت اطلاعات را به شما نمایش می‌دهد. مثلاً باید با مفاهیم درخواست و پاسخ آشنا باشید زیرا که شما به عنوان برنامه نویس قرار است که در سمت سرور برنامه بنویسید و به درخواست ها پاسخ بدهید. در این رابطه باید مفاهیم زیر را بلد باشید.

  • متدهای HTTP (GET, POST, PUT, DELETE) برای ارسال انواع درخواست ها و تفاوت آن‌ها با هم
  • کدهای وضعیت پاسخ درخواست ها (status code) کدهایی مثل 404 و 200و 503 کدهایی که هرکدام معنی و مفهوم خاص خودشان را دارند.
  • آشنایی کلی با بدنه درخواست (request) ها و پاسخ (response) ها مثل هدر ها و بدنه درخواست و پاسخ‌ها

قدم سوم: servlets

servlet, jsp تکنولوژی های اولیه برنامه نویسی وب با جاوا بودند و صفحات وب با استفاده از jsp و با پسوند jsp ساخته می شدند. البته این تکنولوژي ها قدیمی شده‌اند و امروزه با آن‌ها برنامه نویسی نمی‌شود ولی توصیه می‌شود که با servlet آشنایی داشته باشید. دلیل این توصیه هم این است که تمام فریمورک های مدرن جاوا مثل اسپرینگ در زیربنای خود از Java servlet api استفاده می کنند. یادگیری servlets به شما کمک می‌کند تا بدانید درخواست های http از چه طریقی به سرور جاوا می‌رسند و در این حین چه اتفاقاتی پشت سر گذاشته می شود. البته لازم نیست که در این مفاهیم عمیق شوید و در حد آشنایی چرخه حیات یک servlet و مفهوم jsp کفایت می کند.

قدم چهارم Spring

اسپرینگ یک اکوسیستم بسیار بزرگ است که انجام بسیاری از کارهای جاوایی را برای ما راحت می کند. اسپرینگ قطعات مختلفی دارد که می‌توانیم با کنار هم قرار دادن آن قطعات کارهای بسیاری را انجام بدهیم. در این راستا شما باید مفاهیم کلیدی اسپرینگ را بلد باشید. ۲ تا از پرکاربردترین مفاهیم عبارتند از: Inversion of Control (IoC) وارونگی کنترل و Dependency Injection (DI) تزریق وابستگی ها. این مفاهیم البته در زبان‌ها و فریمورک های دیگر هم وجود دارند ولی در جاوا اسپرینگ آن‌ها را به صورت آماده برای شما فراهم می‌کند. این مفاهیم برای ارتباطات و وابستگی‌های کلاس‌ها و اینترفیس ها به یکدیگر کاربرد دارد. به طور مثال شما برای اینکه در یک کلاس از یک کلاس دیگر استفاده کنید به صورت دستی از آن یک شی نمی سازید با کلمه کلیدی (new). بلکه با استفاده از یک سری annotation این کلاس‌ها را به یکدیگر متصل می کنید.

اسپرینگ به خودی خود یک فریمورک عالی است اما مشکلی که دارد این است که تنظیمات اولیه آن زیاد و پیچیده و سخت است. به خاطر همین Spring boot ارائه شد که این تنظیمات اولیه پیچیده را کم کند. اسپرینگ بوت تنظمات کمی دارد و شما می‌توانید در چند دقیقه یک اپلیکیشن تحت وب بسازید. پس به عنوان کسی که می‌خواهد برنامه نویسی وب با جاوا را یادبگیرد باید بر روی spring boot تمرکز کنید. البته قبل از اینکه spring boot ارائه شود برای برنامه نویسی تحت وب از Spring mvc استفاده می شدکه برای تولید برنامه‌های تحت وب از الگوی MVC استفاده می‌شد اما با ظهور Spring boot در پروژه های جدید از آن استفاده نمی‌شود.

قدم پنجم کار با داده‌ها

طبیعتاً هیچ اپلیکیشنی بدون دیتابیس کامل نیست. حتی بازی‌ها هم یک سری دیتا از امتیازها و مراحل را ذخیره می کنند. بنابراین شما باید بلد باشید با داده‌ها کار کنید و عملیات ذخیره و بازیابی و تغییر آن‌ها را انجام دهید. پس باید با دیتابیس ها که مسئول عملیات داده‌ای هستند آشنا باشید و از آن‌ها استفاده کنید. امروزه دیتابیس های رابطه‌ای بیشترین کاربرد را در مدیریت داده‌های مختلف دارند. پس برای این کار باید با دستورات SQL آشنا باشید و بتواند چهار عملی اصلی Create, Read,Update, Delete را انجام دهید و بتوانید جداول را با هم join کنید. پس با یک سیستم دیتابیس مثل Sql server یا PostgreSql یا MySQL آشنا باشید.

بعد از آن باید داده‌های دیتابیس را در زبان جاوا استفاده کنیم. برای این کار دو راه وجود دارد. اولی اینکه مستقیم در جاوا از زبان sql استفاده کنیم و کوئری های دیتابیس را به صورت دستی بنویسیم که این راه امروزه انجام نمی‌شود. به خاطر مشکلاتی که دارد و راه دوم این است که از ابزارهایی که به عنوان یک پل بین برنامه و دیتابیس عمل می‌کنند استفاده کنیم. به صورتی که دستورات جاوا و داده‌های جاوا را تبدیل به کوئری های دیتابیس کرده و بر روی دیتابیس اجرا می کند. برای این کار یک استاندارد با مجموعه قوانین ارتباط با دیتابیس در جاوا وجود دارد که به آن JPA گفته می‌شود و یک کتابخانه که این قوانین را پیاده‌سازی کرده است و Hibernate نام دارد. که شما می‌توانید با استفاده Hibernate اشیاء داده‌ای را مستقیماً در دیتابیس ذخیره کنید بدون که اینکه بخواهید با زبان SQL سرو کله بزنید.

با اینکه Hibernate بسیار کمک کننده است اما Spring boot کار را راحت‌تر کرده و یک لایه به نام Spring data JPA بر روی Hibernate ساخته است که کار با دیتابیس را به ساده‌ترین شکل در می‌آورد به شکلی که برنامه نویس فقط یک اینترفیس تعریف می‌کند و تمام کدهای ذخیره و جستجو و حذف به صورت خودکار برای آن تولید می‌شود.

قدم ششم ساخت API و امنیت

امروزه نتیجه همه کارهای backend در قالب API مشخص می شود. یعنی امروزه به خاطر تخصصی شدن حوزه ها بک اند کار صفحات وب را طراحی نمی‌کند بلکه فقط API های مختلف را ساخته و ارائه می کند. پس وظیفه شما به عنوان برنامه نویس وب جاوا اولاً ساخت API های تمیز است که بتوانید API هایی قابل فهم و تمیز طراحی کنید که اپلیکیشن های موبایل و وب بتوانند به راحتی از آن استفاده کنند. در مرحله دوم شما باید امنیت داده‌ها و سرور را نیز برقرار کنید. برای پیاده‌سازی امنیت هم Spring راهکاری به نام Spring security ارائه کرده است که عملیات احراز هویت (Authentication) و مجوز های دسترسی (Authorization) را پیاده‌سازی کرده و در اختیار شما قرار میدهد که می‌توانید با استفاده از Jwt که یک روش استاندارد است عملیاتی مانند لاگین و احراز هویت را انجام دهید.

قدم هفتم: تست نویسی

کدی که تست نشده باشد به زودی خواهد شکست. همیشه عادت کنید که برای کدهای خودتان تست بنویسید تا از درستی برنامه خودتان مطمئن باشید. اگر بتوانید برنامه‌های خود را به صورت TDD هم طراحی کنید فوق‌العاده خواهد بود. ابزارهایی که برای تست نویسی لازم هستند که باید آن‌ها را یاد بگیرید عبارتند از: Junit, Mockito که junit برای پیاده‌سازی تست های واحد (unit test) به کار می‌رود و mockito برای شبیه سازی عمل‌کرد کلاسهایی که به آن وابسته هستیم استفاده می‌شود. همچنین باید مفاهیمی مانند unit test, Integration test را نیز بیاموزید.

قدم هشتم: مفاهیم تکمیلی

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

داکر (docker)

داکر این اجازه را به شما می‌دهد که برنامه‌ای که نوشته‌اید را به همراه هر چیزی که برای اجرا شدن نیاز است را در یک بسته قرار دهید و آن را سفارشی سازی کنید و هر وقت که لازم بود برنامه خودتان را در محیطی اجرا کنید آن بسته را در آنجا قرار دهید و مطمئن باشید که همانطور که برنامه روی سیستم شما به درستی کار می‌کرده است روی سیستم مقصد هم به همان شکل خواهد بود و نگران تغییر و جابه جایی محیط نباشید.

مبانی CI/CD

امروزه برای اینکه یک برنامه روی سرور اصلی قرار بگیرد و مشتریان بتوانند از آن استفاده کنند باید تست شده و همه موارد لازم را با خود داشته باشد و بدون مشکل در اختیار مشتری یا کاربر نهایی قرار بگیرد. نام این پروسه Continuous Integration و Continuous Deployment است. این پروسه را می‌توان با استفاده از ابزارهایی مانند Github Actions به صورت اتوماتیک انجام داد که کدها تست شده و بر روی سرور اصلی قرار بگیرند.

میکروسرویس

میکروسرویس نام یک معماری نرم‌افزار است که به جای اینکه یک برنامه بزرگ بسازیم که همه کارها در آن پیاده‌سازی شده باشد بیایم و برنامه را به سرویس های کوچک جدا تقسیم کنیم که با هم ارتباط دارند و هرکدام بخشی از وظایف را انجام می دهند. برای ساخت میکروسرویس ها در جاوا از اسپرینگ بوت و اسپرینگ کلاد (Spring cloud) استفاده می شود.

جمع‌بندی

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