C# או NODE.JS
-
תודה @yossiz על התגובה המפורטת
מה שמעצבן בNODE (אני לא יודע איך זה בC#), זה שכדי להתחיל לכתוב משהו פשוט, צריך המון המון קוד שאני בנתיים לא מבין.
אני לומד איזה מדריך, והוא אומר תתקין כך וכך חבילות, תדביק כל מיני קבצים, ואז פה תרשום פונקציה.
בPHP אני כותב חמש שורות ויש לי תוצאה. אין שום דבר מסביב.
לא אומר שזה שיקול נגד NODE כל כך. רק זה מכביד את הלימוד ומרגיש שזה דבר מסורבל. -
@שואף אמר בC# או NODE.JS:
אני לומד איזה מדריך, והוא אומר תתקין כך וכך חבילות, תדביק כל מיני קבצים, ואז פה תרשום פונקציה.
גם ב-PHP יש חבילות אבל לא חייבים להשתמש בהם. אז ככה גם בנוד אפשר לכתוב שרת HTTP פשוט בלי שום חבילה חוץ מהמובנים. עיין במדריך של @dovid לדוגמה.
אפשר לכתוב קובץ אחד, ולהריץ אותו ישירות על ידיnode script.js
ולא להשתמש ב-NPM.
אבל בפועל אם רוצים להתקין חבילות צריך להשתמש ב-NPM (שזה מוסיף קובץ package.json ותיקיית node_modules). בפועל תמיד משתמשים ב-express, שזו חבילה אחת. איזה עוד חבילה אומרים לך להתקין? -
לכאורה אני לא צריך EXPRESS כי זה בשביל משימות שרצות על השרת, לא להציג אתר בדפדפן.
התחלתי עם מדריך כבד לבניית אתר מכירות. זה באמת לא מתאים בשבילי כרגע (רק זה בצרפתית )
עכשיו אני עובר על https://www.w3schools.com/nodejs/nodejs_filesystem.asp
יש שם את הבסיס וזה בדיוק מה שחיפשתי. -
כמה משימות, שרצות כל הזמן, ובודקות נתונים ופועלות לפי זה.
דוגמא, יש מסד נתונים עם הזמנות ממתינות, ולכל אחת יש תאריך מסוים, וברגע שמגיע התאריך שלה צריך לעשות פעולה.
או פיזור הוצאת שיחות בין כמה מכונות, בודק כל הזמן כמה שיחות ממתינות להוצאה, וכמה כל מכונה יכולה לקבל (עשיתי על זה API מיוחד), ושליחה לכל מכונה לפי כמה שהיא מסוגלת לקבל.
הבעייה שאין ממש אפשרות בPHP להריץ סקריפט ולתת לו להמשיך כל הזמן בלי הפסק.ואגב, אני מקווה להתקדם מספיק כדי גם להעביר את הAGI לשם, ולהרוויח את האנסינכרוני, שחסר לי בPHP.
-
@שואף PHP לא נבנתה מתחילה עבור שימוש כזה. אבל במשך חייה הארוכות PHP עברה כמה אבלוציות...
אני לא ממליץ על שימוש ב-PHP עבור, אבל בשקלול העלות/תועלת של האפשרויות קח בחשבון ש(לכאורה) זה אפשרי לגמרי ב-PHP.
תבדוק את זה:
https://amphp.org (עדיין לא פתוח בנטפרי, שלחתי בקשה לפתיחה)
https://reactphp.org (עדיין לא פתוח בנטפרי, שלחתי בקשה לפתיחה)
https://github.com/WyriHaximus/reactphp-cron -
קודם כל ספציפית איליך @שואף אני לא ממליץ כלום, מבחינתי אתה צריך להיות יותר אוהב תכנות ופחות ממוקד מטרה כדי להיות יכול לעבור פלטפורמה. בלי זה הכיוון שלך זה יותר איך למצוא את המקום שהכי הכי מוכן לעבודה כבר, ובזה אתה יכול להצליח אבל קשה לנו כמתכנתים (שאין להם דגש על ה"להכיר כמה שפחות מהר וכמה שפחות חומר") לכוון אותך.
באופן כללי, אני בהחלט ממליץ וכבר המלצתי על nodejs מבחינת שפה, בגלל השימושיות העצומה שיש היום לקוד JS.
מבחינת ארכיטקטורה, nodejs מאוד מאוד מתחיל מהקרשים, כל דבר מאוד מאוד "ידני" שמה, וזה מעלות וחסרונות, למי שPHP במקור זה למשל חיסרון בגלל שמעולם הוא לא התעסק עם המושג בקשה ותשובה וכו', הוא רוצה לגשת לבינזס קוד בלי שיפריעו לו עם עובדות בדרך.
בזה C# קצת יותר טוב, בגלל שבASP יש הפשטה לא רעה שמאפשרת טשטוש רב (אבל עדיין רחוק מPHP).@yossiz אמר בC# או NODE.JS:
- שפת JS היא יותר high level. מה שאומר שאפשר להשיג יותר שימושיות בפחות קוד ו-boiler plate. (זה השיקול העיקרי נ"ל, אבל אולי אני טועה בזה כי אין לי נסיון כתיבה ב-#C, רק נסיון קריאה...)
אני ממש לא מסכים, תוכל לתת דוגמא? אני יכול לתת שפע של דוגמאות הפוכות. למשל המרות (למשל של תאריכים), עבודה עם אוספים, ועוד. הבעיה הזו אכן נמחקת עם שימוש בספריות, אבל קשה לי להבין איך הקערה מתהפכת לטובת JS.
אם אתה מתכוון לכמות התחביר הרבה של C#, כלומר טיפוסים מחלקות ובכלל כל הטיפוסיות הקשוחה, הגישה של המוגזמת של Exception handling, לזה אתה מתכוון? לא הייתי קורא לזה boiler plate אלא over-designed או over-engineered והשורה התחתונה של ריבוי קוד זה verbos (בגלל צורת העבודה של C# אני חושב שהיא תמיד תנצח את JS בזה - לJS יש "קבצים" (הן בכתיבה והן בשימוש) במקום מחלקות וזה יוצר הגבלות רבות על איפה ואיך לחלק את הקוד). -
@dovid אמר בC# או NODE.JS:
קודם כל ספציפית איליך @שואף אני לא ממליץ כלום, מבחינתי אתה צריך להיות אוהב תכנות כדי להיות יכול לעבור פלטפרומה. בלי זה אתה יכול להצליח אבל קשה לנו כמתכנתים לכוון אותך.
ככה לפני כולם ?
אוהב תיכנות זה הגדרה רחבה. יש כאלה שמקדישים את החיים שלהם לתיכנות, ושואפים לעולם הבא הצפון למתכנתים מששת ימי בראשית.
ויש כאלה שאוהבים את התחום ובחרו בו כהשתדלות לפרנסה שלהם, משתדלים לעשות מה שצריך כדי להביא לאכול הביתה, וממשיכים בחיים הרגילים שיש בחוץ (כלומר בפנים, תלוי מאיפה מסתכלים).
אני בהחלט נהנה לתכנת, אבל לא משוגע על זה ויש לי הרבה ערכים אחרים בחיים שקודמים לזה. מה שלא מקדם אותי למטרה שהיא להרוויח את הממון שהמשפחה שלי צריכה, לא אשקיע עליו הרבה מאמץ וזמן. כנראה שלא כולם חושבים ככה. זכותם. אבל כפורום של בני תורה אני חושב שזו ההשקפה של חלק גדול מהחברים. אולי אני טועה. -
@שואף אתה שם בפי מילים שכאילו גיניתי את המצב הזה וממילא מתרעם שאני אומר זאת לפני כולם.
יש אחד שעובד במשטרה כשוטר סיור. בערב הוא לומד תכנות או לומד בכולל ערב, כעבור כמה שנים לא תמצא אותו בדרך כלל מפקד תחנה אלא מתכנת או בן תורה. אפשר גם לתת דוגמאות פחות מחמיאות כמו עובד ניקיון (כמו נתניהו בשנות לימודיו באווארד כמדומני) שלא ייהפך להיות מנהל חברת אחזקה אלא ראש ממשלה.
אני חותם על כל מילה שאמרת, ומוסיף לזה עוד כמה מילים: במצב לגיטימי ונפלא כזה, קשה לעבור פלטפורמה, ועוד יותר קשה לייעץ לאיפה לעבור. -
@שואף אמר בC# או NODE.JS:
@dovid אמר בC# או NODE.JS:
אני בהחלט נהנה לתכנת, אבל לא משוגע על זה ויש לי הרבה ערכים אחרים בחיים שקודמים לזה. מה שלא מקדם אותי למטרה שהיא להרוויח את הממון שהמשפחה שלי צריכה, לא אשקיע עליו הרבה מאמץ וזמן. כנראה שלא כולם חושבים ככה. זכותם. אבל כפורום של בני תורה אני חושב שזו ההשקפה של חלק גדול מהחברים. אולי אני טועה.אם כבר נימה אישית, אם "תבזבז" חצי מהזמן שבו אתה מתכנת כדי להבין יותר או להכיר יותר את העולם שאיתו אתה עובד, אני חושב שהיית מקבל אותו בחזרה עם ריבית. פרנסה משמיים, ואני חושב שמה שעושים צריך לעשות מקצועי.
המציאות היא שאתה שואל פה בפורום ולא מוצא את הזמן לעבור על התשובות. זה אומר שאתה במצב שאתה מאמין שככל שתקליד יותר הרבה/מהר על המקלדת ככה תרויח יותר כסף. רק שכשאני אומר להשקיע יותר, ישר אתה חושב שאני מתכוון לקצץ בזמן השמור לכולל... -
@שואף אמר בC# או NODE.JS:
@nigun נקודה חשובה באמת. למרות שיש את החיסרון (שאני עדיין לא מספיק מבין לעומק) שבNODE אתה לא מריץ כל פעם את הסקריפט וממילא כשעושים שינוי צריך לעשות איזו הפעלה מחדש.
אכן בעיה
הפתרון הפשוט הוא לעבוד עם שתי סביבות עבודה
ולעדכן את הסביבת פרודקשן בשעות שקטות.אם זה לא שייך, אפשר להתגבר על זה ע"י חלוקה למיקרוסרביס
דהיינו לעשות שרת בנוד וכדו' שיהיה אחרי רק על שמירת נתונים בזיכרון וכדו'
ואת שאר הקוד לשים בסקריפטים/שרת נפרד. (כשאני כותב "שרת" אני לא מתכוון למכונה נפרדת כמובן). -
@yossiz אמר בC# או NODE.JS:
@שואף PHP לא נבנתה מתחילה עבור שימוש כזה. אבל במשך חייה הארוכות PHP עברה כמה אבלוציות...
אני לא ממליץ על שימוש ב-PHP עבור, אבל בשקלול העלות/תועלת של האפשרויות קח בחשבון ש(לכאורה) זה אפשרי לגמרי ב-PHP.
תבדוק את זה:
https://amphp.org (עדיין לא פתוח בנטפרי, שלחתי בקשה לפתיחה)
https://reactphp.org (עדיין לא פתוח בנטפרי, שלחתי בקשה לפתיחה)
https://github.com/WyriHaximus/reactphp-cronתודה, נראה מעניין. אם תוכל לעדכן כשהאתרים ייפתחו.
-
@שואף אמר בC# או NODE.JS:
למרות שיש את החיסרון (שאני עדיין לא מספיק מבין לעומק) שבNODE אתה לא מריץ כל פעם את הסקריפט וממילא כשעושים שינוי צריך לעשות איזו הפעלה מחדש.
לא הייתי אפילו לוקח את זה בחשבון.
PM2 יכול לטפל בזה.
בכל מקרה אני מקווה שאתה לא עובד ישירות על מכונת הפרודקשיין
ואם כן בעת העלאה אתה מפעיל מחדש את השרת גם כן. אפשר לחבר סקריפט קטנצ'יק עבור עדכון השרת.אלא מאי אתה מתכוון שאז אתה מפסיד את ה-state הגלובלי שבזכרון?
האם ב-PHP המצב יותר טוב? הרי שם אי אפשר בכלל לשמור על state גלובלי.@nigun אמר בC# או NODE.JS:
דהיינו לעשות שרת בנוד וכדו' שיהיה אחרי רק על שמירת נתונים בזיכרון וכדו'
לא צריך לממש בעצמך דברים שאחרים כבר מימשו. יש את redis, או ספריות שעושים את זה בתוך נוד.
-
@yossiz אמר בC# או NODE.JS:
לא צריך לממש בעצמך דברים שאחרים כבר מימשו. יש את redis, או ספריות שעושים את זה בתוך נוד.
גם את redis צריך ללמוד
אני מצאתי שיותר קל להשתמש בספריה מאשר ללמוד את הAPI של redis.@yossiz אמר בC# או NODE.JS:
לא הייתי אפילו לוקח את זה בחשבון.
PM2 יכול לטפל בזה.
בכל מקרה אני מקווה שאתה לא עובד ישירות על מכונת הפרודקשיין
ואם כן בעת העלאה אתה מפעיל מחדש את השרת גם כן. אפשר לחבר סקריפט קטנצ'יק עבור עדכון השרת.
אלא מאי אתה מתכוון שאז אתה מפסיד את ה-state הגלובלי שבזכרון?
האם ב-PHP המצב יותר טוב? הרי שם אי אפשר בכלל לשמור על state גלובלי.הבעיה היא שבהפעלה מחדש כל החיבורים נופלים
ובשרת אסטריסק זה בעיה. -
@dovid אמר בC# או NODE.JS:
מבחינת ארכיטקטורה, nodejs מאוד מאוד מתחיל מהקרשים, כל דבר מאוד מאוד "ידני" שמה,
אני לא מרגיש כך. בשימוש ב-express אני מקבל את הבקשה בצורה מסודרת מאוד. אני לא מכיר איך בדיוק הבקשה נראית בנוד native. אבל אין סיבה לא להשתמש בספריות.
@dovid אמר בC# או NODE.JS:
אם אתה מתכוון לכמות התחביר הרבה של C#, כלומר טיפוסים מחלקות ובכלל כל הטיפוסיות הקשוחה,
כן, לזה התכוונתי. אבל זה לא over engineered אלא שפה שונה.
זו שפה עם טייפים סטטיים (שהוא הרבה יותר טוב לביצועים). ו-object oriented. זה מסביר כל ה-over engineering, לא?