איך לומדים לבנות תוכנה
-
@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 כתב באיך לומדים לבנות תוכנה:
@יעקב-מ-פינס אני הייתי ממליץ דוקא על שפת באטש ושורת הפקודה. מבחינת ניידות אין נוחה ממנה והיא פשוטה מאוד לשימוש.
ובהתאם להצעת החברים כאן, שהעיקר זה ללמוד את הרעיון שמאחורי התכנות בשלב הראשון - ולאו דוקא תכנות שימושי, שורת הפקודה בהחלט מתאימה לזה - ניתן ללמוד ממנה היטב איך עובד תכנות.רק לשם הפרוטוקול אני מתנגד להצעה זו
אני יכול להביא נימוקים אם מישהו דוקא רוצה -
@NH-LOCAL חיכיתי שתשאל
אלך לפי סדר דבריך:מבחינת ניידות אין נוחה ממנה
יש לי טענה הפוכה, שורת הפקודה שונה לגמרי בין ווינדוס ללינוקס, משא"כ שפות תכנות בד"כ זהות בכל הפלטפורמות, אפשר לשאת איתך פייתון על דיסק און קי
והיא פשוטה מאוד לשימוש
תסביר לי אם ככה למה יותר קל לי לכתוב 500 שורות JS מ-10 שורות CMD?
שורת הפקודה בהחלט מתאימה לזה - ניתן ללמוד ממנה היטב איך עובד תכנות
ממש ממש לא. שפות שורת הפקודה נועדו בעיקר כדי לשרשר פקודות בצורה נוחה
זה לא אמור להיות שפת "תכנות" אלא שפת "תפירה"... דהיינו צורה שימושית לתפור ביחד פקודותגם את החלקים של תכנות שיש שם באיזשהו צורה (פונקציות, משתנים, לולאות, מערכים, בקרת זרימה וכו) זה בצורה שונה מאוד והרבה יותר מסורבל משפות תכנות. מי שלומד לולאה בבאש, זה לא יעזור לו כמעט כלום בלולאות בשפות תכנות נורמליות
כדי לכתוב עם שפת shell (איזה שיהיה, bash, batch, powershell) צריך ללמוד מושגים שלא נצרכים כלל עבור תכנות. למשל: מה זה משתני סביבה, קוד יציאה של פקודה, קלט ופלט ושרשורם ב-pipe, שכל זה לא קשור בשום צורה לתכנות טהור
מצד שני יש הרבה מושגים בתכנות שכמעט ולא נפגשים בהם או שלא נפגשים בהם כלל בשורת הפקודה, או שעובדים בצורה שונה מאוד ממה שמקובל (סוגי משתנים שונים, מבני נתונים, קלאסים וכל הנושא של OOP, ועוד)
ניתן ליצור ממנה דברים ממשיים שמטפלים בקבצים (ולא רק מדפיסים "hello world") כבר בשלב ממש ראשוני
כן, אבל הוא לא מסוגל לשום דבר מעבר לזה כמעט, אתה יכול לתפור ביחד פקודות, אבל איפה שאין פקודה מתאימה וצריך להסתדר לבד לכתוב לוגיקה מסויימת, אתה נשאר עם שפה מסכנה מסורבלת ומכוערת
ויש הרבה דברים שפשוט בלתי אפשריים בשורת פקודה גם אם תעבוד קשה מאוד. ליצור ממשק גמיש ומותאם אישית ועוד הרבה דברים בלי שיעור. תעשה שרת אינטרנט בשורת הפקודה.
מי שרוצה לכתוב תוכנה אמיתית יתקשה מאוד להסתדר עם שורת הפקודה -
@NH-LOCAL כל עוד אתה לא מכיר שפת תכנות טוב חוץ מBTACH, אז ביחס למה אתה אומר שהיא טובה?
יוסי כתב דברים קשים על השפה הזו, אבל זה כשמגיעים להשוואה. כשלעצמה זה השפה הכי טובה....
אגב, בקשר לניידות למשל יש עוד שפות שאתה לא מכיר, למשל windows script.
ויש כל שפה שיש לה מקפל נח לEXE. -
@yossiz אין ספק שאתה צודק. CMD לא נוחה במיוחד לתוכנות גדולות ומורכבות.
אבל...
הנושא פה הוא תכנות ראשוני ובסיסי, לא בניית תוכנות מורכבות.
תסביר לי אם ככה למה יותר קל לי לכתוב 500 שורות JS מ-10 שורות CMD?
לי דוקא הרבה יותר קל הפוך...
יש לי טענה הפוכה, שורת הפקודה שונה לגמרי בין ווינדוס ללינוקס, משא"כ שפות תכנות בד"כ זהות בכל הפלטפורמות, אפשר לשאת איתך פייתון על דיסק און קי
שוב: זה רלוונטי למי שיוצר תוכנה של ממש, שם הניידות משחקת תפקיד. אבל בשביל ליצור דברים קטנים, בהתחשב בעובדה שרובינו משתמשים בווינדוס, ההתאמה לכל מערכת לא ממש משנה
@dovid אני בהחלט מכיר שפות נוספות, ולא באתי להשוות בין CMD לפייתון או JS למשל. בסוף - בסך הכל באתי לתת המלצה בהתאם לנושא שעליו נסוב השרשור:
איך לומדים לבנות תוכנה
-
@NH-LOCAL
אם תקרא את הפוסט לעומק תראה ששאלתי הייתה מה צריך בשביל לבנות את הכלים מסביב @dovid ענה לי ובצדק שלא צריך לדעת מה הם הכלים אלא קודם צריך ללמוד שפה ולקחתי את המלצתו ללמוד html+css+javascript (היה קשה לכתוב את זה בלי ההשלמות של vs code) ולענ"ד התקדמתי ממש מהר וכבר יש לי תוצאות בשטח שכל הזמן משתפרות
וגם ההבנה של איך התכנות עובד מגיעה יחד עם זה (למשל היום נפלה במוחי ההבנה שכל עמוד בתוכנה בעצם הוא קוד נפרד - אני צודק?)
אני רוצה להודות ל @dovid שלא הביא אותי ליאוש ולא אמר לי שבשביל ללמוד לבנות תוכנה צריך. וצריך. וצריך. וצריך. אלא אמר לי שלא צריך כלום אולי רק vscode ופשוט לתפוס שפה אחת ללמוד אותה לעומק להבין איך היא עובדת ואז משם הדרך קלה להמשיך הלאה לרמה יותר גבוהה וגם לבניית תוכנה ש(אולי)תביא כסף