איך לומדים לבנות תוכנה
-
בתור אדם שחובב טכנולוגיה אני מאוד רוצה להיכנס גם לעולם התיכנות ובניית תוכנות
דא עקא שאני אדם חסר סבלנות ורוצה מיד בניסיון הראשון להצליח וגם לא אוהב ללמוד יותר מידיהשאלה: איפה אני יכול למצוא מדריך מסודר ילמד אותי איזה כלים אני צריך בשביל לכתוב תוכנה (תוכנות לכתיבת קוד, תוכנות לבדיקת קוד, תוכנות לקימפול וכו'), איזה שפת תכנות כדאי לי ללמוד, על איזה סדר גודל של פרוייקט כדאי לי ללכת בתור התחלה וכו'
כל השיטוטים שלי ברשת (נטפרי) לא העלו פריאשמח מאוד אם יש מישהו שיוכל להפנות אותי למקום מסודר שבו ממש מלמדים איך בונים תוכנה (עם השפה אני אסתדר כי ראיתי מדריכים בשפע ברשת) והכי חשוב שיהיה חינמי
אהה עוד משהו חבר אחד המליץ לי להתחיל עם C# ועוד חבר המליץ לי להתחיל עם NODEJS מה עדיף?
-
@יעקב-מ-פינס כתב באיך לומדים לבנות תוכנה:
איזה כלים אני צריך בשביל לכתוב תוכנה (תוכנות לכתיבת קוד, תוכנות לבדיקת קוד, תוכנות לקימפול וכו'), איזה שפת תכנות כדאי לי ללמוד, על איזה סדר גודל של פרוייקט כדאי לי ללכת בתור התחלה וכו'
כל הרשימה הזו היא טפל.
העיקר זה התכנות ולא הכלים/שפות/איך מתחילים.
אך אכן כל מדריך שמלמד לתכנת לבוש על שפה כל שהיא ולעיתים גם עם כלי/טכנלוגיה כל שהיא, אבל זה רק לבוש למושג תכנות, שזה הרגלת הראש לנתינת הוראות לוגיות למחשב ולהשיג עם זה תוצאות רצויות, והיכרות עם "נימוסי" והרגלי התקשורת הזו שזה אותו דבר ב99% אחוז בכלל האפשרויות שעומדות בפני מפתח תוכנה.
אני ממליץ להתחיל מJavaScript לדפדפן.
(JS היא דה פקטו השפה הכי שימושית כיום, וגם אריכטקטורת הפיתוח בצד לקוח כיום היא כה משמעותית שלא נראה לי שיש מישהו שזה יהיה עבורו חומר שמיותר לו להמשך).
זה אומר למצוא מדריך שאומר איך לעשות שלום עולם בHTML+JAVASCRIPT ומכאן לאט לאט להתקדם.
(הכלי שמייד תצטרך זה VSCODE, אבל בשלב זה הוא נושא חסר משמעות לגבי רכישת היכולות תכנות). -
@יעקב-מ-פינס
אפשר להתחיל ללמוד כתיבת תוכנה מהתאוריה איך זה עובד מתחת למכסה מנוע
או פשוט לקרוא מדריך שמסביר איך לפתוח עורך טקסט ולכתוב כמה פקודות ולהפעיל עם תוכנה כל שהיא והנה הקוד רץ.
למתחילים לרוב ממליצים לקחת את המדריך שיביא אותם למשהו שעובד בדרך הכי מהירה, למשל להריץ JS בדפדפן זה קל ולא דורש להתקין הרבה תוכנות בשביל לכתוב "שלום עולם".
לפעמים יש הרגשה מעצבנת שלא מבינים איך זה עובד מתחת למכסה מנוע וזה הרגשה בריאה, כי אלו שלא מנסים לחשוב נשארים רדודים, הבעיה היא שהחומר המעמיק הוא בעיקר באנגלית, אבל אחרי שאתה יודע איך לכתוב תוכנה פשוטה בלי להבין מה קורה באמת יותר קל ללמוד אחר כך את הנושא לעומק.בעבר התחלתי לכתוב ספר על איך מחשבים עובדים וכו' אבל צריך מוטיבציה+זמן
אולי אם תתן פידבק זה יתן לי את המוטיבציה.
הפרק הראשון נמצא כאן וכל אחד יכול להציע הצעות עריכה (אבל דורש קצת ידע בגיט שזה תוכנה לניהול גרסאות בקוד)
https://github.com/ynigun/open-book -
@nigun כתב באיך לומדים לבנות תוכנה:
בעבר התחלתי לכתוב ספר על איך מחשבים עובדים וכו' אבל צריך מוטיבציה+זמן
אולי אם תתן פידבק זה יתן לי את המוטיבציה.
הפרק הראשון נמצא כאן וכל אחד יכול להציע הצעות עריכה (אבל דורש קצת ידע בגיט שזה תוכנה לניהול גרסאות בקוד)
https://github.com/ynigun/open-bookהתחלת שם בצורה יפה מאוד
נהנתי לקרוא ואני רוצה לתת לך את כל הפידבק שבעולם (חבל שאפשר לתת רק לייק אחד)כבר הוספתי לך שם משהו (את הר"ת של RAM) מצאתי את זה די בקלות בויקיפדיה
-
@יעקב-מ-פינס
מצויין.
כל הרעיון של הספר שכל אחד ירגיש בנח לכתוב את מה שהוא יודע גם אם המידע חלקי ושאחר כך יגיע מישהו אחר וישלים את המידע.עכשיו הוספתי עוד קטע קטן על אסמבלי כשאני יודע שהמידע לא מדוייק ובהמשך אני או מישהו אחר יערוך את הקטע וידייק את הנתונים ויערוך אותו לשונית, וכן הלאה.
-
@nigun כתב באיך לומדים לבנות תוכנה:
@יעקב-מ-פינס
אפשר להתחיל ללמוד כתיבת תוכנה מהתאוריה איך זה עובד מתחת למכסה מנוע
או פשוט לקרוא מדריך שמסביר איך לפתוח עורך טקסט ולכתוב כמה פקודות ולהפעיל עם תוכנה כל שהיא והנה הקוד רץ.
למתחילים לרוב ממליצים לקחת את המדריך שיביא אותם למשהו שעובד בדרך הכי מהירה, למשל להריץ JS בדפדפן זה קל ולא דורש להתקין הרבה תוכנות בשביל לכתוב "שלום עולם".
לפעמים יש הרגשה מעצבנת שלא מבינים איך זה עובד מתחת למכסה מנוע וזה הרגשה בריאה, כי אלו שלא מנסים לחשוב נשארים רדודים, הבעיה היא שהחומר המעמיק הוא בעיקר באנגלית, אבל אחרי שאתה יודע איך לכתוב תוכנה פשוטה בלי להבין מה קורה באמת יותר קל ללמוד אחר כך את הנושא לעומק.בעבר התחלתי לכתוב ספר על איך מחשבים עובדים וכו' אבל צריך מוטיבציה+זמן
אולי אם תתן פידבק זה יתן לי את המוטיבציה.
הפרק הראשון נמצא כאן וכל אחד יכול להציע הצעות עריכה (אבל דורש קצת ידע בגיט שזה תוכנה לניהול גרסאות בקוד)
https://github.com/ynigun/open-bookמדהים! תמשיך עוד!!!
-
אני חולק על כל מי שחושב שכדאי להתחיל מjavascript בתור שפת תכנות ראשונה.
השפת תכנות הראשונה צריכה להיות שפה שתתרום לך להכיר את הקונספטים של תכנות הכי טוב, javascript מציעה יותר מדי פי'צרים ייחודיים (המילה this מחליפה תפקיד לפי הקונטקסט, כל הOOP מבוסס על prototype בשונה משפות OOP אחרות, דינאמיות דינאמית מדי).כשלומדים שפה ראשונה, זה אמור להיות הבסיס גם להמשך הדרך, ומי שיתחיל מjavascript ומחר יגידו לו שצריך קוד בשפה מקומפלת כלשהי עם טיפוסיות חזקה, הוא יצטרך להשלים הרבה חומר וזה אחרי שהראש שלו כבר התרגל לצורת עבודה מסוימת, מה שיקשה עליו.
הרשימה שלי של שפות שכדאי להתחיל מהן, לפי סדר קצרות דעתי הקטנה והשפלה בלי עין הרע כן תרבה:
- C#
- TypeScript
- Kotlin
- go
ואלו השפות שקצרות דעתי הרחבה חושבת שאפשר ללמוד אחרי שכבר יש הבנה טובה של אחת מהשפות דלעיל:
- javascript
- python
- ><>
- apl
ויש את השפות שאף אחד לא צריך, אבל תורמות מאוד לידע:
- C
- Pharo
- Haskell
- Assembly
אין להסיק מדבריי כלל את השקפותיי לגבי שפות שלא נכתבו באחת הרשימות כאן.
-
@חגי כתב באיך לומדים לבנות תוכנה:
javascript מציעה יותר מדי פי'צרים ייחודיים (המילה this מחליפה תפקיד לפי הקונטקסט, כל הOOP מבוסס על prototype בשונה משפות OOP אחרות, דינאמיות דינאמית מדי).
אם ככה, למה typescript נמצא שני ברשימה של המועדפים? כל זה קיים גם שם, וגם ב-JS יש מעטפה של קלאסים רגילים על גבי הקלאסים המוזרים, אין הבדל בזה בין JS ל-TS
הפתרון הנפוץ זה ללמוד רק את Javascript: The Good Parts
JS מודרני הוא הרבה פחות גרוע מהישן אם מתעלמים מהשגעונות
ומכיון שכך אני חולק עליך לגבי העדפת הלימוד של TS כשפה ראשונה בניגוד ל-JS
אגב, TS היא "שפה" מאוד מסובכת אם מתעמקים. היא גם בכלל לא שפה
אני ממליץ לאנשים ללמוד TS אחרי שהם חוו את הכאב של חוסר הבדיקות של JS, אחרת הם לא יבינו למה צריך כל הפרוצודורהלגבי #C: יש אנשים רבים שמתחילים ונשארים בעולם הווב כל חייהם, להם נראה לי שיותר כדאי JS מ-#C
כנ" קוטלין וגו (שגם פחות נפוצים ופחות יאפשרו למצוא עבודה)
אני גם לא כל כך בטוח שגו אמור להיות ברשימה זו><>
אני מקווה שזה ברור לאנשים שזה בדיחה
apl
זה אמור להיות בתחתית הרשימה השלישית
יש מקום גדול לדון להוסיף לרשימה השלישית גם LISP -
@חגי כתב באיך לומדים לבנות תוכנה:
לפי סדר קצרות דעתי הקטנה והשפלה בלי עין הרע כן תרבה
לגופם של דברים,
אני בעד שאנשים יתחילו מC#, ההודעה שלי מתאימה לפותח הנושא ולאנשים (והרוב כאלו)
שרוצים למשש מייד בהתחלה את התועלת הפרקטית שבקוד.
בHTML+JS אפשר מייד לכתוב דף שבונה קישור שותפים למוצר באמזון,
אבל בC# חוץ משלום עולם בקונסולה לוקח זמן לעשות דברים אפקטיביים עם ממשק וכולי. -
@חגי כתב באיך לומדים לבנות תוכנה:
כשלומדים שפה ראשונה, זה אמור להיות הבסיס גם להמשך הדרך, ומי שיתחיל מjavascript ומחר יגידו לו שצריך קוד בשפה מקומפלת כלשהי עם טיפוסיות חזקה, הוא יצטרך להשלים הרבה חומר וזה אחרי שהראש שלו כבר התרגל לצורת עבודה מסוימת, מה שיקשה עליו.
אתה יוצא מנקודת הנחה שהשפה הראשונה מקבעת את הבן אדם לתבנית מסויימת.
זה בעיה בכל שפה גם בשפות "טובות" (למשל אתה חושב משום מה שC# היא בראש הרשימה וזה לא בגלל שאתה מכיר את כל החלופות לעומק והגעת למסקנה החכמה שC# הכי טוב).לכן העצה אמורה להיות "אל תתקבע לשפה הראשונה שלך" ואל תלמד רק שפה אחת.
אני מודה שגם אני חוטא בזה כי אני עד היום לא למדתי JS או python (וגם לא מתכנן ללמוד בעתיד הקרוב)
אבל אני חושב שזה יותר גרוע ללמוד JS/C#/python/PHP ולחשוב ששם נגמר העולם, ושאין מספיק ספריות בשפות אחרות, ושמי שכותב בשפות אחרות פשוט מובטל מחוסר ביקוש (שלפעמים זה דווקא הפוך).אני חושב שטוב להתחיל משפה כמו V, כי אין סיכוי למצוא בזה עבודה, אבל זו שפה שעובדת למעט כמה באגים שלא מפריעים למתחילים
והעקרונות שבה קיימים ברוב השפות, ואחרי שבונים "שלום עולם" ועוד כמה דברים חמודים אין ברירה וחייבים לעבור לשפה שאפשר להשתמש בה בעולם האמיתי. -
@nigun
אני לא מכיר את החלופות לעומק (בעצם כל מה שכתבתי מלבד C#), אבל אני מודע אליהן.ואני מסכים עם הטענה שאסור להתקבע לשפה הראשונה, אבל יש קונספטים שחוזרים על עצמם בהרבה שפות, ואם אתה לוקח שפה שמשמיטה משהו חשוב כמו טיפוסיות חזקה, אז כשתתקל בהם אתה תלך לאיבוד, ותאלץ לשבור את הראש או לחלופין להתייאש.
הסיבה שכתבתי את go ברשימה היא בגלל שהיא מספיק יציבה בשביל להיות השפה היחידה של מתכנת (בשילוב עם wasm)
לגבי V, אני חושב שהיא יכולה גם להיות שפה יחידה, יש בה הכל, הסיבה שלא כתבתי אותה בראש הרשימה הראשונה היא בגלל שהשפה עדיין תחת פיתוח ראשוני, וכל minor version שיוצא שובר את הקוד הקודם, אבל זאת השפה הכי מרשימה על הנייר שקיימת (שוב, לפי קוצר דעתי בלה בלה)
נראה לי שמי שיחשף מעט ל-V לא ירצה לעזוב אותה, עד שהוא יגלה שחלק מהפיצ'רים בתיעוד לא קיימים בגלל שהם בפיתוח.
-
@חגי כתב באיך לומדים לבנות תוכנה:
ואני מסכים עם הטענה שאסור להתקבע לשפה הראשונה, אבל יש קונספטים שחוזרים על עצמם בהרבה שפות, ואם אתה לוקח שפה שמשמיטה משהו חשוב כמו טיפוסיות חזקה, אז כשתתקל בהם אתה תלך לאיבוד, ותאלץ לשבור את הראש או לחלופין להתייאש.
אני עברתי מPHP לgo ולא הרגשתי שאני שובר את הראש כל כך על טיפוסיות (אפילו שלא היה תמיכה בגנריות בזמנו)
זה היה נראה לי די סביר שאני צריך להגדיר מראש מה סוג המשתנה מראש.
(נראה לי שדווקא די התלהבתי מכך שזה חוסך לי באגים מעצבנים).
אני דווקא מאבד את הראש כשאני מריח OOP, כי בPHP לא הספקתי להשתמש בOOP.נראה לי שמי שיחשף מעט ל-V לא ירצה לעזוב אותה, עד שהוא יגלה שחלק מהפיצ'רים בתיעוד לא קיימים בגלל שהם בפיתוח.
עד שהוא יגלה שהוא לא יכול לכתוב איתה שום תוכנה משמעותית בעולם האמיתי (לפחות בשנים הקרובות)
ולא יהיה ברירה לעבור לשפה יותר בשלה (אם כי הוא כנראה יתגעגע לפיצ'רים שV מבטיח)הסיבה שכתבתי את go ברשימה היא בגלל שהיא מספיק יציבה בשביל להיות השפה היחידה של מתכנת (בשילוב עם wasm)
זה דווקא חיסרון כי כאמור זה בעייתי להתקבע בשפה אחת.
בפועל לא חושב שתראה הרבה מפתחי פרונט אנד שכותבים wasm עם go, כי מכיוון שזה מגיע ביחד עם הGC זה לא יעיל כל כך ולכן גם לא יהיו פריימרוקים ושאר כלים שיתמכו בgo+wasm
(נראה לי שלzig יש יותר פוטנציאל) -
@nigun כתב באיך לומדים לבנות תוכנה:
עד שהוא יגלה שהוא לא יכול לכתוב איתה שום תוכנה משמעותית בעולם האמיתי (לפחות בשנים הקרובות)
הcore features כבר קיימים, החיסרון הוא שגם בהם יכולים פתאום להחליף לך שמות טיפוסים וכד' (בגירסה האחרונה הם שינו את השם של byte ל-u8, ואת ustring ל-[]rune), אבל מי שבונה לעצמו משהו, זה אמור להספיק לו.
רק הkiiler features של V עדיין WIP, אז זה עוד לא הופך אותה לדבר הכי מדהים שקיים עלי אדמות. -
@nigun כתב באיך לומדים לבנות תוכנה:
אני עברתי מPHP לgo ולא הרגשתי שאני שובר את הראש כל כך על טיפוסיות (אפילו שלא היה תמיכה בגנריות בזמנו)
גם אני מצטרף
@nigun כתב באיך לומדים לבנות תוכנה:
אני דווקא מאבד את הראש כשאני מריח OOP, כי בPHP לא הספקתי להשתמש בOOP.
לא הבנתי, בGO אין בכלל OOP [זה אחד החידושים שלה]
-
@יעקב-מ-פינס קראתי בריפרוף מהיר (אין לי הרבה זמן..)
אבל בתור אחד שלמד ככה, אני חושב שאכן חשוב ללכת בהתחלה על שפה שתנחיל לך את המושגים ודרך החשיבה של מתכנת כדברי @חגי
מצד שני יש צדק במה שכתב @dovid לגבי הענין שלא יהיה לך הרבה מה לעשות במשך הרבה זמן אם תתחיל מהדברים הכבדים...
לכן, אציע את מה שאני עשיתי, התחלתי עם js+html+css (שתי האחרונות לא ממש שפות אני יודע..) ואני מדגיש את השילוב, כי נהנתי והתפתחתי ממשחק בעיצוב ובF12 של אתרים והשילוב בין השלושה נתן לי המון על בניית ואיך עובדים אתרי אינטרנט...
במקביל ממש כתבתי סקריפטים לאוטומציה בpython שזה שפה ממש קלה לדעתי, ומצד שני קצת יותר מעצבנת ודורשת הבנה של ממש במה אתה בדיוק כותב.. וגם יש בה את השימוש המיידי האמיתי יותר מjs, עם שימוש בשלל הספריות אפשר לעשות עולם ומלואו..
אחרי שאתה מרגיש טוב עם 2 אלה, הגיע הזמן שתלמד משהו שבאמת תוכל לכתוב איתו תוכנות "אמיתיות" ולדעתי כדאי שתלך על C#...
(אישית אני נדפקתי עכשיו עם איזה פרויקט בVB.NET ולדעתי לשם אל תלך מרצון אא"כ אתה רוצה להתעסק עם אקסס וVBA... (גם את זה לא כדאי לעשות 🤪))
-
@dovid כתב באיך לומדים לבנות תוכנה:
(הכלי שמייד תצטרך זה VSCODE,
מאוד לא מיד, הקונסולה מצויינת בשביל סקריפטים בודדים באורך של עד מאות שורות – ויקח לו הרבה זמן עד שהוא יתקדם משם. והרי
@dovid כתב באיך לומדים לבנות תוכנה:
ההודעה שלי מתאימה לפותח הנושא ולאנשים (והרוב כאלו)
שרוצים למשש מייד בהתחלה את התועלת הפרקטית שבקוד. -
@אביי כתב באיך לומדים לבנות תוכנה:
וגם יש בה את השימוש המיידי האמיתי יותר מjs
אפשר דוגמא? (א"צ בקוד).