איך לומדים לבנות תוכנה
-
אני חולק על כל מי שחושב שכדאי להתחיל מ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
אפשר דוגמא? (א"צ בקוד).
-
@שלום-עולם-0 כתב באיך לומדים לבנות תוכנה:
@אביי כתב באיך לומדים לבנות תוכנה:
וגם יש בה את השימוש המיידי האמיתי יותר מjs
אפשר דוגמא (א"צ בקוד)?
הוא מתכוון שבפייתון אפשר לעשות מה שרוצים (לעבד את כל התמונות בתיקיה במחשב)
לעומת JS שזה שפה דפדפנית שאין הרבה מה לעשות עם זה בשלב ההתחלה.
יש בזה קצת חוסר דיוק כי JS בהקשר של נוד זהה מבחינת יכולות, אבל בפועל הוא צודק כי בפייתון הדברים האלה הרבה יותר זמינים ומזמינים.סליחה על הבורות.
מיותר.
-
@יעקב-מ-פינס אני הייתי ממליץ דוקא על שפת באטש ושורת הפקודה. מבחינת ניידות אין נוחה ממנה והיא פשוטה מאוד לשימוש.
ובהתאם להצעת החברים כאן, שהעיקר זה ללמוד את הרעיון שמאחורי התכנות בשלב הראשון - ולאו דוקא תכנות שימושי, שורת הפקודה בהחלט מתאימה לזה - ניתן ללמוד ממנה היטב איך עובד תכנות.
בנוסף, ניתן ליצור ממנה דברים ממשיים שמטפלים בקבצים (ולא רק מדפיסים "hello world") כבר בשלב ממש ראשוני -
@NH-LOCAL כתב באיך לומדים לבנות תוכנה:
בנוסף, ניתן ליצור ממנה דברים ממשיים שמטפלים בקבצים (ולא רק מדפיסים "hello world") כבר בשלב ממש ראשוני
אני הייתי מוסיף דיסקליימר שצריך להיות בטוח שיודעים מה עושים אם אתה לא רוצה לדפוק לעצמך את המחשב
-
@משתמש-תמים כתב באיך לומדים לבנות תוכנה:
@NH-LOCAL כתב באיך לומדים לבנות תוכנה:
בנוסף, ניתן ליצור ממנה דברים ממשיים שמטפלים בקבצים (ולא רק מדפיסים "hello world") כבר בשלב ממש ראשוני
אני הייתי מוסיף דיסקליימר שצריך להיות בטוח שיודעים מה עושים אם אתה לא רוצה לדפוק לעצמך את המחשב
אמת. אם כי יש גם צד הפוך, חייבים לדעת קצת מה עושים בשביל להצליח לדפוק לעצמך את המחשב.
כי סתם תקיעת קודים בלי ידע מינימלי לא תעשה כלום לטוב או לרע -
@שלום-עולם-0 אין לך על מה לבקש סליחה, בשביל זה אנחנו כאן
אתן לך דוגמה למשהו שעשיתי לא מזמן, יש אצלנו עמדה של קול הלשון עם תוכנה חמודה של @מנצפך לישיבה על קברו וטעינת רב-קו, הבעיות שהיו לי, א. שפעמים רבות התוכנה הזו נופלת וצריך להפעיל מחדש את המחשב בשביל להפעיל אותה (ובשביל להפעיל מחדש את המחשב צריך ללכת להביא את המפתח של העמדה וכו'). ב. לאחרונה הקול הלשון לא היה נותן לתוכנה של הישיבה על קברו לעלות בעליית המחשב, מה שהצריך להעלות את התוכנה ורק אז את הקול הלשון. ג. הרבה פעמים הדף של ישיבה על קברו היה קופא על השאלות של היום הקודם או סתם נתקע מה שהצריך כיבוי והפעלה של התוכנה.
מה שעשיתי, כתבתי סקריפט פייתון ש...
א. בודק האם היישום של הישיבה על קברו פועל, במידה ולא מפעיל אותו.
ב. במידה והיישום פועל יותר משעה סוגר אותו ומפעיל אותו מחדש.
ג. הוספתי בדיקה באמצעות קריאה למערכת של ימות המשיח שבמידה ו.. המחשב יופעל מחדש, וכך אני יכול להפעיל את המחשב מחדש באמצעות שיחת טלפון פשוטה.קימפלתי את הסקריפט לexe באמצעות pyinstaller והגדרתי שיופעל בכל 10 דק' ושלום על ישראל...
למעשה, זה סקריפט סופר פשוט, לא נצרכתי להרבה ידע בשבילו, לא היה הרבה איפה להסתבך, את הספריות המתאימות מאתרים בחיפוש גוגל "הפעלה מחדש למחשב פייתון" (כמובן שעדיף לכתוב באנגלית או לחילופין לתרגם בגוגל טרנסלייט..) וזה אגב פלוס גדול לפייתון (וגם לjs אבל עכשיו אנחנו בפוסט העידוד לפייתון) שבגלל שהוא מאוד פופולרי יש שפע של מדריכים, הסברים וספריות שזמינים בכל חור..
אני מצרף את הקוד פייתון של זה בבחינת טוב מראה עיניים.. תראה כמה הקוד קריא ופשוט מצד אחד, אבל עוצמתי מבחינת היכולות שלו...
import psutil import subprocess import datetime import requests # Check if the process is already running for process in psutil.process_iter(): if process.name() == "RavKav.exe": # Check if the process has been running for more than an hour if (datetime.datetime.now() - datetime.datetime.fromtimestamp(process.create_time())).total_seconds() > 3600: print("רב קו פועל כבר יותר משעה ברצף. עוצר...") process.kill() # start it. print("מפעיל מחדש...") subprocess.Popen("c:\\intel\RavKav.exe noravkav") break else: print("רב קו כבר פועל. הכל בסדר.") break else: # If the process is not running, start it print("רב קו אינו פועל. מפעיל...") subprocess.Popen("c:\\intel\RavKav.exe noravkav") # ------------------------------- url = 'https://www.call2all.co.il/ym/api/RunTzintuk?token=0799999063:054863&phones=tzl:21' response = requests.get(url) if 'billingPerCall' in response.text: urlresetlist = 'https://www.call2all.co.il/ym/api/TzintukimListManagement?action=resetList&token=079999063:0543&TzintukimList=21' resetlist = requests.get(url) # Restart the computer subprocess.call(['shutdown', '-r', '-t', '0']) else: # Print a message to the log print('Requested text not found in the response.')
-
@משתמש-תמים כתב באיך לומדים לבנות תוכנה:
אם אתה לא רוצה לדפוק לעצמך את המחשב
אגב, אני אוהב להשתמש בגלל זה ב Windows Sandbox (זמין בגרסאות הפרו החל מwin10 גרסה 1809 אולי?) זה מעלה מחשב וירטואלי ממש בקלות תוך כמה שניות שבסגירה הוא מתאפס, ניתן להעתיק ממנו ואליו קבצים כמו שמעתיקים בRDP (העתק הדבק).
הוא חמוד שאם אני יפעיל פקודה שמכבה את המחשב, הוא פשוט ייסגר והוא ממש אחד על אחד. (אני יש לי בשולחן העבודה כבר תיקיה עם מתקין של כרום, ותעודות של נטפרי עם סקריפט להגדרה מהירה)
-
@אביי כתב באיך לומדים לבנות תוכנה:
urlresetlist = 'https://www.call2all.co.il/ym/api/TzintukimListManagement?action=resetList&token=079999063:0543&TzintukimList=21'
הדרכה מצויינת (הלוואי שמישהו היה כותב לי את זה בהתחלה...)
נ.ב. מקווה שלא הכנסת שם משתמש וסיסמא אמיתיים... -
@NH-LOCAL כתב באיך לומדים לבנות תוכנה:
@יעקב-מ-פינס אני הייתי ממליץ דוקא על שפת באטש ושורת הפקודה. מבחינת ניידות אין נוחה ממנה והיא פשוטה מאוד לשימוש.
ובהתאם להצעת החברים כאן, שהעיקר זה ללמוד את הרעיון שמאחורי התכנות בשלב הראשון - ולאו דוקא תכנות שימושי, שורת הפקודה בהחלט מתאימה לזה - ניתן ללמוד ממנה היטב איך עובד תכנות.רק לשם הפרוטוקול אני מתנגד להצעה זו
אני יכול להביא נימוקים אם מישהו דוקא רוצה