oh the Irony
(קצת ארוך:)

TakeCtrl

New member
oh the Irony
(קצת ארוך:)

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

אני אומר את זה כי נראה לי שהפרצוף שלו לבש מבט שדומה לגועל של "מאיפה אבן זחל היצור הזה?" הראיון נגמר מהר מאוד לאחר מכן.

fast forward כמה שנים ובעבודה הנוכחית שלי אנחנו עובדים עם אותה חברה בארה"ב כשהם בעצם עובדים על גרסה חדשה של מוצר שאנחנו מתממשקים איתו ובמשך יותר משנה, אנחנו מפילים אם המוצר שלהם על באגים דביליים, אני מדבר על לא פחות מ2 גרסאות GA שאותו מוצר יצא שאנחנו לא יכולים לעבוד איתו והשלישי בקושי.

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

עד כדי כך שאנחנו נוסעים לשם בחודש הבא עם ראש הצוות שלי ומנהל המוצר כדי להדגים להם איך אנחנו עושים QA. (חברת ענק).
כן, אני יודע שהמים לא אותם מים, וזה לא אותם אנשים, ולא אותו סניף ולא אותו מוצר וכו' וכו' וכו'. בכל זאת זה משעשע. בימים מוקדמים הייתי עושה לקוד שלהם decompile ומראה לברנש שלהם בדיוק איפה הקוד שדי חירפן אותו (זה אחד המורק"ים עלי שעובר בחברה).
אגב, אני עדיין עושה את זה, רק בלי להגיד להם , באגים אחרונים אני מסתכל מתוך סקרנות על פתרו אותו, ורואה דברים תיקונים שכוללים קריאה למתודה בתוך try catch שתופס illleagalArgumentException ומעבירה הלאה את הערך שגרם אותו רק עם trim ללא שום כתיבה ללוג אפילו. אולי אני סנוב, אבל איכשהו קצת צורם לי...

אגב, אישית אני חושב שאנחנו מקדישים יותר מדי זמן לזה, אני מדבר אשכרה אני צריך לשבת עם אנשי QA שלהם שעות ולהריץ עשרות בדיקות על מוצר שכבר גילינו שם הכל, זה קצת מביך. אני מרגיש כאילו אני אהיה שדר רדיו שצריך למלא זמן אוויר.
מצד שני אני זומם להתחיל ישיבה ב
"you wanna know how we many managed to find so many bugs? welp, how have you tried USING it?" אולי ראש הצוות שלי יצליח לרסן אותי, אבל אני מדבר עם מנהלת הפיתוח שם די הרבה זמן ועל חלק מהבאגים אני מגיב לעיתים בעוקצנות הומוריסטית כך שהיא די מכירה אותי כבר.

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

תוספת לא קשורה: , כשעמדתי לפרסם את כל זה, תפוז הקפיץ לי הודעת login, לאחר שנכנסתי לא בכלל שזה פורסם. מזל שלחצתי על copy לפני כן...
 

user32

Well-known member
מנהל
טיפ ממישהו שהיה במצב הזה

לפני בערך 10 שנים התקבלתי למשרת מוביל טכנולוגי/אכיטקט באיביי נתניה (בסוף לא הלכתי לשם). שאלו אותי גם על סיבוכיות וגם לי אין תואר אבל עניתי נכון בכל זאת.

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

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

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

TakeCtrl

New member
אם זה מה שמתורגם למראיין בראש, אין לי בעיה עם זה..

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

user32

Well-known member
מנהל
זו גישה לא מתקבלת על הדעת

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

וסיבוכיות != מסובך. או לפחות לא בהכרח. אתה לא חושב שלולאה שמתבצעת 100 פעמים היא יותר יעילה מזו שמתבצעת 1000 פעמים? זה משהו שהוא כל כך בלתי נתפס שאתה לא יכול להתקרב אליו? המתמטיקה שצריך בראיונות עבודה מהסוג הזה היא ברמה תיכונית של חזקות ולוגריתמים.
 

TakeCtrl

New member
זה בדיוק מה שאמרתי מלכתחילה, קורה הרבה פעמים שאני

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

Miki Watts

New member
מה שאתה מזכיר פה נקרא Imposter Syndrome

ראה פה: https://en.wikipedia.org/wiki/Impostor_syndrome
זה בעיקרון נגרם כי לבני אדם באופן כללי קשה להבין/לדמות מנטלית אנשים עם כישורים/ידע/אינטלגנציה ברמות שונות מהם, ולכן לאנשים שמצליחים בתחום מסויים הכל נראה קל והם אומרים בדיוק את מה שאתה אומר, למרות שבפועל הרבה אנשים אחרים לא היו מצליחים בכלל להתקרב ליכולות שלהם.
זה די נפוץ אצל מתכנתים / אנשי סיסטם - ראיתי בכל מיני פורומים אנשים אומרים "אני בסך הכל עושה גוגל על השגיאה ועושה מה שהוא אומר, אני מרגיש שאם יעלו עלי יפטרו אותי מיידית" - ומה שהם לא מבינים / רואים זה שהיכולת לעשות גוגל על שגיאה, להבין מה זה אומר ומה צריך לעשות כדי לתקן את השגיאה, זה כישורים יחסית נדירים ורוב האנשים האחרים פשוט לא מסוגלים להבין את זה באופן מנטלי.
הרבה פעמים אנשים כאלה גם נתקעים/מתפשרים בעבודות עם שכר נמוך בהרבה ממה שהם היו יכולים להרוויח ו/או ללמוד כישורים חדשים.
 

TakeCtrl

New member
לא יודע, נראה לי copy-pasta של הודעת exception נראה לי

די אלמנטרי, רק צריך לברור את הcontext הנכון. לעומת זאת, מי שהולך ישירות לstack trace בלי גוגל ורואה מה הבעיה, קצת אחרת..
 

BravoMan

Active member
מכיר בדיחה בנושא "הקונטקסט הנכון":

אדם בא למוסך וביקש לתקן את האוטו.
המוסכניק הלך סביב סביב, הסתכל, חשב, בחן מקרוב, ובסוף נתן מכה קטנה עם פטיש באיזו נקודה, והופ - הרכב תקין.
&nbsp
ואז נתן לבעל הרכב חשבון על 1001 ש"ח.
&nbsp
בעל הרכב התעצבן: "עלמה אלף שקל??? על מכה קטנה בפטיש? יכולתי לעשות זאת בעצמי!"
המוסכניק מסביר: המכה עצמה - 1 ש"ח.
לדעת איפה לתת את המכה - זה מה שעולה 1000 ש"ח!
 

Miki Watts

New member
זהו, שזה נראה לך פשוט, אבל זה לא ככה

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

TakeCtrl

New member
מיד אחרי שאני אגלה איך עובדים עם git


הכריחו אותנו לעבור מsvn ל git (כי כל החברה ככה) ועכשיו מתחבטים בשאלה איך לעבוד נכון... קראתי על git לפני כמה שנים, אבל איבדתי די מהר את הסבלנות אליו כי הייתה לי תחושה שזה מכוון יותר לצוותים מבוזרים וגם שזה מבוסס על ההנחה שיש לה ערימת של טססטים אוטומטיים שמגלים ... אוטומטימת כל דבר שאתה מכניס להorigin/master ואצלנו זה לא ככה, אז בנתיים אני עושה גוגל על זה.. רואה מאמר נורא מפתה שנכתב לפני 6 שנים ו2 שורות תחתיו מאמר שאומר שאותו מאמר קודם נחשב "מזיק", מנסה להבין את שניהם והאחרון בינהם יש ערימת הערות כאורך הגלות וחושב לעצמי איך נאכל אותה בגדול..
&nbsp
בגדול מוכר לי הimposter, סינרדום לא הפעם הראשונה שנתקלתי בזה... אני חושד בזה כי יש חשיבה די מקובעת וקופסתית (אע"פ שבמשובים אומרים לי הפוך), אבל אני הולך מנקודה A לB, בדיוק כמו חיפוש בגוגל. אני למשל לא אצלח להפיק לך אלגוריתם יצירתי אם צריך למשל לעשות אופטימיזציה על מטריצות.
 

BravoMan

Active member
git הוא פשוט אם לא נכנסים לו לקרביים.

תחשוב ככה:
זה כמו svn, רק שיש לך repository שהוא לגמרי שלך, הוא גר בספריית הקוד שלך, ואתה יכול לעשות איתו מה שבראש שלך.
&nbsp
ורק בסוף, כשתדאג להביא אותו למקום הרצוי והמקובל, אתה תסנכרן אותו עם repository מרכזי.
&nbsp
כל היתר זה כלים למשימות ספציפיות.
&nbsp
אני משתמש ב-GIT כל הזמן לדברים שאני המפתח היחיד בהם, הן כתחביב בבית והן בעבודה.
&nbsp
דווקא git אמור להיות נוח למישהו כמוך, כי הוא מאפשר לך ליצור עותק מה-repository הראשי, ואז לעשות עליו כל ניסוי שאתה רוצה, להתעלל בו איך שאתה רוצה, ובסוף כל שתצטרך לעשות הוא למחוק ספריה מקומית כדי להעלים את המשחקים.
&nbsp
לא צריך שרת, לא צריך שום דבר מיוחד, אתה יכול לשחק במקום לקרוא על ההתחלה, אז על תלחץ ממאמרים כאלה ואחרים.
מצא את ה-cheat sheet הקרוב של הפקודות הבסיסיות וסע לשלום!
 

TakeCtrl

New member
"לדברים שאתה המפתח היחידי בהם"...

רק שאצלנו יש 5-6 מפתחים ,חלק מפתחים שרת בjava חלק מפתחים client .net.
&nbsp
אני משתמש בIDE כפרונט לפקודות של git. הבעיה מבחינתי זה הנחות עבודה כשעובדים עם git. אצלנו למשל הclient צריך להביא מתוך הjenkins תוצר של השרת, שזה תלוי בגרסה, שזה אומר לחשוף remote branch נוסף... למה? כי עד היום, אין ממש סימון בversion control על מספר build, לפני כל שחרור לQA אתה מעדכן 2-3 קבצים באופן ידני וזהו.
&nbsp
&nbsp
אנשים התחילו לפתוח remote branches על כל feature...
 

יבגניי34

New member
ככה עובדים עם גיט, פותחים feature branch לכל שינוי בקוד.

כי כשלא לוקח יומיים לעשות merge, אנשים מגלים שבעצם לעשות branch זה נח ושימושי.
 

TakeCtrl

New member
אבל אלו צריכים להיות מקומיים..

וזה גם כופה עליך לזכור תמיד לעבור בין branches ואם יש לך קובץ שהוא משותף לשניהם זה די בעייתי.
 

יבגניי34

New member
flow סטנדרטי עם גיט ==> פותח ענף משלך ודוחף אותו

git checkout master && git pull && git checkout -b someFeature && git push -u origin HEAD

Now try to alias that.
 

BravoMan

Active member
לא הבנתי על מה בדיוק אתה מתלונן:

אלו הנחות עבודה בדיוק?
תלוי גרסה של מי? השרת? ה-client?
&nbsp
ולמה אין סימון ל-build? בשביל זה בדיוק יצרו ב-git דבר שנקרא tag - הוא "זול" ואפשר ליצור כמה שרוצים, ואז לשלוף ישירות בנקודה מסוימת בענף.
 

choo

Active member
המעבר ל-git מפחיד בתחילה - אחרי 2-4 שבועות לא תרצה להיפרד

&nbsp
אחרי כמה שבועות שעובדים עם git ומתרגלים לשטאנץ המקובל באירגון שלכם (בכל מקום עובדים איתו קצת אחרת) - אתה שואל את עצמך למה עבדת עם תוכנות ניהול תצורה גרועות כמו svn כל כך הרבה שנים (svn נבנתה בצורה תואמת ל-cvs שקדמה לה ולכן שמרה על המבנה הבעייתי של ניהול קבצים במקום ניהול שינויים, וחוסר אטומיות בפעולות)
&nbsp
המודל המבוזר של גיט עובד מצויין גם כשקבוצת הפיתוח אינה מבוזרת. בחברה אצלנו כמה עשרות אנשים עובדים עם git, הקוד מנוהל במספר דרכים שונות (לפעמים עובדים ישירות מול ה-repository המרכזי, לפעמים כמה אנשים עובדים על פיצ'ר מול branch שמתוחזק זמנית אצל אחד מהם, לפעמים פותחים branch כזה גם ב-repository המרכזי... הקלות של מעבר בין בראנצ'ים וביצוע merge כל כך קלה ביחס לכל תוכנת בקרת תצורה מהסוג הישן, שזה הופך להיות no brainer כמעט.
&nbsp
כמובן שגם בגיט אפשר לעשות צרות צרורות אם לא נזהרים (עיין ערך git reset --hard לדוגמא), אבל יש דרכי מילוט למרבית הטעויות שאפשר לעשות איתו (עיין ערך git reflog).
&nbsp
נ.ב. גיט ממש לא דורשת שימוש בבדיקות אוטומטיות - אפשר להשתמש בה בדיוק כמו עם svn והיא עדיין תעשה עבודה טובה יותר, ואפשר עדיין שיהיה מישהו שמנהל את הרפוזיטורי המרכזי אם רוצים
 

user32

Well-known member
מנהל
אני עובד באיחור בערך שנתיים עם גיט

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

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

גיט לא נותן מענה פשוט לבעיות השוטפות והיום יומיות במקרה הזה. בSVN הטיפול בקונפליקט הוא ממש קל. אתה תמיד יכול לעשות revert לקובץ, לקחת את השינוי הקטן שלך ולהכניס אותו לקובץ המסונכרן. תאר לך ששני מתכנתים עשו בטעות אותו תיקון: שינוי של אות קטנה בכותרת של טקסט לאות גדולה. שניהם עשו קומיט, אחד עשה פוש, השני אכל אותה לגמרי כי הוא כבר commited אבל אין ממש דרך חזרה ואז מתחיל הסיפור של שילוב בין stash, hard reset, git revert, חיפוש של ID מוזרים שאמורים לייצג שינוי כלשהו וחיפושים נואשים stack overflow על איך מבטלים קומיט.

הדבר השני הוא שבגלל שבגיט יש שכבת המורכבת הנוספת של repositories מבוזרים ואישיים וכו' אז פיתוח UI נורמלי הופך להרבה יותר מסובך מאשר כלי SC מסורתיים. אז המון אנשים עובדים מCLI ולי אישית אין בעיה עם CLI רק שבמקרה של source control זה מאוד מאוד מעיק. לבדוק הסטוריה, לעשות dif בין גרסאות שונות, לעשות merge ידני בין קבצים, להכניס ולהוציא קבצים מרשימות קומיט וכו' אלה דברים שאתה רוצה לעשות בdrag and drop.
כן, יש כלים טובים. חלקם רק בwindows מה שלא עוזר לי, אחרים עם התנהגות בלתי צפויה כי אתה עושה פעולת GUI ולא בטוח מה הפקודה מאחוריה, חלקם נותנים גרף יפה ועצי הסטוריה אבל פעולות פשוטות אין וכו' וכו'. האמת שמלבד הIDEים של IDEA שהשכילו לממש פעולות כמו revert (באמצעות אוסף פקודות GIT ככל הידוע לי) וmerge/rebase אוטומטי ככל האפשר לא מכיר עוד משהו שאפשר לעבוד איתו וגם IDEA הוא לא תמיד אופציה.

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

user32

Well-known member
מנהל
ותרגישו חופשי לקטול. ברור לי שאני בעמדת מיעוט פה

 
למעלה