פיתוח

למה JavaScript? למה לא?

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


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

ולכן, הרי לפניכם, אוסף הגיגים וסיבות לחיבה העזה שיש לי ל'ילד הכאפות' של עולם התוכנה האינטרנטית.

1. שפה טעונת-טיפוח

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

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

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

2. חזון העצמים היבשים

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

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

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

3. תכנות מונחה-ארועים

מקור: flickr, cc-by Dmitry Baranovskiy

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

סגנון כתיבה מבוסס אירועים עולה בקנה אחד עם גישות מודרניות לכתיבת תוכנה שאמורה להתמודד עם עומסים גבוהים (למשל nginx, eventmachine, twisted) ומעודד לדעתי שילוב עקרונות ודפוסי פיתוח המבוססים על מה ש"קורה" ולא מה ש"אמור לקרות". הגישה הזו כמובן מאד נכונה בפיתוח ממשקי משתמש, אבל מתאימה גם לקידוד בצד השרת.

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

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

4. תחביר

שתיים מהתכונות האהובות עלי ביותר בג'אווהסקריפט הן תחביר העצמים (Object Literals) וסגנון הכתיבה הנקרא array notation המשלים אותו.

השימוש ב-Object Literals לכתיבת מודולים, מאפשר להגדיר בקלות ובנוחות אוסף תכונות קשורות תחת קורת-גג אחת, מתוחמת-שם (name-spaced), ללא צורך ביצירת מחלקות שהיא לפעמים פשוט מיותרת. כמובן, בגלל ש Object הוא אזרח מהמעלה הראשונה בג'אווהסקריפט, אין הגבלה לסוגי מידע בסיסים, וניתן להוסיף למבנה הנתונים פונקציות ואובייקטים תוך שימוש בתחביר מוכר וקריא. בקיצור, תענוג.

השימוש ב array notation משלים את חיבתי ל Object Literals בכך שהוא מאפשר לי לבדוק הימצאות של תכונות ושיטות באובייקטים קיימים, תוך כתיבת קוד תמציתי ויעיל, עם פגיעה מינימלית בקריאות. למשל, כדי לבדוק אם לדפדפן יש תמיכה ב WebSockets אוכל לכתוב:

if(window['MozWebSocket' || 'WebSocket']){....}

ולכן, סיבה רביעית תהיה תחביר קריא, גמיש, מובנה ומודולרי, תודות ל Object Literals ול array notation.

5. קהילה וקידמה

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

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

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

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

6. לקוחות ושרתים

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

מה שמגניב ביותר הוא שלמעשה כל הכיף של כתיבת ג'אווהסקריפט (כמו JSON, array notation, תכנות מונחה-אירועים) עבר כמו שהוא לשרת, עם תוספות טעימות ונעימות שמאפשרות ליצור יישומים מודרניים לאינטרנט. אתם מוזמנים לקרוא כתבה של מתכנת פייתון שמספר על חוויותיו הראשונות עם Node.js וכמובן להתרשם בעצמכם.

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

7. אתגרי הדפדפן

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

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

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

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

הגיגי סיכום

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

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

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

וידאו: Google I/O 2011: Learning to Love JavaScript

מובייל וגאדג'טים

הגלאקסי S6: האם מלכת האנדרואיד חוזרת? [סקירת וידאו]

אחרי קבלות הפנים הפושרות לגלאקסי S4 וה-S5 הופנו הרבה עיניים להשקה של ה-S6. האם מכשיר הדגל החדש מספק את הסחורה? האם סמסונג סוף סוף חוזרת לעצמה? לקחנו אותו לסקירה מקיפה במיוחד


היי-טק ו-IT

המשרות הפופולאריות יותר ואלו שפחות בהייטק הישראלי

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


מובייל וגאדג'טים

24 שעות עם ה-Apple Watch: אלו 8 המסקנות שהגענו אליהן

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


מובייל וגאדג'טים

כחול לבן: 4 אפליקציות מומלצות, כולן פרי פיתוח ישראלי

הפעם במדור: משחק פשוט וממכר, השוואת מחירים לתשתיות תקשורת ועוד פיתוחים ישראלים חדשים שאנחנו חושבים שתשמחו להכיר


אירועים

ב-28 באפריל יתאספו 25,000 איש לכנס המובייל הגדול במזרח - GMIC

המקבילה של MWC במזרח הוא כנס GMIC שמציע ליזמים לקבל חשיפה בפני השוק הגדול בעולם וכולל למעלה מ-25,000 משתתפים מידי שנה


מובייל וגאדג'טים

הרובוט הזה הוא הצלם הפרטי שתמיד רציתם

מוט סלפי זה לחלשים: הרובוט הצלם של SOLOSHOT יודע לעקוב אחרי התנועות שלכם ולצלם אתכם מרחוק ותוך כדי תנועה


אינטרנט

בניית קישורים: מדדי איכות בבניית קישורים [המדריך המלא, פרק ה]

התחום של בניית קישורים עבר טלטלות לא מעטות בשנים האחרונות, בעיקר לנוכח ההחלטה של גוגל להילחם בשיטות SEO פסולות. המדריך הבא שמגיע בשבעה חלקים, הוא התרגום המלא לאחד המדריכים המקיפים ביותר שנכתבו בתחום עד היום


אינטרנט

הגיע הזמן לשדרג את דפי ההרשמה והנחיתה באתר שלכם

כיצד ניתן להגדיל את רשימת הדיוור שלכם? הנה כמה טיפים שיעזרו לכם במשימה


מובייל וגאדג'טים

דיווח: גוגל תוציא נקסוס 5 חדש עד סוף השנה

על פי דיווח חדש, גוגל תוציא גרסת 2015 למכשיר המצליח שלה מ-2013. האם Huawei הסינית היא זו שתייצר אותו?


משחקים

המשחק ה-10 בסדרה כבר כאן Mortal Kombat X [סקירת גיימינג]

23 שנים חלפו מאז הושק המשחק לראשונה ומאז הפך כבר למותג נחשב שזוכה כעת לרענון ה-10 שלו. הצצה למורטל קומבט איקס


אינטרנט

כל הדרכים לקבלת מידע על הנעדרים הישראלים בנפאל [מתעדכן]

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


מובייל וגאדג'טים

יקר יותר מהאייפון והגלקסי: HTC One M9 הושק בישראל

טאצ' גרופ, יבואנית HTC, השיקה את מכשיר הדגל החדש של החברה עם מצלמת 20 מגה-פיקסל וגוף עשוי אלומיניום


מובייל וגאדג'טים

הכבל או המטען שלכם התחיל להתפרק? 3 פיתוחים שיצילו אותם

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


המייל האדום