» «
אלגוריתם
מהו אלגוריתם?



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

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

אבל רגע, מה הם אלגוריתמים בכלל?

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

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

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

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

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

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

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

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


הנה סרטון שמסביר בצורה פשוטה יחסית מהו אלגוריתם (מתורגם):

http://youtu.be/6hfOvs8pY1k


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

https://youtu.be/MRPpYX8SOA8


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

http://youtu.be/RQo8WoHQIz8


בחיוך מסוים - מסתבר שיש אלגוריתם אפילו לתרמילאים שרוצים לשרוד:

https://youtu.be/PQKOpvypN2Y


ותכנית חינוכית על אלגוריתמים (עברית):

https://youtu.be/nMJ8R9K9EQw?long=yes
מכונת טיורינג
מהי מכונת טיורינג?



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

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


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

http://youtu.be/1uDa7jkIztw


כך פועלת מכונת טיורינג:

http://youtu.be/mU8oiAbom0I


דגם של המכונה שנבנה מלגו:

http://youtu.be/qc1C1Q0xFIM
סיבית
מהם הביטים שבמחשב?



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

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

אגב, השמות של אותם ערכים של 0 ו-1 באים מאנגלית בה קוראים להם bits, קיצור של binary digits. השם הזה הועתק לעברית בתור "ביטים", או למילה העברית שלה - "סיבית", קיצור של סִפְרָה בִּינָרִית.

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

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


#בחנו את עצמכם
איזה מספר עשרוני (רגיל) מיוצג בערך הבינארי של 01000?

וכמה זה 10101 במספר עשרוני?

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


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

https://youtu.be/WYkkkM6vCx0
אינטליגנציה מלאכותית
מהי אינטליגנציה מלאכותית או בינה מלאכותית?



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

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

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

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

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

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


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

https://youtu.be/xcOw84E93MI


על רובוטים ומערכות תיב"ם (תכנון באמצעות מחשב), שמשתמשים בבינה מלאכותית (עברית):

https://youtu.be/g0yEDyEppeM


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

https://youtu.be/-U-lQYwzFAQ


קבלו את iCub שיכול להבחין בדברים שתינוק יכול לדעת:

https://youtu.be/2oJSJa6P_EI


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

https://youtu.be/Rh9vBczqMk0


וסרטון תיעודי על האינטליגנציה המלאכותית:

https://youtu.be/53K1dMyslJg?long=yes

מדעי המחשב

CodeMonkey (משחק תכנות)
מהן סביבות לימוד התכנות לילדים?



יש כמה שיטות לימוד של תכנות לילדים, שמתרכזות ביסודות התכנות, החשיבה הלוגית והבנת העקרונות שבבסיס עולם התכנות. אחת המוצלחות שבהן היא של האתר קודמנקי (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
מגדלי האנוי
מהם מגדלי האנוי?



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

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

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


ישנם כללים להעברה:

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

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


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

http://youtu.be/BMkOBNZHcIs
אלגוריתם
מי המציא את האלגוריתם?
מיהו ממציא האלגוריתם?


כל מי שמתחבר היום לאינטרנט ודאי יתעניין לדעת שחוקר ערבי מהמאה ה-9 הוא שהמציא את אחד הכלים החשובים בעידן המחשבים המודרניים של המאה ה-21.

קראו לו מוחמד אבן מוסא אל-ח'ואריזמי (Muammad ibn Ms al-Khwrizm) והוא היה אחד מגדולי החוקרים במדע המוקדם. אמנם שפת אימו הייתה פרסית אך עבודתו המדעית נכתבה בערבית, שפת המדע בתקופתו. ספריו המתורגמים ללטינית היו מהמשפיעים והחשובים במדע האירופי וספר האלגברה שכתב היה מספרי הלימוד והמחקר החשובים באוניברסיטאות אירופה עד המאה ה-16.

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

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

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

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

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


הנה סיפורו של ממציא האלגוריתם:

https://youtu.be/Ar7CNsJUm58
מבחן טיורינג
מהו מבחן טיורינג?



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

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

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


הנה הסבר פשוט לגבי מבחן טיורינג:

http://youtu.be/YTNasDfDE6U?t=1m8s


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

https://youtu.be/3wLqsRLvV-c


ורובוטים כמו ג'ולס, שיכולים לנהל שיחה, הם העתיד של הבינה המלאכותית:

https://youtu.be/IhVu2hxm07E


הנה סרטון שמספר על מבחן טיורינג ועושה מבחן טיורינג המוני:

http://youtu.be/gfMtkfVkqaA


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

http://youtu.be/1uDa7jkIztw


הסרט הנהדר "אקס מאכינה" מציג בתסריט מרהיב בעיות יסוד בנושא:

https://youtu.be/EoQuVnKhxaM


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

http://youtu.be/KpCJldSYMTQ


פרקטלים טבעיים
איפה יש פרקטלים בטבע?



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

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

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

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

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

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

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


הנה שלל פרקטלים טבעיים:

https://youtu.be/4IRLvYOZD8A


הסבר יפה וכולל את הצורות הספירליות של הפרקטל בטבע:

https://youtu.be/iEnR8zupK0A


פרקטלים בטבע:

https://youtu.be/XwWyTts06tU


ועוד פרקטלים טבעיים:

https://youtu.be/dZM45mfJQ40
מהו משולש סירפינסקי?



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

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


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

http://youtu.be/QsMvoui5WlQ?t=10s


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

https://youtu.be/0C75vRVL5lE


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

http://youtu.be/P5EkdJRtF-4


משולש שרפינסקי מסוכריות של החג הנוצרי המעט מפחיד "ליל כל הקדושים":

http://youtu.be/z8ZWlUamNPI


וסרטון שמראה איך יוצרים פרקטלים כמו משולש סרפינסקי:

http://youtu.be/XwWyTts06tU?t=1m22s
מהי רקורסיה?



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

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

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

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

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

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


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

http://youtu.be/ghZKKaZkzrE


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

http://youtu.be/P5EkdJRtF-4


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

https://youtu.be/B19qH3XFnxY?long=yes
איך לדעת מתי אנו משוחחים עם טכנולוגיה תבונית?



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

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

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

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


הנה הסבר פשוט לגבי מבחן טיורינג:

http://youtu.be/YTNasDfDE6U?t=1m8s


רובוטים כמו ג'ולס, שיכולים לנהל שיחה, הם העתיד של הבינה המלאכותית:

https://youtu.be/IhVu2hxm07E


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

https://youtu.be/3wLqsRLvV-c
מיהו אבי מדעי המחשב?



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

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

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

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

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

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


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

https://youtu.be/ynTAFPukXBk


כתבת טלוויזיה על אלן טיורינג (עברית):

http://youtu.be/oW8EbAkfPcc


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

http://youtu.be/u3Ue7r5Xsyo


קדימון הסרט "משחק החיקוי" על תרומתו של טיורינג לפיצוח קוד האניגמה:

http://youtu.be/j2jRs4EAvWM
מהו תכנות מונחה עצמים?



תכנות מונחה עצמים (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
מהן שפות תכנות?



שפת תכנות (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


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

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

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

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

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

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

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