9 اولویت یادگیری برنامهنویسان جاوا در 2018

جاوین پاول، یک برنامهنویس ارشد و نویسندهی یکی از وبلاگهای شناخته شدهی جاواست. 9 اولویت مطالعاتی پاول در سال 2018 میتواند برای برنامهنویسانی با تجربهی حدود 2-5 سال کاملا کاربردی باشد. برنامهنویسان با تجربهی کمتر نیز میتوانند پیشنهادهای او را در برنامهی مطالعاتی بلندمدت خود بگنجانند.
آنچه در ادامه میخوانید پیشنهادهای آقای پاول برای مطالعه در سال 2018 است:
قبل از همه چیز آرزو میکنم سال میلادی خوبی داشته باشید، ابتدای سال وقت خوبی برای هدفگذاری، تصمیمگیری و آغاز کارهای جدید است.
به عنوان یک برنامهنویس جاوا و نویسندهی وبلاگ، معمولا نامههایی از برنامهنویسان دریافت میکنم که در آن خواستار توصیههایی هستند که به آنها کمک کند سرعت پیشرفتشان را بیشتر کنند.
قبلا در مقاله ای با نام ده نکته برای تبدیل شدن به یک برنامهنویس بهتر در این مورد نوشته بودم. توصیههایی که در آن مقاله ارائه شده بود همچنان کاربردی است، به مناسبت سال جدید و با نگاهی به اتفاقات اخیر تصمیم گرفتم پیشنهادهایی ارائه کنم که به وسیلهی آن برنامهنویسان بتوانند دانششان را بیشتر کرده و ارزش حرفه ای خود را ارتقا دهند.
پس بدون اتلاف وقت به 9 ایدهی من برای سال 2018 بپردازیم. شما میتوانید از این پیشنهادها استفاده کرده و اهداف اختصاصی خودتان را پیدا کنید.
1-Performance Turing در جاوا
در چند سال اخیر، بشتر از 50 مصاحبه با برنامهنویسان ارشد جاوا داشتهام. مهارتی که تعداد زیادی از آنها در آن ضعف داشتند، دانش و فهم در مورد چیزی است که داخل JVM میگذرد. اطلاع در مورد رفتار GC و تنظیم عملکرد جاوا بسیار کاربردی است.
به تدریج که تجربهی جاوایی شما رشد میکند و تبدیل به یک توسعهدهندهی ارشد جاوا با بیش از 5-6 سال تجربه میشوید، از شما انتظار میرود در مورد تصویر و فضای کلی جاوا و همچنین مبانی و جزئیات آن بیشتر بدانید.
اگر تصویر کلی از طراحی یک نرم افزار را متوجه نمی شوید یا نمی توانید متوجه شوید چرا کند است یا چگونه میتوانید آن را سریع تر کنید، باید یک کتاب خوب در مورد «پشت پردهی JVM» و آنچه در درون آن میگذرد1 بخوانید. به عنوان مثال کتاب پرفروش Java Performance the Definitive Guide از Scott Oaks گزینهی خوبی است.
مدت زیادی است که هر موقع وقت داشته باشم به این کتاب مراجعه میکنم و یکی از اهدافم این است که امسال این کتاب را دوباره بخوانم.
اگر دورههای آنلاین را بر کتاب ترجیح میدهید، پیشنهاد میکنم نگاهی به سری دورههای Understanding the Java Virtual Machine از Pluralsight بیندازید که مدیریت حافظه، Class Loading، امنیت و Reflection را توضیح میدهند.
2-کدنویسی، دو ساعت در روز
چیز دیگری که پارسال متوجه شدم این است که در این حرفه با گذشت زمان، وقت بیشتری صرف هماهنگی کارها، جواب دادن به ایمیلها، شکل دادن به گروه، رفع اشکال، مربیگری و در یک کلام چیزی شبیه وظایف یک مدیر پروژه میشود. چیزی که در این فضا از آن غفلت میشود نوشتن کد است که مهارت اساسی لازم برای یک برنامهنویس به حساب میرود.
اگر احساس میکنید به اندازهی کافی کد نمی نویسید تصمیم بگیرید هر روز یک مقدار به این کار بپردازید. یک پروژهی جانبی برای خودتان تعریف کنید، روی یک فریم ورک یا کتابخانهی متنباز کار کنید یا … . از آن جایی که همیشه شروع کار سختترین قسمت آن است، توصیه میکنم از بازآرایی تفریحی کدهایتان شروع کنید. مطمئنم از این کار لذت خواهید برد و به فضای کدنویسی برخواهید گشت.
3-بررسی ماهانه اپلیکیشنتان
این پیشنهاد به مورد اولی که گفتیم مربوط است، آنجا که مطالعهی کتابی در مورد پشت پردهی JVM و تنظیم عملکرد را توصیه کردیم. همانطور که میدانید تنها مطالعهی کتاب در این مورد کافی نیست و باید این دانش را در پروژههای واقعی به کار بست.
پیشنهاد میکنم عملکرد اپلیکیشنتان را هر ماه بررسی کنید و به مقدار کافی به این کار وقت اختصاص دهید تا بتوانید نحوهی کارکرد آن را آنالیز کرده و نتایج را بررسی کنید.
می توانید نگاهی به heap dump پردازشی که نرم افزارتان انجام میدهد بیندازید و یا از کارافتادگی2های اخیر آن را بررسی کنید. ببینید کدام شی حافظهی بیشتری اشغال کرده، یا احتمال نشت حافظه3 را بررسی کنید. سپس همهی این مسائل و مشکلات را ریشه یابی کنید. آزمایش کنید با اضافه شدن مثلا صد هزار کاربر جدید، اپلیکیشن از پس پاسخگویی به آنها بر خواهد آمد؟ اگر پاسخ این سوالات را میتوانید با خیال راحت بدهید، اوضاع عالی است. اگر در این زمینهها نیاز به راهنمایی دارید یا برای رفع مشکلات نیاز به کمک دارید، پیشنهاد میکنم به دورهی Understanding and Solving Java Memory Problems توسط ریچار واربرتون4 مراجعه کنید.
4-شرکت در چالشهای برنامهنویسی
در مورد «نیاز به کدنویسی دو ساعت در روز» نوشتیم. واقعیت این است که گاهی در پروژههای واقعی اطرافمان امکان دو ساعت کدنویسی برایمان مهیا نیست. اگر مشتاق کدنویسی هستید چیزی بهتر از شرکت در چالشهای کدنویسی نیست.
سایتهای زیادی در اینترنت هستند که چالشهای برنامهنویسی را عرضه میکنند و این امکان را برای شما مهیا میکنند که توانایی و مهارتهایتان را محک بزنید اما TopCoder واقعا بهترین آنهاست. اگر به دنبال سوالات سختتری هستید به لیست سایتهای تمرین برنامهنویسی مراجعه کنید5.
5-برنامهنویسی شبکه با جاوا
چیز دیگری که از مصاحبه با برنامهنویسان متوجه شدم این است که توسعهدهندگان جاوا باید اطلاعاتشان را در زمینهی مبانی شبکه و برنامهنویسی Socketها افزایش دهند. در مصاحبهها سوالاتی از برنامهنویسی شبکه پرسیده میشود اما بیشتر برنامهنویسان قادر به پاسخ گویی نیستند. بعضی از آنها حتی قادر به شرح سادهای از تفاوت TCP و UDP نیستند، موضوعی که برای برنامهنویسی با 2-5 سال سابقه قاعدتا باید موضوعی پیش پا افتاده باشد.
اگر تاکنون فرصت کافی برای یادگیری برنامهنویسی Socket در جاوا نداشتهاید یا چون خود را برنامهنویس وبِ جاوا میدانید و همیشه درگیر JSP، Servlet و JSF بودهاید به آن احساس نیاز نکردهاید، پیشنهاد میکنم حداقل یک کتاب خوب در مورد مفاهیم مربوط به شبکه در جاوا، NIO و Socket بخوانید.
پیشنهاد من در این زمینه کتاب زیر است. نوشته ای ساده، جذاب و یک راه خوب برای یادگیری مبانی برنامهنویسی با Socketها.
TCP/IP Sockets in Java, Second Edition, Practical Guide for Programmers
6-جاوا 9
سال 2017 شاهد چند انتشار مهم بودیم که یکی از آنها JDK 9 بود. من هنوز مطالعهی جاوا 9 را شروع نکرده ام. ولی این اولین موضوعی است که در سال 2018 روی آن متمرکز خواهم شد. اگر میخواهید با مفاهیم جدید جاوا 9 مانند Jigsaw، Reactive Streams و بازطراحیها و بهینهسازیهای جدید در API آشنا شوید دورهی Java 9 MasterClass از Udemy جای خوبی برای شروع کار است.
7-اسپرینگ 5
یک انتشار بزرگ دیگرِ سال 2017 نسخهی 5 از فریم ورک اسپرینگ بود. ویژگیهای هیجانانگیز زیادی مانند Reactive Programming Model و پذیرش و به کارگیری ویژگیهای جاوا 8 و 9 به آن اضافه شده است.
در سال 2018 شرکتهای بیشتری اسپرینگ 5 را پذیرفته و مورد استفاده قرار خواهند داد. به همین دلیل هر توسعهدهندهی جاوا باید آن را یاد بگیرد. اگر در این زمینه نیاز به کمک دارید دورهی Spring 5.0: Beginner to Guru از Udemy جای خوبی برای شروع یادگیری است.
8- Spring Security5
از دیگر منتشرشدههای 2017 که در سال جدید قصد یاد گرفتن آن را دارم، Spring Security 5 است. این نسخه تغییرات عمده ای داشته است، چندین ماژول جدید نوشته شده و صدها باگ رفع شده است. جذابترین بخش ماژول OAuth 2.0 است. متاسفانه برای یادگیری نسخهی جدید منابع زیادی در دسترس نیست اما خوشبختانه این دوره برای نسخهی 5 ام آپدیت شده و مفاهیم جدید در آن گنجانده شده است.
9-تست واحد
اگر میخواهید در سال 2018 توسعهدهندهی بهتری شوید، باید روی مهارتهای تست واحد کار کنید. نه تنها تست واحد مورد نیاز است بلکه در حال حاضر به کل مهارتهای مربوط به روال خودکارسازی تستها، احساس نیاز میشود. در این حوزه میتوانید روی Integrated testing، نسخهی 5 فریم ورک JUnit و کتابخانههایی مانند Mockito، PowerMock، Cucumber و Robot متمرکز شوید تا مهارتهایتان را به سطح بالاتری ارتقا دهید.
فریم ورک Mockito بسیار قدرتمند است و به شما اجازه میدهد برای کلاسهای پیچیده تست واحد بنویسید، آنها را از وابستگیهایشان مستقل کنید و از کلاسهای بدلیِ ساده6 به عنوان جایگزین وابستگیها استفاده کنید.
اگر میخواهید تست واحد را شروع کنید و در سال 2018 یاد بگیرید، دورهی JUnit and Mockito Crash Course از Udemy جای خوبی برای شروع است.
خلاصه
اینها توصیهی من بود. اگر چند سالی در این زمینه تجربه دارید، میتوانید از این لیست استفاده کنید و به صورت خاص برای خودتان هدفگذاری کنید. چیزهای دیگری هم میتوان به این لیست اضافه کرد مانند اندروید، داکر و Spark.
عمدا این لیست را ساده و قابل دستیابی نگه داشتم، چون به شخصه معتقدم موفقیتهای کوچک به موفقیتهای بزرگ تر میانجامد. انتخاب اهداف کوچک و رسیدن به آنها بهتر از انتخاب اهداف غیر عملی است که شروع نشده با شکست مواجه میشود.
تصمیمها و اهداف خود را بنویسید و با ما به اشتراک بگذارید. امیدوارم در انتهای سال برگردیم و در مورد آنچه به آن دست یافتیم صحبت کنیم.
[1] JVM Internals
[2] Crash
[3] memory leak
[4] Richard Warburton
[5] پیشنهاد مترجم: همچنین میتوانید مهارتهای برنامهنویسیتان را در مسابقات JCAL در یک رقابت بومی همراه با جوایز محک بزنید.
[6] Mocking Objects
با نود زیاد کار نکردم بناباین نمیتونم نظری درموردش بدم اما اسپرینگ پیشنهاد میکنم تا اونجا که امکان داره کلا از تکنولوژی های وب جاوا فاصله بگیری اولین دلیلم اینکه اصلا اون لذتی که تو یادگرفتن ورژن استانداردش بوده تو نسخه وب و انترپاریزش نیست شما دایما درگیر وابستگیها فایلهای xml بیلدتولز و جرفایلها خیلی چزای دیگه هستین که بعد از یک مدتی کارکردن متوجه میشید که دیگه علاقه ای به جلو رفتن ندارین یادگیری و پروژه زدن باهاش اصلا کار اسونی نیست وقت زیادی مطلبه ازطرفی فرصت شغلی و افراد متخصص تو این زمینه کمیابه (داخل ایران) اگر به امار و ارقام هم نگاه کنید میبینبد که جاوا طی این چندسال به شدت از محبوبیتش کم شده دلیلشم زبانهای مثل پایتون جاوااسکریپت و… هستن حتی شرکت گوگلم از دست جاوا خستس به فکر جایگزین کردنشه
بر اساس نمودار کلی منتشر شده توسط شاخص سایت TIOBE از سال 2002 تا 2018 محبوبیت پایتون و جاوااسکریپت بالا و پایین شده ولی به نظر نمیاد روی سهم جاوا از بازار تاثیر گذار بوده.
جاوا همچنان با اقتدار رتبه ی اول و داره و روند ماه های اخیرش رو به رشده.
https://www.tiobe.com/tiobe-index
اگر با کانفیگوریشن های xml ای رابطۀ خوبی ندارید، احتمالا Spring Boot گزینۀ محبوب شما خواهد بود.
در پاسخ به این مسئله که گفتید گوگل از جاوا خسته است باید بگم گوگل از جاوا خسته نیست و فقط با اوراکل رابطه خوبی نداره
همچنین بله قبول دارم جاوا ای ای با xml خیلی مخلوط شده اما این قضیه مربوط به سال ها پیشه ! نه الان که همه چی به صورت annotation داره عرضه میشه و به نظر ترکیب این دو خیلی عالی تر شده
در مورد فریمورک اسپرینگ هم همینطور از این فریمورک بهتر هم داریم در مورد همه چی و همه جا راه حل داره
همچنین با کمترین زحمت !
و الان به همین آمار و ارقام نگاه کنید ( با وجود تشدید حمله ها به جاوا مثل کاتلین و اندروید ) میبینیم که شاخصش رفته بالاتر ! همچنان با اقتدار اول
جد واسم سواله ؛ node js یا spring ؛
خواهشا نظراتتون و بگید دوستان
بنده تجربه کمی داشتم با نود این رو بگم خوبه اما عالی نیست شما
حس میکنم هنوز خیلی جای کار داره و به اندازه اسپرینگ پخته شده نیست
یعنی یکسری مسائل هست که هنوز توی نود حل نشده اند و اسپرینگ سر همین موضوع چندین راه حل داره
مخصوصا در بحث امنیت که با وجود Spring Security اصلا بی نقص به حساب میاد حرفی بافی نمیمونه
یک نکته ای هم به نظر من خیلی مطرحه یکی بحث یادگیری هست و بحث پیاده سازی
توی بحث یادگیری اسپرینگ مقداری سخت و شاید هم کمی گنگ باشه اما توی پیاده سازی خیلی صریح و با نظم خاصی میتونی راحت به نتیجه برسی
ولی توی نود این قضیه برعکسه کاملا
Sprark ؟؟
با تشکر از تذکر شما، Spark درست است.
https://spark.apache.org