בואו נמצא עבודה
מושגי "הייטק" שכדאי להכיר לפני ראיון עבודה
5 דצמבר 2021
בואו נמצא עבודה
5 דצמבר 2021
אז התכוננתם לראיון העבודה מכל כיוון:
אבל יש עוד משהו שיכול לעזור לכם- להכיר מושגים מעולמות הפיתוח בהייטק, שיש סיכוי גבוה שיעלו בצורה כזו או אחרת בראיונות העבודה. למרות שאת מבחן הקוד אתם יודעים לעבור בצורה מעולה, לפעמים חוסר היכרות של מושג אחד שהמראיין עושה בו שימוש, יכול לגרום לחוסר ביטחון ולערער אתכם, וממש אין סיבה שזה יקרה.
עד היום רוב הסיכויים שיצא לכם לעבוד בעיקר על פרויקטים אישיים קטנים-בינוניים. המטרה של הכתבה הזו היא לזרוק אתכם למים העמוקים של ההייטק, ולהכיר את הצרכים והאתגרים של צוותי פיתוח בעולם האמיתי ולדחוף בכם לחקור וללמוד עצמאית בצורה רחבה על כל מושג שנזכיר כאן. מוכנים? בואו נצא לדרך.
Scalability
סקאלביליות (בעברית למרבה ההפתעה: סילוּמיוּת) היא היכולת של מערכת להתמודד בצורה אלגנטית עם כמות הולכת וגדלה של עבודה, או היכולת לגדול כדי לתת מענה לגידול בכמות העבודה. לדוגמא, אם נבנה אתר אינטרנט למכירת פרחים שנועד לשרת אלף אנשים, כמה קל (או קשה) יהיה להתאים את האתר כך שיוכל להיות מיועד לשרת מיליון אנשים.
יש שני סוגים לסקאלביליות: horizontal וvertical.
Horizontal Scaling שנקרא גם scale out היא שיטה של הוספת עוד משאבים למערכת. למשל, במקום להשתמש בWeb Server יחיד, נשתמש בשלושה.
Vertical Scaling שנקרא גם scale up היא שיטה של חיזוק של משאב של המערכת (מבלי להוסיף עוד משאבים). למשל, לכל שרת אנחנו נוסיף זיכרון, CPU, GPU וכו'.
כשאנחנו מדברים על סקאלביליות אנחנו צריכים להבין שהיא תכונה של הdesign של המערכת שלנו ושל אופן כתיבת הקוד שלנו. עלינו להכיר כלים ועקרונות לתכנות נכון ולתכנון תוכנה. מספר מושגים ששווה לכם להכיר הם:
תכנות מקבילי: GPU, CUDA, OpenMP, Multithreading, Multiprocessing
מושגים במקביליות וסקאלביליות: Design Patterns, Cloud/Cluster/Grid Computing, RTC
Reliability and Fault Tolerance
Reliability היא תכונה (נוספת) של מערכת הבוחנת את יכולתה (tolerance) לתפקד ללא תקלות (faults). אף מערכת היא לא מושלמת. אף קוד לא חסין. אבל, האחריות של מהנדס תוכנה היא לתכנן את המערכת והקוד שלו כך שיהיו אמינים וחסינים ככל הניתן לתקלות תוכנה, חומרה, תקשורת, זכרון, באגים וכו'. ניתן לחלק באופן גס את התכונה של אמינות המערכת לשתי הבטחות: הבטחה ראשונה היא שהקוד לא מכיל באגים (כלומר אם המערכת פועלת, היא מבצעת את מה שמצופה), וההבטחה השנייה היא שהמערכת לא תתנהג בצורה בלתי מצופה (תאבד מידע, לא תגיב בזמן, תקרוס וכו').
מושגים הקשורים לוידוא קוד חסר באגים: Unit-testing, Integration Tests, Component Testing, Regression Tests, Stress Testing
מושגים לתקינות וניהול המערכת: Sharding, partitioning, Byzantine behavior, Load Balancing, NginX, Eureka, Chaos Monkey
Cloud
מחשוב ענן הוא מודל המאפשר גישה נוחה על גבי רשת תקשורת וon-demand למאגר של משאבי מחשוב. הקצאת משאבים למשתמשים ושחרורם נעשים בצורה פשוטה, נוחה ומהירה ללא מאמץ. חברות הענק(Azure) Amazon (AWS), Google (Google Cloud), IBM (IBM Cloud), Microsoft שולטות היום בשוק הcloud שמשוערך בעשרות מיליארדי דולרים בשנה. אז איך עובד הקסם? פשוט מאוד. נניח שאנחנו רוצים לפתוח אתר אינטרנט למכירת פרחים; לכן מה שנעשה זה נקנה בלחיצת כפתור "מכונה" (=משאב מחשוב/שרת) ועליו נריץ את האתר שלנו. כעת, כל בנאדם בעולם יוכל לגשת לאתר שלנו על ידי פנייה למשאב המחשוב שעל הענן בעזרת כתובת IP.
עקרונית יש 3 סוגים של שירותים לשימוש בענן: SaaS, PaaS, Iaas (יפורטו מהפופולרי ביותר לפחות):
IaaS או Infrastructure as a Service: שירותים בהם המשתמש מקבל משאבי מחשוב לשימושו. המשתמש יכול להתקין על תשתיות הענן מכונות וירטואליות (VM), להקצות שטחי אחסון, לקבוע מדיניות לגבי הרחבת צמצום/הרחבה של משאבים וכו'. דוגמאות: EC2, S3 של AWS
PaaS או Platform as a Service: שירות המספק פלטפורמה להרצת אפליקציות או פיתוח אפליקציות של המשתמש. המשתמש יכול להשתמש בכלים/פלטפורמות מוכנות של שירות הענן שלו במקום לממש בעצמו מערכות מורכבות. דוגמאות: SQS של AWS או WebSphere MQ של IBM Cloud.
SaaS או Software as a Service: אם בעבר היינו צריכים לרכוש תוכנה ולהתקין אותה לוקאלית כדי להשתמש בה, היום ניתן להשתמש בה בממשק WEB שזמין לכולם מכל מכשיר בקלות. השירות המוכר ביותר לציבור הוא שירות אחסון ושיתוף קבצים המשמש לשמירת תמונות וסרטים בענן.
מושגים נוספים ששווה להכיר מעולם הsoftware engineering והcloud: Docker, Kubernetes, Virtualization, SLA, Big Data, CRM, DevOps, MicroServices, On-Premise Technology
השאירו תגובה
רוצה להצטרף לדיון?תרגישו חופשי לתרום!