קצת על קורסים ללינוקס

כמעט בכל שבוע אני מקבל פניה או 2 מקוראי הבלוג לגבי המלצה על “קורס לינוקס”. רבים מעוניינים להכיר את מערכת ההפעלה הפופולרית, חלקם חושבים להרחיב את ההתמקצעות שלהם בלינוקס, וחלקם רוצים להכיר אלטרנטיבה ל-Windows. לגטימי לחלוטין.

אבל לפני כן, הבה נסתכל על קורסים, לאו דווקא על לינוקס. יש לא מעט קורסים על מוצרי מיקרוסופט, אורקל, VMWare, ועל מוצרים רבים אחרים. המכנה המשותף של כולם – מה שאותם לומדים בכיתה ומתאמנים במחשבים בכיתה, מתאמנים במחשבים ובבית ובמה שתעבדו בחברה – המוצר יהיה זהה לחלוטין. ה-Windows Server שלמדתם עליו בקורס? אותו דבר בעבודה, אותם פקודות, ומה שלמדתם תוכלו ליישם מיידית עליו.

בלינוקס – זה שונה. ישנה חלוקה די ברורה של הפצות לינוקס: רד-האט ו-CentOS תמצאו בחברות, אובונטו יותר בסטארטאפים, SuSE מתחילה להיכנס יותר לארץ ו-Debian בד”כ אצל הוותיקים (כמו תמיד, מלחמות הפצה קיימות מכאן עד הודעה חדשה, אבל זה נושא לפוסט אחר). כך לדוגמא יכול להיות שתוכנה מסויימת בגירסה X קיימת כחבילות מוכנות להתקנה על אובונטו אך אותן חבילות לא ירוצו על הפצת לינוקס אחרת (ולמתחכמים: כן, קיים כלי בשם alien שממיר חבילות, אבל לא תמיד זה עובד וזה ממש לא משהו קל לשימוש למישהו שרק התחיל אתמול ללמוד לינוקס). פקודות התקנת חבילות הן שונות, בלא מעט מקרים גם קבצי ההגדרות לתוכנות פופולריות כמו Apache או NGINX נמצאות במיקומים שונים ובחלק קטן מהמקרים – גם ההגדרות עצמן שונות ואפילו התקנת הלינוקס שונה: כשמתקינים לדוגמא רד-האט או CentOS עם הגדרות ברירת המחדל, המערכת תפרמט את הדיסק לווליומים שונים כך שאם תרצה להוסיף מחר דיסק קשיח, תצטרך פשוט להגדיל את הווליום ולגמור עניין בשעה שחלק אחר מההפצות כלל לא טורח לעשות זאת וכשצריך להוסיף דיסק – צריך להעביר קבצים, ליצור קישור בין תיקיות ולבצע שלל פעולות אחרות.

לכן, כשלומדים לינוקס, צריך קודם כל לדעת לבחור מה לומדים. אם לדוגמא הקורס הוא מבוסס רד-האט ויש לכם בבית או על המחשב שלכם אובונטו, דברים יהיו מעט שונים. בד”כ הפקודות הקשורות לקבצים, משתמשים, ולחלק גדול מההגדרות – יהיו זהים, אבל יהיו חלקים שלא יהיו זהים, ובגלל זה קורס לימוד לינוקס (ולא חשוב אם זה בכיתה או שלמדתם דרך אתר כמו Linux Academy) מצריך מהמשתמש יוזמה להשתמש בהפצות לינוקס שונות על מנת להכיר יותר לינוקס ולא להגיע למצב שמכירים מעולה מערכת אחת אבל לא מכירים כלל מערכת לינוקס אחרת. לכן, לדוגמא, קורסי לינוקס בארץ שמלמדים ספציפית על רד-האט לדוגמא, די “נועלים” את הלומד על הפצה ספציפית אחת תוך התעלמות מהפצות אחרות. לעומת זאת, קורסים המבוססים לדוגמא על LPI/LPIC מדגישים יותר את הבסיס המשותף להפצות לינוקס ומשם הלומד יכול להמשיך ללמוד בעצמו על הפצות לינוקס אחרות.

נעבור לשאלת המיליון דולר: איך ללמוד לינוקס? רבים יחשבו שההמלצה הראשונית תהיה על ספר לימוד לינוקס, רק שהבעיה המרכזית עם ספרות זה שהדבר מצריך ריכוז רציני (ולא חסרים הסחות דעת) ושאין ממש את מי לשאול אם לא הבנתם משהו (חוץ מלחפש בגוגל ולשאול בפורומים). האופציה השניה היא לקחת קורס יעודי ולשלם 10-20 אלף שקל (או פחות, תלוי היכן). זה טוב ונחמד, אבל זה מאוד תלוי מי מעביר את הקורס ומי המשתתפים. כאחד שהעביר אי אלו הדרכות, תמיד מתרחשת הסיטואציה שמאן דהוא לא מבין והוא רוצה הסברים עכשיו וכל הכיתה מעוכבת 15-30 דקות עד שהוא יבין. מנסיון שלי מקורסים אחרים שאני עברתי (לא קשורים למערכות הפעלה) היו מקרים שבהם המורה היה מסביר צ’יק צ’ק על נושא מסוים והוא המשיך הלאה ובהפסקה גיליתי שאני לא היחיד שלא הבין מה הוא בדיוק לימד באותו זמן וההרגשה ש”הלך הכסף” הגיעה די מהר.

ישנם קורסים online שניתן לרכוש ב-20-40$ של UDEMY ואחרים (והח”מ קנה מספר קורסים כאלו), רק שהבעיה איתם שאתה בעצם “מהמר” על הקורס. לפעמים קשה להבין מילולית את המדריך (במיוחד שהמדריך מהודו ותלוי כמה הוא עבד על המבטא האנגלי שלו), לפעמים ההסבר אינו מספק ואי אפשר ליצור קשר עם המדריך כדי שיסביר בקצרה על מה מדובר, ולפעמים ההסבר כלל לא מכוון כלפי רמת לימוד שהלומד נמצא בה. אני יכול לדוגמא להסביר במשך שעתיים על Linux Schedulers וההבדלים ביניהם אבל אם המאזין לא יודע מה זה processes, ההסבר הולך לפח.

עד לפני כמה חודשים היה לי קשה להמליץ על אתר מסוים ללימוד כי הרבה מאוד אתרים מכרו לימוד על לינוקס בצורה די “חפיפניקית”. זכור לי מקרה בו רציתי קצת יותר להעמיק את הידע על MySQL ולקחתי קורס ב-lynda.com על הנושא וכל הקורס דיבר רק על CRUD (כלומר create, read, update, delete), שום דבר על אינדקסים, join, left,right, מנועי database וכו’ או קורס Python שלקחתי מאתר אחר ורק לאחר התשלום הבנתי שהמדריך כלל לא מתכוון להתעכב על ההבדלים בין Python 2.7 ו-Python 3 ומעלה, דבר די בעייתי שאתה מנסה להבין קוד שמישהו אחר כתב ממזמן …

כיום אני ממליץ בחום על Linux Academy (ולמעוניינים הנה קוד referral – ה-7 ימים הראשונים בחינם והשאר בתשלום חודשי של 29.50$). ההבדל בינו לבין אתרים אחרים הוא שבכל מה שקשור ללינוקס, יש שם הדרכות רבות לא רק על לינוקס אלא גם על כלים לעבוד איתם בלינוקס, אוטומציה, שפות תכנות, MySQL, וכמובן – עבודה בעננים ציבוריים שונים. יש להם 4 יתרונות גדולים על פני אתרים אחרים:

  • מכירים את זה שאתם משלמים ושוכחים להיכנס וללמוד? כבר בהתחלת כל קורס תקבלו אפשרות לקבוע לכם לוח זמנים ללימוד (ימים ושעות) והמערכת תשלח לכם התראות לפני כן על מנת לתזכר אתכם להיכנס ולהמשיך ללמוד..
  • לא הבנתם משהו? לכל קורס יש פורום, יש flash cards שאחרים כתבו כך שתוכלו ללמוד ולהיזכר בסיוע אחרים בדיוק באותם דברים שאתם מתקשים.
  • אין לכם סביבת לינוקס או שאתם לומדים על דברים הקשורים לעננים ואין לכם תקציב חופשי לחשבון ענן? אל דאגה: אתם מקבלים עד 6 שרתים ללא תשלום נוסף לנסות את הדברים שאתם לומדים בקורס. תתקינו Putty ואתם מסודרים.
  • כשתיכנסו לאתר תוכלו לראות מצד שמאל למעלה ציורית של ענן כתום – זהו החלק של Cloud Assesment, זהו החלק שיכול לבדוק אם אתם מוכנים לבחינה בנושאי ענן שונים כמו Solution Architect וכו’. יש גם את האייקון השלישי משמאל שנקרא Scale Your Code והוא יותר מורכב מהרצאות של אחרים על דברים שהם עשו.

מכיוון שאינני יחצ”ן של החברה אני יכול גם לציין חסרונות: במקרים מסויימים החומר קצת פחות רלוונטי או חסר בקורסים מסויימים. כך לדוגמא בקורס על Kubernetes, המדריך יוצא מנקודת הנחה שאתם עובדים על ענן ציבורי והוא מסביר לדוגמא את פונקציית expose כדי לקבל כתובת IP אמיתית שתוכלו לשייך ל-DNS לדוגמא, רק שדבר כזה לא עובד ב-Kubernetes רגיל בשרת בבית וצריך לעבוד הרבה יותר בשביל לקבל את השרותים שהקמתם ב-Kubernetes על IP “אמיתי”, כך שקורסים רבים לא יתנו לכם את הכל מ-א’ ועד ת’, אבל הם יכולים בהחלט לתת לכם את הבסיס.

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

כמה מילים על קורסי אבטחת מידע

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

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

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

 

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

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

אבטחת מידע מתחלקת לכל מיני חלקים, אני אתייחס ל-2 העיקריים:

  • אבטחת מידע בתכנות – בשביל ללמוד את החלק הזה, אתה צריך לדעת תכנות בצורה טובה, עם מספר שנות נסיון, ועדיף שיהיה לך ידע בכמה שפות תכנות. (ולא, ידיעה של Visual Basic לא נחשבת שפת תכנות רצינית). רק לאחר שיש לך ידע רציני עם מספר שנות נסיון, אתה יכול ללמוד על אבטחת מידע, על מה לחפש, ואתה חייב להיות יצירתי ולחשוב כמו פורץ שהולך לפרוץ ולהזיק לאפליקציה הנכתבת שבאת להגן עליה.
  • אבטחת מידע במובן הסיסטם – זה בדרך כלל הכוונה של אותם קורסים ובשביל זה צריך שיהיה לך נסיון עשיר כאיש סיסטם, עדיף עם ידע ב-Linux, ולא רק מה שמלמדים כמו תוכי בקורסים של מיקרוסופט! אתה צריך לדעת להכיר דברים כמו 7 השכבות (OSI Model), הכרה עמוקה של 4 שכבות TCP/IP, ניתוב, ראוטרים, סוויצ’ים, BGP ועוד 1001 מושגים ויש צורך בהיכרות רצינית שלא נרכשת בקורס (למרות שיבטיחו לך שכן), נסיון בהקמה של הדברים, הגדרות שלהם במערכות הפעלה שונות, וגם התנסות בדברים. אתה צריך ראש יצירתי (ולא מרובע!) כדי לחשוב איך פורץ הולך לתקוף את המערכת שלך, להכיר את התוכנות שמגינות ובמיוחד את הכלים בקוד פתוח (nmap, snort ועוד רבים אחרים) שמאפשרות לך לסרוק ולמצוא את הדברים ולהבין במה מדובר.

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

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

  1. Linux – קחו גירסת Linux כלשהיא (Fedora, Ubuntu), הקימו בבית מכונה וירטואלית, התקינו את המערכת ולימדו אותה עם דגש על לימוד הפונקציונאליות דרך שורת הפקודה וטרמינל, לאו דווקא דרך הממשק הגרפי. חסרים אנשי Linux טובים בשוק והידע הזה רק יסייע לך.
  2. מתכנתים – כל סטארט-אפ, כל עסק שכותב אפליקציות מחפש מתכנתים טובים, אבל מתכנתים שיודעים להתמודד עם שפות כמו Java, או ++C, או C. כך לדוגמא, שוק פיתוח האפליקציות עבור iPhone/iPad/iPod ומצד שני ה-Android מצריך ידע טוב ב-JAVA (אנדרואיד) וב-C (אייפון/אייפד). מה שהשוק לא כל כך מחפש זה מפתחים בפלטפורמות של מיקרוסופט – יש הצפה של בוגרי קורסים והמשכורות ירדו בהתאם.

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

בהצלחה