چند نکته برای توسعه‌دهنده (جاوا) بهتری بودن!

در حال دور دور در اینترنت بودم که این مطلب به چشمم خورد. چون حوزه تخصصی کارم نیست یکم اینور اونور کردم که بازش کنم ولی وقتی بازش کردم بسیار از خودم راضی شدم چون طرف خیلی واضح جاوا را برده بود توی پرانتز! در واقع یکسری نکته برای برنامه‌نویس‌های جاوا نوشته بود که برای توسعه‌دهنده خوبی شدن در هر زبان برنامه‌نویسی غیرقابل انکار هستند. لذا من برای اینکه حرمت کلام نویسنده هم حفظ بشه، تیتر اون را میارم و داخل پرانتز تیتر کلیش را میارم که در هر زبان برنامه‌نویسی صدق میکنه.جاوا ۸ یاد بگیریم(به آخرین نسخه‌های ارایه شده در زبانی تخصصیمون آگاه باشیم و یادشون بگیریم)ماجرا اینه که اگر میخوایم برنامه‌نویس و توسعه دهنده بهتری باشیم لازمه که با آخرین نسخه‌های زبان تخصصیمون کار کرده باشیم و بهشون تسلط داشته باشیم. یعنی اینجوری نشه که جاوا ۱۰ داره فیچر لیستش میاد، جاوا ۹ از زمان ارایه‌اش ۶ ماه گذشته و جاوا ۸ حدود ۴ ساله که هست بعد ما هنوز با جاوا ۶ یا ۷ کد میزنیم! حواس بدیم که فضای برنامه‌نویسی بسیار سیال هست و توی زبان‌هایی که جا افتادن در بازار، در اختیار داشتن توانمندی در نسخه‌های آخر اون زبان بسیار حائز اهیمته.فریمورک اسپرینگ را یاد بگیریم(بهترین فریم‌ورک‌ها را بشناسیم و یاد بگیریمشون)واقعیت در سطح بین‌المللی اینجوریه که خیلی کم پیش میاد کسی شروع کنه از اول یک فریمورک جدید توسعه بده مگر اینکه واقعا یک حرف جدیدی برای گفتن داشته باشه؛ و وقتی هم حرف جدیدی برای گفتن داره خیلی زود جزو فریمورک‌های محبوب میشه و کلی آدم در پروژه‌اش مشارکت میکنن و به بلوغ میرسوننش؛ چیزی شبیه لاراول یا phantom یا react و Vuejs. و کمتر شرکتی هم میاد و دست به نوشتن یک فریمورک اختصاصی برای خودش بزنه چون در نهایت باید بره یک بخشهاییش را از کدهای فریم‌ورک‌ها بیاره (نمیگم نیست؛ منطقی نیست در حالت عمومی!)لذا در دنیای کسب و کار، شرکت‌های نرم‌افزاری و سایر شرکت‌ها، به آدم‌های آشنا به فریمورک‌های محبوب هر زبان نیاز دارند. پس فریم‌ورک‌های خوب هر زبان را بشناسیم و بریم یکیشون را به عمق چندمتر یاد بگیریم :)تست واحد(Unit Testing) یادبگیریم.واضحه دیگه. اگر یک مرز باشه که یک توسعه‌دهنده خوب را از توسعه‌دهنده معمولی جدا بکنه مهارت‌های مربوط به تست هست. یک توسعه دهنده خوب برای کدهاش تست مینویسه و یک توسعه‌دهنده حرفه‌ای تا تست را ننوشته کد نمینویسه!واسط‌های برنامه‌نویسی(API) و کار کردن با کتابخانه‌ها را یادبگیریم.اگر با برنامه‌نویس‌های حرفه‌ای کار کرده باشیم حتما تسلطشون به اکوسیستم زبان برنامه‌نویسی که باهاش کار می‌کنند و به خصوص واسط‌های برنامه‌نویسی اون را دیدیم. خیلی از زبان‌هایی که الان ما باهاشون کار میکنیم بالغ هستند و تقریبا هرکاری میشه باهاشون انجام داد. طبیعتاً از هیچ‌کس انتظار نمیره که همه‌ چیز را بلد باشه ولی لازمه که برخی از مهمترین واسط‌های برنامه‌نویسی را بلد باشیم؛ واسط‌های برنامه‌نویسی JSON یا XML و یا کتابخانه‌های تست. اگر هم نمیدونیم اشکال نداره میتونیم توی گوگل با عبارتlibraries every [...] developer should knowجستجو انجام بدیم و جای [...] را هم با زبان برنامه‌نویسی تخصصیمون پر کنیم.ساز و کار ماشین مجازی جاوا(JVM) را یاد بگیریم(بدانید زبان برنامه‌نویسی شما چجوری کار میکنه) این لازمه اوج گرفتن در هر زبان برنامه‌نویسی هست. اگر میخواید به قول خارجی‌ها ابرستاره یک زبان برنامه‌نویسی بشیم لازمه که «تٓه و تو و منویات» اون زبان برنامه‌نویسی - در جاوا به طور خاص میشه JVM - را در بیاریم. برای مثال فرق ساختمان‌داده‌ها، سرعت پردازششون، پیدا کردن توابع و ساختمان‌داده‌هایی که مشکل کارایی ایجاد می‌کنند، نحوه کامپایل یا ترجمه شدن برنامه و ... .در هر زبان برنامه‌نویسی یکسری کتاب با این هدف نشر میشن که مثلا برای جاوا کتاب Definitive Guide to Java Performance هست. برای این موضوعات باید به دنبال performance [...] بگردیم. و بهتون قول میدم وقتی این موارد را بدونیم یک سر و گردن از برنامه‌نویس‌های دیگه توی کد زدن جلوتر خواهیم بود.الگوهای طراحی (Design Pattern) را یاد بگیریم.اگر الگوهای طراحی را یاد نگیریم یک معنی ساده داره: «هیچ وقت و هرگز از یک توسعه‌دهنده معمولی رو به متوسط بالاتر نخواهیم رفت». الگوهای طراحی وجود دارند که ما اشتباهات را تکرار نکنیم. لازمه که بخشی از عمرمون را به خوندن کتاب‌های عمومی و تخصصی زبان برنامه‌نویسی خودتون اختصاص بدیم. این مسئله اصلاً شوخی بردار نیست :) چون سطح کدنویسیمون را تغییر میده و در یک سطح جدیدی کد خواهیم زد.اگر هم به دنبال جایی برای یاد گرفتنشون هستیم عبارت design patterns [...] را جستجو میکنیم و آیتم مربوط به زبان خودمون را پیدا میکنیم.ابزارهای دوآپس (DevOps) را بشناسیمیک برنامه‌نویس مدرن باید به ابزارهای دوآپس آشنایی داشته باشه. و دست کم با مفاهیم «یکپارچه‌سازی پیوسته یا Continuous Integration» و «استقرار پیوسته یا Continuous Deployment» و یا در اصطلاح CI/CD و ابزارهایی که اجازه دستیابی به این روش‌ها را می‌دهد - مانند Jenkins در جاوا - آشنایی داشته باشه. همچنین توصیه می‌شود به شدت یادگرفتن ابزاری به نام Docker. خلاصه موضوع اینکه اگر علاقه داریم که یک برنامه‌نویس ارشد یا همون Senior Developer باشیم مسیر از اینوره :)کاتلین یاد بگیریم :)فهمیدین؟! اینهمه قصه گفتم به این برسم :) جدای از شوخی این زبان که توسط JetBrains توسعه داده شده توسط گوگل در سال ۲۰۱۷ به عنوان زبان رسمی برای توسعه اندرویید اعلام شد. یاد گرفتن این زبان برنامه‌نویسی نه‌تنها کارایی در برنامه‌نویسی را افزایش میده بلکه راهی برای ورود به دنیای برنامه‌نویسی اندرویید هست؛ که البته ما اینارو میدونیم :)میکروسرویس‌ها (Microservices) را فرا بگیریممعماری‌های کامپیوتری به‌طور مداوم در حال تغییر هستند و بسیاری از شرکت‌ها در حال حرکت از برنامه‌های کاربردی یک تکه - و یا به عبارت کاملتر برنامه‌های بزرگی که از درون به هم وابستگی دارند و تغییرشون بسیار دشوار هست- به سمت «میکروسرویس‌ها» در حال حرکت هستند. اینجا میتونیم راجع بهش بخونیم و در آینده در کاتلین هم بهش میرسیم و شاید یک مطالب جداگانه‌ای در موردش نوشتیم چون موضوع بسیار مهمیه و در حال حاضر رویکرد دنیا به این سو هست.برای خوندن در حوزه زبان تخصصی خودتون هم مثل قبل کافیه microservices [...] را جستجو کنید.محیط توسعه برنامه‌نویسی (IDE) را خوب فرابگیریمممکنه کم اهمیت به‌نظر بیاد ولی وقتی بیشتر بهش توجه کنیم متوجه میشیم که یک IDE خوب از نون شب برای یک برنامه‌نویس واجبتره! استفاده از قابلیت های یک محیط توسعه مثل IntellijIDEA و یا PhpStorm یا WebStorm در کنار گزینه‌هایی مثل Eclipse و NetBeans میتونه ما را در برنامه‌نویسی قدرتمند و سریع و روون بکنه.لیستی از کلیدهای میانبر، جستجوی مبتنی بر Regular Expressions، کدهای تکمیل شونده(Live Templates) و بسیاری از موارد دیگه اینقدر مهم هستند که حتی در جایی مثل Udemy براشون کلاس آموزشی برگزار میشه. پس معطل نکنید و برید سراغ IDE محبوبتون و بخوریدش :) و حتی اگر لازمه برای خریدش هزینه کنید!هر نکته باحال دیگه‌ای هست برای اینکه برنامه‌نویس بهتری باشیم را تو کامنت‌ها بگید!