» «
אלגוריתם
מהם אלגוריתמים ואיך כל אחד משתמש באלגוריתם?



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

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

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

אלגוריתם (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
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
סיבית
מהם הביטים שבמחשב?



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

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

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

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

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


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

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

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


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

https://youtu.be/WYkkkM6vCx0


וכך הביטים או הסיביות באים לידי ביטוי בטרנזיסטור (מתורגם):

https://youtu.be/IcrBqCFLHIY

מדעי המחשב

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



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

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

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

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

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

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


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

https://youtu.be/ynTAFPukXBk


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

http://youtu.be/oW8EbAkfPcc


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

http://youtu.be/u3Ue7r5Xsyo


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

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



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

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

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

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

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

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


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

https://youtu.be/hE74j-nD-q8


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

https://youtu.be/xcOw84E93MI


כך ה-AI ישנה ומשנה את העולם (מתורגם):

https://youtu.be/RzkD_rTEBYs


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

https://youtu.be/g0yEDyEppeM


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

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


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

https://youtu.be/2oJSJa6P_EI


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

https://youtu.be/Rh9vBczqMk0


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

https://youtu.be/ajGgd9Ld-Wc?long=yes


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

https://youtu.be/53K1dMyslJg?long=yes
Hello World
מה הרעיון ב"Hello World"?



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

ב-"Hello World" משתמשים בהדגמות ראשוניות ללימוד שפות תכנות שונות. עבור לומדים רבים התכנית הזו היא בעצם ניסיון התכנות הראשון שלהם בשפת התכנות שהם לומדים.

כמובן שניתן לכתוב כתכנית ראשונה בלימוד תכנות כל ביטוי אחר, אבל כתיבת הביטוי "hello world" הפכה כבר מזמן למסורת בלימודי תכנות.

מסורת התכנית הראשונה עם הודעת בדיקה של "Hello World" נולדה כתןצאה מחיקוי של תכנית דוגמה, שהופיעה לראשונה בספרם של בריאן קרניגהאן ודניס ריצ'י "The C Programming Language".

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


הנה תוכנית "hello world" בשפת פייתון (עברית):

https://youtu.be/rmmRRg_IcgA


ובשפת סי שארפ C#(עברית):

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



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

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

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

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

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


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

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

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

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

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


#עקרונות
הפשטה של הנתונים (Data Abstraction) - המתכנת מתרכז במאפיינים הרלוונטיים של העצם.

כימוס (Encapsulation)- הסתרה של פרטי המימוש מהמשתמש בעצם.

מודולריות (Modularity) - מפרידים עצמים ליחידות נושא.

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

טיפוסיות חזקה (Strong Typing) - מניעה של בלבול או ערבוב בין טיפוסי עצמים שונים זה מזה.


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

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

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


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

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

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

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

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


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

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


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

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


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

https://youtu.be/l6M3qp5Ykus


הסבר לילדים:

https://youtu.be/X3cFiJnxUBY


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

https://youtu.be/OEfSFrk_KEI


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

https://youtu.be/pTB0EiLXUC8


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

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


שפת מכונה
מהי שפת מכונה, השפה הבינארית שהמחשב מבין?



שפת מכונה (Machine language) איננה שפה שמישהו מתכנת בה. שפת מכונה היא שפת המחשבים, כלומר שפה שבה "מדבר", או יותר נכון רואה המחשב.

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

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

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

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

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

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

את ההמרה משפת התוכנה המסוימת לשפת המכונה עושה תוכנת הקומפיילר (compiler), בעברית מהדר, הנכללת בשפות התוכנה השונות. תפקידו הכללי של הקומפיילר הוא להמיר קוד תוכנה משפה לשפה.

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


הנה שפת המכונה וכיצד אנו מתקשרים איתה דרך שפות תכנות עיליות:

https://youtu.be/GbBI7LSijnM


על האישה שפיתחה את שפת התכנות הראשונה, שפת Cobol:

https://youtu.be/Wchru8alhaE


וסוגי שפות המחשב השונים, משפת המכונה והשפות הבסיסיות שהמחשב מבין (Assembly language), אל השפות העיליות, המאפשרות למתכנתים בדרך לכתוב קוד:

https://youtu.be/aYjGXzktatA
מה זה תיכנות?



אם שאלתם את עצמכם פעם מה זה תִּכְנוּת (Programming או Coding) הרי שאתם לא לבד.

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

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

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

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

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

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

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


להיכרות עם עולם התיכנות היכנסו לתגית "תכנות".


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

https://youtu.be/tSysNQFUf2g


בעולם הפיתוח יש לא מעט שמבחינים בין מתכנת programmer למקודד coder:

https://youtu.be/CIRGjwYgdT4


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

https://youtu.be/dU1xS07N-FA?long=yes


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

https://youtu.be/MWuPuu2c1Y8?long=yes
מהי בעיית הסוכן הנוסע והאם קיים אלגוריתם לפתרונה?



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

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

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

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


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

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

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

דרכים אחרות? - בטח לא דרך ידנית.

רק שנבין כמה הבעיה מורכבת - פתרון בניסוי וטעייה הוא בלתי אפשרי כאן, כי אם יש לנו 10 נקודות בלבד, יש לה !N אפשרויות, N עצרת!, כלומר נצטרך להשוות
את המרחקים בלא פחות מ-3,628,800 אפשרויות או מסלולים אפשריים.

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


#תולדות הבעיה
במאה ה-19 היו ראשונים שניסחו את בעיית הסוכן הנוסע, שבראשי תיבות מכונה TSP, המתמטיקאים ויליאם המילטון מאירלנד והמתמטיקאי הבריטי תומאס קירקמן (Thomas Kirkman).

ב-1857 המילטון אף פיתח את "משחק איקוסיאן" (Icosian game) שהמטרה בו הייתה למצוא את "המסלול ההמילטוני" שהוא הפתרון הקצר ביותר.

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

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

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


#אז מה עושים?
השיטה הפשוטה היא הגרידית (Greedy). השיטה היא מכל נקודה ללכת אל הכי קרובה אליה.

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


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

https://youtu.be/IUYaqz2hxN8


דוגמה להתמודדות עם חוט:

https://youtu.be/xi5dWND499g


כמה אסטרטגיות למסלול:

https://youtu.be/SC5CX8drAtU


בתכנות:

https://youtu.be/hvDx7q6vcWM


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

https://youtu.be/MMt3I2P1j3I


ועוד הסבר על אלגוריתם קירוב ויעילותו (עברית):

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



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

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



קומפיילר (compiler), בעברית מהדר, היא תוכנה שתפקידה להמיר קוד מחשב שכתוב בשפת תכנות רגילה, אל שפת מכונה (Machine language), כזו שהמחשב מבין.

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

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

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

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

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

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


כך פועל הקומפיילר (מתורגם):

https://youtu.be/QXjU9qTsYCc


ושפת המכונה וכיצד אנו מתקשרים איתה דרך שפות תכנות עיליות:

https://youtu.be/GbBI7LSijnM
אילו תכונות מאפיינות אלגוריתמים?



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

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

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

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

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


הנה האלגוריתם ותכונותיו (מתורגם):

https://youtu.be/6hfOvs8pY1k
מי היה ג'ון פון נוימן, הגאון ממציא העתיד?



המדען וחלוץ המחשבים ג'ון פון נוימן (John von Neumann) היה מגדולי המתמטיקה ומי שנחשב כאחד הגאונים הגדולים של המאה ה-20.

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

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

לא פלא שיש הרואים בו את ממציא העתיד.

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

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

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

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

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


הנה ג'ון פון נוימן:

https://youtu.be/Po3vwMq_2xA


על תרומתו לפצצה האטומית של ארה"ב:

https://youtu.be/cYyQcWPywHo


הנה הוא בראיון טלוויזיה:

https://youtu.be/vLbllFHBQM4


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

https://youtu.be/TC0eWvhWGQg


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

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


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

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


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

https://youtu.be/17mNnWn2AsM?long=yes
איפה יש פרקטלים בטבע?



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

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

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

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

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

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

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


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

https://youtu.be/Tm0U2VxFd8Q


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

https://youtu.be/4IRLvYOZD8A


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

https://youtu.be/XwWyTts06tU


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

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



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

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

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

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

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

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

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


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

http://youtu.be/ghZKKaZkzrE


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

http://youtu.be/P5EkdJRtF-4


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

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


איך מייצגים אלגוריתמים?



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

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

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


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

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


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


#פסאודו קוד (Pseudu code)
תיאור סדרת ההוראות במילים, אבל באופן שמזכיר שפת תכנות. זו דרך מעולה להציג ומשתמשים בה יותר ויותר כיום, כולל באתרי לימוד ובספרים. דוגמה:
1. קבל כקלט שלושה מספרים שלמים a, b, c
2. רשום את תוצאת (a+b+c)/3 במשתנה avg
3. הצג בפלט את ממוצע המספרים avg
מהו משולש סירפינסקי?



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



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

#כדי שמכשיר ייחשב בתור מחשב הוא צריך לענות על כמה תנאים או כמה משימות:

#קלט (Input)
מחשב צריך להיות מסוגל לקבל מידע מהמשתמש

#איחסון (Storage)
המחשב שומר ומאחסן מידע ויודע לשחזר אותו

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

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


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

ומטוס קרב - האם הוא מחשב? ומכשיר רדיו? והאם המיקסר שבמטבח הוא מחשב?


מה הופך מחשב למחשב? (מתורגם)

https://youtu.be/mCq8-xTH7jA


כל סוגי וגדלי המחשבים הקיימים:

https://youtu.be/uD0acIhi8xE


המחשב השולחני והמובילים בו לאורך השנים:

https://youtu.be/6OnnoSiRxWE


שעון חכם אפילו לילדים:

https://youtu.be/nFeEfZ-o9C8


מגוון המחשבים ו"האינטרנט של הדברים" (IOT) של חברת ASUS:

https://youtu.be/bQ1ASdMSo5w


ומחשב העל הסיני שנכון ל-2021 הוא המחשב החזק ביותר בעולם:

https://youtu.be/-eQ7zgwgTdI
מיהו מארק אנדריסן, בורא דפדפן האינטרנט?



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

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

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

הוא התבסס על פיתוחיו של לי, כמו ה-URL (ה-Uniform Resource Locator) ועל עיקרון ה"הייפרטקסט", שכבר היה ידוע משנות ה-50, כדי ליצור את ה-Hypertext Transfer Protocol, מה שיקבל את הקיצור המוכר של HTTP.

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

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

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

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

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

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

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


הנה סיפורו של הדפדפן ומחוללו מארק אנדריסן:

https://youtu.be/_L3Y2_YiT-A


מיהו אנדריסן?

https://youtu.be/sw5xp27Ohgg


ומארק אנדריסון בימי נטסקייפ:

https://youtu.be/40CxcGg1K_o
איך לדעת מתי אנו משוחחים עם טכנולוגיה תבונית?
מהם מגדלי האנוי?
מהן שפות תכנות?
מי המציא את האלגוריתם?


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

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

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

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

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

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

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