[מוסיקה מתנגנת] זהו CS50-- הרווארד המבוא של האוניברסיטה אל הרוחני חברות של מדעי המחשב ואת האמנות של תכנות. והשם שלי הוא דוד מלאן, ו בדיוק חשבתי הבוקר, זה היה מדהים 20 שנים היום מאז הפעם האחרונה ישב איפה אתם עושים עכשיו. זה היה ב -1996. הייתי בכיתה י ', ואני לוקח CS50 בפעם הראשונה. ואני עוד בכלל לא התחלתי את האומץ לקחת אותה בעצמי שנת הלימודים הראשונה, גם בגלל הזמן. מדעי המחשב לי היה סוג של אוהב, meh. הייתי קצת חנון גדל למעלה, אבל אני לא ממש יש כל אינטלקטואל עניין במה שנראה רק כדי להיות חבורה שלמה של אנשי תכנות כל הזמן. ואני פחדתי להיות כנה. הקורס ומדעי המחשב יותר היה בדרך כלל, ובמידה מסוימת, יש עדיין מוניטין זה של שדה צריך להיזהר, ולו רק משום כך רבים מאיתנו מכירים את זה ולא בטוח שזה. וזה באמת לא היה עד שאני קונה המעמד הזה כי בכיתה י fall-- וגם אז, נרשמתי רק משום professor-- אחד המנטורים הראשונים שלי, בריאן Kernighan כעת Princeton-- מותר לי לקחת את המסירה בכיתה להיכשל. ואכן, זה למה היום אנו מאפשרים ומעודדים סטודנטים לקחת את השיעור הזה ישב / unsat. ורק אז, על ידי בסוף הסמסטר התברר לי להגיד, וואו, זה לא היה כזה לשדה הלא מוכר. ואכן, זה היה מאוד מעצים שדה, ועוד excitingly, במיוחד בהמשך, כפי לקחתי קורסים לאמנויות הבמה 101 ולטינית ואז בסופו של דבר ארכיאולוגיה באוניברסיטה, עשיתי באמת מתחיל לראות את בצומת של שדה, מחשב זה מדע, עם הרוח, מדעי הטבע, אמנויות, רפואה, וכדומה. וכך זה מה פשוט כל כך מסודר על מדעי המחשב בסופו של דבר, כפי שאנו מקווים יהיה לך see-- הוא תחולתו לתחומים אחרים אלה, ואיך אתה יכול לקחת חלק של היום ואת הסמסטר של רעיונות ומיומנויות מעשיות חזרה תחום משלך, ולמעשה לחקור בצומת זו של מדעי הרוח ומדעי. אז 73% מכם, אם האחרון השנה היא אינדיקציה כלשהי, מעולם לא לקח קורס CS לפני. אז אם, כמוני, אתה מרגיש קצת מפחד, או בכנות אתה לא ממש בטוח למה אתה גם כאן. אולי אתה פשוט ואחריו כמה חברים אל סנדרס עכשיו. זה לגמרי בסדר. המטרה כאן היא לחבר אתה וכדי להרגיע אותך שאם אתה מסתכל על מנת משמאל ומימין, אתה הולך לראות לכיתה עם כמו ניסיון מועט או כמו הרבה כי ייתכן שיהיה עצמך. ואכן, נחלוק כמה נתונים סטטיסטיים מאוחר יותר היום על מה את הנתונים הדמוגרפיים של המעמד בדרך כלל להיראות. וכמו הוסיף reassurance-- ואנחנו זה זאת אומרת מאז לקחתי במשך ב ago-- כמה שנים הסילבוס של הקורס זה-- כי מה שבסופו של דבר בעניינים בקורס זה הוא לא כל כך איפה אתה בסופו של עד ביחס חברכם, אבל איפה אתה בשבוע 11, סוף סמסטר, בסופו של דבר ביחס לעצמך בשבוע 0, שהוא איפה אנחנו נמצאים כאן היום. וזה מה שהבנתי לפני כל כך הרבה שנים. ואני מכיר הרבה כיתות להגיד את זה, אבל זה במיוחד נכון במדעי המחשב. בסוף היום, בתחום זה הוא מוכר כפי שהיה לי ועלול להיות לך, הוא באמת כמעט ופתרון בעיות. וככזה, זה צריך זה תחולה לקבל בתחומים אחרים. ואכן, אם ננסה לזקק מה זה אומר, זו היא פתרון בעיות במהותו, אני מניח. יש input-- אז מה זה הוא שאתה מנסה לפתור. יש פלט, וזה בתקווה הפתרון לבעיה הזאת. ואז, כפי שהיינו אומרים במדעי המחשב, יש קופסה שחורה זה באמצע שאתה עושה לא בהכרח צריך לדאוג איך זה עובד. אתה עצמך בסופו של דבר אולי ליישם מה יש בפנים קופסא. אבל למטרות של היום ועוד בדרך כלל בחיים, כל מה שמעניין אותך הוא שבעיות אלה נפתרות. ומה כמובן זה בסופו של דבר על בוחנת בצומת של תשומות ותפוקות אלה, ו מה שמכונה אלגוריתמים, כפי שאנו בקרוב לראות, המיישמים מה הוא מתחת לשם, מכסה המנוע. אבל תשומות אלה ואלה outputs-- מה זה אומר בעצם? ובכן, בסוף היום, אנחנו צריכים כמה דרך לייצג מידע. הדבר נכון במיוחד בתוך מחשב, אשר כפי מפואר ומורכב כמו זה אולי נראה, הוא מכשיר די טפשית. זה לוקח electricity-- אם מ כבל או סוללה כמו input-- ואז זה מייצר כמה תגובות preprogramed על המסך. אבל איך אנחנו מקבלים מ מתחילתו ועד סופו שם? ובכן, מה בעיה שיש לפתור? טוב, אולי נעשה את זה, ב תחילת כל סמסטר, לנסות לקחת נוכחות בחדר כזה. אז אני יכול לעשות כמו אחד, שתיים, שלוש. או אולי, אם אני עשיתי את זה מין כדי לעקוב אחר של myself-- לעקוב אחר things-- יכולתי נגמר של אצבעות במהירות. אז אולי באמת כדאי לי לעשות חשיש marks-- אחד אדם, שתיים, שלוש, ארבע, חמש, שש, שבע, שמונה. וכולנו יש כנראה עשיתי את זה, אם על הידיים או על פיסת נייר. וזה בעצם רק משהו שנקרא notation-- יונארית שם אם יש לך רק אות אחת באלפבית, אחד או חשיש שלך סימן במקרה זה, עבור כל קלט שברצונך לספור, אתה צריך לשים את אחד מאלה letters-- אחד הסימנים האלה. בסדר. זה כל מה נעלה וטוב לא כל כך מסובך. אבל מחשבים לא כל כי הרבה יותר מסובך. ואכן, רובכם כנראה יודע גם אם יש לך לא באמת נחשב מה זה אומר, כי מחשבים מבינים רק אפסים ו ones-- במערכת בינארית מה שנקרא. אנחנו, בני האדם, לעומת זאת, כל כך הרבה יותר מתוחכם ככל כפי שאנו מבינים אפסים באמצעות תשיעיות. אבל גם אם בינארי הוא, בהתחלה מבט, לא כל כך מכיר, מסתבר שזה בדיוק כמו מערכות ואת הרעיונות שאנחנו כבר יודעים. כך למשל, חשוב על זה. זהו רק רצף של סימנים. וכולכם, כאשר מתבונן בו, כנראה חושב 123-- כלום באמת מעניין שם. אבל למה זה המספר הזה, 123? אלה הם רק גליפים על screen-- רק על דפוסים שמישהו משך או שהוקלד. אבל אם אתה אוהב אותי, אתה בטח זוכרים מבית הספר היסודי כי יש מין עמודות או במקומות כאן. יש את המקום של אחד ואת מקום של עשרה ומקום של המאה. והסיבה שזו 123 ו פשוט לא דפוס של שלושה סמלים משום, כמובן, אם אנחנו יש אחד במקום המאה, תעשה את המתמטיקה של 100 פעמים אחד, ואז שני במקומו של עשר. אז זה 10 פעמים 2, ולאחר מכן שלוש המקום של אחד וזה 1 פעמים 3. וכאשר אתה מוסיף את כל אלה עד, של כמובן, אתה מקבל 100 פלוס 20 פלוס 3. אז התחלנו עם רק דפוס של symbols-- alphabet-- אבל אז מיפה משמעות על זה בדרך של עמודות אלה. ובכן, מתברר כי מחשבים הם ממש לא כל כך שונה ממך וממני. אבל במקום להשתמש חזקות של 10, כך speak-- 1, 10, 100, 1,000, במקום 10,000 ולכן forth-- הוא למעשה רק להשתמש בכוחות של 2-- כך אחד, 2, 4, ולאחר מכן אם אנחנו שמים יותר ספרות, 8, 16, 32, 64, 128, וכן הלאה. וכך זה איך מחשב ייצג את המספר 0, בדיוק כמו שאנו, בני האדם. 0, 0, 0-- ואתה יכול לנחש מה דפוס של אפסים ואחדים, אם מחשב יכול רק לדבר 0 או 1-- מה דפוס הולך לייצג מספר בני האדם אנו יודעים כמו 1? Yeah-- 0, 0, 1. בסדר. אז 0, 0, 1 כך אנו מייצגים 1, לכן ייתכן שאתה נוטה אז כדי לייצג את המספר 2, אם אתה צריך מקום של הארבעה ומקום של שני כמקום אחד, אפשר לומר, גם, אם היה לנו 1 במקומו של אחד, ועכשיו אנחנו רוצים לספור עד 2, ייתכן לעשות זאת ולהשאיר את זה כדי להיות אפס. אבל כמובן זה לא איך השיטה העשרונית עובדת גם. אם תשים ספרה שניהם העמודים האלה, אתה חייב לעשות את החשבון. אז מה מספר עשיתי בטעות רק מייצג? אז זה 3, כי 2 פעמים 1 פלוס 1 פעמים 1, כמובן, נותן לנו שלוש. אז זה יהיה שני. הסיבית מעין סלטות, אם אפשר לומר כך, כמו 0 הופך אחד, ממש כמו 9 תפקידים מעל והופך 0 בעת נשיאת 1. אז זה יהיה שלוש כמובן. Four-- דבר מעניין נוסף קורה, איפה אלה להתהפך תישאי 1, אם אפשר לומר כך. אז זה, כמובן, הוא 4. אבל אם אתה קדימה מהר עכשיו, מה המספר הגדול ביותר שיש, להיות כי מחשב יכול לייצג? אז זה רק שבעה במקרה זה, נכון? בגלל שיש לך אחד בארבעת, אחד בשני, אחד בבית אחד. אז זה 4 פלוס 2 פלוס 1. אז זה נותן לך שבע. ואכן, זה היה נראה במבט ראשון שמחשבים יכולים לסמוך לא גבוה יותר מאשר זה. אבל זה כמובן לא נכון. מה שאנו בני האדם עושים כאשר אנו רוצים לספור גבוה כמו 999? רק לשאת את אחד ופשוט להוסיף ספרה רביעית שמאלה. וכך אכן שיכולנו. יכולנו להיות שמונה למקם ומקום של ה -16, ומקום של 32, 64, 128-- ואתה יכול רק להמשיך הלאה עד אינסוף. אז אלו אפסים ones-- system-- בינארי שנקרא מה הם מדען מחשב היה קורא קצת בדרך כלל, או ספרות בינאריות. אבל עכשיו, איך אנחנו מקבלים מן רעיון או את הגרפיקה של הדברים האלה אל מחשב בפועל? אנחנו נראים דילוג צעד כאן. ובכן, הקלט רק בסוף היום, כדי הנייד שלי כאן הוא זרם החשמל הזה. גם אם זה היה ארוך זמן מאז חשבת על או אף פעם לא חשבתי על כיצד פועל חשמל, יש אלקטרונים זורמים או החוצה, וזה סוג של קלט שלי. אז אם זה כל מה שאנחנו מקבל כקלט כאן, מה אנחנו יכולים לעשות עם המידע הזה? ובכן, אנחנו עלולים לחשוב על אפס כמו רק עדר של חשמל. שום דבר אינו flowinw, שום דבר הוא נעים, שום דבר לא קורה. זהו בדיוק המחדל state-- אפס. אבל אם יש חשמל זורם, למה אנחנו לא פשוט שרירותי, אך ברחבי העולם באופן עקבי, קוראים לזה אחד. אז פשוט על ידי זה שאין כוח, יש לנו אפס, כן כוח, יש לנו one-- שום כוח, כן כוח. וגם ככה, באמצעות משהו יותר פיזי או אלקטרוני אנחנו מתחילים ליישם את הרעיון הזה של משהו או להיות אחד או אפס. ואכן, נוכל רק לעשות את זה כאן. אז הנה, יש לי, לא שלוש, שמונה נורות, שכל אחת מהן יש מתג משלה. לכן, אם הייתי רוצה לייצג המספר שבע כאן, אני עלול להפעיל שלוש נורות. ואכן, בתוך המחשב שלי הוא מ', מיליארדי דברים שהם פשוט קטן יותר מזה, טרנזיסטורים שנקרא, מתגים, כי אתה פשוט לכבות ולהדליק. אז אלה big-- יחסית מתגים big-- בתוך laptop-- שלי הרבה, הרבה, הרבה, מתגים רבים נוספים. אבל כל מה שהם עושים הוא בדיוק ש-- איך להפוך משהו על, לכבות משהו. וככזה, מחשב יכול לייצג, עם מיליונים או מיליארדים אלה הטרנזיסטורים, המון המון אפסים ואחדים. ויש חומרה אחרת עדיין כי מאפשר לך לאחסן לטווח ארוך מידע, כך שכאשר אתה מושך את תקע, אתה לא מאבד את זה. אבל זה כבר סיפור ליום אחר. אז מה אנחנו יכולים לעשות עם פיסות אלה? אולי אנחנו פשוט לקחת את הלחץ של לי-- אולי מישהו רוצה לבוא עד כאן ולהציע הדגמה? ראיתי את היד הזאת ראשונה. מה שמך? MADAY: Maday. DAVID מלאן: Maday, יעלה לכאן. נעים להכיר אותך. MADAY: נעים לפגוש אותך. DAVID מלאן: בוא בדרך זו. אני לא צריך lip אותך. בסדר. אז הנה, יש לנו, notice-- אחד, two-- נצטרך לערוך כי out-- אחת, שתיים, ארבע, שמונה, 16, 32, 64, 128. הדבר נעשה בכוונה. יש שמונה סיביות כאן-- בינארי אפסים ואחדות digits--. וקצת הוא יחידה שימושית של measure-- כלא שימושי יחידת המידה על עצמו. בדרך כלל אתה רוצה לפחות שמונה דברים אלה, המוכר גם בשם בייט. אז יש לנו בייט של ביטים כאן. אז אם אנחנו רוצים לאתגר אתכם, למשל, איות, בינארי, ערך זה כאן-- 42. רוצה לקחת לדקור את זה? MADAY: [לא ברור]. DAVID מלאן: כן, רק לדחוף את מתגים לבנים קטנים בחזית. ואתה רוצה לאיית מתוך 42, וניתן לנעוץ הוא מתח CS50 זה כדור אם קראת את ההודעה הזאת. בסדר. אז אתה צריך 32. אנחנו הולכים צריכים 42. אז זה שמונה, אז זה 40. ועשה excellent-- יפה מאוד. תודה רבה לך. [תְשׁוּאוֹת] בסדר. אז יש לנו מתח כדור אחד יותר. בוא נעשה את זה פעם נוספת אם יורשה לנו. מתנדב אחד אחר? כדור מתח חינם, כדור מתח בחינם. בסדר. במהלך כאן באמצע, אתה רוצה לרדת? בסדר. אני יודע. הנה. אז מספרי כאן-- באים למטה. מה שמך? דייבי: דייבי. DAVID מלאן: דייבי. בסדר. בואו נעלה, דייבי. נעים להכיר אותך. ומה אנחנו הולכים יש לך spell-- אם אתה יכול לשהות שם רק moment-- אחד הוא המספר 50. אבל, אבל, אבל, אבל, אבל, אלה הם מגנטי ספר יסודי מסיבה. פשוט יש קצת יותר קשה, בסדר? יש עדיין שמונה. בסדר. אז מה יש לנו שם? יש לנו 32. נֶחְמָד. 32 פלוס 16 נותן לנו 48-- כל כך קרוב. ונפלא. ברכות דייבי גם כן. [תְשׁוּאוֹת] בסדר. אז אנחנו יכולים לעשות את זה כל היום, ו הוא אינו מקבל כל כך הרבה יותר מעניין יותר מאתגר. אבל זה באמת point-- איך פשוט יחסית זה, בסוף היום, איזה המחשב עושה לאחסון מידע, כדי לשמור את הזנות, ובסופו של דבר לאחסן או לייצג יציאות אלה. אבל המספרים לבדם אינם כל כך מעניין. אז בני אדם, לפני כמה שנים, החלטת, אתה יודע מה? זה יהיה נחמד אם מחשבים היו לא רק מחשבונים באריתמטיקה יכול פעולות, אבל למעשה לעשות דברים כמו עיבוד תמלילים, או דואר אלקטרוני, או גלגולים מודרניים יותר אלו סוגים של טכנולוגיות. וכך העולם החליט באופן שרירותי, אלא אוניברסלי, כי אם אתה רוצה לאחסן את ההון מכתב במחשב, אתה יודע מה? בואו פשוט כולם מסכימים לאחסן דפוס כמה אפסים ones-- bits-- שבסופו של דבר מייצג את המספר העשרוני 65. אנחנו פשוט כולם מסכימים על זה. 66 ייצג B, 67 ייצג C, ויש צרורות של דפוסים אחרים של אפסים ואחדים, או מספרים בסיסיים, שתייצג מכתבים אחרים עדיין. אז אם אתה סוג של נפש לקלוט את זה לרגע, אני בכוונה להקים דרך אני, כאשר H 72 ואני הוא 73. אם מחשב אז, בהקשר של תוכנית עיבוד תמלילים או הודעת דואר אלקטרוני, שיתגלה מתחת למכסה המנוע יש דפוסים אלה של דפוס bits-- הביטים המייצגים 72, אז בן 73, אז 33-- מה זה יכול לאיית בתוכנית זו? אז היי, ולאחר מכן משהו. איננו יודעים בהכרח, אבל אכן 33-- לא על התרשים earlier-- היה פשוט סימן קריאה. אז 72 היה H, 73 הוא אני, 33 קורה להיות סימן קריאה עדיין. אבל זה הכל טוב ויפה, ולמעשה כיום, ולא פשוט להשתמש שבע או שמונה ביטים, בזכות משהו קרא Unicode בניגוד ל- ASCII חזרה היום, אנחנו באמת יכולים לייצג אפילו יותר דמויות מעניינות מסתם האנגלי המקורי אלה מוטים אותיות. אבל אנחנו גם יכולים לייצג גם דברים מסודרים כמו צבעים. אם אי פעם שמעו את ראשי התיבות RGB, אדום, ירוק, כחול, כי רק אומר כי מחשב משתמש בדרך כלל שלוש קבוצות של bits-- כמה מספר הביטים המייצגים מספר עבור כמה אדום אתה רוצה, אחר קבוצת ביטים עבור כמה ירוק אתה רוצה, ועוד מספר קבוע עבור כמה כחול אתה רוצה. אז מספר גדול אומר המון מספר אדום, קטן אומר שאין אדום. וכך אלה הם סוג ערכים באמצע כאן. אז תן לי קצת אדום, לתת לי קצת ירוק, ולתת לי קצת כחול. ואם אתה מערבב אותם שלושה גוונים של צבע יחד, במקרה זה, אתה מקבל גוון עכור זה צהוב או חום של. אבל זה דפוס של שמונה פלוס שמונה פלוס eight-- כך 24 bits-- משמאל לימין, הוא כיצד מחשב ייצג צבע מסוים. עכשיו זה רק נקודה על המסך. אם אתה נראה ממש בהישג לטלוויזיה שלך מחשב, תראה נקודות או פיקסלים. ואם יש לך רשת שלמה של פיקסלים, אופקי ואנכי, יש לך תמונות. ואז אם אתה לוקח תמונה ולאחר מכן לשטוף להציג את עצמך תמונה אחרת, אחר תמונה, תמונה אחרת, תמונה אחרת, ממש מהר, אתה כמובן יש סרטים. וכך להבחין בו התחלנו. התחלנו עם אפסים ואחדים אלה. עבדנו ומשם עשרוני מספרים, איך אנחנו מייצגים אותם. עכשיו יש לנו אותיות האלפבית. אבל בהקשרים אחרים לחכות, אנו יכולים להשתמש כמה חתיכות יותר הצבעים מייצגים. ברגע שיש לך את יכולת לייצג צבעים, יש לך את היכולת לייצג תמונות אנימציות ותווים כאלה על המסך. וכאשר יש לך חבורה שלמה של תמונות עפו ידי האדם בבת אחת, זה נראה כמו סרטי קולנוע, וכך אתה מקבל קטעי וידאו גם כן. זאת באמצעות אלה מאוד הפרימיטיבים פשוט אנחנו יש דרך לייצג בסופו של דבר כל צורות אלה של מדיה. ואנחנו כבר שוב מפוזרים ושוב ושוב, עד שאנחנו לקבל מן הרמה הנמוכה ביותר לרמה הגבוהה ביותר זה. אז זה נותן לנו את זה רעיון כללי של הפשטה. אבל התחלנו כאן. הנה עכשיו, נוכל לייצג מחשב התשומות שלנו עם אפסים ואחדים, הפלטים שלנו אפסים ואחדים, אבל מה מתרחש בתוך הקופסה? זה המקום שבו המחשב המדע נהיה מעניין. זה המקום שבו אתה בעצם להביא שלך המוחות עצמו לשאת לפתור בעיות. כעת אנו יכולים לקבוע, עבור שאר הסמסטר, כן. אני יודע איך עובד בינארי. אני זוכר איך Ascii או Unicode-- המיפוי כדי letters-- עבודות. וזה בהחלט עומד להיות תבוניים אנו כי יכול לייצג אדום וירוק כחול, ולייצג מולטימדיה, כמו גם. אך זהו דברים מעניינים. זה מה שעושה מישהו מסוגלים לפתור בעיות. ובעיה אחד כזה אנחנו אוהבים לעשות, אכן, הוא לוקח נוכחות, או עושה את זה באופן אלגוריתמי. ושוב, אני עלול לעשות את זה. אני עלול לעשות אחד, שתיים, שלוש, ארבע חמש, שש, שבע, שמונה ותשע. ואני יכול לכתוב את זה למטה כדי לעקוב אחר זה. אבל זה בדיוק מה שאני עושה לייצג את המידע. או שאני יכול לעשות את זה faster-- שתיים, ארבע, שש, שמונה, עשר, 12, 14, 16, 18, 20, 22-- זה מרגיש כמו פעמים מהר אבל זה עדיין הולך לקחת הרבה זמן כולה. אבל מתברר, אם אנו ממנפים את עדיין אחר מחשבים resource-- ואכן יש בימים אלה מעבדים או מוח מרובים. מתברר מחשבים יכולים לעשות המון דברים בבת אחת, ואכן אנו, בחדר הזה, עשוי לייצג בדיוק זה. אז זה קצת חברתי מביך, אבל אם רצונך בכך הומור אותי רק תהליך בן שלושה שלבים, תן אני רוצה לשאול את כולם במקום יש רק לקום לרגע. תעמוד. אז תחשוב לעצמך, מספר one-- כך שכולם בחדר הזה, פרט לאותם אנשים שלא מחייבת, חושב מספר אחד. אז זה המספר שלך עכשיו. זהו הצעד הראשון, או בתור מדען מחשבים או מתכנת בדרך כלל הייתי עושה, אנחנו הולכים להתחיל לספור על אפס. אם המספר הקטן ביותר שביכולתנו מייצג עם הנורות האלה הוא אפס, רק על ידי להשאיר אותם כל זאת ממני, אני עדיף כבר מתחילים לספור מ אפס הוא במקום אחד. וכך זה מה מדעני מחשב לעשות. אז צעד אפס, לקום לחשוב על מספר אחד. השלב הבא הוא זה- זוג הסתלק עומד מישהו ולהוסיף המספרים שלך יחד. נִפלָא. אז ברגע הזה בזמן, ממש כולם משתתפים הוא חושב על מספר 2, למעט עבור אדם אחד מוזר אם יש לנו מספר אי זוגי של אנשים בחדר. ועכשיו השלב השלישי כאן הולך להיות לשבת זה- אחד מכם צריך. אחד מכם צריך לשבת, ואם אתה עדיין עומד, חזור לשלב אחד. בסדר. בסדר. אז יותר ויותר אנשים צריך להיות בישיבה. שים לב כי זה מושרה loop-- איזשהו מחזור. חלק מכם צריך להיות תקוע במבוכה, הלוך ושוב הולך בין צעד אחד ושני, אחת שתיים, אחת ושני. זה בסדר. באג הראשון שלנו. נצטרך להתמודד עם זה. בסדר. תן לי לנסות לדרבן דברים יחד. בתיאוריה, רק אדם אחד עומד כמו כולם ממשיך בזוגות. אבל בואו לזרז אותי דברים עם העם עדיין עומד. מה מספר אתה חושב? 46. בסדר. אתם מוזמנים לשבת. אתם עדיין עומדים על תלם. מי עומד עדיין? מה מספר אתה חושב? בסדר. אז נחזור אליך. בחלק האחורי? מה זה? 22. אישור למישהו אחר עד top-- כן? 34. בסדר. הנה, כאן, כן-- שלי עד כאן? 132, מאוד נחמד. 22? בסדר. ומי עומד עדיין? כאן? 46, מאוד נחמד. 72. אני לא יכול לעכב עוד זמן רב. כֵּן? 30, נחמד. כאן? 23? 23. ואני חושב שזה כולם חוץ ממך בחורים, בלי לחץ. הו חכה. 28? רק שמונה. בסדר. רק שמונה. כאן למטה? 30. 23. 24. 18. זהו הביצוע הגרוע ביותר אלגוריתם זה אי פעם. בסדר. אז מישהו אחר? כל אחד אחר? בסדר. עוד אחד. 16? בסדר. 16. בסדר. כך שאם לא החמיץ לי מישהו הבוהק כאן, כאשר אני מכה על Enter, נוכל לראות, אלגוריתמי, את מספר כולל של אנשי סנדרס. כי שוב, זה כאילו כולם כפי שאתה התיישבת, עברת את המספר שלך למישהו אחר, למישהו אחר, למישהו אחר, כך בתיאוריה, בסופו של דבר, רק אחד מביך אדם ויישאר על כנם. אבל זה בסדר. האצנו את העניינים באופן ידני. זה במיוחד קשה לראות בחלל המסוים הזה. ואת המספר הכולל של אנשים אנחנו חושבים שיש כאן הוא 546. המספר הכולל הייתי ריק על ידי עמיתי הוראה, מי עשה את זה ישן הספר איטי דרך, הייתה 820. [צוחק] [תְשׁוּאוֹת] זה בסדר. אז לבטח אז, יש באגים אלה. וזה בסדר. וכך להיזכר על זה משהו בפעם הראשונה אתה כותב לא בהכרח עובד. זה קרה לי גם כאן. אבל בואו עכשיו לשקול כיצד נוכל ליישם את הרעיון אותו למשהו שאולי ראית לפני, אשר טכנולוגית הספר הישן הזה הוא כאן-- ספר טלפונים גדול באמת. ונניח כי ספר הטלפון הזה יש 1,000 דפים 1,000 שמות ומספרים בסדר אלפביתי בתוכו. ובכן, אנחנו יכולים סוג של להחיל דומה רעיון לבעיה פיזית מאוד זו, רק משתמשים בי. אני פשוט סוג של רימה על ידי מינוף כולכם עם המון המון מעבדים שונים או מוח ביצוע כמה אלגוריתם. אבל אם זה רק קצת לי בן, אני עדיין יכול למנף אותה מהות רעיון חלוקת וכובשת הבעיה שוב ושוב, לפיה מחצית מכם, מחצית מכם, מחצית מכם, מחצית מכם, תיאורטית כל הזמן בישיבה, עד נותרנו, באופן תיאורטי, עם אדם אחד בלבד. אז בבית הספר הישן הזה טכנולוגיה-- שאנחנו עושים לא צריך את זה map-- זה טכנולוגית ספר ישנה, נוכל להתחיל לחפש מישהו כמו מייק סמית, עמוד אחד בכל פעם. ואני רואה שלא, מייק הוא לא כאן. אני עדיין במקטע A. בסופו של דבר, אני מוצא עצמי בקטע B. וזו algorithm-- צעד אחר צעד הוראות. התחל בו בתחילה ואחד בכל פעם, לחפש מייק סמית. האם זה correct-- זה אלגוריתם או גישה? כן, זה נכון. אם מייק כאן, בסופו של דבר אני אביא לו. אבל זה לא יעיל. זהו כמובן מאוד איטי. אז אני יכול למנף את twosies אותו להתקרב. אני יכול לעשות מעין השנייה, ארבע, שש, שמונה, 10, 12. זה פי שניים יותר מהר. אני הולך להגיע מייק מהר אם הוא שם. זה נכון? כן, אבל שמעתי לא little--. עכשיו שמעתי לא. כֵּן. יש באג פוטנציאלי. אולי מייק רק בטעות מקבל דחוק בין שני עמודים, כי אני טס דרך זה שתיים בכל פעם. אז לפחות אנחנו צריכים קצת סוג של תיקון תנאי. אני צריך לומר, היי, אם פגעתי מישהו שאת שם מתחיל עם T במקום S, אני יותר טוב להכפיל בחזרה לפחות עמוד אחד. אז מרכבה בהתחלה, אבל אפשר לתקן. אבל אף אחד מאיתנו לא הולכים לחפש מייק סמית באמצעות טלפון הדף 1,000 להזמין עמוד אחד בכל פעם. מה בן אדם נורמלי הולך לעשות? אתם מתכוונים ללכת S של, אם אתה יודע איפה ה- S של. אתה יכול ללכת בערך לאמצע או מוטה מעט לקראת הסוף. ואני מסתכל למטה פה אני בקטע M. אבל מה אתם יודעים על בעיה זו כעת, כי אנחנו לא בהכרח לדעת לפני עם כולנו רק לספור את עצמנו באופן שקול? ובכן, מייק הולך בבירור להיות המחצית של הספר אם הוא כאן בכלל, כי זה מסודר. וכך אתה יכול מאוד dramatically-- [מתנשף] אני יודע. [תְשׁוּאוֹת] זה ממש ממש קל אם אתה עושה את זה במורד עמוד השדרה שם. אבל אז אתה יכול לזרוק מחצית הבעיה משם. עכשיו, אני נשאר עם אותו problem-- למצוא מייק סמית טלפון book-- אבל עכשיו בספר הטלפונים מתחיל ב M והולך Z, אבל זה חצי כמו גדול. אבל זה מה מרשים. בדיוק כמו בתיאוריה, אתם, כאשר כל מה שאתה התיישבת רק חצי בכל פעם, הבעיה קבלה חצי כמו גדול, חצי גדול, שוב ושוב. אז יש את הבעיה הזו להיות אותה בעיה אבל חצי כמו גדול. עכשיו זה בעיה 250 דף. ברגע שאני מבין, הו, אני בסעיף T בטעות. אני כבר הלכתי רחוק מדי. אני יכול לזרוק שמחצית בספר הטלפונים משם. עכשיו, אני עד כדי רבע הבעיה. ואתה יכול לחזור, לחזור, לחזור עד, בתיאוריה, אתה נשאר עם דף אחד בלבד. ואם מייק הוא בדף זה, עכשיו אני יכול לפתור את הבעיה הזו. אבל כמה מהר עשיתי לפתור אותה? במקרה הראשון, לקח לי כמו אולי 1,000 צעדים כדי למצוא מייק סמית. זה עלול היה להימשך לי-- הרמתי את ספר הטלפונים ואני התחלתי לחפש עמוד אחד בכל פעם, ומייק עלול להיות מאוחר -1,000 עמודים. גישה שנייה אולי לוקח לי 500 צעדים, כי אני טס דרך שתיים בכל פעם. ואת הגישה השלישית אם כי, זה חזק במיוחד. אבל הבה נבחן מה אנחנו באמת עשה עם גישה שלישית זו. אני אצטרך מה אני אתקשר רק אלה דוחות כאן, אחד בכל פעם. קח ספר טלפון. פתח לאמצע בספר הטלפונים. תראה שמות. ואז הדברים מקבלים קצת יותר אינטלקטואלי מעניין, אם עדיין פשוט. אם סמית היא בין שמות על הדף הנוכחי כי, אז לעשות משהו על תנאי. זה כמו להצטלבות הדרכים. התקשר מייק. אם מייק הוא בין השמות בדף זה, בשם מייק. אבל לעשות רק קו ארבעה אם קו עץ, אם תרצו, הוא נכון. התשובה לשאלה זו היא כן. אחר אם סמית הוא מוקדם יותר book-- במילים אחרות, אם אני בקטע M ואני מחפש מישהו השמאל, אז מה אני צריך לעשות דומה הוא משהו מאוד. אז אני אמור להיפתח באמצע המחצית השמאלית של הספר. אז ללכת שמאלה, ולאחר מכן חזור לשלב שני. תסתכל על השמות שם. אז במילים אחרות, לעשות את אותו הדבר, אבל על בעיה כי כבר חצוי. אתה יודע מה עוד? אם סמית היא מאוחר יותר בספר מבוסס על הדף אני מסתכל, פתוח באמצע החצי הימני של הספר ואז לחזור שוב לשלב השני, else-- יש אפשרות רביעית כאן. מייק כאן או שמאלה או ימינה או אין. וכאן אנחנו יותר לשקול את זה. ואכן, אם אי פעם היה המחשב פשוט להתרסק על לך, כי לפעמים, אבל לא תמיד, בעקבות פשוט מתכנת אדם לא להבין, הו לירות, יש למעשה תרחיש רביעי זה. ואם אתה לא לכתוב קוד כדי להתמודד עם תרחיש זה, לפעמים אתה לא יודע מה המחשב עלול לעשות. ואכן תכנית עלולה לקרוס. אבל במקרה הזה, חשבתי על זה, ואני אמרתי, עוד נטש, כי זה רביעי תרחיש אפשרי לוגי. עכשיו, בואו פשוט להוסיף כמה אוצר מילים ולכן אנחנו יכול להתחיל לזרוק כל מיני מונחים כי הם אחרת די אינטואיטיבי. כל הדברים יש לי רק מודגש בצהוב כאן, אני רק הולך אל פונקציות ופרוצדורות. הוא סוג בדיוק של פעולות. אז להרים, פתוח, להסתכל בבית, לקרוא, פתוח, פתוח, quit-- אלה הם רק פעולות, נשלול קוראים להם יותר רשמית, פונקציות. בינתיים, עכשיו בצהוב, הדגשתי דברים ש-- בואו פשוט להתחיל לקרוא אותם תנאים או סניפים. אלו הן החלטות נקודות שבן אתה יכול ללכת בדרך זו, בדרך זו, או לכיוון אחר עדיין. אז אלה יהיו תנאים. ועכשיו זה אחד קצת להשתכלל. בואו לקרוא על שאלות אלה ביטויים בוליאני, אחרי מישהו עם שם המשפחה בול. וזה ביטוי בוליאני רק משהו זה או אמת או שקר, כן או לא. אז זה את השאלה שאת התשובה אתה אכפת, כדי במצב לבצע decision-- לחזור תשובה, ולאחר מכן ללכת שמאלה או ימינה, או משהו אחר לגמרי. ואז ולבסוף, אלה קווי כאן-- לחזור לשלב השני, לחזור לשלב two-- שיכולנו ליישם את הרעיון הזה בדרכים שונות. ואז לאלו מכם עם ניסיון בתכנות עלול לעשות או יכול לדמיין את עצמי עושה את זה אחרת. אבל למטרות של היום, זה רק את הרעיון מה שחשוב. זה גרימה מה אנחנו בדרך כלל נתקשר loop-- איזשהו מחזור, כי זה עושה לי לעשות משהו שוב. אז עכשיו, בואו פשוט לשקול כמה טוב אלגוריתם זה. זה נכון. אם מייק בספר, זה אחד אלה ארבע scenarios-- שוב ושוב ושוב, אנחנו נמצא אותו. אבל עד כמה זה טוב? ובכן, אין לנו מכדי להיות רשמי כאן. אבל בואו פשוט עלילה משהו, x ו- y, כדי לקבל תחושה של הצורה של בעיה זו. על ציר ה- x הוא כאן את גודל הבעיה שלי. והם בציר Y כאן יהיה הפעם לפתור. אז אולי זה מספר עמודים. אולי זה שני או דף turns-- מה שלא יהיה. עם זאת אתה רוצה לספור הוא מה התמונה הזאת תייצג. וזה אלגוריתם ראשון, אני הולך רק לתאר כקו ישר. אם יש n עמודים בספר הטלפונים, אז זה עלול לקחת לי כמה שיותר כצעדי n כדי למצוא מייק. אם Verizon או חברת הטלפון מוסיף עוד דף אחד בשנה הבאה, זה עלול לקחת לי עוד step-- יחידה אחת יותר זמן כדי למצוא מייק. אז יש רק זה אחד יחס אחד. זה מדרון בקו ישר. בינתיים, כי שני algorithm-- אם אני הולך שניים בכל שני הבאה--, ארבע, שש, שמונה, או double-- עובר את הדפים פעם בכל פעם, שתיים בכל פעם, זה עדיין בקו ישר. יש עכשיו אחד כדי שני יחס, אבל רק קצת נמוך. אז אם יש זה דפים רבים על גבי הגרף כאן בצהוב, זה עלול לקחת לי את זה צעדים או שניות רבים, אחרת זה הולך לקחת לי כפליים על הקו האדום. אבל הקו הירוק היא ממסעדה האמיתית. זה מה שאנחנו בדרך כלל קוראים יומן logorithm-- של n, כאשר n הוא מספר עמודים. אבל זה הצורה מה שחשוב היום, כי אין לנו אפילו לחשוב על התוויית נקודות. תחשוב על תרחיש קיצון. תניח Verizon מחר מכפיל את מספר עמודים בספר טלפונים כי, בין 1,000 ל -2,000. באלגוריתם הראשון, אני אולי לבזבז תוספת 1,000 צעדים מחפשים מייק, רק בגלל Verizon הכפילה את גודלה של הספר. השני algorithm-- זה אולי לקחת לי 500 שלבים נוספים. 1,000 דפים נוספים, אני הולך שתיים בכל הבאה-- 500 שלבים נוספים כדי למצוא מייק. אבל זה אלגוריתם שלישי סוג של הוא קסום. Verizon מכפילה את המספר עמודים בין 1,000 ל -2,000, אבל כמה עוד צעדים עושים זה לוקח אותי לחפש מייק? זה רק אחד, כי אני יכול רק לקרוע את ספר הטלפונים עוד פעם אחת מבעיה בעמוד 2,000 ל 1,000 בעיה בדף, וזהו. לקחתי ביס מסיבי ממנו. ואם אתה הולך ממש קיצוני, תניח את ספר טלפונים לחברה היה משהו מטורף כמו ספר טלפונים -4 מיליארדים דף. ובכן כמה צעדים אולי זה לקחת למצוא מייק סמית בתוך 4 מיליארד ספר הטלפונים דף? זה מספר גדול, אבל רק 4 מיליארד 2 מיליארד כדי 1 מיליארד כדי 500 מיליון דולר, 250 million-- עדיין נשמע כמו מספרים גדולים, אבל אני מהר מאוד מקבל לערכים קטנים. ואכן, אם אני עושה את החשבון בסדר, אני יכול לחלק רק 4 מיליארד בכ 32 פעמים לפני אני מקבל רק עם אחד. אז אם זה ספר טלפונים היו 4 מיליארד עמודים, לא ביג דיל. תוך כמה שניות, אולי 32 שניות, יכולתי לחלק אותו לחצי ובסופו של דבר למצוא מייק או להסיק כי הוא לא שם. וזה המהות של algorithm-- אלגוריתם טוב. וזה אחד מטרות של מעמד כזה, מנסה להבין איך אני לפתור את הבעיה ולא רק בצורה נכונה, כמו תמיד ידעתי איך לעשות את זה אחד דף אחד בכל הבאה-- אבל נכון גם. כיצד ניתן לעצב טוב פתרונות לבעיות? אז בואו לקחת רגע כאן ולתת לך תחושה החברה של CS50 הקורס עצמו-- להציג כמה אנשי צוות הקורס. רגע לפני 2:00, אנחנו נעלה לקחת פסק זמן קצר כך לאלה מכם מי קניות יכול ברווז החוצה ולקחת להסתכל כמה סוג אחר ולצפות שאר הזה באינטרנט. אבל לעת עתה, הרשו לי להציג את CS50, המחלקה עצמה, ובמיוחד מה שחדש. אז באביב האחרון, אנו די ביליתי קצת הבאה-- הצוות של הקורס אני- לחשוב על מה זה שאנחנו רוצים CS50 להיות, ולחזור הראשון עקרונות, כביכול, לשקול מה הוא שאנחנו רוצים הקורס הזה להיראות כמו ולהיות כמו לסטודנטים שלו. וכך תראה בבעיה להגדיר אפס וכן, הזמנה כדי להעיף מבט כי כתובת אתר מסכמת חלק המניעים מאחורי בעקבות מאפיינים של סתיו 2016. אז כפי שאתם אולי שלוקטו מן TL: נדבת DR, הסילבוס היום וכן קטלוג הקורס השנה CS50, אתה צפוי רק כדי להשתתף today-- כך עבודה יפה done-- ואת ההרצאה האחרונה ב -21 לנובמבר. ואתה מוזמן אך לא צפוי הרצאות אלה באמצע, בגלל מה שאנחנו עושים השנה, יורה בזמן אמת החומר של הקורס. אז הכל יישאר נוכחי ושלב כמיטב יכולתנו can-- אקטואליה ושיחות אנשים עלולים להיות שיש באזור התעשייה של בעולם, אבל מה שהופך חומר זמין, וכתוצאה מכך, גם earlier-- להשלים עם גיליונות טקסט מלא ו searchability ו קישורים למשאבים אחרים. ואכן, היינו בטענה במשך זמן מה ואנחנו עכשיו מאמין זה, כי אנחנו יכולים ליצור, באופן דיגיטלי, immersive יותר, יותר משכנע חוויה חינוכית, בניגוד כדי איסוף כאן כ -23 פעמים באופן אישי, לשמוע שמישהו אוהב אותי פשוט לדבר על מדעי המחשב, בניגוד העוסקים באופן פעיל יותר. במקרה כזה, תראה את הסילבוס של הקורס סקיצה של הסמסטר כאן, יחד עם תום הלימודים, יהיה להצטלם, שאליו אתה בברכה, אך לא צפוי, וכאשר הם יהיו ישוחרר באתר של הקורס. ומה שנעשה כאן על רביעי החל מהשבוע הבא, הוא אינטימי הרבה יותר, עם רק אלה אנשים שרוצים להשתתף, נמצא במרחק מה שנקרא דרך, איפה אני ואת של הראשים כמובן למעשה יהפוך את הדברים קצת יותר אינטימי כאן למטה בתזמורת סעיף, עדיין יש כמה טכנולוגיה ולך דרך סט הבעיה של השבוע הנוכחי, ומציע לך particularly-- אם בקרב אלה פחות comfortable-- שבעתיים הדרכה שאולי אתה רוצה או צריך בשביל האתגר של השבוע. ובאופן דומה, עבור אלה שאינם יכולים להשתתף הללו באדם, לא ביג דיל. יש ינוהל באופן דומה אחד העובדים הבכירים של הקורס, Zamalya, באותה ההזדמנות מוטבעת בבעיה קובע עצמם. בעיה מגדירה השנה ישוחרר בימי שישי וכבר לא נעשה שבעה ימים לאחר מכן, אבל 10 ימים later-- בכוונה חופפים עם כל בעיה להגדיר, כדי להתאים טוב יותר, אנו מקווים, גאות ושפל בלוחות זמני סטודנט, במיוחד כאשר midterms או אתלטיקה או אקדמאים או לחוגים נוטים לצאת ולבוא במיוחד באמצע הסמסטר. זה אמור לתת לך קצת יותר שיקול באשר לשאלה האם אתה מול לטעון את השבוע עם CS50 או המטען זה על השבוע הבא במקום. אז להסתכל על הסילבוס של הקורס כאן את לוח הזמנים שלה. ותבחין מדי בין השינויים השנה, עבור אלה להכיר טוב יותר תכנות בעבר, נתחיל את הסמסטר כמו נעשה זאת היום Scratch, להתמקד בעיקר בשפה בשם C, ולאחר מכן מעבר לא ל- PHP, אלא שפה בשם פייתון לקראת סוף הסמסטר בהקשר של תכנות אינטרנט, יחד עם SQL ו- JavaScript, HTML, CSS, ובכל זאת יותר. ובתשובה נפוצה, זה אכן המקרה CS כי הוא לא מפחיד כמו פעם חשבתי שהמחיר היה, אבל זה כמו הרבה עבודה כפי ששמעתי זה יכול להיות. אך זהו יניחו כי הנה כמה נתוני הסטודנטים בסתיו 2015, לפיה הקווים הכחולים האופקיים לייצג את המספר הממוצע של שעות דיווח. ותראה בממוצע שש עד 10 עד 12-- אולי 16 בערך וכן הלאה, אבל עם שונות גבוהה כדי להיות ברור. וכך מבין שיש לא רק תלמידים יותר נוח ופחות נוח בקורס, אלא תמיכה מקבילה מבנה להשיג אותם סטודנטים דרך הסמסטר בהצלחה. ואכן, בתשובה נפוצה, צריך אתה לוקח CS50 כשינה ראשונה? בהחלט. ואכן, אני מתחרט שלא מצא את דרכי או למצוא שדה חדש וכן כי בשנה הראשונה. וגם כדאי לכם לקחת CS50 עם קורסים אחרים, בוודאי כל well-- ואת העצות הכלליות נוכל לתת לתלמידים, כי CS50 כנראה לא מהסוג של הכיתה או בכיתה intro כי אתה צריך לקחת עם שלוש אחרים או ארבע כיתות p שנקבע אחרות. אבל אם אתה לוקח שני p-סט שני כיתות, משהו אחר, CS50, בהחלט לניהול. היו לי תלמידים רבים בעבר עשו זאת בהצלחה לא מבוטלת. וכדי להשיג אותך לכיוון כי לסיים קו בהצלחה, האם כמובן יש sections-- מסלולים שונים לסטודנטים פחות נוח, יותר נוח, ואיפשהו בין, לפיה במהלך של סט הבעיה הראשונה, תתבקש לתאר את עצמך. ואם אתם נמנים עם אלה פחות נוח, זה מסוג הדברים כי אתה פשוט יודע למדי. ואכן, זה היה גוברת דמוגרפית CS50 עבור לא מעט שנים. נכון לסתיו האחרון למשל, 58% של הכיתה הגדירו את עצמם בין אלה פחות נוחים, עם 9% בקרב יותר נוח, ולאחר מכן התלמידים האחרים שם אדום המתאר את עצמם כמו איפשהו באמצע. ותראה כאן נושאים הכוללים ולוח זמנים של חלקים, כל אחד מהם מוצעים פנים אל פנים, ב בזמן אמת, עם הקורס צוות מדהים של עמיתי הוראה ועוזרים כמובן, שחלקם תפגוש בעוד רגע. סעיפים עצמם, כפי שתראו, יהיו שני להיות והשלישי והרביעי, כדי לאפשר לך לצלול אחרי מרתק, אם אתה כל כך לבחור, במהלך של להרצות כמה ימים קודם לכן. ואז שעות במשרד, אשר בהחלט, עם כל שנה חולפת, היו לא פחות של לאתגר עבור הקורס. והשנה, אנחנו מתכננים לא רק לכהן hours-- אחד על אחת ההזדמנויות לעזרה עבור סטודנטים בימי חמישי רביעי וראשון שהאחרונה אלה להיות אחר הצהריים על ידי עיצוב להפחית קצת את הלחץ כי תמיד עולה עם לילה מאוחרת p-settting עם תאריך יעד looming-- אבל שעות עבודה תוצענה בימי שני ושלישי ו רביעי, ושישי ושבת, תודה לחברים שלנו ב- HSA. CS50 עכשיו יש שטח משלה עבור סטודנטים וסגל CS50, גבי 67 רחוב הר אובורן, ממש שם בכיכר הארוורד. החזון שלמענו הוא CS50 של TFS ו CAs בכל ימות השבוע, פחות או יותר לאורך רוב ימים, יהיו שם עבור תמיכה. אז אם יש לך כמה שאלה על-סט p או שאתה מרגיש קצת חסום או קצת מבולבל, ו לעזאזל, יש לך שעה או חצי שעה בין מעמדות, במיוחד square-- אתה יכול פופ ויש שאלה זו ענתה יש בלבול כי clarified-- מאוד ברוח, אתה מכיר, של המתמטיקה מרכז השאלות במתמטיקה עצמו של המחלקה, אבל פחות או יותר מסביב לשעון לכל [? Gcal?] וכי נפרסם באינטרנט. ללמד שיעורים פרטיים זה זמין גם עבור אלה תלמידים, באופן חופשי מהקורס הצוות עצמו אם אתה רוצה יותר אינטימי אחד על אחד, או שניים או שלושה חברים לכיתה רק, עובד עם אחד מחברי הצוות של הקורס. ואכן, אלה הם רק כאן חלק מחברי הצוות של הקורס, כמה מהם תמצאו לפגוש בעוד רגע. למעשה, CS50 עצמו עמית הוראת ראש, ומהלך ראש עוזר, מורה, יכול לבוא על, הקפד להשאיר אותם להגיד שלום. [תְשׁוּאוֹת] דובר 1: [לא ברור]. [תְשׁוּאוֹת] דובר 2: [לא ברור]. [תְשׁוּאוֹת] דובר 3: [לא ברור]. [תְשׁוּאוֹת] DAVID מלאן: ולאפשר לנו להביא על לוח שניים CS50 של רוב סגל בכיר, ורוב Zamayla גם כן. [תְשׁוּאוֹת] ואכן, הן ורוב Zamayla היה איתנו במשך זמן כה רב, כי הייתי מסוגל להיכנס של ארכיוני CS50 ולמצוא SD מאוד זה מדה מהם השתתפות על הבמה עצמם לפני כמה שנים. ROB: [לא ברור]. [תְשׁוּאוֹת] ZAMAYLA: [לא ברור] [תְשׁוּאוֹת] DAVID מלאן: תודה. אז בנוסף אלה צוות חברים כאן, יש CS50 צוות של כמעט 100 חברי הצוות, שכולם יהיה זמין עבור חלקים ושעות משרדים והרבה מעבר לכך. וכמו רוב אומר גם זה השיפוץ המשמעותי ביותר של CS50 ב -10 השנים כי הייתי [לא ברור]. [לא ברור] התמקד במיוחד במתן מבנה תמיכה, זמירה משם הרבה את העיקר זה כבר שנצבר 10 שנים התפתחויות איטרטיבי של על סטי הבעיה של הקורס. אז השנה, לא רק בכיתה אבל גם בצורה של הבעיה של הקורס סטים, אתה צריך למצוא דברים להיות יעיל יותר, גוזם, הרבה יותר לניהול מאשר בשנים האחרונות, כפי שאנו לשפוך קצת מהמטען זה שפותח על ידי הטבע של שנה מתפתחת אחרי שנה ולביקורות. אז חדש ומשופר מתחיל היום. תפגוש חלק יותר של הצוות החוצה של הקורס [לא ברור] בשעה 2:30, שם אנו משרתים, כמסורת, עוגה. יש קצת יותר עוגה מזה, אבל אתה ארין נפגש וטוביאס ואחרים עדיין. ותן לי לתת לך סיור לפני שאנו שומעים מכמה חברי צוות אחרים בכיתה, של מה מחכה גם כן. למעשה, אנחנו תמיד להתחיל של CS50 סמסטר בשבת הקרובה, עם מה שנקרא יום פאזל CS50. יש לזה שום קשר עם מדעי המחשב כשלעצמה, אבל עם על בעיה פתרון כללי יותר. ואם אתה כל כך לבחור לקחת חלק, לכל חלק מההזמנות, שאולי ראית דלת ירד או על הבמה כאן, זו הזדמנות בצוותים של שניים או שלושה או ארבעה, להשתתף עבור חידות ופיצה ופרסים ו יותר-- בשבת הקרובה, להישאר מכוון לפרטים. אתה תמצא גם שכל שישי, בשעת אש ושל קרח, אין CS50 להביא חבורה של סטודנטים כולו לארוחת צהריים, כדי לבצע גדול בכיתה מרגישה יותר אינטימית, ובאופן כללי להפגיש בוגרים וחברים מתעשייה לדבר על מה יש להם היה עד מאז סיים. בדומה לכך, השנה, תהיה לנו לחנוך את הראשון אי פעם CS50 50 קידוד contest-- סמסטר אמצע הזדמנות לאפשר לכולם על להצטרף בסיס, יש אתגר של שכל נגד חברים לכיתה, שוב בצוותים של שניים או שלושה או ארבעה, תוך שימוש בתוכנות של היחיד מתמצא שאתה אז יש תחת החגורה שלך כעבור שש או שבע שבועות של הכיתה, והשתתפות בסוג זה של התחרות online-- אם תרצה לחדד משלך מיומנויות שבעתיים בכך אתגר. בסוף הסמסטר הוא מה שנקרא CS50 Hackathon-- הזדמנות שמתחיל בשעה 7:00 PM מסתיים בשעה 7:00 בבוקר, ולאורך כל הדרך 12 שעות הערב שבו לצלול אל project-- הסופי של הקורס הזדמנות לעצב ליישם ביותר משהו מעניין לך עם ההוראה שלכם ההדרכה של הבחור. בסביבות השעה 9:00 לפני הצהריים אנחנו בדרך כלל לשרת פיצה, 1:00 לפנות בוקר, פיליפ, ואת רק מעטים מאיתנו שעדיין ער בשעה 5:00 בבוקר, הסעות הנם bussed במורד דרך IHOP לארוחת בוקר. ואז כמה ימים לאחר מכן הוא CS50 שנקרא fare-- קץ של תערוכת סמסטר ב חגיגה של כמה רחוק כל כך הרבה תלמידי CS50 באים בשבוע אפס כל הדרך עד שבוע, ו תוך התחשבות כי 73% מאלו לכיתה ושלך השנה יש לא לקח בכיתה CS לפני. למעשה, לשוב ולהדגיש עד כמה, כאן הוא פרצופים עוד כמה מצוות של CS50. SPEAKER 4: [לא ברור]. SPEAKER 5: [לא ברור]. SPEAKER 6: [לא ברור]. SPEAKER 7: [לא ברור]. SPEAKER 8: [לא ברור] SPEAKER 9: [לא ברור]. SPEAKER 4: [לא ברור]. SPEAKER 10: [לא ברור]. SPEAKER 11: [לא ברור]. SPEAKER 12: [לא ברור]. SPEAKER 13: [לא ברור] SPEAKER 14: [לא ברור]. SPEAKER 13: [לא ברור]. SPEAKER 15: [לא ברור] SPEAKER 16: [לא ברור]. SPEAKER 11: [לא ברור] SPEAKER 5: [לא ברור]. DAVID מלאן: חלק מן הצוות הם עצמם קניות כיתות. אבל אם אותם חברים סגל CS50 נמצא כאן, יכול לבוא על עד לרגע. CS50 של TFS ו CAs ו [? צוות ?] חברי כאן-- אלה הם רק כמה של faces-- אחד מהם אתה פשוט ראה, וכמה other-- ועוד כמה אנשים עוֹד. למה שלא נלך קדימה ולאפשר אתם הפסקה של חמש דקות. אם אתה צריך להתכופף אל כיתות חנות, זה בסדר. ותוך חמש דקות, נצטרך לחדש, לקיחת מבט Scratch-- הראשון של שפת התכנות שלנו, לפגוש הצוות של הקורס כאן עוד קצת, ולהתמקד בסופו של דבר על בעיה להגדיר אפס. אז נחזור בעוד חמש דקות. [תְשׁוּאוֹת] בסדר. אז חזרנו. ובכל שלנו הנותרים היום זמן, המטרה הוא ברמה המגרשת מבחינת מינוח מסוים, במונחים של כמה רעיונות. כי אכן, לפי חלק במצעד קודם לכן, יש הולך להיות מגוון של רמות של ניסיון בכיתה, יש כמה שתלמידיהם לקח קצת תכנות לפני, שחלקם לא עשה זאת. וכך עם בעיה ראשונה זה להגדיר ועם השפה הראשונה זה יש לנו הזדמנות להתחיל לקחת כמובן מאליו לאחר היום כמה אוצר המילים רעיון משותף. ואנחנו נעשה את זה בדרך של languages-- הראשון של הקורס בנוסף C ו- Python ו- JavaScript ו- SQL ו- HTML ו- CSS, אנו נתמקד תחילה ופשוט לבעיה להגדיר אפס על שפה גרפית זה, שנקרא Scratch, שפותח על ידי מעבדת המדיה של MIT בהמשך הדרך, כדי לעזור סטודנטים וילדים במיוחד להתבטא algorithmically-- בצורה עקבית יותר עם מה נוכל לקרוא חשיבה חישובית. וזה שפה שימושית כי מהר מאוד בשבוע הבא בשבוע אחד, אנחנו המעבר יותר שפה מסורתית ונשגבת בשם C, שהוא גרידא טקסטואלי. אתה רק להשתמש במקלדת שלך כדי לכתוב הוראות כמו אלה במסך. אבל גם אם לא ראיתם שפת תכנות לפני, ב אפילו מבט זה, כל להיות זה נסתר, אתה בוודאי יכול לנחש כי כנראה מדפיסה Hello World. אבל יש הרבה תקורה התחבירית שם. ישנו חשיש המוזר סמל או חשיש תג למעלה. יש סוגר הזווית, כמה בסוגריים, סוגריים מסולסלים, חצי colon-- יש פשוט כל כך הרבה חזותי תחביר שמקבל בדרך. אנחנו מתחילים את הקורס Scratch כדי לקבל בעבר כל אלה אינטלקטואליים הסחות דעת לא מעניין, ולהתמקד במקום על הרעיונות. למעשה, זה יכול להיות לפני. זה, לכך, בשבוע יהיה אחרי. זה, ב גרפי זה Scratch השפה, איך אתה תגשים אותה program-- תוכנית שכאשר לרוץ, פשוט אומר שלום העולם. ומה שיפה Scratch הוא שזה תכנות גרפי זה סביבה המשתמשת חתיכות הפאזל או בלוקים, כי משתלבים יחד רק אם זה הגיוני הגיוני לעשות זאת. ועם שריטות אתה יכול לפתח אנימציות ומשחקים אינטראקטיביים ואמנות, וכל מספר דברים אתה יכול לדמיין בראש שלך, וליישם אותם פשוט על ידי גרירה ושחרור חתיכות הפאזל. ואכן, תהיה לנו את היכולת להביע חלק מאותם הרעיונות כי רק הזכרתי רגע לפני בהקשר של מייק סמית וחיפוש הדברים book-- טלפון כמו פונקציות, רק פעולות, דברים כמו לולאות שעושות דברים שוב ושוב, משתנה, שהוא משהו שאנחנו נכיר, אבל זה מוכר אולי מן algebra-- סתם איזה מציין מיקום לאחסן כמה בשווי עשוי לך צריך ביטויים בוליאני later--, איפה אלה כן לא או נכון שאלות שווא מלפני. התנאים הם אלה מזלגות ב road-- אלה סניפים כביכול. ואז יש איזה חובב תכונות שאנחנו נראה גם היום, מערכים וחוטים התקשרו אירועים, כי לאחר מכן ניצור שוב מעל זמן בשפות שונות. אבל Scratch מאפשרת לנו כדי לחקור את כל אלה. אז כאן Scratch, סגול זה החסימה כזו היא מה פונקציה היא בדרך כלל הולך להיראות. פיסת הפאזל סגולה זה כי יש כמה מילה כמו למשל, המהווה את הפעולה, ואז זה עלול להיות בעל טיעון או parameter-- בדרך כלשהי מסוג של התאמה אישית מה לחסום שעושה כך שזה לא נקבע מראש על ידי MIT מה הבלוק הסגול הזה אומר. למעשה, תראה בתוך רגע שאני מסוגל להקליד המילים כמו שלום עולם, או שלום דוד, או שלום Zamayla, או מה שאני רוצה, בטיעון לזה חידה piece-- התיבה הלבנה שם. בינתיים, אם אני רוצה לולאה, יהיו לנו לראות שיש חתיכות הפאזל נראה קצת כתום כזה. וצורתם סוג של מצביעה על כך משהו קורה שוב ושוב במחזור. אז אם אני עוטף גוש שלום עולם לומר עם לחסום Scratch לנצח, זה פשוט הולך להמשיך להגיד שלום העולם לנצח, פשוטו כמשמעו. בינתיים, יש עוד סוג של לולאה ב Scratch שאנחנו שתראה-- שידור חוזר block-- שבו, אם לדעת מראש כמה פעמים אתה רוצה את הלולאה לבצע מספר סופי של פעמים fact-- לך ניתן לציין כי על ידי הקלדת מספר או אפילו חיבור משתנה, כמו x או y כפי שנראה. למעשה, משתנה כמו אני במקרה זה, אשר הוא שם נפוץ עבור משתנה שלם כי רק מאחסן number-- שלם יכול להיות, להשתמש בבלוק כתום זה כאן להגדיר משתנים כמו שאני לאפס. הנה דוגמה בירוק של ביטוי בוליאני Scratch. למרות זאת נראה כמו מתמטיקה נוסחא, אי-שוויון במתמטיקה ככה באמת הם ביטויים בוליאני. זהו או אמת או שקר. אני הוא פחות מ -50. זה או כן או לא תשובה או תשובה אמת או שקר. ואנחנו בדרך כלל נתקשר אלה ביטויים בוליאני. וזה לא צריך להיות 50. זה יכול להיות x פחות מ y, גדול מ y, שווה y-- כל מספר של אחרים ייתכן שתתבקש שאלות. עכשיו, במבט ראשון, זה עשוי להיראות פתאום די מודגש כאן, וזה. אבל רעיון חכם, זה די מוכר מלפני. אם x קטן מ y, מאשר לומר באותה מידה. אחר אם x גדול מ y, אז לומר את זה. אחר אומר x שווה y. אז יש לנו כאן דוגמה שם של scenario-- שלישי ה- x possibility-- השלישי רק הוא או גדול יותר, נחות יותר, או שווה ל. אז יש לנו מזלג שלושה אופן הכביש. ושימו לב מה Scratch כאן-- מגניב, זה היה נראה, יש רק חידה אחת חתיכה, במקרה זה, ב אם בלוק אחר. ובכל זאת, זה היה נראה לרמוז שתוכל יש מזלג דרך שתי רק על הכביש. אתה יכול ללכת שמאלה או ימינה, אבל ומה עם זה תרחיש שלישי? מה אם x שווה y? לא עניין גדול. קח פיסת הפאזל אחד, לשים אחר בתוך אחד זה כדי ליצור את המקבילה הסמנטית אם של, אחר אם, else-- ועכשיו אתה יש מזלג השלוש דרך על הכביש. וכמו שאנחנו נראה, חתיכות הפאזל Scratch ניתן למתוח ולגדול, כך כמו לדחוס פנימה עוד ועוד דברים אותם. אתה לא צריך להתאים הכל בגודל ברירת המחדל שלה. זה משהו יהיה לנו לראות בקרוב נקרא מערך. זה כמו list-- דרך כלשהי לאחסון פיסות מידע מרובים במשתנה, ולא רק מספר. אלה נצטרך לראות נציג של משהו שנקרא multi-threading. למעשה, כל שלך מחשבי מקינטוש ומחשבים בימים אלה לתמוך multi-threading, מה שאומר שאתה יכול פשוטו כמשמעו לעשות מספר דברים בו זמנית. אתה יכול לקבל Microsoft Word למעלה בקדמת הבמה, עובד על מסה כמה. ייתכן שיש לך דפדפן בפתיחת הרקע G-mail או פייסבוק או משהו דומה. המחשב יכול לעשות מספר דברים היום כי היא ריבוי הליכים, ותוכניות הם נמצאים ב במיוחד הם גם ריבוי הליכים. יש דברים בשם אירועים גם בעולם של גרד, ואז יש הרבה יותר מדי, כדי להפוך את חתיכות הפאזל אישית שלנו אם הדברים לא באמת קיים מראש. אז בואו להניע זו כדלקמן. לפני כמה שנים, כשהייתי גילה לראשונה Scratch, כשהייתי למעשה סטודנט לתואר ב- MIT, אנחנו עצמנו הופקדו לעשות שיעורי בית. ואני implemented-- אשר, בדיעבד, הייתה החלטה גרועה מאוד כי זה השיר המקומם ביותר בעולם להקשיב במשך שמונה שעות תוך כדי עבודה על homework-- שלך אבל משהו שנקרא לי זמן אוסקר, שהוא אולי שיר מוכר. CS50s בעלי ירדן הייאשי, אחד שלנו בכירים יותר אנשי צוות, שידרגה זה לשנת 2015 ו עכשיו 2016, מאז חזרה היום, היה לי הכל רק הולך אל פח האשפה של אוסקר. עכשיו אנחנו תומכים מיחזור קומפוסט. אבל כדי לצייר את התמונה מה אנחנו יכולים לעשות כאן וכדי להניע חלק הדוגמאות ברמה נמוכה יותר, נוכל לקבל אחד אחר מתנדב רק לבוא על למעלה ולשחק שלי ראשון שיעורי בית אי פעם? בוא תעלה. מה שמך? הנרי: הנרי. DAVID מלאן: הנרי, יעלה לכאן. בוא תעלה. ראש בכל מקרה, ו תראה בעוד רגע, אני הולך קדימה ופגעתי דגל ירוק הימנית העליונה בפינה, כלומר ללכת. סמל תמרור עצור מעט הוא הולך לומר להפסיק, וזה היה הרגע שבו אתה מתחיל ולעצור את התוכנית. נעים להכיר אותך. בסדר. אז אנחנו הולכים לראות את ההוראות על המסך בעוד רגע. ובדיוק ידי לשחק במשחק הזה במשך כמה seconds-- תאמין לי, אנחנו לא הולכים רוצים לשחק כל הדרך אל end-- תרצה לקבל תחושה של מה שהתוכנית עושה. וזה יותר מסתם להתמקד הנרי להיות טוב או רע במשחק הזה, המיקוד וכיצד היה זה מיושם על ידי לי במקור ולאחר מכן על ידי ירדן. במילים אחרות, שם הם המשתנים? איפה הן הלולאות? איפה הן הפונקציות? ונראה אם ​​אנחנו לא רואים אלה מתחת למכסה המנוע. פשוט לחץ וגרור אשפה לסל המתאים. [מוסיקה מתנגנת] בסדר. זה טוב מאוד. למה לא נעצור את זה שם. תודה רבה לך. ברכות הנרי. תודה רבה לך. [תְשׁוּאוֹת] תארו לעצמכם באגים בתוכנית. אם יש בעיה שנייה בדקה ה song-- אבל כך מה קורה פה באמת? מסובך כמו שזה אולי מתחילים נוטים לקבל לאורך זמן, אכן יותר ויותר דברים החלו ליפול, מה שמעניין אצל סוג זה של, לדוגמה, בין ונראה כמה נוספות-- היא שאם אתה להסתכל על העבר המורכב או התחכום של המשחק, יש בניין מאוד פשוט בלוקים כי ולנגן-- שכולן, אם אתה לזקק אותם לאלה אבני הבניין, נגישים מאוד ו ישימה בפני עצמה. למשל, זה כבר כמה זמן, אבל אני די בטוח מה בתחילה עשיתי כאשר מה שהופך את המשחק הזה בפעם הראשונה היה לי לגמרי כמו התמהמה. לא התמקדתי בכלל על היגיון או את חלקי הפאזל, התמקדתי גרפיקת הממצא בהודעת הרחוב ואת פח האשפה וכל זה. אבל אלה היו נדרשים המרכיבים בהתחלה. וברגע שסיימתי להתמהמה הנחתי את מסגרת-, החלטתי, תן ​​לי רק לעשות אחד חתיכת נפילה לפח מהשמים. ואנחנו נראה Scratch תומך דברים בשם תווי sprites-- שיכולים יש תלבושות שונות על כך שהם נראה שונה. וכך שמתי אשפה תחפושת על ספרייט אחד כזה. ואני רק צריך את זה ליפול מהשמים. וכך מתברר, גרד, כמו בשפות תכנות ביותר, תומך מספרים אקראיים או מספרים אקראיים פסאודו קוד טכני, כך על ידי גרירה הפל חתיכות הפאזל מסוימות, הייתי מסוגל לקבל את האשפה לבוא משמאל בהתחלה. ואז בפעם הבאה הוא ירד, מ ימינה ואחר כך מהאמצע. וכל המשחק לא היה פשוט יש אשפה נופלים מהשמים. אתה לא יכול להצביע על זה או לחץ על זה. אתה לא יכול לפתוח את פח האשפה. אתה לא יכול לעשות שום דבר. אבל זה היה צעד תינוק לקראת החזון האולטימטיבי שלי. ואחרי זה, אני ממש מיושם איזשהו של חישה כך שאם עשית לחץ וגרור על חתיכת זבל על פח האשפה, אוסקר של המכסה היה לפתוח ולסגור. שום דבר לא יקרה לפח, אבל לפחות את המכסה היה לפתוח ולסגור. אז לבדוק, השלב השני של שני. וזה מה הולך להיות מפתח בשתי הבעיה להגדיר אפס ו בתכנות באופן כללי יותר, הוא לנקוט בצעדי תינוק מכוונים מאוד אלה. כי לא רק הוא לאפשר לך מרגיש בכנות להשיג הרבה יותר quickly-- שזה הדבר הכי גרוע בעולם מנסה ליישם את כל זמן אוסקר, אז שעות מאוחר יותר פגעו הדגל הירוק, ושום דבר לא עובד כצפוי כי איפה אתה בכלל מתחילים באגים או לפתור תוכנית? זה פשוט מדהים. וכך באמת חובק את הרעיון הזה של נקיטת צעדי תינוק steps-- שוב ו again-- בנייה משהו שהוא, בסופו של דבר, באמת מרשים ומורכב, אבל בהתחלה, הוא לא כמעט באותה מידה כל כך. למעשה, בוא נעשה את זה. תן לי ללכת קדימה ו-- גרד עצמו קיים באינטרנט בכתובת Scratch.MIT.edu, ואתה תהיה אמר כפי הרבה שוב בעיה להגדיר אפס, המפרט עבור וזה כבר באתר של CS50. אבל זה מה הגרד עצמו הוא. ויש באמת רק בשלושה תחומים עיקריים. בחלק העליון השאיר שם הוא השלב שנקרא. זהו גרד. תלבושת ברירת המחדל היא חתול. וזה העולם מלבני שבו אתה יכול move-- למעלה, למטה, שמאלה, שצריך לעשות ויש דברים אחרים. באמצע הנה הקטגוריות שלנו או משטחים של הפאזל חתיכות שלנו, וצבעים שונים אומר דברים שונים. ואם אתה לחטט, תראה דברים כמו לולאות ותנאים ומשתנה ומרכיבים אחרים. ואז כאן הוא האזור סקריפטים. זה מקום שבו אני יכול לגרור ולשחרר אלה חתיכות הפאזל לעשות דברים. אז בוא נעשה דבר אחד כזה. תן לי ללכת קדימה ו-- ואני יודע איפה זה. אז אני הולך מיד ללחוץ על איפה אני יודע דברים מוכנים להיות, אבל הצבעה ולחיצה ו לחטט הן בלתי נמנעות. לכן, כאשר הדגל ירוק לוחץ, מה אני רוצה לעשות? אני הולך לעשות את זה. אני הולך לגרור פאזל סגול זה חתיכה, להגיד שלום למשך שתי שניות, ותן לי להתקרב. ואני הולך לשנות את זה להיות מה שאני רוצה שזה להיות-- hello world למשך שתי שניות הוא בסדר. עכשיו, אני הולך ללחוץ על דגל ירוק, או אם אני באמת רוצה, אני יכול מלא להקרין אותו ולאחר מכן לחזור. זה פשוט לא מפסיק הכל בחלון אחד. שלום עולם flag-- ירוק. בסדר. לא כל כך מעניין. אז תנו לי להמשיך לעשות את זה. תן לי לנסות עוד אחד. כאשר דגל ירוק clicked-- בוא לעשות משהו כמו קול. ושימו לב שמתוך בתיבה בחינם אתה מקבל צליל חתול, כמו ספרייט מחדל. אז עכשיו תן לי ללכת קדימה להכות עכשיו את הדגל הירוק. [מיילל] אה. זה מקסים. אני תכנות. אז מה עשיתי? זו המקבילה של תוכנית. זהו כמובן סופר פשוט. זה באמת לא לקח כל כך הרבה מאמץ MIT עשו את רוב העבודה, אבל יש לי קרא לפונקציה. השתמשתי פונקציה. ביצעתי פעולה כלשהי, רק באמצעות כי פיסת הפאזל אדומה אחד. ובכן, אם אני רוצה לעשות שלושה מיילל ברציפות? תן לי ללכת ולעשות שניים או שלושה. ושימו לב שכאשר אתה לרחף הסמוכים חתיכת פאזל, קו לבן קטן מופיע מעין מגנטית, וזה יהיה לצלם יחד כאשר אתם משחררים. בואו לראות מה קורה כאן. [מיילל] יש באג. אני רק שומע מיאו אחד. למה זה יכול להיות? כֵּן? כֵּן. אנחנו לא באמת לשמוע את זה, אבל זה אינטואיציה טובה. כולם מנגנים בו זמנית. למה? ובכן, המחשב הוא רק הולך לעשות מה אתה אומר את זה לעשות. אז אם אתה אומר, קול משחק, לנגן צליל, לנגן צליל, אבל אתה לא אומר את זה כדי לשחק עד וסיימת, לשחק עד שתסיים, זה הולך לפוצץ דרך התוכנית ממש מהר ואל מה אתה אומר את זה כדי לעשות רק. אז אני באמת צריך לתקן זאת בכמה דרכים. יכולתי פשוט לעשות את זה, להיפטר של זה. תנו לי לנסות את זה פאזל אחר piece-- לשחק מיאו קול עד נעשה, ולאחר מכן גרור שלושה אלה ולחצו Play. [מיילל] זה לא באמת מאוד-- תודה מאוד טבעי שאתם--. אז למה לא לתת אני- לי ללכת לשלוט כאן. נֶחְמָד. חכה שנייה אחת, ועכשיו תן לי לחזור לצלילים, והן שמיעה ממלאת עד נעשה, ואז תן לי לקבל לחכות שנייה אחת. ואז הם נתנו לי ללכת ולקבל אחד יותר קול, כאילו שכאן זה מתחיל. [מיילל] קצת יותר טבעי, אבל זה לא מאוד יעיל. כמו שאני משתעמם, כל להיות זה בקצרה, לחיצה הלוך ושוב ובאמת לשכפל work-- שלי העתקה והדבקה פחות או יותר. ואכן, אם אני שולט לוחץ או ממש לוחץ, יכולתי רק להעתיק ולהדביק. מה יהיה לבנות עדיף להשתמש? מה הרעיון מלפני? כן, כך לולאה. ואכן, אם אנחנו בדקנו פה ושם, אנו עלולים למצוא בדיוק את זה. תן לי ללכת אירועים או ליתר דיוק הבקרה. אז repeat-- אני לא רוצה שזה יהיה 10 פעמים. זה הולך לקבל מעצבן מהר. אבל אני אחזור על שלוש פעמים. תן לי לחזור להישמע להשמיע את הצליל עד שזה נעשה. תן לי לחזור בקרה ופשוט לחכות שנייה אחת. ושימו לב, אתה עלול חושב שזה לא מתאים, אבל שוב אם מגנטית תתנה לזה צמד במקום, הוא יצמח למלא. מה זה לשחק עכשיו? [מיילל] בסדר. נֶחְמָד. וזה מה ייקרא תוכנית זה גם נכון. זה יילל למדי שלוש פעמים באופן טבעי, אבל זה מתוכנן טוב יותר. אני משתמש פחות יתיר. לא להעתיק ולהדביק כל דבר. השתמשתי רק רעיון טוב. עכשיו, זה עדיין לא כל כך מעניין עם שריטה לא עושה כל דבר. אז בוא נעשה משהו אחר במקום. בוא נעשה משהו לנצח. ואתם יודעים מה? Motion נראה מעניין. בואו יש לו להעביר 10 צעדים פגעו לשחק עכשיו. בסדר. ובכן, אנו יכולים סוג של דראג אותו בחזרה, והוא עדיין פועל משום שהוא עושה את זה לנצח. אז את הלולאה עושה מה זה אומר לעשות, אבל זה לא כל כך מעניין. בוא נעשה את זה. הרשו לי להוסיף בדבוקת שליטה, ולהשתמש אחד מאותם תנאים בפעם הראשונה. אז זה הולך להעביר 10 steps-- 10 נקודות, 10 פיקסלים על screen-- אז זה הולך לשאול את השאלה הזאת. אם משהו הוא נכון, אז לעשות משהו בתוך בלוק זה. אז מתברר לו חישה כולה חבורה של expressions-- בוליאני שאלות של כן לא או נכון שקר form-- הרשו לי לעשות זאת. אם touching-- ואז יש הירידה הקטנה הזה למטה בתפריט. אני יכול parameterize זה. אם נגיעת edge-- באה לעשות משהו כזה. אז אם נגיעה edge-- תן לי לחזור תנועה. ולמה אנחנו לא פשוט להסתובב 180 מעלות? בסדר. אז לנצח, לעבור 10 שלבים. אם אתה נוגע קצה, להפוך 180 מעלות. וזה לא הסוף של התוכנית בגלל שאתה בתוך גוש לנצח, אז זה הולך ללכת שוב שוב ושוב ושוב. אז בואו נראה מה קורה. בסדר. כרכרה קטנה, אבל די מגניבה. ואנחנו יכולים להוסיף על זה כמה דברים טיפשיים כי הם לא כל כך אינטלקטואליים מעניין. אבל אם פגענו זה קצת מיקרופון button-- אאוץ '. תן לי לנקות את זה. תנו לי לשפר את זה כמו הם היו אומרים בטלוויזיה. נקה כי עד, שמור, ואת עכשיו ללכת עד סקריפטים. ועכשיו, תן לי ללכת להישמע. תן לי לתת לו שם. אני אתקשר אאוץ זה. ועכשיו לשחק אאוץ קול. שימו לב שזה מופיע טיפה קטנה למטה בתפריט. בוא נראה. [אאוץ] [צוחק] אבל אנחנו יכולים לשנות t שלו על לטוס. אנחנו יכולים להיות פי שניים מעצבן. [אאוץ] או אם אנחנו עושים את זה כמו 1,000 צעדים בכל הבאה-- בסדר. אז אנחנו הולכים לעזוב כי אחד לבד. אז שוב, בנייה שאני blocks-- התחיל עם משהו פשוט סופר, ואז הוספתי תכונה, נוסף תכונה, הוסיף תכונה. ואני כבר לא מרגיש צורך לדאוג איך הראשון של תכונות אלה יושם בעודי ממשיך שכבת דברים על גבי. אז למעשה, תן לי לעשות אחד כאן אחר. תן לי להמשיך לפתוח קובץ הבאתי מראש, שנקרא כבשים. אז יש לה מעט שונה אופי זה נראה ככה. ובואו לראות אותי אם אני לא יכול לעשות משהו בעזרת מונה ב זה case-- משתנה שנקרא. אני הולך קדימה, תחת Events-- תן לי לקבל לוחצי דגל ירוק. אז הרשה לי ללכת נתונים, אשר אני יודע מ רק משתעשע לפני, מקום שבו שמשתנים. ואני הולך קדימה וגרור זה. אז משתנים בשם דלפק, אני הולך לאתחל את זה לאפס. אני יכול לקרוא לזה anything-- x או y או z-- אבל בתכנות, קורא משהו בתוך סמנטי דרך יעילה, כמו דלפק, המתאר את מה שזה לא יהיה, זה הרבה יותר קל לקרוא את הקוד שלך מאוחר יותר. תן לי להמשיך ולקבל לנצח לחסום כאן. ותן לי ללכת המבטים דף ולעשות בלוק Say. אבל מה זה מגניב על משתנים הוא שאני לא צריך פשוט להקליד משהו כמו hello world, אשר יש לנו כבר נעשה, אני במקום יכול ללכת נתונים וגרור משתנה שלי, ואפילו למרות הצורה לא ממש נראה כאילו הוא צריך להתאים, הוא יצמח למלא. ואני רק אומר דלפק עבור אחד spoiler-- שהדבר-- הוא הולך לספור. אנחנו נגיד שזה למשך שנייה אחת. אז אני הולך ללכת יש לו לחכות שנייה אחת, אז זה לא נחשב מהר מדי. ואז ולבסוף, לשנות דלפק על ידי one-- במילים אחרות, להגדיל הדלפק ידי אחד ערך נוסף ולעשות את זה לנצח. אז הכבשים מדי, כמו מתכנת, סופרת מ -0. ואם נחכה מספיק זמן, הוא יעשה את זה לנצח. אבל זה לא בדיוק נכון, כי למעשה, כפי שאנו נגלה בשבוע אחד, מספרים שלמים ומחשבים באופן כללי יותר, יש טכני רק finite-- היטב, אלא מחשבים, כאשר הם מייצגים מספרים שלמים, יש רק מספר סופי של ביטים. הנורות האלה יש יכולים לסמוך רק כך גבוה לפני שאתה מחוץ נורות. ומחשב מדי, יש רק זיכרון כל כך הרבה, יש רק כל כך הרבה טרנזיסטורים, כך שהוא יכול לספור כל כך גבוה רק. אז מתברר כי הכבשים, אני חושב, יכול לספור עד 2 מיליארד או משהו די גדול. אז אנחנו לא הולכים לחכות שזה יקרה. אבל בסופו של דבר כמה באגים יקרו כי יכול להיות כמה עולם מאוד אמיתי השלכות. אבל מעבר הכבשים, כי רק הכניס משתנה. בואו נלך קדימה ולפתוח משהו שעשיתי מראש כאן נקרא ללטף את Cat-- ללטף את החתולה לכאן. ושימו לב כאן זה כמה בלוקים, אבל כאשר דגל ירוק נקש, לנצח ביצוע הפעולות הבאות. אם אתה נוגע בעכבר pointer-- כך את הסמן על המסך, מציאה גדולה arrow-- משחק קול ואז לחכות שתי שניות. ובדיוק לשם כך לנצח. רק זמן לחכות כדי לראות אם pointer-- אם החתול נוגע מצביע. אז לחצתי על כפתור ההפעלה. שום דבר לא קורה. אבל כמו שאני מזיז את הסמן מעל החתול, [מיילל] ואם אני להזיז אותו משם, לא ליטוף החתול יותר. אז איזה היגיון מותנה מקונן בתוך לולאה. מה דעתך על בדוגמה זו, בכוונה קרא אל ללטף את החתולה? מה זה הולך לעשות? [מיילל] למה אתה צריך לא ללטף את החתול? [מיילל] בסדר. אז זהו דוגמא אם אחר. זוהי נקודת החלטה כי זה יושב בתוך הלולאה, שניהם מקבלים בדק. זה נכון? זה נכון? זה נכון? זה נכון? ובסופו של דבר, אחד אלה הולכים ליישם ולכן אתה שומע גם את מיאו או שאגת האריה במקרה זה. ובכן, בוא נעשה אחד מפואר מעט יותר כי עשיתי מראש מדי-- אשכולות. אז חוט הוא רק אחד דברים שמחשב יכול לעשות. אז תכנית ריבוי הליכים היא תכנית שיכול לעשות דברים בו-זמנית. וכל הדוגמאות הללו עד כה היו רק תסריט אחד, אם אפשר speak-- תוכנית אחת כמו את זה כאן. אבל לב בתוכנית זו יש שני שדונים, שתי דמויות. האחת היא ציפור. האחת היא חתול. ושימו לב כאשר אני לוחץ על למטה אלה יש שמאל, הם כל התסריטים שלהם או תוכניות הקשורים בהם. ושניהם מאותם תוכניות, הודעה, התחלה עם כאשר clicked-- דגל ירוק בואו להסתכל cat-- כאשר הדגל הירוק נקש. וכך אכן, כשאני פגעתי לשחק עכשיו, שני דברים הולכים לקרות בבת אחת. החתול והציפור הן הולך לפעול בעת ובעונה אחת כדי ליצור את האפקט הזה. ואתה יכול לתאר לעצמך מה קורה. יש לולאה והציפור והחתול מסודר בלולאה. ציפור רק היא מקפצת כמו הייתי לפני כשאמרתי אאוץ '. אבל החתול אינו ברור יתרון. יש עוד גוש חישה שמצביע החתול בכוונה אל הציפור במקרה הזה כאן. כדי שנוכל ניסינו להפריד, ע"י הסתכלות באמצעות בלוקים אלה, מה קורה. אבל המרכיב העיקרי כאן הוא אחד. ציפור, כך שהמשחק הזה הוא לא boring-- או זה animation-- לחלוטין מתחיל ב בכיוון אקראי. והמחשב לקטוף מספר בין 90 ו -180 למעשה, כך שזה מעט אנימציה שונה בכל פעם. ואז מבחין כאן, אם החתול נוגע בציפור, אז לשחק האריה ארבעה sound-- השאגה. אבל בינתיים בציפור של לוח, יש לנו את זה. Forever, אם לא נוגע חתול, רק להמשיך לנוע בשלושה שלבים. ואז הנה עוד פיסת הפאזל. אם אתה על סף ייאוש, להקפיץ. אז ציפור היא פשוט סוג של עסוק בענייניו, רק עף ו הקפצה, וזה באמת החתול היה ההיגיון המותנה כדי לקבוע אם הוא תפס את הציפור. בסדר. אז בוא נעשה אחד אחר כאן, אחד זה להיקרא היי היי היי. ואת זה כאן פשוט עושה זה בלולאה לנצח. אבל notice-- איך נעצור זו תוכנית מאוד מעצבן? הכה את מקש הרווח. כי אם אני עושה את זה, program-- יד שמאל שימי לב שזו זמן הקשבתי-- הוא בעיתונות שטח המפתח. אם על מקש הרווח לחוץ, ואם כן, מה הוא עושה? הוא עושה טכניקה נפוצה מאוד. הצעה זו קובעת משתנה שווה ערך כלשהו. אבל זה מחליף ערך. [? אז מראה?] מבוסס על I shape-- יש משתנה שאני כתב מראש בשם מושתק, אשר רק אומר כן או לא. האם הקול מושתק או לא? אמת או שקר? ושים לב, אני אומר זה- אם מושתק הוא אפס, אז לשנות לאחד, אחר הגדיר אילם זה לאפס. אז פשוט הזז את הערך מאפס עד אחד. יכולתי done-- לשנותה משתיים לשלוש ושלוש עד שני או ארבעה לחמישה או ארבעה לשישה. אבל זה לא משנה מה מספר אני משתמש, כל עוד אני שומר שינוי זה ההיפך. והכי כל מתכנת היה פשוט לבחור אפס one-- שווא ואמיתי, מפעם לפעם on-- לייצג את. וזה עדיין פועל. אם אני לוחץ על המקש הרווח שוב [SEAL SOUNDS] התכנית עדיין פועלת. כי יש סקריפט אחרים זה שאומר, לנצח לבצע את הפעולות הבאות. אם המשתנה המושתק שווה zero-- כך שאם אתה לא מושתק logic-- היא אם זה שקר או לא, ואז להשמיע את הצליל, בגלל שאתה לא מושתק. אתה צריך לשחק את הצליל ולאחר מכן חושב היי היי היי למשך שתי שניות ואז לחכות, ולעשות את זה שוב ושוב ושוב. וכך, בדרך זו יש לנו דרך אנשים עם-- עבור תוכניות כדי אינטראקציה. והם לא צריכים כמו לתארך כמו אחרים. למעשה, תוקעת around-- לא משחק מלים intended-- מישהו השקיע סכום עצום של זמן באינטרנט ביישום PokemonGo ב Scratch. זה אפילו geolocates אותך קיימברידג 'או אלסטון כאן. אז אם אתה רוצה לראות גם מה אנשים יכול לעשות הוא זה- תפריט מפואר מאוד. לחץ כאן. זה אני עם מקשי החצים שלי עכשיו. אני הולך אחרי זה. נְקִישָׁה. ועכשיו אתה לוחץ על Pokeball. כלומר, אני חושב שאתה אמור לסמן את Pokeball. בסדר. אז עשיתי את זה. אני יכול ללכת לכאן. והאדם הזה מיושם עוד קצת PokeBalls מעל כאן-- שלושה PokeBalls. נפרסם קישור זה באינטרנט, כך שאתה יכול לשחק. אבל ההודעה יש רק כמה אבני בניין בסיסיים. זה נראה הרבה להשתכלל, וזה. זה מרשים יותר ממה שהיו בדרך כלל לצפות, בוודאי עבור בעיה להגדיר אפס. אין לי מושג כמה זמן אדם זה בילה באינטרנט. אבל זה מכיל רק לולאה. יש משחק קול. יש איזשהו לולאה האזנה עבור אם אני מכה על החץ למעלה או למטה חץ או השמאל והימין, ולאחר מכן ואם כן, זה זז זה קצת מספר הפיקסלים. ואז אם אני לוחץ על ספרייט אחר, יש איזה אם המצב שם. כן, זה הוא מקבל מדי אינטנסיבי. אנחנו הולכים לעצור. זה כל אלה אבני הבניין הבסיסיות. אין מרכיבים אחרים אחרים מאלו בדקנו כבר. ובכל זאת, הנה, תן לי לעשות קבוצה אחת סופית של דוגמאות כי מצייר תמונה מדי מה אתה יכול לעשות כאן. הנה תוכנית פשוטה מאוד כי פשוט עושה זה- שיעול, שיעול, שיעול. וזה רק על סמך מה בדקנו עד כה, איפה את המובן מאליו הזדמנות לשיפור. תכנית זו היא נכונה. זה משתעל שלוש פעמים, וזה מה שהתכוונתי. אבל זה מיושם בצורה גרועה. הוא מעוצב בצורה קשה. למה? כֵּן. זה לא לולאה. וזה לא כל כך הרבה שזה לא לולאה, זה שיש הרבה יתירות. יש מועתק קוד מודבק, אם אפשר לומר כך. והפתרון כנראה אכן הוא לולאה. אז תן לי ללכת קדימה ולשפר עם זה. ואני הולך לגרור את אלה כאן. תן לי להמשיך ולקבל חזרה בלוק, לשנות את זה שלוש. אני הולך לזרוק כמה בלוקים אלה. ותבחין זה די אינטואיטיבי. אתה גרור ושחרר ודברים מופיע ונעלם בסופו של דבר. ואני רק יכול לגרור את זה כאן, עכשיו יש לי גרסה נקיה עדיין. אבל אתה יודע מה? יש זה הזדמנות עכשיו abstraction-- כדי להתחיל להגדיר אוצר מילים חדש כי MIT לא צפה. יש להמתין וחזור ו לנצח ואם, אבל מה אם אני רוצה להציג המילה שיעול כבלוק? מה אם אני רוצה חתיכת פאזל המטרה בחיים שלו היא להשתעל? ובכן, בואו נסתכל על גרסה זו כאן, אשר עשיתי כדלקמן. באורח פלא, אני יצרתי פיסת הפאזל הזה כאן, אשר Scratch מאפשרת לך לעשות. ואכן C ו- Python ו- JavaScript הולך כדי לאפשר לך לעשות גם את זה. אתה יכול ליצור מותאם אישית משלך חתיכות כי אתה קורא את מה שאתה רוצה. במקרה זה, שיעול מרגיש כמו הגדרה סבירה. ואז עם היצירות האלה למטה כאן אתה יכול להגדיר מה זה אומר. גררתי וירד מ לוח זה כאן-- יותר blocks-- גדול זה סגול סגור שבו הקלדתי שיעול כפי שהשם של פיסת הפאזל החדשה שלי. ואז אני אומר כל פעם שמשתמש קורא פיסת הפאזל שיעול החדש הזה, לעשות נגיד ומתנה. וכך עד כאן בבלוק החוזר שלי, אני יכול רק להשתעל שלוש פעמים. ואני אטען, במיוחד אם עכשיו אתה להסתיר פרט זה. למי אכפת איך שיעול מיושם? כל מה שחשוב לי בתור מתכנת שאני יכול להשתעל. לא אכפת לי איך לומר הוא מיושם. אני פשוט אכפת כי חתול יכול לומר משהו. אני יכול מופשט משם כי מידת הפירוט רק להתמקד במה על המסך כאן. אבל אני יכול לקחת את זה צעד אחד קדימה. שימו לב שגם כאן, יש לי יישם את הלולאה שלוש פעמים. אבל מה אם במקום אני תופס בגרסה זו? ומה אם במקום בגרסה זו כאן, אני פשוט לשנות פיסת הפאזל שלי לקחת ויכוח וקלט בפני עצמו? ותשומת שיכול להיות מספר כמו שלוש. אז עכשיו, אם אני כותב תוכנית ואני רוצה את החתול להשתעל, אני באמת יכול להגיד את הפאזל חתיכה כמה פעמים להשתעל, כי בתחתית פה, להשתכלל הגרסה של חתיכות הפאזל מותאמים אישית אלה מאפשר לי לציין כי שיעול בעצם לוקח input-- לוקח ויכוח כזה. ואתם יודעים מה? אולי אני מבין, חכה רגע. שיעול הוא same-- זה מן היסוד אותו רעיון כמו התעטשות. זה פשוט שונה מילה על המסך. אני יכול מופשט משם עוד וליישם הגרסה הסופית של זה שיעול, אשר במבט ראשון הוא הרבה יותר מורכב מחפש. אבל שים לב למה שעשיתי. יש לי עכשיו generalized-- genericized באמת-- פיסת הפאזל הזה להיקרא לומר מילה n פעמים. ועכשיו יש לי שתי חתיכות פאזל חדשות כאן למטה להגדיר שיעול n פעמים. ומה פונקצית השיעול לעשות? מה עושה פיסת הפאזל המותאמת אישית שלי? זה פשוט קורא את הגוש יניח, עובר את המילה שאני רוצה להגיד, עובר במספר פעמים אני רוצה לומר. כי עכשיו אני יכול ליישם להתעטש על ידי פשוט אומר באצ'ו, במקרה זה, מספר כמה פעמים. וכך אני שכבות ו שכבות. ושוב, המפתח כאן הוא לא איך מימשתי את זה, אבל העובדה שאם אני פשוט ממש להזיז אלה מהמסך, תראה כמה פשוט אם לא די התוכנית שלי עכשיו נראה. כי זה עושה מה שהוא אומר, אני כבר הפשטה משם מה יש בתוכו את הקופסה השחורה. זה קורה להיות מלבן סגול כאן, אבל אני כבר חסום במרחק מה יש בפנים כי לא אכפת לי איך זה עובד. אני פשוט אכפת עכשיו זה עובד. ואכן, בבעיה להגדיר אפס, זה בדיוק סוג של שכבות של רעיונות תמצאו יש את ההזדמנות כדי לחקור. זה בדיוק ההזדמנות ליישם טכניקות לפתרון הבעיה, למה להניח שמדובר בסביבה לא מוכרת. והאם כבר לא אתה מתוכנת לפני או מתוכנת לפני, אתה תמצא כי יש משהו קטן בסביבה זו לכולם. ועם בעיה להגדיר אחד בעוד שבוע, נצטרך יועבר להתמקדות על שפה ברמה גבוהה יותר הנקראת C-- או ליתר דיוק נמוך שפה ברמה שנקראה C-- זה אפילו יותר עצמה, למרות שזה קצת יותר נסתר במבט ראשון. ואתה תבין לכל TL של היום: DR, יש שבעיה זו להגדיר קצרה חלון של זמן מאשר בעתיד אלה, פשוט כי אתה צריך לתת לו דירוג בינוני נגיש. ולא לדאוג אם אתה מוסיף את כיתת הערב. נצטרך לטפל שלא יעבור זמן רב. ולפני נתפזר לעוגה, בואו לסיים עם רק מבט של שתי דקות ובאיזה מחכה לכם כאן CS50. [מוסיקה מתנגנת] בסדר. זהו זה עבור CS50. אנו נראה אותך בקרוב. עוגה עכשיו שירתה. [מוסיקה מתנגנת] SPEAKER 17: האם שמעת של שבתון, ראשי? SPEAKER 18: אולי יש יותר מתחת למכסה המנוע.