מעבר לGO למה? איך? ומתי?
-
-
@dovid אמר במעבר לGO למה? איך? ומתי?:
ביקשת עצה, כולם התנדבו לתת.
ביקשת לנמק, נימקו.
...וזה כבר נראה לי כבר הטרדה.
@nigun אמר במעבר לGO למה? איך? ומתי?:
בקיצור כולם אומרים לי כאן שזה הזוי וכו' אבל אני רוצה לשמוע "למה???"
האמת שגם אני הרגשתי שלא נימקו מספיק.
למשל,
@dovid קובע:לטעמי הכי קל זה ללמוד NODEJS, והכי יעיל זה לפתח עם דוטנט.
@מנצפך קובע: -
אתה מחפש תחליף ל PHP, וודאי שזה NodeJS ולא GO.
GO זה תחליף ל C++
@יוסף-בן-שמעון כותב/קובע: -
נשמע לי הזוי לפתח אפליקציית ווב ב GO, זה נועד לאפליקציות ענק בסדר גודל של גוגל,
אני מבין שהדברים נכתבו ע"י בעלי נסיון וותק של שנים מתוך נסיון והבנה בתחום, ואני לא בא להטיל ספק בקביעה, אבל עדיין הם לא נימוקים, אלא קביעות. בַּמֶה GO דומה יותר ל-++C? משום מה GO מתאים יותר לאפליקציות ענק? למה יותר קל ללמוד נוד?
וא"כ אני מבין מאוד למה זה לא מספק את @nigun. אם זה היה נוגע אלי, גם אני הייתי רוצה לקבל נימוקים ולא רק קביעות ש: "לא, זה לא בשבילך."בינתיים, לסיכום, כתבו נימוק אחד ויחיד (אם אין לי בעיות קשות בהבנת הנקרא...): יש קהילה גדולה יותר מסביב לנוד.
חוץ מזה קבעו שיותר קל לפתח בנוד ושנוד יותר מתאים לאפליקציו ווב, ושזה מספיק מהר. (אני לא נכנס לוויכוח אם מספר הפרוייקטים בגיטהאב הוא אינדיקציה, כי בלי לבדוק, לדעתי זה לא אמור להיות אינדיקציה. ברור לי שיש קהילה פי כמה יותר גדול מסביב לנוד.)כדי שלא להשאיר את הגליון חלק
אכתוב מה שנראה לי מתוך הכירות שטחית מאוד ב-GO. מה שאולי כולם התכוונו לזה אבל אף אחד לא כתב בפירוש.
GO הוא יותר low level מנוד.
זה מתבטא בכמה וכמה צורות:- Data Structures: לדוגמה, שב-JS יש את Object שאפשר להשתמש בו לכל מיני שימושים כמו Array HashMap וכו'.
- GO הוא statically typed. לעומת JS שהוא dynamically typed
- ב-JS יש המון קיצורי דרך בשפה שמקילים על חיי המתכנת, ב-JS יש closures ו-פונקציות כאובייקטים, ועוד סוגי דברים שקיימים בשפות דינאמיים ולא בסטטיים, שמקילים מאוד על הפיתוח המהיר.
-
@yossiz אנ ממש לא מסכים איתך. נעבור על כל המשתתפים, שלטעמי ענו מעולה וקיבלו יחס ממש לא ראוי.
אני כתבתי "לטעמי", והוספתי אחרי שהבנתי שיידרשו מאה הסברים את המילים
"את דעתי כתבתי, לא נראה לי שאני יכול לתרום לך תובנות נוספות מעבר למה שכתבתי."
אז אני לפחות הייתי פטור מנימוקים (שאם תאמר מי שלא מנמק שלא יכתוב כלום חזרת לבעיה שהזכרתי, שדעת אנשים מנוסים גם בלי נימוקים היא מכרה זהב שחבל לאבד אותו לטובת "נימוקים").
@nigun שכנראה כמוך חושב אחרת, כתב לי אחרי שתי אלו "אתה יכול לפרט תובנות יותר מפורטות?".
במילים אחרות אני לא אניח לך להפריח דעות ללא הוכחות.@יוסף-בן-שמעון הואיל לכתוב את דעתו (הוא לא יעשה את זה אם יבקשו ממנו לכתוב מאמר של 8 עמודים למה הוא חושב ככה)
א. GO לא עשויה להרים אפליקציה מהר, כי רוב הדברים לא מוכנים לך בקלות, לעומת נוד. בגו בהרבה נושאים אתה "ממציא את הגלגל"
ב. לGO יש קהילה קטנה בהרבה שמחייבת הרבה יותר לימוד עצמי וטרחה בפתרון בעיות מאשר נוד.@מנצפך כתב המון דברים נכונים ומנומקים די הצורך, א. ההשוואה של GO לC++ שזו השוואה שמסבירה את עצמה כמו שאתה עצמך ניסחת את זה אקדמית: GO היא LOW LEVEL בהרבה הבטים. ב. כפי לשונו "בכלל לא בטוח שהיא" מתאימה לעולם הווב לעומת NODEJS. כל אחד יודע שנוד נבנתה להוות שרת אינטרנט וזה לא סתם ספריה כל שהיא. ג. ביצועים זה לא משהו שבאמת מגביל אותך ביישום ווב טיפוסי
@nigun ענה על דבריהם בהרבה יומרה ובלי הרבה לדעת, אני מבין שהוא התכוון להאיץ בהם לתת יותר פרטים אבל זה היה נראה לי "אלים" מידי. ולכן כתבתי מן "גערה" בעניין.
גם אתה @yossiz בהודעתך די מזלזל במי שכתב קודם, כי אתה מסכם שלא נאמר כלום וכולם "קבעו", בהסתייגות שאולי יש לך בעיה בהבנת הנקרא ואני אומר בעייתך היא שאינך מעריך כיאות דעת אחרים, שאם תעריך תדע למצוא הרבה בדבריהם ולדון בפניהם בכבוד הראוי, ולא בדרך שנקטתם: התגרות אינטלקטואלית מעצבנת. -
בנוגע למה שכתבת אין קשר בין תחביר השפה הפשוט לבין היותה low level.
יש לGO לזכרוני כמה עקרונות פשוטים:
א. כמה שיותר פשוט (אין את רוב הפיצ'רים של שפות הOOP בכונה תחילה, הם מתייחסים לזה כover-engineering)
ב. כמה שיותר אחיד (שלא יהיו כמה דרכים לעשות פעולה אחת, שכן יהיו פונקציות שעושות כמה דברים בעלי אותו רעיון).
ג. כמה שפחות הפשטות (= low level, זה קצת על חשבון עושר השפה, אבל הרוב מגיע מסעיף א')
ד. מהירותאולי אני לא מדייק, אבל לדיוק יש ויקיפדיה, אנחנו פה בשביל לשתף מניסיון ומעושר בלי להיות "חייב" לתת דו"ח אקדמי על כל מילה.
-
אויש @dovid אתה לוקח את זה קשה מדי...
בלי להפוך את האשכול לוויכוח סרק... אכתוב בקיצור.
תכונה חשובה עבור מפתח הוא מדת סקרנות. בסה"כ @nigun רוצה להבין.
אם אין לך זמן להסביר, אל תסביר.
אבל מה רע בבקשת הסבר? האם לא היה לומד יותר מתוך הסבר מפורט?
הוא לא כפה על אף אחד להשיב, סה"כ ביקש.@dovid אמר במעבר לGO למה? איך? ומתי?:
כי אתה מסכם שלא נאמר כלום
נכון הגזמתי קצת אבל גם אתה מגזים קצת במילים אלו. אני מעריך מאוד את הדעות המקצועיות אבל זה לא הוסיף הרבה להבנת הענין.
-
@dovid אמר במעבר לGO למה? איך? ומתי?:
אין קשר בין תחביר השפה הפשוט לבין היותה low level.
אני הבנתי שיש קשר. לא כתבתי שהתחביר של JS יותר פשוט מ-GO, אדרבה נ"ל שההיפך נכון. כתבתי שיש קיצורי דרך שהכניסו לתוך התחביר, מה שלא יכניסו ל-GO. למשל הסיבה ש(להבנתי) לא יוסיפו ל-GO את התחביר
[array...]
או... for ...in
וכו' הוא בגלל שזה קורא פונקציות מאחורי הקלעים, מה שלא מתאים לשפה lowlevel.@dovid אמר במעבר לGO למה? איך? ומתי?:
כפי לשונו "בכלל לא בטוח שהיא" מתאימה לעולם הווב
לא יודע מה זה עולם הווב, זה כן נעשה בפירוש עבור שרתים שצריכים מקביליות גבוהה, וביצועי I/O טובים.
אנחנו פה בשביל לשתף מניסיון ומעושר בלי להיות "חייב" לתת דו"ח אקדמי על כל מילה
אל תרגיש "חייב" לענות
אני אישית פה בשביל ללמוד מאחרים. מצטער, אין לי שום נסיון עשיר לחלק לאחרים
. זה שאני (או מישהו אחר) מטיל ספק במה שאתה או מישהו אחר כתבו לא נובע מזלזול אלא מרצון להבין.
-
@nigun אמר במעבר לGO למה? איך? ומתי?:
@dovid
אם יורשה לי לשאול (כמובן אתה לא חייב לענות)
איך אני אמור לדעת מי כאן סך הכל בנה כמה אתרים חמודים בוורדפרס ומי ארכיטקט ראשי של IBM?אם אתה לא מסוגל להעריך את יכולות המשתתפים כאן לפי היסטורית ההודעות שלהם, בשביל מה שאלת כאן?
אתה 'סותר' את התשובות עם הנחות שגויות אותם אתה שולף תוך כדי תנועה ("אסינכרוני זה דבר איום", מביא הוכחה 'גרועה' מ @חוקר שהוא הוכחה לגמרי הפוכה, בנה מע' די מורכבת וקריטית (תרומות) שהושמשה מיד עבור אלפי משתמשים, והשיג המהרה של 1000%, וכל זה בלימוד תוך כדי תנועה כשלפני זה לא היה לו מושג ירוק בנוד) - במקרה הטוב, או שכבודו פשוט 'לא מסתפק' בתשובות, ויוצא 'צודק'.
מערכות היום נהיות יותר ויותר תלויות תקשורת, והברזלים מרובי ליבות, ללא א-סינכרוניות ומקבליות איך תקבל מהירות משמעותית?
הכלים החדשים מהירים יותר במידה רבה בגלל שינוי צורת החשיבה שהם מביאים איתם.
בנתיים נראה שאתה רוצה שהכל ישאר כשהיה, ו'קסם' כלשהו יעשה עבורך את השדרוג.@yossiz להבנתי (נתחרה על אי הבנת הנקרא), ההסבר שלך לא הוסיף לי שום הבנה על יתרונות השפה.
-
@אהרן
אני יודע שאנשים כאן מבינים יותר ממני בתכנות באופן כללי
אבל אני לא יודע במה אתה מבין יותר מ@yossiz
אני מסכים שצריך לשאול בצורה מכובדת
אבל זה לא אומר שאני צריך ללכת בעיניים עצומות אחרי כל פסק של כל אחד
בלי לשאול שאלות
אמנם אם אני יודע שמי שמדבר איתי יש לו ניסיון רב בנושא המדובר
אז אני מוכן לשמוע "קביעות" בלי שום הסברים
כי יש לו הרבה ניסיון בעניין ולמה שאני אחזור על טעויות של אחרים
אבל אם זה סתם מישהו שהנחות היסוד שלו זה מהאינטרנט או מתחושת בטן
אז אם אין סימוכין לטענותיו הם לא שווים הרבה
במיוחד שהם סותרים (לכאורה) את מה שכתוב באתרים הרבה יותר מקצועיים מהפורום המכובד הזה(לגבי go לא ידוע לי על אף אחד כאן שכותב בשפה הזאת חוץ מ@magicode שבחר לענות תשובה קצת יותר חכמה (לדעתי)
אם מישהו כותב בשפה הזאת מן הראוי שבתחילת דבריו היה מציין זאת )נ.ב. אני סתם מנסה לחשוב האם בstackoverflow תוכל למצוא תשובות בסגנון של:
"טכנולוגיה X לא מתאימה ל.... כי ככה אמרתי " -
@dovid
אני עובר על מה שכתבתי ואני לא רואה התלהמות
או חוסר כבוד למתכנתים שהרבה יותר מומחים ממני
חוץ ממה מה שהצקתי לך בהתחלה
כשכתבתיאתה יכול לפרט תובנות יותר מפורטות?
אחרי שהכרזת שאתה לא מעוניין לכתוב עוד
(ושם פשוט לא הבנתי את הרמז וחשבתי באמת שאתה לא יודע עוד, אבל אתה כן יכול להסביר את מה שכתבת ולכן ביקשתי פירוט) -
@nigun אמר במעבר לGO למה? איך? ומתי?:
אבל אני לא יודע במה אתה מבין יותר מ@yossiz
תיקון קטן:
רמזתי כמה פעמים באשכולים קודמים שאני לא מנוסה בתכנות
השפה היחידה שאני משתמש בה בחיי היום יום זו אנגלית
אז תמיד תמיד לקחת את הדעה שלי בערבון מוגבל.
ד"א, זה הסיבה שאני כמעט תמיד מקדים התנצלות שאני לא מנוסה או משהו בסגנון וגם לא זכור לי שכתבתי פעם "דעה" על משהו רק הסברים ודברים שמוכחים מצד עצמם. -
@dovid אמר במעבר לGO למה? איך? ומתי?:
@nigun ענה על דבריהם בהרבה יומרה ובלי הרבה לדעת, אני מבין שהוא התכוון להאיץ בהם לתת יותר פרטים אבל זה היה נראה לי "אלים" מידי.
ננסח את זה שונה
האם אתה יכול להביא לי דוגמא מתוך דברי מה נקרא יומרני (כמעט בכל הודעה כתבתי שאני לא יודע ואני רק שואל)
אני מציק לך אם השאלות האלו כי הבנתי ממך שכנראה אתה רוצה שינוי ולא שהדיון יתנהל אותו דבר גם פעם הבא, אז אם לא יסבירו לי ברחל בתך הקטנה אני לא יבין . -
@nigun זה מיותר לדעתי.
התיקון הוא שצריך לכבד כל אדם ולמצוא מה אפשר ללמוד מתשובתו, כמובן מותר לחשוב שהוא טועה, אבל הבסיס צריך להיות ללמוד מכל אחד ולכבד אותו כ"רב" לעניין מה שמעוניינים ללמוד ממנו. בא נניח לנושא, תוכל להתכתב איתי במייל אם תרצה. -
יש כאן נושא שאני מרגיש שנוגע לכולנו גם השואלים וגם העונים וזה יושב לי הרבה זמן על הבטן.
כאשר מדובר בהתכתבות בפורום ולא בדיבור פנים מול פנים, אף פעם לא כדאי לקמץ במילים.
זה נוגע לשואלים. יש לך שאלה? תסביר את הרקע, איזה שפה, איזה טכנולוגיה, לא "X ו-Y לא עובד, יש פתרון?"
וגם לעונים. אתה משקיע כמה דקות/דקה/כמה שניות בתשובה כי אתה רוצה לעזור לשואל? למה לא תשקיע טיפה יותר שיהיה מושלם. שגם השואל יצא עם הרגשה נעימה ומידע מועילה, וגם אתה עזרת למישהו. תהיה נדיב במילים, בפרטים, בדוגמאות, (עד גבול מסויים כמובן), תקרא את התשובה שוב לראות אם יש מה לשפר, מה להוסיף, מה לחדד, כולם יצאו מרוויחים מזה.
ובכלל זה, תנסה להבין מבין השורות מה חסר לשואל, איפה הוא טעה, ונסה לתקן את זה. -
@yossiz אני מסכים איתך.
בלי להיכנס לאשכול הנוכחי.אל תשכח שלמי שעונה לא תמיד יש זמן להרחיב. למרות הרצון (ומה שהלב חושק הפנאי עושק)
אתה באמת תמיד עונה עם סבלנות (וגם עוד הרבה מהאנשים הטובים שמסתובבים כאן [אני לצערי קצת פחות. בעיקר מחוסר זמן
])
-
אז ככה.
אני ג"כ התחלתי עם PHP, והכל זרם בטוב ובנעימים, הרמתי פרוייקטים גדולים ב"ה בהרבה תחומים (הכל סביב מערכות טלפוניות בימות המשיח), ו PHP סיפק לי כלים מספקים למה שהוצרכתי.
עד שהגיע יום, ובקמפיין של סורוצקין - עטרת שלמה היו לי 2500 מאזינים על הקו בו זמנית, מה שגרם שהשרת לא החזיר תשובה לכולם (אני לא יודע מה נקרא שרת קרס, שזה נכבה? הופעל מחדש? לא הגיב מספיק?, בכל מקרה כאן ראיתי שהשרת לא מספיק לענות לכולם,) וזה מדובר על PHP עם אפאצ'י.
שאלתי כאן מה עושים, וההצעה הייתה לעבור לנוד.
אמרתי לעצמי, מה זה הקסם הזה נוד? למה ומדוע זה יותר מהיר? יש לו יותר יכולות מPHP? מה ואיך? לא היה לי כ"כ ברור.
אבל אמרתי, את המצב הנוכחי אני לא ממשיך, אני חייב להתכונן לפרוייקט הגדול הבא.
(בשעתו הרמתי בAWS עוד חמישה שרתים חדשים עם תמונת מערכת של השרת הרגיל, ואז וויסתתי את העומס במערכת וזה סיפק יחסית תפוקה לא רעה).
התחלתי ללמוד נוד, למרות שכמעט ולא היה לי רקע מעשי הJS ולא הבנתי מה בדיוק המושג JS על השרת.
עדיין לא קלטתי מה הרעיון שנוד יהיה יותר מהר.
ואז הגיע @magicode ונתן לי דוגמה של (אריכט... לא יודע איך לכתוב את זה) ויחיד עם הסבר של @אהרן שנתן לי בעצם הבנה שנוד הוא משהו שרץ כל הזמן ואתה יכול לעשות בו פעולות ללא קשר למשתמשים, והשרת יכול להכין מידע וכו' למשתמשים עוד לפני שהם גלשו, ולבצע פעולה אחת שתשמש אלפי גולשים בו זמנית.
זה היה לי חדש לגמרי העולם הזה, אני הייתי רגיל רק לPHP שהכל הוא סקריפט שמתחיל ומסתיים כשהלקוח קורא לדף, ואתה צריך לטעון הכל מחדש לכל משתמש, מה שגורם לשרת לבצע לכל משתמש הרבה תהליכים (ולדוגמא במצ'ינגים בPHP הייתי בודק לכל משתמש 3 קריאות מול השרת של צ'רידי, מה שאין כן בנוד יש בדיקה אחת מתוזמנת של מצב הקמפיין כל 10 שניות, ובדיקת המתרימים כל 3 דקות, זה חסך המון משאבים וזמן).
ובנוסף כאשר אני צריך לולאה לבצע עשר פעולות שלוקחות זמן, בPHP אתה ממתין לכל דבר בסבלנות שיגמור הכל, בנוד הכל מבוצע מיידית.
בהתחלה זה היה לי נורא! לא הסתדרתי עם זה, לא רציתי להסתגל לזה, ללמוד תובנות חדשות, והאמת שאז חיפשתי ברשת וראיתי ג"כ פוסטים שGO יותר מהיר מנוד, ונכנס לי חשק כמוך להתחיל לכתוב בנוד, למה לחכות שזה יהיה הַשפה, אני כבר יכול לרוץ לשם מיד.
אבל במבט מלמעלה ראיתי שזה עבור בנק הפועלים, לא עבורי.
זה דורש קימפול או איך שקוראים לזה, ואין לזה עדיין מספיק קהילה ועוד, ובעיקר כי זה באמת מיותר!
וב"ה המשכתי עם הצעת החברים כאן, למדתי להבין איך להשתלט על האי-סינכרוני (האמת, עד היום אני לא יודע בע"פ מה זה סינכרוני ומה זה אי-סינכרוני), למדתי להשתמש בפרומיס ( @dovid כן אני כבר משתמש עם זה גם בלי ליידע אותך..), למדתי את התחביר של השפה, איך מבצעים פעולות על משתנים ע"י אובייקטים שבתוך המשתנה(string.action()) לעומת PHP שכל דבר הוא פונקציה שמקבל ארגומנט את המשתנה (action(string)).
כתבתי כבר מחלקות לחיבור לבסיס נתונים ועוד ועוד.
המערכות הראשונות שלי שם היו באמת כתובות לא מידי חכם, אבל עשו את עבודה, הייתי חייב במיידית משהו שעובד, וב"ה עם הזמן ובעזרת החברים כאן הגעתי להישגים מאוד יפים בנוד.
נכון לעכשיו אני עדיין משתמש בנוד רק למצ'ינגים ולישיבה על קברו, כי אני לא לוקח כעת פרוייקטים חדשים (אני מקוה בעזה"י להכניס עובד, ואז אוכל לחזור לפיתוחים חדשים), ושאר הפרוייקטים הפעילים עדיין על PHP ולא קריטי להעביר אותם לנוד.
בישיבה על קברו למשל, יש ביום כ18000 השתתפויות של לימודים בנדרים ובטלפון, בPHP על כל תנועה, השרת היה בודק מול בסיס הנתונים כמה וכמה שאילתאות, את רשימת המסלולים להיום, טבלת השאלות והתשובות ועוד, בנוד לעומת זאת, כל חמש דקות יש רענון מול השרת בקבלת הנתונים הקבועים, ורק בדיקות ברמת המשתמש (האם כבר השתתף היום, ועדכון השתתפות) מבוצעות מיידית.
השרת נותן כעת ביצועים הרבה יותר טובים ומהירים בגלל זה.
בקיצור הארכתי מאוד, אבל ראשית רציתי לומר לך, שמע לחברי הקבוצה, שהרימו כבר פרוייקטים ולכל הפחות כמו הפרוייקט הרציני הגדול הבא שלך, ויש להם ידע ורצון לעזור.
א. בגלל עצם המענה להם שזה מה שכדאי עבורך.
ב. כי הם יעזרו לך בהמשך הדרך וההסתגלות.
ושנית, זה היה במה נוספת להביע הכרת הטוב לאלו שסייעו לי להבין ולכתוב בנוד, אלו שהזכרתי לעיל, וכן @יוסף-בן-שמעון (ואולי פיספסתי מישהו א"כ אנא ראה כאן את הכרת הטובה בעילום שם) הן על ההצעה, הן על הלימוד, והן על ההבנה בקשיי ההסתגלות.
ואם מדובר על שפה אהובה, לאחר לימודה אני מחבב אותה יותר מאשר את PHP, למרות שאני כמה שנים הייתי בPHP והייתי בטוח שאין יותר נחמד ממנה.
בהצלחה לכולם