» «
תכנות
למה כדאי ללמוד תכנות?



תכנות (Programming) הוא כתיבת קוד לתוכנה, או למה שאנו מכנים "תוכנות". בתכנות בונה המתכנת את התוכנה. לתכנות משתמש המתכנת בשפות תוכנה שונות.

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

לימוד התכנות משפר את החשיבה, היצירתיות, יכולת התכנון, הגילוי והסקרנות של המתכנת ולומד התכנות. יש יתרון אדיר לכל ילד וילדה שלומדים לתכנת וליצור באמצעות הטכנולוגיה והמחשבים. אבל הראשון שבהם אינו קשור אפילו במחשבים, אלא בכלי החשיבה, התכנון, הלוגיקה והסקת המסקנות (ואלה רק חלק), שהתכנות מלמד.

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

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


הנה מה שבתי הספר, וזה חמור - לא מלמדים ילדים:

https://youtu.be/nKIu9yen5nc


הסברים לטוב שבתכנות (בעברית):

https://youtu.be/hyCqL_lLDOQ
לולאה
מה ניתן לעשות עם לולאה בתכנות?



"לופ" (Loop), בעברית לולאה, היא קטע קוד שנרצה שיתבצע שוב ושוב, מספר מוגדר של פעמים.

בתכנות מחשבים נדע לעתים כמה פעמים נרצה שהוא יתבצע ואז נשתמש בלולאה שנקראת for. בפעמים אחרות נרצה שהתכנית תבצע משהו פעמים רבות, אבל לא נקבע מראש כמה פעמים, אלא נרצה שהיא תתבצע כל עוד או עד שתנאי מסוים יתקיים.

דוגמאות מהחיים? - אוקיי, נניח שהמורה לספורט מבטיח לכם שמספר סיבובי ריצה יעלו לכם את הציון ושעל כל סיבוב ריצה תקבלו 5 נקודות נוספות לציון. אתם אנשים מחושבים ולכן תרצו לרוץ עד 20 סיבובים. הרי ברור לכם שאין טעם להתאמץ אם כבר יש לכם ציון של 100. לולאת for תאפשר את זה בקלות.


#לולאת for
כלומר, לולאת for היא לולאה שתתבצע מספר פעמים מוגדר מראש. בשפות שונות הם יוצגו אחרת, אבל בעיקרון יש לה 3 מרכיבים המנוסחים בעזרת משתנה: ערך התחלה, תנאי הסיום וצעדי ההתקדמות של המשתנה.


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


#לולאת while
לולאה זו מתנהלת כל עוד התנאי (ביטוי לוגי של Boolean expression) שבסוגריים מתקיים. נבחר בה במקרים שבהם איננו יודעים מראש כמה פעמים הלולאה תרוץ, אך יש לנו תנאי שכל עוד הוא מתקיים נרצה שהיא תרוץ. כלומר, כל עוד הביטוי הלוגי, שהוא התנאי בעצם, הוא true - הבלוק של הלופ, התכנית שלו, יתבצע. ברגע שהוא יהפוך ל-False אז היא לא תתקיים ויהיה דילוג מעליה.

יש גם לולאת do while, שהיא סוג נוסף של לולאה. היא מבצעת את מה שיש בה כמו while. אך בניגוד ל-while היא בודקת רק בפעם הראשונה את התנאי, כלומר do while בודקת בכל סיבוב מחדש האם התנאי מתקיים.

לעתים, אגב, נרצה לבדוק אם תנאי מסוים מתקיים ואם כן או לא, לפי הקוד, להפסיק את הלולאה. פקודת break בשפות התכנות השונות נועדה להפסיק כך את הלופ.


הנה סרטון שמסביר את עניין הלולאות ומדגים בשפת Java:

https://youtu.be/Xolqu4Nxni8


הלולאה לתלמידי תכנות שפת פייתון:

https://youtu.be/yBCNY__d4ic


והסבר לולאות ב-Javascript:

https://youtu.be/PaPMOL12V3g
ארגומנטים
מהם פרמטרים וארגומנטים בקוד התוכנה?



נהוג לומר שהשם הנרדף של "ארגומנטים" הוא "משתנים" או גם "פרמטרים".

אז באמת מתכנתים מבלבלים לא פעם בין פרמטרים וארגומנטים וזה בסדר, כי ההבדל ביניהם הוא בעיקרו סמנטי, עניין של הגדרה ולא של מהות שיכולה לפגוע בעבודה.

אבל בכל זאת... כשאנו מגדירים פונקציה, נרצה להגדיר לה את הנתונים שהיא תצפה לקבל בעת קריאה וזימון שלה.


#דוגמה
למשל כאן, ניתן לראות ש-x הוא פרמטר, בעוד ש-y הוא ארגומנט.

int f(struct S *x);
return f(&y);


#אז בהגדרה אלה יהיו פרמטרים.
כלומר, פרמטרים (משתנים) מתקבלים על ידי הפונקציה כשמגדירים אותה. כל ארגומנט מופיע בצורה של סוג (type) ואז שם. כך יהיו למשל ארגומנטים מסוג int שבהם יופיעו מספרים שלמים, מסוג double שיהיה בו מספר עשרוני, או String עם מחרוזת טקסט.


#בקריאה לפונקציה אלה ארגומנטים
כשאנו מריצים פונקציה, היא מבצעת פעולה מסוימת. אלא שלא תמיד נרצה שהיא תעשה בדיוק את אותה פעולה בדיוק, או עם אותם נתונים. כך למשל, אם נרצה להשתמש בפונקציה כמו printInBold, כדי להדגיש מחרוזת טקסט בכתב Bold, נרצה לספק בכל פעם מחרוזת טקסט אחרת. זה בדיוק מה שהארגומנט (Argument) מאפשר לנו. כשנקרא לפונקציה, נכניס באמצעותו משתנה לתוך הסוגריים שלה וכך היא תבצע את הפעולה על המשתנה הזה.

כמובן שלא רק מחרוזות יכולות להיכנס כארגומנטים. לארגומנטים ניתן להכניס גם משתנים, ספרות וכדומה.

ארגומנטים, אם כן, הם פרמטרים שפונקציה מצפה לקבל דה פקטו. באמצעות הקוד שתוכנת בה לביצוע היא תייצר את ה-return שלה ממנו, או תדפיס אותו בפקודת print לטרמינל.


#לכן תיאורטית...
ה"פרמטרים" שההגדרנו בפונקציה עצמה, אלה "פרמטרים פורמליים" (Formal Parameters). לעומתם, ה"פרמטרים" שנשלחים לפונקציה הקיימת, נקראים "פרמטרים אקטואליים" (Actual Parameters) והם הארגומנטים.


#ומעשית...
המונח "פרמטרים" יכול לשמש למעשה בכדי לתאר, גם את ה"פרמטרים" וגם את ה"ארגומנטים".


הנה ארגומנטים בפייתון:

https://youtu.be/tQ7it_vlptA


ופרמטרים וארגומנטים בשפת Javascript:

https://youtu.be/G4lZSWssoqA
מחלקה (תכנות)
מהי מחלקה בתכנות מונחה עצמים?



לכתיבת תוכנות בתכנות מונחה עצמים, אבני בניין עיקריות ומשמעותיות במיוחד הן ה-Classes, בעברית "מחלקות". מדובר בתבניות המתארות סוג של יישות בקוד ומשמשות לעבודה יעילה איתה.

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

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

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

המחלקה היא, אם כן, התבנית שממנה בנויים האובייקטים השונים. היחס שבין מחלקה לאובייקטים שלה הוא כמו היחס שבין שרטוט של בית לבתים שנבנים ממנו.

#אפשר להגדיר מחלקה של "מכונית"

יש בהגדרת המחלקה את התכונות, הפרופרטיז של האובייקט (למשל הדגם, המידה, הצבע), אבל בלי הערכים הספציפיים (פג'ו, אקסטרה לארג', כחול).

יש במחלקה גם את השיטות של האובייקט, כמו נסיעה, בלימה וכו'.

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


#המחלקה כבלופרינט
מחלקה (Class) בשפת תכנות מונחית עצמים היא סוג של בלופרינט (Blueprint), משהו בין תכנית אב לאבטיפוס בעולם האמיתי.

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

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


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

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

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


#תיאורטית...
הקלאס הוא מרכיב המאחסן משתנים ופונקציות. בקלאסז נשתמש לאחסן את הדאטה ואת הפונקציונליות שרלוונטית לדאטה הזו, כלומר המרכיבים הלוגיים שלה.

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

כדי לבדל ביניהם לבין משתנים ופונקציות רגילים, נוהגים לקרוא למשתנה של מחלקה "תכונה" (Property) ולפונקציה של מחלקה קוראים "שיטה" (Method).


#דוגמה
אם מחלקה או class היא blueprint, תכנית לאובייקט חדש, אז בואו נגדיר מחלקה של "מטוס נוסעים".

אובייקט שנוצר ממנו הוא ההתממשות הספציפית של רעיון "מטוס הנוסעים". מטוס בואינג דרימליינר, בצבע לבן, עם מנוע סילון מדגם 234 הוא אובייקט.


הנה סרטון שמסביר את הגדרת המחלקות והשימוש בהן בשפת Java:

https://youtu.be/L5XI50A1az4


למדו על המחלקה בתכנות בשפת פייתון:

https://youtu.be/ZZCnfRmxq6s


והסבר על הגדרת מחלקות ב-Javascript, ביחד עם עוד דברים:

https://youtu.be/Q0IFtEB1RH4

תכנות

פונקציה
מהי פונקציה בתכנות?



פונקציה (Function) בתכנות היא חלק פשוט אבל משמעותי וחשוב, המקל את הקידוד ואת הארגון הנכון של תכנית מחשב.

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

נסביר את זה רגע בדימוי מהחיים: דמיינו שאתם בפסטיבל עם המון אנשים ואיבדתם חברה או חלילה את הבת שלכם. אתם ניגשים לבמה ומבקשים להכריז שאתם כאן וממתינים לה. אומרים לכם לדבר עם שמעון, הכרוז של הפסטיבל. הוא בחור נחמד וענייני ומבקש מכם מידע, דאטה. במילים פשוטות - הוא שואל: "איך קוראים לה?" כשאתם נותנים את השם, שמעון ממהר להכריז במיקרופון
ושמעונה (ככה קוראים לה ואין קשר משפחתי לשמעון) מגיעה לבמה.

סוף טוב הכל טוב!

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

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

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

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

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

#קודד פעם אחת, השתמש הרבה פעמים!

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

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

בשפות שונות, כמו dart למשל, הסוגריים יהיו שם בפונקציה, גם אם אין דאטה שנדרש לה כדי לבצע את תפקידה.

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


הנה סרטון שמסביר את הפונקציה ומדגים בשפת Java:

https://youtu.be/eSgJ4O1Q7ks


הפונקציה לתלמידי תכנות שפת פייתון:

https://youtu.be/o0wyYsNbJeY


והסבר הפונקציות ב-javascript:

https://youtu.be/c7mqY6QtdQQ
משתנה
מהם משתנים בתכנות מחשבים?



משתנה (Variable) בתכנות הוא מרכיב מרכזי בתוכנית מחשב, שמהווה בעצם זיכרון. הוא מעין תא תכנותי, קופסת איחסון (Place holder). הנתונים שנשמור במשתנה יכולים להיות כאלה שאנו מייצרים במהלך התכנית, או כאלה שקיבלנו מהמשתמש.

המשתנה מכיל נתון, שיכול להשתנות בזמן הריצה של התכנית - על פי הפקודות הניתנות לו. בכך הוא שונה מהקבוע (const או final), בו נשאר הערך שנקבע בתחילת ההרצה של התכנית ועד סופה ללא שינוי.

משתנים הם ללא ספק אבני הבניין של שפות תכנות.

המשתנה משמש בתכנית כדי לזכור, לאחסן ולשמור על נתונים להמשך התכנית. זהו מעין לוקר תכנותי, שנוכל לתת לו שם, בהתאם לנתונים שהוא יאחסן. שם המשתנה הוא כמו התווית שעל הקופסה שהוא ובפעם הראשונה שנגדיר את המשתנה יופיע לפניו סימון שמדובר במשתנה (משהו כמו var, כקיצור של variable).

הנתונים שיאוחסנו במשתנה יכולים להיות מוגבלים לסוג מסוים. סוג המשתנה אומר מה יש או יכול להיות בו (מספרים שלמים, עשרוניים, מחרוזות תווים וכו').

למשל מחרוזות טקסט (שיוגדרו כ-String), מספרים שלמים (int), מספרים עשרוניים (double או float) ועוד. את הסוג של הנתונים, ניתן לקבוע כשמגדירים משתנה, כמו שהגדרנו var למשתנה כללי המקבל כל סוג של נתון.


#מה קורה כשמחליפים נתונים?
היות וניתן להחליף את ערכי המשתנה במהלך התכנית, הערך החדש יחליף את הקודם והמשתנה יקבל אותו מרגע השינוי. הערך הקודם, אם היה ספק, יישכח ולא יהיה משהו שיזכיר אותו. כך עובדת תכנית מחשב.

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

את שם המשתנה קובע המתכנת. השם הזה הוא ייחודי ואין שני משתנים עם אותו השם. אם נטעה וננסה לתת שוב שם שכבר נתנו - נקבל שגיאה.


הנה סרטון שמסביר את המשתנה ומדגים בשפת Java:

https://youtu.be/hesehP9tY68


המשתנים לתלמידי תכנות שפת פייתון:

https://youtu.be/FadkQtKw2Dc


והסבר משתנים ב-Javascript:

https://youtu.be/F6hLRLho0Lc
ניפוי שגיאות באמצעות ברווז גומי
איך מנפים שגיאות באמצעות ברווז גומי?



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

אחת השיטות היותר משעשעות לאיתור באגים בקוד תוכנה היא "ניפוי השגיאות באמצעות ברווז גומי" (Rubber Duck Debugging). מדובר בשיטה משעשעת אך אמיתית לחלוטין לניפוי שגיאות קוד, שבעזרתה מתכנתים מוצאים באגים בתוכנת מחשב או במוצרי חומרה שמתוכנתים לפעול בדרך מסוימת. זאת כדי לתקנם ולגרום להם לפעול היטב.

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

מקור השם של השיטה הוא בסיפור שהוצג בספר "המתכנת המעשי" (The Pragmatic Programmer). בסיפור תואר מתכנת שמצליח לנפות שגיאות קוד שלו, בכך שהוא מכריח את עצמו להסביר את הקוד שלו לברווז הגומי הסתמי שלו.

השיטה נקראת גם "מבחן ברווז הגומי" או "בִּירווּז", על משקל תכנות. היא יעילה ותורמת גם לתיעוד יעיל של התוכנה או המכשיר, לצורך כתיבת חוברת למשתמש או להוראתה. בדיקת שגיאות תוך היעזרות בברווז גומי מקבילה לבדיקה של הקוד על ידי עמיתים (שיטה שנקראת "Code Review") ולשיטה שבה מסביר המתכנת את הקוד למתכנת עמית (Software Walkthrough).


הנה סרטון על הבירווז - ניפוי השגיאות בעזרת ברווז גומי:

https://youtu.be/SJC5DAfCrHY


סיפור הניפוי של השגיאות באמצעות ברווז הגומי:

https://youtu.be/huOPVqztPdc


כך מנפים את השגיאות בעזרת ברווז גומי:

https://youtu.be/m4_depGYVkM
ביצת פסחא (מחשבים)
מה למתכנתים ולביצי פסחא?



ביצי פסחא (Easter eggs) הן ביצים מעוטרות בצביעה, שהנוצרים נוהגים להחביא בחג הפסחא והילדים מחפשים, משהו שמזכיר את האפיקומן היהודי של פסח.

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

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

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

נסו דוגמה לאיסטר אג בגוגל תרגום:
הדביקו בגוגל טרנסלייט את הרצף הבא:
pv zk pv pv zk pv zk kz zk pv pv pv zk pv zk zk pzk pzk pvzkpkzvpvzk kkkkkk bsch
ואז בחרו תרגום מגרמנית לגרמנית ולחצו על אייקון הרמקול הקטן שישמיע את התוצאה.


הנה ביצי הפסחא הגדולות של משחקי המחשב:

https://youtu.be/sirz0TnTje4


אלן טיורינג
מיהו ממציא המחשב המודרני אלן טיורינג?



המדען הבריטי אלן טיורינג, מי שנחשב אבי מדעי המחשב, תכנן בשנת 1936 את "פותרת המשוואות". זו הייתה מכונה בעלת יכולת לפתור משוואות ובעיות חשבוניות מסובכות, מכונה שמסוגלת לבצע כל פעולת חישוב אפשרית. הוא הצליח לבנות מעין מכונת כתיבה, שעל קלידיה מסומנים קיצורים של פעולות חשבוניות.

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


הנה סרטון על אלן טיורינג:

http://youtu.be/oW8EbAkfPcc


הנה הרצאה שמראה כיצד תרם המדען אלן טיורינג למדעי המחשב:

http://youtu.be/088kCjk1EvI?t=1m


הנה המחשב הראשון שפיתח טיורינג:

http://youtu.be/36Ykw1l_KWs


וקדימון לסרט על אלן טיורינג:

https://youtu.be/xqW9PKxooUo
מהן שפות תכנות?



שפת תכנות (Programming language) היא שפה המובנת למחשב. קוד שנכתב בשפת התכנות הוא בעצם תוכנה, או חלק מתוכנה. כלומר קוד כזה הוא סדרה של פקודות שגורמות למחשב לבצע פעולות שונות ומגוונות.

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

שפת תכנות היא הכלי שמאפשר לבני אדם, לרוב בעלי מקצוע הידועים כ"מתכנתים", לתקשר עם מחשבים ולתת להם הוראות.

השפה הזו מאפשרת את קיומו של תִּכְנוּת המחשבים, אחד המקצועות המרכזיים של עידן המחשב.

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

בחירת שפת התכנות המתאימה על ידי המתכנתת תהיה על פי אופי הפרויקט, תכונות השפה והתאמתה למקום עבודה והתמחותו.

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

כיום, בעידן האינטרנט, יש שפות תכנות שמתמחות בצד השרת (אותו מחשב משוכלל שנמצא ב"ענן" ומבצע פעולות שיישלחו בדרך כלל לדפדפן שלנו) ואחרות מתמחות בצד המשתמש, הקליינט, כלומר שפועלות על ובמחשב שלנו.

שפת התכנות Javacript למשל, היא שפה שמתמחה בצד המשתמש, קליינט סייד. פייתון (Python), בניגוד לה, היא שפה המשמשת בעיקר לצד השרת, סרוור סייד.

רק להמחשה של העניין - שתיהן מהשפות הכי פופולריות ומוצלחות. הראשונה היא אולי השפה הכי נפוצה בימינו והשניה Python, היא אולי השפה הכי קלה ללימוד של מתחילים ועדיין היא שפה מעולה לפיתוחי צד שרת ולתעשיית הסייבר. Python (קורס מלא ומתורגם לעברית בסרטון האחרון) היא גם השפה העיקרית של עולם הלמידה העמוקה (Deep Learning) - העתיד של הבינה המלאכותית, שהולך ומשנה את עולם האינטרנט כיום.


הכוח והיופי שבתכנות (מתורגם):

https://youtu.be/crw_U-UgvcY


על המצאת שפת התכנות:

https://youtu.be/Wchru8alhaE


מתכנת מסביר על שפות תוכנה שונות (עברית):

https://youtu.be/7Baq_Xw4azM


שפות התכנות הפופולריות ב-50 שנה האחרונות ועד היום:

https://youtu.be/Og847HVwRSI


וקורס מלא לשפת פייתון הפופולרית, קלה ומצליחה מאוד (מתורגם):

https://youtu.be/rfscVS0vtbw?long=yes
מהו תכנות מונחה עצמים?



תכנות מונחה עצמים (Object Oriented Programming) הוא תחום במדעי המחשב בו המתכנתים מבצעים פעולות באמצעות עצמים ממוחשבים, אובייקטים.

יתרונו הגדול של הקונספט הזה הוא בכך שאנו מתכנתים בו אובייקטים ומגדירים ביניהם פעולות ובכך מארגנים ומפשטים את הקוד ועושים את העבודה איתו קלה ויעילה מאוד.

ממש כמו העולם והיצורים שבו, האובייקטים בתכנות OOP מתייחסים ומתקשרים אחד עם השני. כל אובייקט מתאר מהו ומה הוא יכול לעשות.

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

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

היתרון הוא שבאופן כזה ניתן לשלוף ולזהות מידע בקלות, כל אימת שנרצה ולנהל אותו היטב.


#בשיטת ה-Object Oriented Programming כל דבר הוא אובייקט.

בתכנות מונחה עצמים מגדירים מחלקות, כשלאחר ההגדרה של מחלקה אפשר לייצר מופעים שלה, שנקראים אובייקטים (Objects).

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

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

אם תכנות מונחה עצמים מתמקד בפיתוח של עצמים וביצירת פעולות ביניהם, אז כדאי שנגדיר כמה דברים:

עצם (Object) הוא מעין קפסולת קוד שבתוכה אנו מכניסים שילוב של מידע ופעולות. לרוב זו תהיה מחלקה (Class).

המידע ייקרא באובייקטים "תכונות" (attributes). התכונות שיוצגו הן רק אלה שרלוונטיות לפיתוח או לאפליקציה המסוימת שעליה אנו עובדים.

הפעולות באובייקט ייקראו "שיטות" או מתודות (methods). השיטות מתארות את מה שאובייקט מסוגל לעשות.

ההודעות (Messages) הן מה שמניע את הפעולות. כי השיטות הן בגדר פוטנציאל ובלי הודעה לא תופעל שום שיטה.


#לדוגמה:
ניתן לראות אובייקט כמו String, בעברית מחרוזת, כשילוב של מידע, שהוא תוכן התווים שמהווה את המחרוזת. יוגדרו גם הפעולות שניתן יהיה לעשות על המחרוזת, כמו הדפסה, חיתוך לרשימה, הפיכה לאותיות גדולות באנגלית וכדומה.

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

#לסיכום
בתכנות מבוסס עצמים יש תבניות שמתארות סוג של יישות, כמו בחיים כשיש לנו ישויות כמו מכונית, בן אדם וכדומה. התבניות הללו נקראות "מחלקות" (Class). ה-Class היא הגדרה אחת המאפשרת תחתיה ריכוז של מאפיינים (שהם בעצם משתנים) ומתודות (שהן פונקציות או פעולות שניתן לעשות בהם).

עוד על המחלקה בתגית "מחלקות".


הנה הסבר התכנות מונחה העצמים (עברית):

https://youtu.be/l6M3qp5Ykus


ההבדל בין תכנות פרוצדורלי של פעם לתכנות מונחה עצמים (מתורגם):

https://youtu.be/OEfSFrk_KEI


4 עמודי התכנות מונחה העצמים:

https://youtu.be/pTB0EiLXUC8


ויסודות התכנות מונחה העצמים עם הדגמות בשפת פייתון (עברית):

https://youtu.be/odRYxQLGb2U?long=yes
מהו באג במחשבים?



באג הוא השם לתקלה במחשב או בתוכנה. הכל התחיל באחד מראשוני המחשבים בעולם - מחשב "הרווארד סימן 2". כשהתגלה במחשב סוג של עש (באנגלית BUG), מעין חרק שנתקע במחשב וגרם לתקלה הוחלט לקרוא לו "באג".

העש הוסר מהמחשב והודבק לדף ההתקלות 9 בשנת 1947. בעקבות אותו באג ראשון נהוג להתייחס לתקלות במחשב ובתוכנה כבאגים ומכאן המושג "באג". יש הטוענים שהמושג הומצא כבר במאה ה-19 אבל יש על כך ויכוחים רבים וספקות רבים.


הנה הבאגים במחשבים, דרך באג המחשבים הראשון:

http://youtu.be/NUnEoouyvGY
איך עובד המתכנת?



מתכנתים יודעים לכתוב קוד תוכנה שמפעיל את המחשב ומבצע משימות. הם עושים. זאת באמצעות שפת תכנות שהם יודעים.

כל תוכנה יודעת לעשות דברים. קוד התכנה שכותבים המתכנתים מכיל את ההוראות הדרושות כדי שהמחשב יבצע את הדברים הללו.

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


הנה מתכנתים בחברות סטרטאפ שעובדים ביחד (עברית):

http://youtu.be/iAyfMSmxKoQ


זה פירושו של קוד תוכנה:

http://youtu.be/cKhVupvyhKk


כאן ההבדל בין תיכנות כמו שמציגים אותו בסרטים ובסדרות טלוויזיה ובין המציאות:

https://youtu.be/HluANRwPyNo


לינוס טורוולדס, מי שפיתח את מערכת ההפעלה לינוקס, מספר על התחלת לימוד התיכנות שלו:

https://youtu.be/S5S9LIT-hdc


וכמה חשוב הוא קוד תוכנה:

http://youtu.be/QdVFvsCWXrA
מי הייתה המתכנת הראשון בהיסטוריה?


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

כן, הסיפור מתחיל הרבה לפני שנולד המחשב הראשון. עדה לאבלייס (Ada Lovelace) האנגליה, או אדה לאבלייס, הייתה מתכנתת מחשבים מבלי שראתה מעודה מחשב. למעשה, כתבה "קוסמת המספרים" שהיא הייתה, את תוכנית המחשב הראשונה בהיסטוריה.

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

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

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

בהיותה נערה, מורתה הפגישה אותם עם החוקר צ'ארלס באבג' (Babbage), מי שהיה פרופסור למתמטיקה וממציא. האיש פיתח כמה מכונות חישוב ועבודתו בתחום מכונות החישוב נחשבת למשפיעה מאד על התכנון של המחשבים המודרניים.

על המנוע האנליטי, אחת המכונות הללו שתכנן באבג', יצרה לאבלייס המסוקרנת, למרות גילה הצעיר, אלגוריתם שנועד לחשב מספרי ברנולי. האלגוריתם הזה נחשב לאלגוריתם הראשון, שפותח בכוונה לפעול על ידי מכונה. זה היה, כאמור, 100 שנה לפני המצאת המחשב האלקטרוני.

המדהים הוא שעל אף שבאבג’ לא הצליח להשלים את בניית המנוע האנליטי מעולם, עדה הבינה שהמכונה הזו היא סוג של מחשב. וזה עוד לפני שאחרים הבינו מהו מחשב.

בחזונה של לאבלייס, כשהמחשב הזה יפותח, הוא לא רק יחשב חישובים מתמטיים, אלא גם ילחין מוסיקה ויצייר. כבר אז היא כתבה שהמכונה של באבג' דומה לנול האריגה שהמציא ז'וזף מארי ז'קאר (Jacquard). הערכתה הייתה שכמו שהנול של ז'קרד יכול לארוג דוגמאות של עלים ופרחים, יארוג המנוע האנליטי של באבג' דגמים מתמטיים מרהיבים. כמה שהיא צדקה!

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

משום כך רבים רואים בה את מתכנתת המחשבים הראשונה בעולם. ואגב, את כל זה היא עשתה עד גיל 36, בו הלכה עדה לעולמה ממחלת הסרטן.

בשנת 1979, באקט לא שובניסטי של פרגון גברי, קראו על שמה בפנטגון האמריקאי את שפת התכנות ADA, שפת מחשב המשמשת בעיקר תוכנות ומערכות הפעלה צבאיות.


הנה סיפורה של עדה לאבלייס (עברית):

https://youtu.be/td_5svpezpY?t=3m18s&end=5m32s


תולדות חייה:

https://youtu.be/U5VIiykV0LQ


עדה הציעה את מה שנקרא היום מבחן לאבלייס לבינה מלאכותית (מתורגם):

https://youtu.be/Rh9vBczqMk0
מהי רקורסיה?



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

הגדרה אחרת לרקורסיה היא "הגדרת בעיה במונחים של עצמה".

רוצים דוגמה:
"אם הבנת מהי רקורסיה, חזור אל הדף ממנו הגעת. אם לא – קרא בדף זה מהי רקורסיה".

הדוגמה הזו מסבירה בדיוק את הרקורסיה, כי תנאי העצירה הוא "אם הבנת.." ואם לא אז חוזרים לאותה דוגמה כדי ללמוד מהי רקורסיה מחדש ולבסוף מבינים שהרקורסיה היא מה שאתה מתבקש לעשות..

גם מתכנתים משתמשים ברקורסיה והם מתארים פונקציה רקורסיבית כ"פונקציה שקוראת לעצמה". נכון היה יותר לומר שפונקציה כזו קוראת לעותק של עצמה. לרוב נותנים לרקורסיה כזו את הדוגמה של חישוב n-עצרת במתמטיקה (=מכפלת 1 כפול 2 כפול 3… עד כפול n).

ואגב, הנה משפט משעשע ונכון: "כדי להגדיר רקורסיה, קודם-כל צריך להגדיר רקורסיה.."


הנה סרטון שמדגים איך רקורסיה עובדת כשעושים בעזרתה גרפיקה ממוחשבת:

http://youtu.be/ghZKKaZkzrE


כניסה פנימה לפרקטל - צורה גרפית שנקראת "משולש סירפינסקי" שנבנתה בפונקציה רקורסיבית:

http://youtu.be/P5EkdJRtF-4


והסבר למתכנתים (עברית):

https://youtu.be/B19qH3XFnxY?long=yes
מהי השיטה הבינארית?



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

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

הסיבה לשימוש בשיטה הבינארית במערכות אלקטרוניות היא שקל להשתמש בו באלקטרוניקה. הרי בבסיסה של מערכת אלקטרונית כזו קיימות מראש שתי רמות מתח - או אם נגדיר זאת בפשטות: ישנם שני מצבים לכל ביט - או שהוא דולק או שהוא כבוי. לכן כבוי ייחשב ל-0 ודולק ייחשב ל-1.

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


הנה השיטה הבינארית (מתורגם):

https://youtu.be/wgbV6DLVezo


סרטון על הדרך להמרה של מספר עשרוני לבסיס הבינארי (עברית):

http://youtu.be/2pr8mkRZIfg


היום כבר מנסים להתקדם ממנה לשיטת החישוב הבאה (עברית):

https://youtu.be/tWBEaaTuz3A


ותכנית לימודית על הבסיס הבינארי (עברית):

https://youtu.be/aKZYHUmYG_M?long=yes
מה תרמה תוכנת הייפרקארד לעולם?



כשיצא מחשב המקינטוש, בשנות ה-80, הוכנסה לחבילת התוכנה המצורפת לו בין השאר תוכנה חביבה אחת, חינמית ולא ידועה, שכמעט ושינתה את העולם. קראו לה "הייפרקארד" (Hypercard) והיא הייתה תוכנה לבניית תוכנות מידע, לומדות לחינוך והדרכה ובסיסי נתונים שימושיים. היא הייתה מהפכה בהרגלי התכנות ומה שמפתיע שכמעט ולא השתמשו בה ילדים, קהל היעד העיקרי בשנים אלה לשפות תכנות מסוגה. מי שעשו בה שימוש הם דווקא מבוגרים ואנשי מקצוע משלל מקצועות ותחומי עיסוק.

הייפרקארד הציעה סביבה נוחה לפיתוח תוכנה באמצעות אובייקטים. הדימוי היה של כרטיסים, קארדס, כשכל מסך הוא כרטיס. אם רצית לבנות מערכת מידע של תקופות היסטוריות, יכולת לקבוע רקע (BackGround) אחיד, בעוד שהכרטיסים השתנו בו - כל תקופה והכרטיס שלה. אם אובייקט מוקם ברקע, הוא הופיע אוטומטית ותפקד בכל הכרטיסים. אובייקטים שמוקמו בכרטיס מסוים - הופיעו ופעלו רק בו. כל תוכנה של הייפרקארד נקראה "Stack", חבילה או אוסף של כרטיסים. בחבילה כזו יכולים היו להיות כמה רקעים שרציתם ובכל רקע יכולים המפתחים להציב כמה כרטיסים שירצו.

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

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

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

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

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


הנה תוכנת הייפרקארד:

https://youtu.be/tx_WCIAM4bA


Stack שפותח בהייפרקארד ומאפשר לשוטט בבית ולחפש אלמנטים:

https://youtu.be/f2ft1uovxaQ


אפילו את תוכנת ההקלטה של הייפרקרד כתבו בהייפרקרד:

https://youtu.be/nkBb-ZqyU18


ביל אטקינסון מסביר שהייפרקארד הייתה בעצם האמא של דפדפן האינטרנט:

https://youtu.be/roT9DhDPI9k


סרט תיעודי על הייפרקארד והמהפכה שעשתה:

https://youtu.be/BeMRoYDc2z8?long=yes


וסרט ארוך על תוכנת הייפרכארד:

https://youtu.be/v9o5Ld8hpug?long=yes


מהי גרפיקת הצב של שפת התכנות לוגו?


שפת לוגו (LOGO) הייתה שפת תכנות שפיתח צוות בראשות סימור פפרט, במכון המדיה לאב, לצרכי הוראה לילדים. היא הייתה "שפת תכנות חינוכית".

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

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

מה שמיוחד כאן הוא שפפרט ואנשיו, מפתחי שפת לוגו וכולם מדעני מחשב מהמכון הטכנולוגי של מסצ'וסטס (MIT) , הצליחו לאפשר לילדים ללמוד תכנות פרוצדורלי. אבל הם לומדים בלוגו גם על חשיבה, בזמן שהם מתכנתים. בעת שהתלמיד מלמד את הצב לייצר צורות ולבצע פעולות גרפיות מורכבות, הוא מפתח את החשיבה שלו ואת יכולת התכנון, יכולת לפרק פעולה מורכבת לשורת פעולות פשוטות שמרכיבות אותה, להציב מטרות ארוכות טווח ואפילו לדחות סיפוקים.

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

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


הנה שפת התכנות הלימודית לוגו:

https://youtu.be/g6kmVHfMQvY


ילדי שנות השמונים "פוקדים" על הצב בתכנית בשפת לוגו:

https://youtu.be/dDc3Uhl0qXw


כך כותבים תכניות פשוטות בשפת לוגו (עברית):

https://youtu.be/uzvFNDO2lPA


והנה הרצאה על אמנות שיוצרים עם קוד, שיטת יצירה שהמרצה התאהב בה בעזרת שפת לוגו בשנות ה-80:

https://youtu.be/6avJHaC3C2U?long=yes
מהו רספברי פיי המחשב האישי הזול בעולם?



אם היינו אומרים לכם שיש מחשב שעולה בסביבות 100 שקלים בלבד למחשב חדש, הייתם מאמינים?

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

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

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


הנה מחשב הרספברי פיי:

http://youtu.be/e0wkVVVLvR8


כך החליטו לייצר מחשב שיאפשר לפתח בילדים סקרנות למחשוב:

http://youtu.be/XBRkErt6VXU


מחשב להרכבה לילדים שמתבסס על רספברי (מתורגם):

http://youtu.be/n5VVNmVqF6Y


הנה מחשב זעיר למשחקי מחשב שפותח בעזרת הפיי:

http://youtu.be/5npkz0xY1fo
איזה מחשב נוצר להרכבה?



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

בנוסף למחשב Raspberry Pi יש בחבילה של מחשב קאנו גם מארז פלסטי שקוף שאליו הוא מוכנס, מדבקות לעיצוב אישי של המחשב, חיבור WiFi שמתחבר ליציאת USB, כבלי חיבור למסך מחשב, רמקול להרכבה ומקלדת חדישה ואיכותית, עם משטח מגע כמו של מחשב נייד.

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


הנה מחשב ה-Kano לילדים (הפעילו תרגום):

http://youtu.be/n5VVNmVqF6Y


הנה הרכבת מחשב ה-Kano:

http://youtu.be/iNc6NRX2JG4


הנה אב שמעיד על השימוש במחשב הקאנו עם ילדיו:

http://youtu.be/C0-IbSEBNGU
מהן סביבות לימוד התכנות לילדים?



יש כמה שיטות לימוד של תכנות לילדים, שמתרכזות ביסודות התכנות, החשיבה הלוגית והבנת העקרונות שבבסיס עולם התכנות. אחת המוצלחות שבהן היא של האתר קודמנקי (CodeMonkey) שבו משמש משחק חווייתי ואפשר לומר אפילו ממכר, כדי לגרום לתלמידים ללמוד תיכנות ולהתמיד בו לאורך זמן. זהו פיתוח ישראלי שמחייב מהלומד כתיבה של קוד אמיתי בשפת סקריפט (שתעבור לאחר מכן הידור, קומפילציה, לג'אווה סקריפט) שנקראת שם "CoffeeScript". בשפה זו צריכים הלומדים להקפיד על תחביר, חשיבה לוגית, הבנה של יסודות התכנות והדיוק שנדרש בתכנות המתקדם.

גם האתרים סקראץ' (Scratch) וטינקר (Tynker) מציעים סביבות תכנות לילדים והם אף קלים יותר. בהם מלמדים חשיבה תכנותית על ידי פיתוח משחקים. סביבות התכנות הללו מבוססות על אובייקטים תכנותיים, מעין חלקים של פאזל, או קוביות משחק שמהן הילד בונה את התכנית. בקוביות המשחק של התכנות בהן, יש גם משתנים, הוראות ונתונים. ה"שפות" הללו קלות ללמידה ומשום כך הן מתאימות גם לגיל הרך.

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

ממש כמו בשפת הלוגו ההיסטורית, גם כאן נכתב הקוד באנגלית בסיסית, עם הוראות דוגמת turn to, step, right, left. ניתן לכתוב מהמקלדת או לבחור מילים מהמקרא שבתחתית המסך. כך התלמיד לומד לעבוד בסביבת פיתוח שמזכירה את הסביבות של המבוגרים ועדיין מקבל סיוע, שדומים לו יש למען האמת גם בסביבות פיתוח בעולם האמיתי.


האתר קוד מונקי המיועד לגיל בית ספר יסודי, מכיתה ג' ומעלה:

https://youtu.be/fXcPjdNKJdY


ומדריך ילד שמלמד:

https://youtu.be/PZFqt3KCRdk


הנה סביבת לימוד התכנות עם האובייקטים סקרץ' (Scratch) שמתאימה גם לגיל הרך:

https://youtu.be/CCaBCMADwls


וסביבת הלימוד Tynker המתחרה בה ושולטת גם בחומרה ובשפת Java Script:

https://youtu.be/XIC9tY-zkXE
מהו אלגוריתם?


אֵאוּרִיקַה - האנציקלופדיה של הסקרנות!

העולם הוא צבעוני ומופלא, אאוריקה כאן בשביל שתגלו אותו...

אלפי נושאים, תמונות וסרטונים, מפתיעים, מסקרנים וממוקדים.

ניתן לנווט בין הפריטים במגע, בעכבר, בגלגלת, או במקשי המקלדת

בואו לגלות, לחקור, ולקבל השראה!

אֵאוּרִיקַה - האנציקלופדיה של הסקרנות!

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