יום שני, 22 בדצמבר 2014

פוסט חנוכה: הגיגי-שפה

מה יותר "חד": Bleeding Edge או Cutting Edge?
מה ההבדל בין Accurate ו Precise (יש הבדל משמעותי) או בין Edge case ו Corner case?

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



סופגנייה מול Donuts - מה בעצם ההבדל?


ראשית, נתחמם עם כמה מוכרים יותר (סביר שחלקם יהיו כבר מוכרים לכם):

ניסוי ותהייה או ניסוי וטעייה?

אני שנים חשבתי שמדובר בתהייה... מלשון לתהות, עד שהסבירו לי שמדובר ב"ניסוי וטעייה" - מלשון טעות: "נסה, וקבל פידבק שלילי על כישלונות".
האמת היא ש"טעייה" היא בחירה קונקרטית של מישהו באקדמיה ללשון עברית, אבל יש כאלו שעדיין מעדיפים תרגום הביטוי "Trial and Error" ל"ניסוי ותהייה" או אפילו ל"ניסוי ותעייה" (לתעות - ללכת לאיבוד). הכל עניין של טעם.


עיקר ותפל או עיקר וטפל?

אני חושב שכולם כמעט חושבים על "טפל" ... אבל מה זה "טפל"?
אם אתם כמוני, אתם בוודאי חושבים על אמונה טפלה, אבל בפועל נכון יותר להשתמש בצורה "אמונה תפלה" - מה שמחזיר אותנו לשאלת המשמעות של המילה "טפל" (להזכיר: זה לא "חסר טעם").

ובכן טפל הוא "משני" והבחנה בין "עיקר וטפל" היא המקבילה לביטוי האנגלי "Primary and Secondary", כלומר: הבחנה בין הכי חשוב, לשני הכי חשוב (הבחנה שהיא לא-פשוטה), ולא כפי שניתן לחשוב בטעות שזו הבחנה בין "נהדר למטופש" - משהו שנשמע בסיסי או קל.


(שימו לב שעל כמה מההבדלים להלן - כתבתי בפוסטים לאורך השנים)


Parameter או Argument

האם אלו מילים נרדפות - או שיש הבדל?
ובכן... parameter הוא המשתנה שנמצא בחתימת הפונקציה (כיצד הפונקציה מכירה את המשתנה), ו Argument הוא הערך שנשלח לפונקציה בעת ההפעלה - כפי שהקוד שמפעיל את הפונקציה מכיר אותו. בקיצור: יש הבדל ברור.


Accurate vs. Precise

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


בגדול: Accuracy הוא הכיוון הנכון, Precision הוא הדיוק בפרטים.



מקור הביטוי Pros and Cons

מה זה "Pro" ומה זה "Con"? האם אלו מלים? האם ניתן להשתמש בהן בצורת יחיד? מה משמעותן?
ובכן, המקור הוא ביטוי בלטינית בשם "pro and contra" שמשמעו: "בעד ונגד", ובפועל משמש בימנו כ"יתרונות וחסרונות". contra קוצר ל con, ומכיוון שיש יותר מייתרון / חסרון יחיד - משתמשים בהם בצורת רבים: pros and cons.


Transparent vs. Opaque

לפעמים רואים מלים אלו כנרדפות ומתארות שקיפות ("זה שקוף לך!"), אבל בפועל אלו הפכים:
Transparent - משמע שקוף.
Opaque - משמע אטום.

כשאנו משתמשים בהכמסה בקוד בכדי להסתיר פרטי מימוש אנו נוהגים לומר: "זה transparent - זה שקוף לך!", למרות שבפועל היה נכון לומר: "זה opaque - זה אטום לך! אתה יכול לא-לדעת".


General vs. Generic

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

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


Corner Case vs. Edge Case

האם יש באמת הבדל? האם אני צריך להסיק מסקנות אישית - כשאני מריץ בגוגל כאלו שאילתות?!

ובכן - יש הבדל מוגדר היטב:

Edge Case ("מקרה קצה") - הוא מקרה קיצוני, שלרוב מתרחש בנקודות מקסימום או מינימום של ערכים. הוא יכול להיות צפוי ומובן לנו, או לא צפוי ומפתיע.

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



מה יותר חד: "bleeding edge" או "cutting edge"?

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

באופן מעט מפתיע - דווקא יש הגדרה ברורה:

Cutting Edge (ביטוי נרדף: "Leading Edge") מציין את הפיתוח הכי מתוחכם ומתקדם בתחום. אין לו הקשר לסיכון או לחוסר בשלות.

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

ההבדל הוא בעצם בין "הטוב ביותר" ל"חדש ביותר" (מקור).


מהיכן מגיע המונח "באג"?

(לצעירים שביננו שעדיין לא שמעו זאת כבר חמש פעמים)

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

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

הנה צילום המחברת של גרייס (שנלקח מתוך הביוגרפיה שלה):




UK מול "בריטניה הגדולה"

נכון, זה לא ממש לא קשור לתחום התוכנה, אבל נתקלתי בהבחנה הזו כחלק מהעבודה - תוך כדי קריאה של איזה תקן.
מה שמשך את תשומת לבי היא הערה בתקן שאמרה בערך כך: "אמנם אנו משתמשים בקיצור GB - אבל הכוונה היא ל United Kingdom ולא ל Great Britian, זו טעות היסטורית שלא ניתן לשנות".

לאחר שנים שהייתי משוכנע שאלו הם ביטויים נרדפים, הלכתי לבדוק וגיליתי ש:
בריטניה הגדולה = אנגליה + ויילס (מחוז בדרום-מערב אנגליה שנבדל תרבותית, ומתישהו לא היה חלק ממנה) + סקוטלנד.
בעוד הממלכה המאוחדת = אנגליה + ויילס + סטולנד + אירלנד.

מקור



כמה הגיות שאנו נוהגים להגות לא נכון (תזכורת):

מה שעלול לבלבל את השומעים הלא-ישראלים שלנו במידה...

Digital נשמע כמו דיג'יטל, ולא דיגיטל.

Medium נשמע כמו מידיום (midi) ולא מדיום (med). מדיום הוא מדיום-תקשורת.

Char הוא קיצור של Character, ולכן הגיוני יותר להגות אותו כ"קר" ולא כ"צ'ר" (למרות ששמעתי גם אמריקאים אומרים "צ'ר").

בשני האחרונים כדאי לנסות לחקות את ההגייה של הנשיא פרס (פולני):

Data הוא דייטה (dey) ולא דטה (da).

Micro (כמו במיקרו-שירותים) הוא מייקרו (mai) ולא מיקרו (mi)


סיכום


אני מקווה שניהנתם.
אתם יותר ממוזמנים להגיב ולהוסיף את ההגיגים שלכם.

וחג שמח!




8 תגובות:

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

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

    השבמחק
  3. יפה מאוד!
    מה עם Delete ו Remove

    השבמחק
    תשובות
    1. הנה... גיגלתי ומצאתי את זה: http://goo.gl/8H7fiF

      אהבתי את ההבחנה שיש undelete, אבל אין unremove...

      מחק
  4. מצויין, תודה!

    השבמחק