כיצד תבחרו את שפת התכנות לבניית היישום האינטרנטי הבא שלכם

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

נשאלנו לאחרונה בניוזגיק מהם היתרונות של פלטפורמה X לעומת פלטפורמה Y בהיבט של בניית יישומי אינטרנט, או במילים אחרות, אם אתם רוצים לבנות יישום אינטרנטי חדש, באיזו פלטפורמה כדאי לכם לבחור. מכיוון שנסיון לענות על השאלה הזו עשוי לפגוע בציפור נפשם של חלקינו, אתחיל בכך שאומר שתוכן כתבה זו משקף את דעתי האישית בלבד, וככזה אפציר בקוראים הרגישים יותר לזכור שאין בכוונתי לפגוע, להעליב, להתעלם או לדרוס ברגל גסה אי אלו מחיות המחמד הדיגיטליות שלהם, פרנסתם, אומנותם והשקפותיהם. בנוסף אציין שבכל הקשור לפיתוח יישומים אינטרנטיים דעתי “משוחדת קלות” נגד טכנולוגיות מבית מיקרוסופט, מכיוון שאינני מאמין בשימוש בטכנולוגיות קנייניות בעולם פתוח (קרי האינטרנט).
משהבהרנו את כללי הזהירות הללו הבה נתחיל במשימה – בחירת שפה לבניית היישום האינטרנטי הבא שלכם.

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

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

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

מהירות פיתוח

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

ביצועים

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

פריסה על שרתי-יעד

לשפות הפתוחות (קרי אילו שאינן מבית מיקרוסופט) יתרון בכך שהן נתמכות על מגוון שרתים ומערכות הפעלה, כך שיש גמישות רבה יותר בבחירת החומרה והתוכנה שיריצו את יישומכם החביב ולהביא בחשבון שיקולים של תקציב וידע מקצועי. Zend ומיקרוסופט למשל עמלו רבות כדי לספק תמיכה טובה ל PHP ע”ג שרתי IIS כך שאם סביבת היעד שלכם מורכבת משרתי חלונות, תוכלו להריץ עליהם יישומים הכתובים ב PHP בשמחה ובששון. בנוסף אציין את רובי ופייתון המציעות, בנוסף לתמיכה הטובה בפריסה ע”ג שרת אפאצ’י, תמיכה במגוון שרתים אחרים (lighttpd, NginX, Cherokee, Unicorn) המספקים מענה מצויין למגוון תסריטי-פריסה וצרכים טכנולוגיים. NginX ו lighttpd למשל הם שרתים הנחשבים יעילים יותר מבחינת צריכת משאבי המערכת ולכן אם אתם מוגבלים לחומרה חלשה יחסית ייתכן והם יתאימו יותר מאפאצ’י.

תמיכה וקהילה

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

תשתיות פיתוח

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

רובי – Rails ,Sinatra
פייתון – Django, Pylons, AppEngine
PHP – Zend, CodeIgniter, Kohana
.NET וג’אווה – Spring

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

בנוסף אעיר שישנה נטייה בולטת להתעכב על מדד הביצועים ועל מדד ה”מוכחות” של שפה זו או אחרת שהיא לטעמי מוגזמת. בכל הנוגע לטענות על ביצועים כגון “רובי מאוד איטית” ו “.NET רצה הרבה יותר מהר מ PHP” ארצה להזכיר לטוענים שאין מה להתעסק באופטימיזציות וירטואליות. ראשית אף יישום לא התחיל עם מליון משתמשים בחודש ושנית יותר זול להוסיף עוד שרת מלשכור מפתח נוסף. בכל מקרה עדיף שקודם יהיה יישום שיעבוד ואחרי שהוא יעבוד ויצליח נוכל לדאוג לבעיות ביצועים. לגבי טענת ה”מוכחות” דוגמת “תראה לי אתר גדול אחד שכתוב בריילס” או “ג’אווה היא ליישומים ברמת Enterprise” אזכיר שפייסבוק כתוב ברובו ב PHP (וגם פליקר) וטוויטר כתוב ברובי (ולמעשה חייב הרבה מהצלחתו הראשונית לריילס) בעוד היישום (העתידי) שלכם עדיין לא נכתב ועמד במבחן המציאות. שווה ללמוד מאילו שעושים דברים נכון כיצד הם עושים אותם בלי להכנס לפינות סובייקטיביות (קרי “אני יודע יותר טוב”) והתעסקות בבעיות שאולי יצוצו בעתיד.
ואם עדיין לא החלטתם, בחרו בריילס או Django ותגידו לכל החברים שאני המלצתי.

זהר ארד

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

הגב

15 תגובות על "כיצד תבחרו את שפת התכנות לבניית היישום האינטרנטי הבא שלכם"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

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

סידור לפי:   חדש | ישן | הכי מדורגים
גיא בורשטיין
Guest

היי

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

בברכה,
גיא

ערן
Guest
כיצד תבחרו את שפת התכנות ליישום או לאתר? אני רוצה להדגיש את נקודת העלות הכספית. נפריד בין 2 תחומים שהם לעתים חופפים: בניית יישומי אינטרנט ובניית אתרי אינטרנט. שאני אומר אתרי אינטרנט כוונתי לאתרים סטנדרטיים: אתרי תדמית, בלוגים, תוכן, וכו’. יישומי האינטרנט מורכבים יותר ובדרך כלל נבנים למטרה ספציפית ומכילים אופציות מיוחדות: למשל: רשתות חברתיות, חנויות מסחר אלטרוני, בנקים אונליין, מערכות ניהול פרוייקטים וכו’. לעתים התחומים כמובן חופפים כיוון שאין הגדרה ברורה מה הופך אתר “רגיל” לאפליקציה, אבל אני חושב שאתם מבינים את כוונתי. בכל הנוגע ליישומים, הכתבה רלוונטית והנקודות לבחירה נכונות. דרך אגב, אני חושב שבישראל אנו רואים הגמוניה… Read more »
sirmoreno
Guest

יתרונות של .NET:
– ביצועים יותר טובים
– ניתן לכתוב קוד יותר מובנה – לכן יותר פשוט לתחזוקה
– More scalable
– דורש פחות חומרה לכן העלויות הסופיות יהיו נמוכות יותר.

לדוגמא StackOverflow.com – 7 Million Uniques:
Joel spolsky as Google:
http://bit.ly/92ABLu

אור
Guest
ההשקעה שנראית כמו “בזבוז זמן” על כתיבת יישומים עם חשיבה מראש על ביצועים היא משהו שכן צריך לחשוב עליו. וכמו שהזכרת את טוויטר, כשהם התחילו בריילס הם עשו את זה בגלל ההייפ שהיה מסביב. הם אכלו את עצמם על זה בשלב מאוחר יותר. ובקשר למשפט: “..ושנית יותר זול להוסיף עוד שרת מלשכור מפתח נוסף.” שכחת להמשיך אותו: “.. ואז לגלות שאתה לא יכול להוסיף שרתים כי בחרת בתשתית שלא מאפשרת לך לעבוד עם שני שרתים במקביל, אז אתה מגלה שאתה צריך לשכור צוות פיתוח שלם רק כדי לתקן את הבעיות שהחיסכון הראשוני יצר”. אני לא חושב שיש להקל ראש בנושא… Read more »
זהר
Guest
אכן כולכם מעלים נקודות מעולות. גיא – לגבי דינמיות לעומת מהודרות, זה עניין של העדפה, דעה והרגלי עבודה. לשם המחשה, אני עובד כרגע בפייתון עם מערכת templates שדורשת הידור ולמרות שההידור מהיר מאוד ועוזר לגלות שגיאות הוא גם מצריך ממני שינוי קונטקסט ועוד זמן (שמדובר בהרבה שינויים באותו קובץ. לגבי הביצועים של .NET – לא אמרתי שאין ל .NET ביצועים טובים. ובאשר לכתיבת קוד יותר מובנה, זה עניין של איכות מפתח לא רק של שפה. גם רובי עוזרת לך לכתוב קוד יותר מובנה וגם ג’אווה. אור – טוויטר לא היו יכולים להגיע לאן שהגיעו בלי להתחיל בריילס בגלל אופן הפיתוח… Read more »
אמיר
Guest

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

ליאור
Guest
מערכת השיקולים שלי ביעוץ לסטארטאפ שונה במקצת משלך. הנקודות והנימוקים ברובם דומים אבל בכל זאת כמה נקודות שונות: * מהירות פיתוח: php, ruby וכו מהירות יותר בפיתוח לא בגלל זמן ההידור אלא בגלל הקלות שלהן בפיתוח אינטרנטי, פשוט מאוד. מפתח .net מנוסה מאוד יפתח גם באותה מהירות, פשוט ישנם יותר אנשים שיודעים לפתח מהר בשפות האלו. * ביצועים: חשוב, אבל לא עד כדי כך חשוב. כמו שאמרת בתשובה על טוויטר – במיוחד בשביל סטארטאפ, המטרה היא קודם כל לצאת החוצה. עד כמה שלמתכנתים קשה עם המשפט הבא (ואני אכלתי עליו הרבה שעות בזמני..) – את בעיית הביצועים נפתור אח”כ –… Read more »
ליאור
Guest

אמיר,

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

אפליקציות אירגוניות שאני מכיר לרוב נכתבות ב.net וjava.

אמיר
Guest

ליאור, תודה על התשובה
אז בעצם היתרון של .NET על PHP זה בהתמודדות עם עומסים ?
לגבי מהירות הבנתי שהדעות חלוקות אז לא נכנס לזה :)

ליאור
Guest

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

ישי סמיט
Guest

כדאי לקחת בחשבון את סקלה [1] שפה מהודרת הרצה על Java עם מהירות תכנות של שפות כמו python / ruby. השתמשתי בה ב LinkedIn ובסטרטאפ בהנוכחי שלי. חברות כמו foursquare ו טויטר עברו אליה עבור מהירות פיתוח וכלים טובים יותר לscalability.
שיהיה ברור: scalability היא פונקציה של ארכיטקטורה, לא שפה. אולם יש שפות שנותנות כלים טובים יותר לבניית ארכיטקטורה טובה ו/או תוכנה גמישה (או agile).

[1] Scala http://www.scala-lang.org

ליאור
Guest

ישי,

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

גאבור
Guest

קראתי את המבוא למאמר, אך בכל זאת היתי רוצה להבין מדוע לא הזכרת את שפת פרל ( Perl ) שלמעשה היתה השפה העיקרית לבנית אפליקציות אינטרנט עד לפני מספר שנים.
האם אתה מכיר את פרל ואת הפיתוחים החדשים והסביבות החדשות שלה לבנית אפליקציות אנטרנט כגון
http://www.catalystframework.org
http://plackperl.org
http://jifty.org
http://labs.kraih.com

זהר
Guest

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

גם אם אין תמימות-דעים בנושא הרי שעצם הדיון תורם להגברת המודעות והעניין, וזה כשלעצמו מעולה!

Uriel Katz
Guest
אני לא מבין למה בארץ יש כל כך הרבה מתכנתים שהם נרתעים מכל דבר שזה לא .NET. יצא לי לעבוד ב3 חברות סטארט אפ שפיתחו רק ב.NET וכל איזכור של שפה שהיא קוד פתוח ושהיא לא “enterprise” (שבשבילי זה פשוט שם ל”מסובך ולא יעיל”) גרם להם להתנגדות גדולה אפילו שלא היה להם שום נסיון עם שפה כזאתי(במקרה הזה,זה היה פייתון). בפיתוח של אפליקציות אינטרנט אין ואני מדגיש אין לרוב בעיית ביצועים ברמת הקוד בשרת אלא במסד נתונים,מה עוד שבשרתי אינטרנט אין בעיה לשים עוד שרתים מאחורי Load balancer ככה שבעיית הביצועים נפתרת(וזה דבר שצריך לעשות בכל שפת פיתוח בסופו של… Read more »
wpDiscuz

תגיות לכתבה: