אהלן לכם!
"פוסט הבית" (הפוסט המומלץ ביותר לקריאה) הוא IoC Container Explained, שמנסה להסביר במילים ברורות מה זה IoC ולמה זה חשוב. עוד אפשר (וכדאי) לקרוא כאן על Multi-Threading, על Design-Patterns וגם על log4net כמובן. 'סתכלו בעננצ'יק משמאל ותראו הכל.
קריאה מהנה! -רון

קצת על קוד פתוח – החזית הטכנולוגית

7 ינואר, 2015 14 תגובות

[הפוסט התפרסם גם בגיקטיים]

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

בפוסט הזה אני אחלוק כאן הדברים שדווקא פחות קשורים לשפת פייתון עצמה, אלא יותר למאקרו: המעבר מפיתוח בסביבת Microsoft, כלומר דוט-נט על Windows, לפיתוח בסביבת open-source: כיום אני מפתח בפייתון וב Clojure על לינוקס.

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

TL;DR

החזית הטכנולוגית נמצאת בסביבת open-source. הנוחות נמצאת בסביבות אחרות, כמו דוט-נט. ויש לזה סיבה.

הכנתם קפה? יפה. נתחיל.

באופן כללי, אחרי יותר משנתיים בסביבת open-source, אני חושב שבסביבה הזו אפשר לראות באופן בולט שני דברים חשובים:

  • מענה אמיתי לבעיות אמיתיות
  • פתרונות חדשניים לבעיות אמיתיות

העולם הישן – פתרונות עקומים לבעיות אמיתיות

הצורך הוא אבי ההמצאה. אבל מהו הצורך? מי מגדיר מהו הצורך?

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

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

נסתכל לרגע על בעיה ידועה: איך אפשר לפתח ל web בצורה מהירה וקלה לתחזוקה?

הפתרון של Microsoft

בואו נצעד אחורה בזמן לתקופה של 2002-2003, כאשר Microsoft הכריזו בקול גדול על דוט-נט (עזבו את 1.0, נלך ישר ל 1.1), ובפרט על ASP.NET עם הפיצ'ר המדהים שנקרא WebForms. על איזה צורך ענה כל הנושא הזה של WebForms ב ASP.NET?

מהנדסי Microsoft חשבו וחשבו, וחשבו עוד קצת, והגיעו למסקנה שמתכנתי web צריכים לאמץ שיטות פיתוח של מתכנתי desktop, כלומר "לצייר" ב Visual Studio אלמנטים ע"י drag-and-drop, והכל בסוף יתרגם ל HTML. אה, והלהיט הגדול: התוצאה הסופית תיקבע על פי הדפדפן עצמו (לפי ה user-agent), כי ככה נוכל לעצב פעם אחת את המסכים שלנו והשרת ייצור HTML (או WML, למי שהתנסה בזה) שמותאם לדפדפן הנוכחי.

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

בקיצור, Microsoft סיפקו פתרון עקום לבעיה אמיתית.

הפתרונות מעולם ה open-source

המודל שמתכנתי web מעדיפים הוא בד"כ מודל פיתוח שנקרא MVC. בסביבת הקוד הפתוח זה מודל שמוכר ועובד היטב כבר שנים:

  • בפייתון יש מספר פרויקטים, והמוכר שבהם נקרא Django, שקיים מ 2005.
  • ברובי יש את Rails, שקיים מ 2005.
  • ב PHP יש את CakePHP שקיים מ 2005.
  • בדוט-נט, בסביבת open-source:
    • פרויקט MonoRail, שהוא תת-פרויקט של Castle. קיים בערך מ 2005-2006. נוהל במשך תקופה ארוכה ע"י חן אגוזי.
    • פרויקט ASP.NET MVC, התחיל בסביבות 2007 ע"י Scott Guthrie, וצבר תאוצה די מהר.

ובינתיים, במשרדי Microsoft, אי שם ברדמונד

מה קרה בינתיים, בתקופה של 2005-2010? בתקופה הזו, Microsoft התעלמו לחלוטין ממודל MVC לפיתוח web, לפחות כלפי חוץ. רק בסביבות 2010 פרויקט ASP.NET MVC "אומץ" ע"י Microsoft והפך להיות חלק מ Visual Studio, בתור תוסף.

רק ב 2012, Microsoft הטמיעו באופן רשמי פרוייקטים מסוג MVC ב Visual Studio.

לזה קוראים הצתה מאוחרת.

מענה אמיתי לבעיות אמיתיות

מההתרשמות שלי, הספריות והפריימוורקס שקיימים בסביבת open-source נותנים מענה אמיתי לבעיות אמיתיות.

בואו ניקח דוגמה, ונבדוק את הבעיה (האמיתית!) שנקראת בעיית ה C10K. לעצלנים שביניכם אסביר רק שהבעיה היא איך להחזיק סדר גודל של 10,000 (במילים: עשרת אלפים) חיבורים פתוחים בו זמנית, ולספק תוכן דינמי (תלוי בקשה). דמיינו למשל מערכת צ'ט שרצה על שרת יחיד ומחוברים אליה בו זמנית 10,000 משתמשים – איך עושים את זה?

איך Microsoft פותרים את בעיית C10K בדוט-נט? כנראה ע"י מספר שרתי Windows Server עם load-balancer רציני לפניהם. כלומר, הבעיה נופלת על ה load-balancer, והפתרון הזה עולה די הרבה כסף בסופו של דבר. אמנם, כבר בדוט-נט 2.0 הוצג הפיצ'ר שנקרא Asynchronous Pages, וידידו ה"קל" יותר IHttpAsyncHandler שכבר קיים (!) מגירסה 1.1.

אלה פתרונות חלקיים לבעיה. באופן כללי, ASP.NET זו מערכת שנבנתה עם מערכת שיקולים משלה, וכנראה בזמן ה design, לא ייחסו חשיבות גבוהה מדי לכל הנושא של concurrency ושל non-blocking execution. רק בשנת 2012, החל מגירסה 4.5 של דוט-נט, יש סוף-סוף התייחסות סבירה ל async I/O בתבנית של async/await. בלי להכנס לפרטים, אסביר רק שהכוונה ב async I/O היא להעביר למערכת ההפעלה עצמה (ולמעשה לבקר החומרה הרלוונטי) את הביצוע ברקע של משימות I/O, כגון כתיבה/קריאה לדיסק, או שליחה/קבלה של נתונים ממשאבי רשת. בזמן הביצוע ברקע, ה thread ה"נוכחי" מתפנה למשימות אחרות. אפשר לקרוא עוד פה, כאן ופה. זה עדיין פתרון חלקי אם דרוש thread לכל חיבור.

ואיך בסביבת open-source פותרים את בעיית C10K? כאן כבר יש התייחסות ענפה לבעיה, ויש פתרונות טובים וזולים, כבר משנת 2009. שלוש דוגמאות בולטות:

  1. node.js, שתוכנן מראש להיות event-driven, כולל non-blocking I/O, והוא נותן מענה יפה ל concurrency. קיים מ 2009.
  2. הפריימוורק/שרת שנקרא Tornado, שוחרר כ open-source, כתוב בפייתון, משתמש ב Reactor pattern. יש בו שימוש אינטנסיבי ב async I/O. הוא מאוד קל לפיתוח והוא מאוד סקאלבילי (אין לי סטטיסטיקה מדויקת, אבל אתם יודעים, פייסבוק קנו את FriendsFeed, החברה שכתבה את זה…). קיים מ 2009.
  3. הפריימוורק שנקרא Twisted, כתוב בפייתון, open-source. באופן כללי הוא "כבד" יותר מ Tornado. קיים מ 2002.

אלו רק שלוש דוגמאות, אבל היד עוד נטויה. ב open-source יש פתרונות מלאים וזמינים לבעיית C10K.

פתרונות חדשניים לבעיות אמיתיות

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

זוהי אבולוציה במיטבה. המוצלח – שורד. הפחות מוצלח – מתפוגג.

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

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

יש עוד הרבה פרויקטים מוצלחים וחדשניים. רשימה קצרה: Redis, Couchbase, Storm, Hadoop, Cassandra ועוד ועוד. כל פרויקט מוצדק בפני עצמו, ונותן מענה חדשני לבעיה מסויימת. לרובם קהילה פעילה ומדריכים טובים.

למה כל זה קורה?

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

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

למה זה קורה?

להבנתי, יש כאן שני עניינים שמסבירים את זה:

Microsoft היא חברת תוכנה לשוק ה Enterprise

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

Microsoft היא חברה שמפתחת פתרונות לשוק ה Enterprise. תחשבו על זה רגע:

  • כל הסיפור הזה שנקרא MS-SQL-Server הוא ל Enterprise, כיום בתחרות ישירה מול Oracle.
  • כל הסיפור הזה שנקרא Windows Server – לשוק ה Enterprise.
  • הסיפור עם Dynamics – שייך ל Enterprise.
  • וגם SharePoint – שייך ל Enterprise.

ע"פ הערכה מ 2013, כל פריט מהרשימה הזו מכניס ל Microsoft למעלה ממיליארד דולר בשנה.

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

אני חוזר: Microsoft היא חברה ששייכת ל Enterprise. ולכן הפתרונות שהיא מספקת הם פתרונות Enterprise:

  • יש עומס? -לא הבעיה שלנו. שימו load-balancer.
  • יש ביקוש לפיצ'ר מסויים? -חכו לגירסה הבאה, שתצא אולי עוד חצי שנה במקרה הטוב.
  • יש באג? חכו ל fix הבא. או גרוע מזה: חכו ל service-pack הבא. או גרוע מזה: זה מה יש.

כלומר:

  • הדרישות לסקאלביליות גבוהה מקבלות פתרון Enterprise מצד Microsoft. או שפשוט תלכו על Azure (בהצלחה!)
  • קצב האבולוציה של המוצרים של Microsoft הוא קצב של Enterprise.

הסטארט-אפים התרבו

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

אזור הנוחות של Microsoft

חברה רווחית כמו Microsoft יכולה להרשות לעצמה לעמוד מן הצד ולראות לאן השוק הולך. למעשה המודל הזה הצליח לה לא רע עד עכשיו:

  • דוט-נט זו העתקה טובה של Java
  • Excel זו העתקה טובה של Lotus 1-2-3
  • ואולי Windows זו גם העתקה של משהו?

הדפוס של Microsoft הוא כזה:

  • הבשלה: להמתין ולראות אם רעיון מסויים הוא רעיון רווחי
  • העתקה: להעתיק את הרעיון, לעיתים גם להשביח אותו
  • ליטוש: לכתוב תיעוד מצוין
  • שיוק ומכירות: לשווק אותו בצורה אגרסיבית

ככה יוצרים אזור נוחות למשתמשים של המוצרים עצמם.
למעשה, ככה גם Microsoft יצרה לעצמה את אזור הנוחות שלה.

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

התפכחות ושינוי כיוון

נכון להיום, רוב הפרויקטים המשמעותיים ב open-source מיועדים לריצה על מערכות לינוקס. חלק קטן מהם רץ גם על Windows (למשל Apache httpd). בשנים האחרונות יש מעבר של מתכנתים מסביבת Microsoft לסביבת open-source (כלומר, אני לא היחיד שעשה את המעבר הזה), ומכאן שיש גם מעבר של מתכנתים מ Windows ללינוקס.

כדי לבלום את התנועה הזו, Microsoft פצחה במספר מהלכים של שחרור (איטי) של קוד ל open-source. המהלך הבולט מכולם הוא שהיא הוציאה את ה core של דוט-נט לקוד פתוח (בעיקר ברישוי MIT, אבל לא רק). לא סתם הוציאה ל open-source, אלא ל github, ולא ל CodePlex, האתר הרשמי שבבעלות Microsoft לאחסון פרוייקטים ב open-source.
למה? כי לדבריהם שם נמצאת קהילת המקודדים של ה open-source. סוג של התפכחות?

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

אני סקפטי

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

  • האבולוציה של פרוייקטים בסביבת open-source מתרחשת בקצב מהיר. האם Microsoft תעמוד בו? לא בטוח.
  • כל ה eco-system שמתקיים באופן טבעי כבר שנים בסביבות שהן לא Microsoft, לדוגמה פייתון, רובי, Java וכד' – כבר התפתח מאוד. קשה מאוד להדביק את הפער הזה באופן מלאכותי. דוגמה לכך אפשר לראות מהנסיון של Microsoft ליצור eco-system סביב האפליקציות והחנות של Windows Phone – זה פשוט תהליך שקשה מאוד להאיץ אותו.
  • כל ה tooling מסביב לקוד ולאפליקציה עצמה – הרבה יותר עשיר בלינוקס מאשר ב Windows. אני מתייחס כאן לרכיבים הבאים: מערכת ההפעלה עצמה, ה shell (ויסלחו לי כולם, אבל PowerShell זה צעד חשוב אבל רחוק שנות אור מ bash והכלים שבו), האוטומציה (גם של ה deployment), כלי ה monitoring ועוד.

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

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

אז מהי החזית הטכנולוגית?

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

נכון להיום, החזית הטכנולוגית קיימת וזמינה בסביבת open-source, הרבה יותר ממה שקיים בסביבת דוט-נט.

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

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

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

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

יש לכם זמן?

קטגוריות:טכנולוגיה, תכנות תגיות:, ,

Interview Internals

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

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

או במילים אחרות:

איך להוציא את המקסימום מראיון עבודה

מצד החתן (המועמד)

טיימינג

רצועת טיימינג

רצועת טיימינג

כמו שאמרו פעם, timing is everything. אפילו ביל גייטס יודע את זה. קבעתם לראיון בשעה 10:00? תגיעו קצת לפני 10:00. נניח חמש דקות לפני. אבל עשו טובה לעצמכם ולמראיין, אל תיכנסו לראיון רבע שעה לפני הזמן. זה מעיק. מקסימום תשבו כמה דקות באיזה קפה בסביבה.

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

מערכת העיכול

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

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

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

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

שיניים

עדות מפלילה

עדות מפלילה

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

שירותים

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

מודיעין

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

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

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

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

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

התאים האפורים

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

מצד הכלה (החברה)

לפני שאסיים את הפוסט, אני ממליץ לכם לא לשכוח להתרשם מה-facilities שהחברה מציעה:

קפה?

קפה הבית?

קפה הבית?

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

באותו אופן – כדאי לבדוק..

  • אם יש אווירה נעימה בחברה: תמונות מהטיול האחרון? היה טיול בכלל?
  • אם יש משהו מגניב להעביר איתו את הזמן: פלייסטיישן? קינקט? גיטרות? תופים? (כן, ראיתי פעם תופים אלקטרוניים – מגניב לאללה!)
  • שירותים.. כי אנחנו לא רוצים להרגיש בתחנה המרכזית הישנה :-D

ובנימה אופטימית זו, בהצלחה לכולנו!

נ.ב. למי ששרד עד עכשיו (כל הכבוד!) – אנחנו עדיין מגייסים web developer.

רוצים לשתף מהראיונות שלכם? אשמח אם תגיבו בהערות!

קרדיטים לתמונות

רצועת טיימינג – מתוך ויקיפדיה
חיוך – מתוך תמונה קיימת, עם שינוי, תחת רשיון CC BY-SA 3.0
קפה – מתוך flickr, משתמש tonx, תחת רשיון CC BY-NC-SA 2.0

קטגוריות:תכנות תגיות:, ,

Pipl is Hiring

25 פברואר, 2013 אין תגובות

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

אנחנו מחפשים אנשים לשתי משרות כרגע:
משרת מפתח בכיר, חובה רקע בפייתון. עדכון: גייסנו!
משרת מפתח web, חובה נסיון ב web, לא חובה נסיון דווקא בפייתון.

אחלה אנשים, תנאים מצוינים, שעות עבודה נורמליות, הרבה טכנולוגיה ועניין.
אפשר לשלוח מייל דרך המודעות שבאתר או למייל שלי: solution AT ronklein DOT co DOT il

קטגוריות:תכנות תגיות:

Dot Next

19 ינואר, 2013 4 תגובות

החלטתי לעשות שינוי מרענן בקריירה שלי ועברתי לתכנת בפייתון, בסביבת לינוקס.

תשאלו למה?

או, טוב ששאלתם. אז ככה:

1. תמיד טוב לעשות שינויים מדי פעם. לומדים מהשינוי ומתפתחים ממנו.

2. אני אוהב לעבוד בסטארטאפים. ומה לעשות, הנטיה ה"טבעית" של רוב הסטארטאפים היא לבחור בטכנולוגיות שהן יותר לכיוון ה open-source. כך שבתחומים שאני מכיר, ה stack הטכנולוגי הוא יותר לכיוון לינוקס עם שפה מודרנית יחסית כמו רובי, פייתון, סקאלה וכד' (מי יתנני Haskell או Erlang!) או מודרניות פחות כמו Java. מה שמאפיין את השפות האלו זה קהילת open-source פעילה, מה שנקרא אקו-סיסטם חי ובועט.

3. אני מרגיש שמיקרוסופט, איך לומר בעדינות, לא פונה לתחום של סטארטאפים במוצרי הפיתוח שלה. יהיו מי שיטענו ש"מה פתאום, תראה איך שפת C# מתפתחת, איך Visual Studio מתפתח" וכו'. לא קונה את זה. העתיד של דוט נט בכלל לא מספיק ברור. התחושה האישית שלי היא שמיקרוסופט מעוניינים שנשתמש ב Windows וב Office. אלה המוצרים שמיקרוסופט מתבססת עליהם, ושם יש הרבה מאוד כסף. כל שאר המוצרים, וכלי הפיתוח ביניהם, תפקידם ליצור אקו-סיסטם סביב Windows ו Office. מתכנתים לא מעניינים את מיקרוסופט כמו שמשתמשי Windows מעניינים אותם.

4. מיקרוסופט משנים את דעתם לעיתים קרובות מדי. כל כמה שנים יש למיקרוסופט איזה מלך חדש להמליך עלינו, המפתחים, ושאנחנו נקבל אותו בזרועות פתוחות ובהערצה. בכלל, יש למיקרוסופט מערכת שיווק מדהימה, לא פחות. אז פעם זה היה COM. ואח"כ דוט נט 1.1 ואחרי שהתייצבו קצת הדברים המליכו את דוט נט 2.0. ואחרי שכולם הקיאו מ WebForms, למשל, אז סוף סוף ניאותו שם ליצור סביבת MVC נורמלית ל Web. ועל מפתחי UI לדסקטופ בכלל אין מה לדבר: אלה כל שנתיים צריכים לבלוע צעצוע חדש שמיקרוסופט החליטו לשווק. אה, והענן של מיקרוסופט, Azure, עזבו. לא מצחיק.

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

אז… זהו, בינתיים. נקסט. אני אוהב סטארטאפים? סטארטאפים אוהבים פייתון? יאללה פייתון!

אז איך זה פייתון, תשאלו?

אה, טוב ששאלתם. זה אחרת לגמרי. לגמרי.

מתכנתים אחרת בפייתון, ועד שלא מנסים, לא מבינים.

שפה קלה מאוד להבנה ולקידוד.

יש לה יתרונות וחסרונות, מן הסתם, אבל העניינים שונים לגמרי ממה שהתרגלתי עד היום:

  • התרגלתי לשפה סטטית, ופייתון דינמית.
  • התרגלתי לקומפילציה, ופייתון היא סקריפט עם interpreter.
  • התרגלתי לרפרנס בין פרוייקטים, ובפייתון אין את זה – יש import, וזה משהו אחר לגמרי.
  • התרגלתי ל multi-threading, ובפייתון זה סרט אחר לגמרי.
  • התרגלתי ל Dependency Injection ב class constructor, ובפייתון עושים DI אחרת, או בכלל SRP אחרת, ואני עדיין לומד את זה..

וזה מעניין, מאתגר, וכיף.

ולסיום:

מתוך xkcd, אלא מה

אתם מוזמנים! :-)

קטגוריות:טכנולוגיה, תכנות תגיות:, , ,

Code Review example

26 ספטמבר, 2012 אין תגובות

בעוונותיי, התחלתי לקחת חלק באתר codereview.

חשבתי שיהיה נחמד לשתף את כולם באיזה review (איך מתרגמים את זה?!) שכתבתי, שבו מודגמים הרעיונות של מעבר מקוד פרוצדורלי ל OOP.

אז הנה הלינק לשאלה ולתשובה.

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

הערות? שאלות? אשמח אם תגיבו.

קטגוריות:תכנות תגיות:,

Shalom Olam

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

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

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

מימוש

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

בצד הלקוח המימוש הוא עם jsonp, ול Nancy יש תמיכה מובנית לזה, כמה נחמד!

הנה צילומסך של ההטמעה של הטבעת בבלוג של ליאור בר-און:

הטמעה עם jsonp

אלא שלא הכל הולך חלק. מסתבר שיש בלוגרים שעובדים בסביבה שבה אי אפשר להטמיע תגית script או תגית iframe. לדוגמה, אתר wordpress.com לא מאפשר את זה.
כדי לפתור את העניין, אפשר להעביר את הבלוג לאתר כמו blogger.com שדווקא כן מאפשר הכנסת תגיות שכאלה. היה מי שהרים את הכפפה.
בשלב שני, החלטתי להרחיב את הפונקציונליות ולאפשר לינקים "חכמים" שיגיעו לאפליקציה של הטבעת ומשם תתבצע הפניה (Redirect) לחוליה הבאה או הקודמת. בצורה הזו, אמנם אין את המידע לגבי הבלוג הבא/הקודם (כלומר מי בדיוק הוא הבלוג הבא/הקודם), אבל לפחות יש השתתפות בטבעת.

הנה צילומסך של ההטמעה באתר טכנו{ב}לוגיה:

הטמעה עם redirects

אחסון

כדי לעבוד עם Nancy, צריך אחסון שהוא Full Trust. אין הרבה כאלה בעולם ה cheap hosting. בחרתי ב discountasp.net. יש לי נסיון טוב איתם מהעבר, ואפילו מצאתי קופון שהביא להנחה משמעותית. Yay!

מה למדתי

  • למדתי לעבוד עם Nancy, וזה פריימוורק מצוין לתקשורת של HTTP. אמנם יש לו חריקות פה ושם, אבל בסה"כ מצוין. בהזדמנות זו, אני ממליץ בחום למי שבוחר לעשות אינטגרציה ב HTTP – לעבוד עם פריימוורק יעודי ל HTTP, ולא לעבוד עם WCF מעל HTTP. פתאום מגלים את השליטה ואת הגמישות בכל הפרטים הקטנים של HTTP. (לא שזה בלתי אפשרי, אבל נראה אתכם עושים Redirect ב WCF…)
  • על הדרך, למדתי להשתמש ב Git כדי להכניס שינוי ב Nancy.
  • על הדרך, הכרתי פרוייקט שנקרא Cassette (יעני, קלטת), שעוסק ב Asset bundling, וזה פרויקט מעניין בפני עצמו.
  • למדתי ששווה לנסות דברים חדשים. זה אמנם לא שיעור חדש, אבל נעים להיזכר.

לינקים

ולסיום – אם מישהו/י רוצה לעצב את האתר shalom-olam (בהתנדבות, תמורת קרדיט) אז נא ליצור איתי קשר.

קטגוריות:טכנולוגיה, תכנות תגיות:, , ,

Tip: Resharper and Unit Testing Settings

נניח שיש לכם Unit Testing וגם מותקן לכם Resharper ב Visual Studio.

נניח גם שהטסטים שלכם מתבססים על קיומם של קבצים מסויימים.

ואז אתם מנסים להריץ את הטסטים האלה דרך הרישרפר, מצפים ל Pass ומקבלים Fail.. למה?

תמונה אחת שווה אלף מילים:

להסיר את הסימון

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

בקיצור, תסירו את הסימון ותאריכו ימים :-)

Happy Testing!

קטגוריות:תכנות תגיות:, , ,

BitTorrent is only a Protocol

6 פברואר, 2012 אין תגובות

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

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

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

אז בבקשה, עו"ד קלינגר, אמנם לא אמן שעונה לקריטריון המדויק, אבל אולי בכל זאת: מדי פעם האתר StackExchange, שהוא האתר הגלובלי שתחתיו רצים אתרים כמו stackoverflow, serverfault, superuser, מוציא את המפלצת שנקראת:

Stack Exchange Data Dump

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

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

הנה, עו"ד קלינגר, יש לך נקודת התחלה.

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

בכל מקרה, מה שרציתי לכתוב זה שביטורנט זה רק פרוטוקול.
כמו ש SMTP זה פרוטוקול לשליחת מיילים.
כמו ש POP3 זה פרוטוקול לקבלת מיילים.

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

אבל חבר'ה, ביטורנט זה רק פרוטוקול. עזבו אותו במנוחה :-)

Tapuz Meetup at Sela

מדי פעם אנחנו יוזמים מפגש פורום.

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

ו"אנחנו" זה משתתפי הפורום, או לפחות ה"גרעין הקשה" :-)

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

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

נמשיך בתודה למכללת סלע, שכאמור, נתנה את החסות.

וכמובן, תודה למרצים: עידו פלטו, שהרצה על Fiddler, וגדי מאיר, שהרצה על Production Debugging. שתי ההרצאות היו מעולות.

הסשן שלי היה האחרון, ולכן היה יחסית קצר. יותר בכיוון של חומר למחשבה מאשר הרצאה טכנית.

הנושא שדברתי עליו היה מעבר מקוד פרוצדורלי ל Object Oriented.
לשמחתי האנשים שרדו יפה ולא נרדמו :-)

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

תוכלו להוריד את דוגמאות הקוד ואת המצגת עצמה, שהמרתי גם ל slide-share:

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

בקיצור, Good Vibes, ואפילו בלי אלכוהול! נקווה שיהיו עוד מפגשים כאלה.

צ'ירס!

קטגוריות:תכנות תגיות:,

Web Developer position at WinBuyer

לחברת WinBuyer דרוש/ה מתכנת/ת Web

חברת WinBuyer היא סטארט אפ בשלב מתקדם, והמוצרים שלה פונים לשוק ה Retailers. החברה ממוקמת בתל אביב.

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

דרישות מקצועיות
לפחות שנתיים נסיון ב ASP.NET, עדיפות ל MVC
לפחות שנתיים נסיון וידע ב HTML, CSS, JavaScript
לפחות שנה נסיון בעבודה מול MS SQL Server
חובה נסיון בתכנון (design) לפני כתיבת קוד
יתרון משמעותי: נסיון ב Multi Threading
יתרונות אחרים: נסיון ב jQuery, הבנה אמיתית של OOP, רקע ב WCF ו/או HTTP, נסיון ב Big Data, נסיון ב SilverLight, השכלה אקדמית.

הגדרת התפקיד
מתכנתת בסביבת ASP.NET + C#, עם הבנה טובה ב Web, לעבודה בשני הצדדים: Client+Server.

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

מתאים לך? שלחי קורות חיים למייל jobs_rd2012a@winbuyer.com
נא לא לציין בקורות החיים: תאריך לידה, מצב משפחתי, שירות צבאי וכד'. אנו מעוניינים לקבל קורות חיים מקצועיים בלבד.

קטגוריות:תכנות תגיות:
Quantcast