האינטרנט אוכל את העולם. תוכנה מקיפה כל היבט בחיים שלנו ונכנסת לכל תעשיה אפשרית. אפשר לומר שמדובר במהפכה הגדולה ביותר מאז המהפכה התעשייתית. ולכן אין מה להתפלא, כשמסתכלים על רשימת חמש החברות הגדולות בעולם – כולן חברות טכנולוגיה. מה שאומר (… את מה שכולם יודעים) שהמון כסף נמצא היום בתחום הטכנולוגי, ולכן שיעור גדול מהתעשיה ומהרווחים של המדינות הכי עשירות בעולם נובע מייצור טכנולוגיה. ולכן… כולם רוצים ללמוד פיתוח תוכנה.
במאמר הזה ננסה לסקור שיטה מהירה ללמוד פיתוח תוכנה על ידי בחירה בתחום מסוים של תוכנה – פיתוח ווב – ועל ידי דרך ספציפית ללמוד פיתוח של אתרי אינטרנט: שכפול אתרים קיימים. ראשית נסביר למה, ואז נציג 6 אתרים שמומלץ לשכפל – ולמה לשים לב כשמשכפלים כל אחד מהם.
איך ללמוד פיתוח ווב בלי לשכפל אתרים
כדי להיכנס לעולם הפיתוח יש, לרוב, שלוש אלטרנטיבות:
- תואר במדעי המחשב יאפשר לנו לגעת בכל אספקט של שימוש במערכות מחשב, ובכך נכיר גם את התפעול שלהן – תכנות – בכל מיני צורות שלו. למשל, כנראה שמי שיעשה תואר יתעסק לפחות בשפה אחת שמייצגת יישומים בעזרת אובייקטים – מה שנקרא OOP – Object Oriented Programming, ובמקביל כנראה שהוא ייגע בצורות של ייצוג נתונים בבסיסי מידע, ובמקביל… בעוד המון תחומים אחרים. זו השיטה הכי מקיפה להיכנס לתחום, ולכן רוב המתכנתים יעידו שהיא לא רלוונטית להם בעבודה היום-יומית שלהם. זו שיטה מאוד יקרה וארוכה, והיא שואבת את האדם לפחות ל-3 שנים מלאות למידה בנושאים מתמטיים ולוגיים מורכבים, אבל היא כמעט בוודאות תבטיח למועמד שסיים אותה עבודה בתכנות בסיום המסלול.
- קורס פיתוח תוכנה כזה או אחר יאפשר לנו לגעת באספקט ספציפי של פיתוח. למשל, יש קורסים שמאפשרים ללמוד פיתוח וורדפרס. הם מלמדים את אבני הבניין של וורדפרס בלבד: שפות קידוד בפרונט-אנד, כמו HTML\CSS, שפות פיתוח כמו Javascript, שפת פיתוח בצד-שרת בשם PHP ואת המבנה הכללי של קבצי וורדפרס – ערכות עיצוב, תוספים וקבצי הליבה. דוגמה אחרת יכולה להיות קורס פיתוח Full Stack שלרוב יכלול סט כלים המכונה MERN: על שם Mongo DB – בסיס נתונים נפוץ, Express – תוכנה המאפשרת להריץ שרתי אינטרנט (סוג מסוים של שרתים), React – שפה המשמשת לפיתוח צד הלקוח, ו-Node – שפה המשמשת לפיתוח צד שרת (ובעזרתה גם נכתבה Express, למשל). השיטה הזו מצומצמת בצורה משמעותית בהשוואה לתואר במדעי המחשב, ולכן האפשרויות שעומדות בפני הבוגר של המסלול הזה הינן מצומצמות יותר. גם הידע הכללי שלו ורמת היכולת שלו להתמודד עם מורכבות של תוכנה, הינן קטנות יותר.
- לימוד יחידני יאפשר לנו להחליט איך אנחנו רוצים ללמוד. אפשר להתעמק בכל נושא שאנחנו רוצים, לשלוט בלו”ז הלמידה, לקחת קורסים בהיקף שעות ענק או מצומצם – הכל בשליטתנו. למה לא כולם עושים את זה? כי המסלולים המבניים שאנשים עוברים בסעיפים 1 ו-2 נותנים להם סדר ומצמצמים להם את הבחירה. והדבר שהכי מעצבן אנשים, זה לבחור. רובנו רוצים שיחליטו בשבילנו. הלימוד היחידני דורש מאמץ גדול, לא כולל שום ליווי, לא כולל שום חיווי. למידה היא חוויה מאוד לא נעימה. היא כוללת המון כשלונות, ואנחנו צריכים “מנחה”, איזה שהוא גורם מנוסה שינחם אותנו ויפקח שאנחנו לומדים כמו שצריך.
אפשר לומר שרוב מי שהתחיל לתכנת בשנות ה-90 והאלפיים עבר בצורה כזו או אחרת לימוד יחידני בימי נעוריו. לפני שזה היה להיט, היה מאוד קשה ומבאס לתכנת, ורק יחידי סגולה הצליחו לעשות את זה. ברגע שהם הגיעו כבר ללימודי מדעי המחשב או ליחידות צבאיות כאלו ואחרות, הם כבר ידעו לתכנת ברמה כזו או אחרת. לימוד יחידני, מכל השיטות האחרות, מאפשר משהו שאין בהן: הוא מאוד חופשי, והחופש הזה מאפשר לאנשים לצבור מומחיות מאוד גדולה במגוון תחומים במהירות מאוד גבוהה. מהצד השני, כמו שנאמר לעיל, הוא חופשי מדי ולא ממוקד. לכן אני מציע להתחיל ללמוד פיתוח אתרים על ידי שכפול אתרים אחרים.
למה בכל זאת ללמוד פיתוח אתרים על ידי שכפול שלהם
כל אתרי האינטרנט – כולל האתר הזה – מחויבים כברירת מחדל לחשוף את כל הקוד (המבנה הפנימי של תוכנה מסוימת) לכל גולש. זו הדרך היחידה בה הם יפעלו. מי שלומד פיתוח אתרים, למעשה “חשוף” למגוון השראות ברחבי הרשת כולה. כל מה שאתם רואים בכל אתר אינטרנט יכול להיות מיושם בדיוק באותה הצורה בכל אתר אינטרנט אחר, ומאוד מורכב להסתיר את סט הכלים בו השתמשתם לבניית אתר מסוים.
במקביל, בניית אתר אינטרנט יכולה לחשוף אתכם להמון תחומים. למשל, אתר אינטרנט יכול להיות בנוי כאפליקציה אחת, בצד השרת או בצד הלקוח. הוא גם יכול להיות בנוי בצורה של מיקרוסרביסים – תוכנות קטנות שפועלות בצורה “מתוזמרת” – עם תוכנה אחרת שמנצחת על הנגינה. הוא יכול להציג מידע שהוזן על ידי לקוח בצורה מאובטחת, ולכלול בתוכו אלפי שיקולי אבטחה – מה שיחשוף את הלומד לתחום הנקרא “סייבר”. הוא יכול להציג מידע שנמצא ברחבי האינטרנט, ונסרק באופן אוטומטי על ידי תוכנות אחרות, ואפילו לכלול מידע שמיוצר על ידי מכונה בטכנולוגיות של בינה מלאכותית כאלו ואחרות.
כמובן, שמי שבנה אתר, הוא לא בהכרח מידע מומחה לבינה מלאכותית. כנ”ל לגבי סייבר. כל אחד מהתחומים האלו הוא עולם ומלואו. התחום של פיתוח ווב רק נותן נגיעה בכל אחד מהתחומים האלו.
שכפול אתרי אינטרנט יאפשר לנו יאפשר לנו לעשות את מה שאתרי ענק עושים. אתרי ענק, עם אתגרים ענקיים. השכפול שלהם יחייב אותנו להתחיל ולהתמודד עם האתגרים האלו. ההתמודדות הזו תאפשר לנו לצבור ניסיון, שלב אחרי שלב, באופן ממוקד ופרקטי.
איזה אתרים כדאי לשכפל כדי ללמוד פיתוח?
בגדול – את כולם. אבל מכיוון שחייבים לבחור, בחרתי 6 אתרים שיתנו לכם אתגרים שונים, ופירטתי על כל אתר קריטריונים כאלו ואחרים שכדאי לשים אליהם לב. אלו אתרים מסוגים שונים וכל אחד מהם מאפשר “אתגר” אחר. כל אחד מהאתרים האלו יכול להיבנות מספר פעמים: פעם כדי להתעמק בצד-שרת, פעם כדי להתעמק באבטחה, פעם כדי להתעמק בפיתוח צד לקוח. כל אחד מהם יכול להיבנות כמה פעמים, בכל פעם עם framework אחר.
חשוב להדגיש: האתרים יצטרכו להיבנות לצרכי לימוד, ולא לצרכים מסחריים, וכן לא להיות מפורסמים בשום מקום כתוצר שיצרתם בעצמכם ללא גילוי נאות ובהיקף רחב. מומלץ גם לשנות קצת כל אתר, ולהשתמש בתמונות ובסרטים המופצים באינטרנט בחינם. גם אם הקוד של אתרי האינטרנט חשוף, העיצוב עצמו הינו יצירה המוגנת בזכויות יוצרים של החברה או של היוצר, ויש לכל יוצר זכות לתבוע כל אדם על שימוש לא-חוקי ביצירה שלו.
Apple.com
האתר של חברת אפל, אפשר לומר די בביטחון, הוא סטנדרט עיצובי. מדובר באתר ייצוגי יחסית פשוט שהשכפול שלנו ילמד אותנו עימוד בסיסי, ועיצוב בעזרת CSS. בסיום שכפול האתר נדע לבנות אתר אינטרנט בעזרת HTML, CSS ו-Javascript – אבני הבניין הבסיסיות ביותר של תחום הנקרא “פרונט-אנד” – פיתוח בצד הלקוח.
Walla.co.il
פיתוח האתר הזה יאפשר לנו ללמוד עיצוב מורכב קצת יותר, אבל כאן גם אפשר להוסיף אתגר נוסף: אזור ניהול תוכן. כדי לנהל אתר חדשות כמו וואלה, נצטרך מערכת נוחה ויעילה לניהול פריטי החדשות המפורסמים באתר, והצגה שלהם (ושל חלקם בצורה בולטת יותר) בדף הראשי של האתר.
מלבד המבנה הבסיסי ב-HTML, CSS ו-Javascript שנתרגל גם כאן, נוכל במקרה הזה לבנות אזור ניהול תוכן המשתמש בצד שרת ובבסיס נתונים, כך שהתוכן הדינמי ייכנס לתוך תבנית שנייצר.
מעבר לכך, אפשר להרחיב את פיתוח האתר עם מערכת נפרדת לניהול פרסומות באתר. אתרי חדשות כמו וואלה מתפרנסים בעיקר ממכירת פרסומות. גביית התשלום בעבור שירותי הפרסום של האתר יבוצעו בעבור חבילת צפיות כזאת או אחרת, וכל “טעינה” של פרסומת תחייב את הלקוח בתשלום מסוים. לצורך בניית מערכת כזאת, אנחנו צריכים:
- מערכת להעלאת פרסומות – בדומה למערכת ניהול התוכן שהייתה לנו קודם
- מערכת “אנליטיקס” – המשמשת לספירת כמות הצפיות בפרסומת מסוימת
- מערכת לטעינת פרסומות בצורה מהירה מאוד
התרגול הזה צפוי לקחת יותר זמן אך התוצר שלו הרבה יותר מקיף מהפרויקט הקודם. ניתן גם להשתמש במערכות קיימות ולהרוויח על הדרך שיטות פיתוח – למשל, ניתן ללמוד בשיטה זו פיתוח וורדפרס.
Amazon
שכפול של אמזון יאפשר לכם לבנות אתר אינטרנט מסחרי ברמה הכי גבוהה שיש, כולל סינונים כאלו ואחרים של תוכן, מנועי חיפוש מתקדמים, גלריות מוצר מתקדמות, דפי עגלה ותשלום. תטפלו – סוף-סוף – בהעברת כסף באינטרנט מאדם בודד לעסק. כל אחד מהרכיבים האלו הוא עולם ומלואו, ויאפשר לכם גישה לעשרות שיקולים שצריך לחשוב עליהם.
Netflix
הגיע הזמן להתקדם לשלב הבא. אתר נטפליקס יחייב אותנו לבנות אזור הרשמת משתמשים, שהרי התוכן בו חשוף רק למי שנרשם ושילם. בכך, נכיר מודלים שונים של Authentication – זיהוי משתמשים וחסימת הגישה למי שאינו משתמש באתר.
מעבר לזה, פיתוח אתר דומה לנטפליקס יחייב אותנו להגיש וידאו – סוג קבצים כבד יחסית – בצורה מהירה. נצטרך ללמוד על הגשת משאבים בצורה מהירה דרך CDN, פורמטים שונים של תמונות וכו’.
מלבד יצירת משתמש, שלמדנו בפרויקט הקודם, שכפול רשת חברתית יחוייב אותנו לתת את הדעת על היבט נוסף של ניהול מידע ברשת: תוכן שמיוצר על ידי משתמשים. איך מפקחים על התוכן הזה? איך מנקים אותו מזבל?
מעבר לזה, גם כאן ניתן לשלב פיתוח מערכות מעניינות מאוד כמו:
- המלצות תוכן מבוססות בינה-מלאכותית, שמקבצות באופן אוטומטי תכנים מסוימים וחוזות עניין של משתמש מסוים בתוכן. כך נבנה מה שמכונה “פיד”.
- מערכות פרסום מותאמות אישית ללקוחות.
- מערכות סינון תכנים שמסננות טקסטים ו\או תמונות
AirBnB
כסוג של שילוב בין כל הפרויקטים הקודמים, AirBnB יתן לנו אתגר של יצירת מרקטפלייס – שוק קונים ומוכרים, המנהל היבטים שונים של מכירה וקניה שהמשתמשים שלנו מבצעים ביניהם. מעבר לזה, נוכל לתרגל כאן שימוש בספריית מפות כזאת או אחרת, ולהכיר (בקטנה ממש) תחום שנקרא GIS – מערכות מידע גיאוגרפיות.
איך ניגשים לאתגר של שכפול אתר בלי לדעת לתכנת בכלל?
אכן – יש לנו בעיה של ביצה ותרנגולת. אם אני לא יודע לבנות אתרים, איך אוכל להתחיל ולשכפל אותם. הנה כמה טיפים למי שמעוניין להתחיל ולהתעמק באתגר הזה:
- כל פרויקט שכפול יכול להיות מלווה בקורס, כזה או אחר. הבעיה בקורסים בלימוד מרחוק היא שהם בדרך כלל משמימים ומנותקים מהעולם האמיתי. העובדה שיש לכם פרויקט תרגול תתן לכם מוטיבציה להתקדם בקורס עצמו, וכל התקדמות תיוצג בתוך התוצר שלכם.
- לימוד פיתוח הוא אחד הדברים הלא-מתגמלים שיש. אפשר לומר את זה על כל למידה: בהתחלה זה קשה מאוד, על גבול הבלתי-אפשרי, ואז לאט-לאט, ממש לאט מדי, זה הופך להיות קל יותר ויותר. תקיפו את עצמכם בסביבה לומדת. תפרסמו את ההתקדמות שלכם ברבים.
- תארגנו כל פרויקט בצורה מסודרת. למשל, שימו את כל הפרויקטים בתיקיה מסוימת במחשב. יכול להיות שתרצו שהתיקיה הזו תכלול סביבת הרצה לשפות תוכנה מסוימות – למשל שרת PHP מקומי. יכול להיות שתרצו ללמוד להשתמש במערכת ניהול גרסאות ובה לנהל את הפרויקטים שלכם – ובכך גם תוכלו לשתף את ההתקדמות שלכם בפרויקטים.
כאמור, זו רק שיטה אחת. היא לא מחליפה שיטות אחרות – למען האמת, אני כותב עליה כאן רק כי לא ראיתי עליה מספיק חומר בעברית. מקווה שהמאמר מסייע למי שמעוניין להיכנס לתחום, למי שמעוניין להשתפר בתחום, ואפילו אולי למי שכבר נמצא בתוכו. בהצלחה!