Node.js לעומת Java: מאבק אפי על שיתוף המוחות של המפתחים

בהיסטוריה של המחשוב 1995 הייתה תקופה מטורפת. תחילה הופיע ג'אווה, ואז קרוב ל- JavaScript הגיע JavaScript. השמות גרמו להם להיראות כמו תאומים מחוברים שזה עתה נותקו, אך הם לא יכולים להיות שונים יותר. אחד מהם מורכב ומוקלד באופן סטטי; האחר פירש והוקלד באופן דינמי. זו רק ההתחלה של ההבדלים הטכניים בין שתי השפות המובהקות האלה שעברו מאז למסלול התנגשות, הודות ל- Node.js.

אם אתה מבוגר מספיק כדי שהיית בסביבה אז, אולי אתה זוכר את שיאו האפי המוקדם של ג'אווה. הוא עזב את המעבדות, ומד ההייפ שלו הוצמד. כולם ראו בכך מהפכה שתפסיק בלא פחות מהשתלטות מוחלטת על המחשוב. התחזית הזו בסופו של דבר נכונה רק חלקית. כיום ג'אווה שולטת בטלפונים של אנדרואיד, מחשוב ארגוני וכמה עולמות משובצים כמו דיסקי Blu-ray.

למרות כל ההצלחה שלה, ג'אווה מעולם לא ביצעה משיכה רבה בשולחן העבודה או בדפדפן. אנשים תיארו את כוחם של יישומונים וכלים מבוססי ג'אווה, אך gunk תמיד תפס את השילובים הללו. שרתים הפכו לנקודה המתוקה של ג'אווה.

בינתיים, מה שמתכנתים טעתו בתחילה כתאום המטומטם נכנס לשלו. בטח, JavaScript תויג במשך כמה שנים כ- HTML והאינטרנט משכו את בור על העולם. אבל זה השתנה עם AJAX. לפתע היה לתאום המטומטם כוח.

ואז הוקמה Node.js והפכה את ראשי המפתחים במהירות שלה. לא רק ש- JavaScript היה מהיר יותר בשרת ממה שמישהו ציפה, אלא שהוא היה מהיר יותר מאשר Java ואפשרויות אחרות. הדיאטה הקבועה שלה של בקשות קטנות, מהירות ואינסופיות לנתונים, הפכה את נפוץ Node.js לשכיח יותר, מכיוון שדפי אינטרנט הפכו דינמיים יותר.

אמנם זה אולי לא היה מתקבל על הדעת לפני 20 שנה, אבל מעין התאומים נעולים כעת בקרב על השליטה בעולם התכנות. בצד אחד היסודות העמוקים של הנדסה ואדריכלות איתנים. בצד השני פשטות ונמצאות בכל מקום. האם עולם ג'אווה המונע על ידי בית הספר הישן ישמור על שלו, או שהמהירות והגמישות של Node.js יסייעו ל- JavaScript להמשיך ולזלול את כל מה שנמצא בדרכו?

איפה ג'אווה מנצחת: בסיס איתן

אני יכול לשמוע את היזמים צוחקים. חלקם עשויים אפילו למות מאי ספיקת לב. כן, בג'אווה יש תקלות ובאגים, אבל באופן יחסי, זה סלע גיברלטר. אותה אמונה ב- Node.js היא שנים רבות. לאמיתו של דבר, עשויים לחלוף עשרות שנים עד שצוות JavaScript כותב בדיקות רגרסיה כמעט כמו ש- Sun / Oracle פיתחה כדי לבדוק את מכונת ה- Java Virtual. כשאתה מאתחל JVM, אתה מקבל 20 שנות ניסיון מאוצר איתן שנחוש לשלוט בשרת הארגון. 

עולם ה- JavaScript מתעדכן במהירות. כאשר חלק ניכר מהאינטרנט כולו תלוי במנוע ההפעלה של JavaScript, שעות של מפתחי בזיליון עוברות לליטוש כל הקצוות. אך לכל החידוש יש חיסרון מכיוון שהתכונות החדשות עשויות להתפשט מהר יותר מכפי שבסיס המפתחים יכול לספוג אותן. מפתחי בתי הספר הישנים מבולבלים לעתים קרובות על ידי קוד המלא בשיפור התחביר החדש יותר של ECMAScript - ואותו קוד חדש יקרוס בשקט כמה דפדפנים ישנים יותר. ההיצע האינסופי של מעבדי הכנה חדשניים כמו CoffeeScript ו- JSX עשוי להיות נהדר עבור מפתחים שרוצים את התכונות הללו, אך הם מקשים על כולנו לפתוח קובץ אקראי ולהבין אותו באופן מיידי.

לג'אווה יש את חלקן בתכונות ואופציות חדשות, אך לרוב מדובר בפלטפורמה יציבה. זה מקל על החיים עבור מפתחים שבונים משהו שיימשך.

איפה Node.js מנצח: Ubiquity

הודות ל- Node.js, JavaScript מוצא בית בשרת ובדפדפן. קוד שאתה כותב עבור אחד יותר סביר להניח שיפעל באותה דרך על שניהם. שום דבר לא מובטח בחיים, אבל זה קרוב ככל שמתקרב לעסקי המחשבים. הרבה יותר קל להישאר עם JavaScript לשני הצדדים של חלוקת הלקוח / שרת מאשר לכתוב משהו פעם אחת ב- Java ושוב ב- JavaScript, מה שככל הנראה תצטרך לעשות אם תחליט להעביר את ההיגיון העסקי שכתבת ב- Java עבור שרת לדפדפן. או אולי הבוס יתעקש שההיגיון שבנית עבור הדפדפן יועבר לשרת. בשני הכיוונים, Node.js ו- JavaScript מקלים על העברת קוד בהרבה.

ההובלה של צומת בעולם הזה רק נראית מתרחבת. מסגרות האינטרנט המתוחכמות ביותר, כמו React, יחליטו בשנייה האחרונה אם להפעיל את הקוד בשרת או בלקוח. יום אחד הוא יפעל על הלקוח וביום אחר הוא יפעל על השרת. היגיון חכם כלשהו יקבל את ההחלטה לטוס על בסיס עומס או זיכרון RAM פנוי או משהו אחר. כמה מסגרות ישלחו JavaScript למסד הנתונים כשאילתה בה הוא מבוצע. הקוד שלך עשוי להיות פועל בכל מקום וזה נהיה קשה יותר לעמוד בקצב בגלל שהוא לא שולח גלויה הביתה. רק תשמח כי אינך צריך לחשוב על הפרטים.

איפה ג'אווה מנצחת: IDE טובים יותר

למפתחי ג'אווה יש Eclipse, NetBeans או IntelliJ, שלושה כלים מהשורה הראשונה המשולבים היטב בבאגים, מפענחים ושרתים. לכל אחת מהן שנים של פיתוח, משתמשים ייעודיים ומערכות אקולוגיות איתנות מלאות בתוספים.

בינתיים, רוב מפתחי Node.js מקלידים מילים בשורת הפקודה וקודאים בעורך הטקסט המועדף עליהם. כן, לכמה מעורכי הטקסט הטובים ביותר כמו Atom יש אוספים מורכבים של תוספים שעושים כמעט כל דבר, אבל גם אז זה מרגיש כאילו Node.js הוא בית ספר ישן יותר מאשר ליקוי חמה. בקרוב נחליף את העכבר עם מקל שמחה של עטרי.

מפתחים מסוימים משתמשים ב- Eclipse או Visual Studio, שניהם תומכים ב- Node.js. כמובן, עליית העניין ב- Node.js פירושה שמגיעים כלים חדשים, שחלקם, כמו ה- Node-RED של יבמ, מציעים גישות מסקרנות, אך הם עדיין רחוקים מלהיות שלמים או דומיננטיים כמו Eclipse או IntelliJ.

הדבר המוזר הוא שנראה שהמפתחים לא משתמשים בכלים האלה. שורת הפקודה הייתה אמורה להיעלם לפני 35 שנה עם הגעת המק, אך איש לא אמר למפתחי Node.js. האפשרויות קיימות. WebStorm, למשל, הוא כלי מסחרי איתן של JetBrains המשלב כלים רבים לבניית שורת פקודה.

כמובן, אם אתם מחפשים IDE העורך ומלהטט בקוד, הכלים החדשים התומכים ב- Node.js טובים מספיק. אבל אם אתה מבקש מ- IDE שלך לאפשר לך לערוך בזמן שאתה פועל על קוד המקור הרץ כמו מנתח לב שפורח את החזה, ובכן, כלי Java הם הרבה יותר חזקים. הכל שם, והכל מקומי.

איפה Node.js מנצח: שאילתות מסד נתונים

שאילתות לחלק ממאגרי המידע החדשים יותר, כמו CouchDB ו- MongoDB, נכתבות ב- JavaScript. ערבוב של Node.js ושיחה למסד הנתונים אינו דורש העברת הילוכים, שלא לדבר על כל צורך לזכור הבדלי תחביר. 

בינתיים, מפתחי Java רבים משתמשים ב- SQL. גם כאשר הם משתמשים ב- Java DB - לשעבר Derby, בסיס נתונים שנכתב ב- Java עבור מפתחי Java - הם כותבים את השאילתות שלהם ב- SQL. הייתם חושבים שהם פשוט יקראו לשיטות ג'אווה, אבל טעיתם. עליך לכתוב את קוד מסד הנתונים שלך ב- SQL ואז לתת לדרבי לנתח את ה- SQL. SQL היא שפה נחמדה, אך היא שונה לחלוטין מג'אווה, וצוותי פיתוח רבים זקוקים לאנשים שונים כדי לכתוב SQL ו- Java.

כדי להחמיר את המצב, קודני Java רבים משתמשים בספריות ותוכניות משוכללות כדי להמיר את הנתונים משאילתת SQL לאובייקטים של Java רק כדי שיוכלו לטעון אותם מחדש לתבניות. זה תהליך מטורף, ובסופו של דבר די בזבזני.

איפה ג'אווה מנצחת: סוגים 

רבים מקורסי תכנות ההיכרות ממשיכים להשתמש בג'אווה מכיוון שרבים מתכנתים רציניים נוטים לאהוב קוד שהוקלד באופן סטטי הן לפשטות והן לבטיחות. הקוד פשוט מרגיש קפדני יותר לאחר שהמהדר תופס את הבאגים הברורים.

JavaScript, לעומת זאת, מתעדכן וכמה מפתחים עוברים ל- TypeScript, קבוצת-על מקלידה של JavaScript המפעילה את כל הקסם לבדיקת הסוגים לפני שהם יורקים משהו שרץ בערימת JavaScript של הדפדפן. אם אתה אוהב טיפוסים, זה יכול להספיק לך לאמץ JavaScript. או שאתה יכול פשוט לזהות את החיקוי כצורה הכנה ביותר של חנופה ולהיצמד לג'אווה, שאימץ הקלדה סטטית מההתחלה.

איפה Node.js מנצח: גמישות תחבירית

JavaScript היה בעבר שפה פשוטה להעלאת תיבות התראה לא רצויות ובדיקה כפולה של קלט טופס. אז קהילת המפתחים יצרה גרסאות שונות של השפה שניתן היה להעביר למשהו עבור הדפדפן. יש את הקהל של CoffeeScript המציע קומץ תחבירים שונים שנועדו לספק טעם לפיסוק נקי יותר. יש את הקהל מגיב / Vue שמשלב HTML ו- JavaScript רק בגלל שהוא נקי יותר. יש TypeScript לאוהבי הסוגים ו- LiveScript לחובבי השפה הפונקציונלית.

גם בעולם הג'אווה תמצא כמות אדירה של יצירתיות, אך משום מה זה לא בא לידי ביטוי אצל הרבה מעבדי קדם. ישנן מספר שפות כמו Kotlin, Scala ו- Clojure שהופכות לקוד בתים עבור ה- JVM, אך איכשהו הן מרגישות שונות מספיק כדי להתייחד כשפות נפרדות. כל המעבדים המקדימים הופכים את החיים למהנים יותר עבור מתכנתים JavaScript שאוהבים דרכים שונות לנסח או לנקד את הקוד שלהם.

היכן שג'אווה מנצחת: תהליך בנייה פשוט 

כלי בנייה מורכבים כמו Ant ו- Maven חוללו מהפכה בתכנות Java. אבל יש רק נושא אחד. אתה כותב את המפרט ב- XML, פורמט נתונים שלא תוכנן לתמוך בלוגיקה בתכנות. בטח, יחסית קל לבטא הסתעפות עם תגים מקוננים, אבל יש משהו מעצבן במעבר הילוכים מג'אווה ל- XML ​​רק כדי לבנות משהו. ב- JavaScript אין החלפת הילוכים. 

בעבר היה ל- Node.js מבנה פשוט יותר. אתה פשוט עורך את הקוד ואז לוחץ על "הפעל". זה היה אז. מכיוון שמפתחי הצמתים "שיפרו" את התהליך, הם הוסיפו מעבדים מקדימים שלוקחים את תת המשנה המועדפת עליכם ב- JavaScript והופכים אותו למשהו שניתן להפעיל. ואז מנהל חבילות הצומת צריך למצוא את הספרייה המתאימה. לרוב זה פשוט עובד, אבל לפעמים זה לא עובד ואז אתה מבלה בחיפוש אחר מספר הגרסה הנכון של חפץ כלשהו שאתה בונה לעצמך בשלב נפרד. ואם אתה מבצע טעות כלשהי במאגר החפצים, ובכן, מספר הגרסה הזה נורה ואתה צריך לסובב את גלגלי מד המרחק שוב.

ל- Java יש גם תהליך בנייה מורכב שדומה למדי לשיטת Node.js, אך לא מרגיש שהוא נעשה מורכב יותר. איכשהו נראה כי מייבן ונמלה הם חלק מקרן ג'אווה. רבים מהקצוות המחוספסים נעלמו מזמן והמבנים פשוט עובדים לעתים קרובות יותר. אם היה מידה מוחלטת של טרחה לבנות, שתי השפות עשויות להיות דומות, אך ההתפוצצות המהירה של מורכבות JavaScript גורמת לכך שג'אווה מנצחת.

סרטון קשור: טיפים וטריקים של Node.js

בסרטון ההסבר הזה, למדו כמה טכניקות שיכולות לשפר את חווית פיתוח הצומת שלכם.

איפה Node.js זוכה: JSON

כשמאגרי מידע מפצלים תשובות, ג'אווה מתארכת על מנת להפוך את התוצאות לאובייקטים של ג'אווה. מפתחים יתווכחו במשך שעות על מיפוי POJO, על מצב שינה ועל כלים אחרים. הגדרת התצורה שלהם עשויה להימשך שעות ואפילו ימים. בסופו של דבר, קוד Java מקבל אובייקטים של Java לאחר כל ההמרה. וכשמדובר בתצורה, עולם הג'אווה עדיין נצמד ל- XML ​​ואף מציע שני מנתחים עיקריים כדי לתת למפתחים סיבות נוספות לדאוג.

כיום, שירותי אינטרנט ומאגרי מידע רבים מחזירים נתונים ב- JSON, חלק טבעי מ- JavaScript. JSON הוא כל כך נפוץ ושימושי עד כדי כך שמפתחי Java רבים משתמשים בתבנית, ומספר מנתחי JSON טובים זמינים גם כספריות Java. אבל JSON הוא חלק מהיסוד של JavaScript. אינך זקוק לספריות. הכל שם ומוכן לצאת לדרך.

איפה ג'אווה מנצחת: איתור באגים מרחוק

ג'אווה מתגאה בכלים מדהימים לניטור אשכולות של מכונות. יש ווים עמוקים ל- JVM וכלים פרופיליים משוכללים שיעזרו בזיהוי צווארי בקבוק ותקלות. ערמת הארגון של ג'אווה מפעילה כמה מהשרתים המתוחכמים ביותר על פני כדור הארץ, והחברות המשתמשות בשרתים אלה דרשו את הטוב ביותר בתחום הטלמטריה. כל כלי הניטור והניפוי באגים די בשלים ומוכנים לפריסה.

איפה Node.js מנצח: שולחן עבודה

יכול להיות שיש כמה יישומי Java שנמצאים שם בחוץ, ואני עדיין מתחזק כמה קבצי Java JAR עליהם אוכל ללחוץ כדי להפעיל, אך לרוב עולם שולחן העבודה הוא במידה רבה חופשית מג'אווה. לעומת זאת, JavaScript ממשיך לתפוס יותר ויותר מהפעולה כאשר הדפדפן אוכל את רוב התפקידים עבור שולחן העבודה שלנו. כשמיקרוסופט שכתבה את Office מחדש לעבודה בדפדפן, המוות הוטל. אם אתה עדיין תוהה, יש אפשרויות מעניינות כמו Electron שלוקחות את קוד האינטרנט שלך והופכות אותו לאפליקציית שולחן עבודה עצמאית.

איפה ג'אווה מנצחת: כף יד

אפליקציות אנדרואיד נכתבות לעתים קרובות ב- Java ו -90% מהטלפונים החדשים מריצים גרסה כלשהי של Android. אנשים רבים אפילו לא משתמשים בשולחן העבודה יותר מכיוון שהטלפונים מספיק טובים לכל דבר.

כמובן שיש קצת בלבול. מפתחים רבים כותבים אפליקציות אינטרנט של Node.js שמכוונות לדפדפני הסלולר גם באייפון וגם באנדרואידים. אם זה נעשה טוב, הביצועים לרוב מספיק טובים.