DAVID Маланки: Ласкаво просимо, все. Так вчора, ви пам'ятаєте, що ми зосередилися на ці теми тут. Таким чином, ми мали чотири всеосяжні topics-- конфіденційність, безпеку і суспільство; інтернет-технології; хмарні обчислення; і в кінцевому рахунку, веб-розробки. Хто-небудь є пропускна здатність або час щоб подивитися трохи Джона Олівер минулої ночі? Це насправді досить забавно, якщо не трохи лякає. Будь-які питання по чому ми зробили вчора? Будь-які роз'яснення? Будь-які питання, які ви хочете зробити що ми торкнемося сьогодні в тій чи іншій формі? Так з чистого аркуша. Так що на порядку денному на сьогоднішній день? Так що я думав, що ми почнемо сьогодні з поглядом на те, що в цілому відомий як обчислювальної thinking-- в ризик спрощую, мислення як комп'ютер, може бути, думати, як інженер, і намагається почати організувати свої думки або дати вам краще зрозуміти, що залучено в фактично командує комп'ютер, щоб зробити щось шляхом програмування. І ми будемо тримати його в досить високий рівень, в значній мірі англійська, але спробувати використовувати знайомих приклади формалізації, як ви б йти про вирішення проблем. І ми повернемося трохи CS теми, як абстракції, який придумав пару Саме вчора, алгоритми, а потім уявлення. І ось, коли ми почнемо Сьогодні в мить. Тоді ми подивимося на програмування. Ми будемо дивитися на деякі основні конструкції з якими ви можете бути знайомі і, можливо, навіть знайти цілком інтуїтивно. Ми будемо дивитися, насправді, при програмуванні зразка середовище, яке дуже доступна, дуже грайлива, і дійсно орієнтовані для осіб до 12 років і старше. Ми проведемо кілька хвилин там а потім взяти речі на більш низький рівень а насправді говорити про деякі алгоритми і структури даних, так би мовити, що програмісти зазвичай використовують для вирішення проблем набагато більше ефективно, ніж ви могли б бути в змозі обійтися без них взагалі. Потім, після обіду, ми будемо дивитися в технологічних стеків, який тільки химерний спосіб сказати колекції технологій що ви могли б використовувати для вирішити деякі проблеми. І ми будемо говорити про алфавіт суп з мов, які існують раз сьогодні Java і Python і C ++ і PHP і Рубін і всякі інші речі. Ми будемо дивитися на короткий час в шаблони проектування. Програмісти, з плином часу, прийнято методології які, як правило, щоб допомогти їм вирішувати проблеми з більшою готовністю. Коли ви починаєте бачити себе писати такий же код знову і знову, люди формалізувати ці повтори і імена приписувати до них а потім використовувати їх і просувати їх, в кінцевому рахунку. І ми будемо говорити трохи про мобільних стратегій, як то, що це означає насправді зробити мобільний додаток або мобільний сайт. Ви робите це для Android? Ви робите це для прошивкою? Ви робите це для обох з них? А які компроміси? І, нарешті, ми візьмемо веб-програмування зовнішній вигляд, який є збірним терміном дійсно описуючи будь-який час Ви пишете програмне забезпечення, що це призначені для запуску в Інтернеті, будь то телефони або настільні комп'ютери або ноутбуки. Ми коротко розглянемо на баз даних і дизайн в ньому, якщо тільки тому, що практично будь-який цікаво веб-додаток в ці дні має якийсь бази даних. В іншому випадку, він би просто статичний контент. І база даних дозволяє зробити зміни з плином часу, чи то самі або від користувачів. І ми розглянемо, як ви буде йти про розробку що бази даних і свого роду жаргон які можуть виникнути в інженера обговорення на білій дошці коли насправді реалізації додаток в перший раз. Ми коротко поговоримо про API, корисні сервіси що ви можете використовувати, щоб стояти на плечі інших, будь то компанії або окремих осіб, і вирішити ваші власні проблеми швидше. І тоді ми будемо борсатися, можливо, трохи з JavaScript, мова програмування, який використовується як в браузерах в ці дні, а й в серверах. І, можливо, ми будемо повернутися, якщо дозволить час, деякі з рук-на веб-матеріал, який ми зробив вчора і інтегрувати два разом, перш ніж ми закрию. Так що з that-- що ahead-- є Є що-небудь, що не вистачає вам хотів би, щоб переконатися, що ми вводимо і торкнутися в деякій точці. Якщо це спадає на думку, довести його до того довго. Але чому б нам не почати з дивитися на обчислювальної мислення. І дозвольте мені припустити, що обчислювальна мислення, знову ж таки, свого роду опису високого рівня який вчений міг би зробити. І справді, давайте почнемо з трьома компонентами, які може перейти в обчислювальної мислення. Це лише один із способів її опису. Ми могли б, звичайно, визначити це в будь-якому числі шляхів. Але дозвольте мені запропонувати, заради сьогоднішнього дня, що проблеми в світі, всі проблеми в світі, коли підійшов вчений міг можна розглядати як те, що ми будемо викликів входів, які потрібно набридає в те, що ми будемо називати алгоритми, які потім дають результати. Іншими словами, все Світ вирішення проблем я вимагаю можуть бути перероблені в ці три компоненти. Так що ж я маю на увазі входи? Входи це тільки те, що ви передав для вирішення. Наприклад, ось стара школа проблема. Якщо у мене є книга телефону тут і Я хочу подивитися щось в нього, це мій вхід. У мене є 1000 або так сторінок в телефонній книзі. Це вхід до моєї проблеми. І я хочу, щоб знайти щось як Майк Сміт, так що один чиє ім'я і номер сподіваюся, в цій адресній книзі. Це до днів клітини телефони, так що я не можу просто шукати. Так що я повинен зробити це старий школи і насправді пошук ці входи для якусь відповідь. І ця відповідь просто буде називатися вихід. Таким чином, вхід телефонної книги. Алгоритм будь-який набір кроки я використовую, щоб знайти Майка Сміта. А вихід, як ми сподіваємося, номер телефону Майка Сміта. І це тоді було б просто представник більшості будь-якого завдання щоб з вами вручаються входи і хочуть виробляти виходи. Тому, перш ніж ми розглянемо процес за допомогою якого ми можемо вирішити цю проблему, знайти Mike Smith і щось схоже, давайте розглянемо перший і на last-- входи і виходи. Фізично, звичайно, вхід тут це ціла купа паперу склеєні у вигляді телефонної книги. Але комп'ютери, ноутбуки з course-- і настільні комп'ютери і навіть телефони ці days-- ті електронні пристрої. І в кінці кінців, що єдиний вхід на комп'ютер? Ну, це щось на зразок цей шнур тут. Я підключити його до стіни, і Я отримую потік електронів, який дозволяє запускати машину. Або, може бути, ці електрони створений шляхом моєї батареї. Але врешті-решт, це єдине, що відбувається в моєму ноутбуці. І так багато цікавого матеріал в кінцевому рахунку, виходить, будь то за допомогою принтера або екран або audially чи щось таке. Так що, якщо все, що ми маємо, як наші фундаментальний введення в комп'ютер електрику, так що просто електрони збираються в і чи поза, і так як ми можемо використовувати цей вхід насправді представляють інформацію? Іншими словами, як ми отримуємо від простого потоку електрики до подання фактичної цифри або букви, фактичні або фактичні зображення на екрані або фактичні фільми або по електронній пошті або будь-яку кількість з них вищі поняття рівня, якщо ви будете, що на кінець дня якось повинні зберігатися в цьому електронне механічний пристрій використовуючи тільки ті прості ingredients-- електрони надходять і поза домом? Так що, здавалося б, що, в простій формі, єдиний вид держав У мене є в моєму світі, тому щоб speak-- умови в моєму world-- або У мене є електрони тече, електрика тече, або я роблю не-- так далі, оф. І давайте формалізувати і вимикатися, як вчений міг би, тільки з 1 і 0. Давайте просто описати деякі довільні але відповідно до нього номер. 1 означає, що на 0 означає вимикання. Або ви могли б також розглядати це як справжні гроші на помилкові і засоби. Ви також можете зробити чорний і білого або червоного і синього кольорів. Вам просто потрібно два дескриптора. І комп'ютер б вчені як правило, просто використовувати 0 і 1. Так що, якщо це так, мій єдиний алфавіт є що складається з 0 і 1, то як я міг дістатися до навіть число 2 в комп'ютері, не кажучи вже номер 3 або буква алфавіту або зображення або фільм? Як ми свого роду початкове завантаження ми самі від цього основного принципу від 0 і 1 і фактично являють собою щось більш цікаве? Що ж, давайте поставимо це питання на утримання на мить і розглянути щось сподіваюся, знайомі, навіть якщо ви насправді не думав про вона в деталях 10, 20, 30, 40, 50 більше років. Це те, що? Як би ви вимовляєте це? Чи не хитре питання. Ряд, але що це таке? 1, 2, 3, або 123. І мені сподобалося, як ви сказали, 1, 2, 3, тому що це один із способів його перегляду. 1, 2, 3, це послідовність з трьох символів. Це картини, які ми тепер є слова для. І якщо ви як би прочитати їх всі разом, типова людина англійською мовою сказав би 123. І це свого роду вище концепції рівня, відчуває себе досить велику кількість. Але як же ми туди потрапимо? Ну, це може бути час, так як Ви думали про це, як це, але ще в мій день, я вид дізнався про це як колони 1-х, 10-х стовпець і 100 Колонка. Так як каже Lakisa, це 1, 2, 3, але це також 123. Але як же ми отримуємо з колишній до останнього? Ну, ви, як правило, роблять в 100 Колонка, у мене є 1. Так що це, як кажуть в 100 разів 1. А потім в колонці 10, я є 2. Так що це, як кажуть в 10 разів 2. У колонці 1, я є 3. Так що це, як кажуть 1 раз 3. І якщо я додам ці речі разом, це, звичайно ж, 100 плюс 10 плюс 3. І о, ось чому я отримую це вищий рівень поняття 123. Це тільки основні математики, в результаті чого ці символи мають вагові коефіцієнти до них, якщо ви буде, або заповнювач значення стовпців. І як тільки я множити все , Я отримати цей номер. Так як багато хто з вас знають, як говорити binary-- 0 і 1's-- як комп'ютер? Добре, вчинене, жоден, або ніхто з вас не думаю, що ви робите. Але я б стверджувати вас насправді це вже знаєте. Нам просто потрібно налаштувати вигляд наша ментальна модель трохи. Але процес точно такий же. Дозвольте мені залишити цей там і замість того, щоб тягнути це вниз на мить. У світі комп'ютерів, у нас є тільки 0 і 1-х. І ось річ, яка збирається змінити те, що? Ну, в моєму людському світі, десяткова система, Грудні значення 10, У мене є, скільки цифр в моєму розпорядженні? 10, чи не так? Від 0 до 9, звичайно. І саме тому ми маємо 10 в вказане місце і 100 в вказане місце. Де це приходить? Що ж, це 10 до сили 0. Це 10 до сили 1, 10 до влади 2, і так далі. Ви просто тримати множачи стовпці на 10, починаючи з тільки 1 в крайньому правому один тут. Так що в світі комп'ютери, якщо ви тільки мають binary-- бі значення 2-- або 0 і 1, ми просто дійсно потрібно змінити підставу цієї математики. Отже, іншими словами, тепер ми просто є 1 в колонку і the-- де цей going-- стовпець 2, в стовпець 4, і, можливо, за його межами. Чому так? Ну, це 2 0-го ступеня. Це 2 1. Це 2 до 2, і так далі. Таким чином, в той час як тут, у нас є 1, 10-х, 100, 1000-х, 10 000-х, 100 000, в 1 мільйони, і так далі, тут у нас є 1, 2, 4, 8, 16, 32, 64. Ви просто тримати множення на 2, замість того, щоб тримати множення на 10. Так що тепер, якщо мета в рука, щоб представити числа, використовуючи тільки 0 і 1-х, давайте розглянемо, як ми отримуємо там. Це, звичайно ж, є зразком 0 0 0, але яке число концептуально вона представляє? Ну, в 4 рази 0 плюс 2 рази 0 плюс 1 раз 0, давайте додамо їх разом. 4 рази 0, звичайно ж, 0, плюс 2 раз 0, звичайно, 0 плюс 1 раз 0 це, звичайно, 0. Таким чином, ах, це являє число, яке ми знаємо, люди як 0. Ну, а тепер, давайте дуже швидко швидко вперед. Якщо я замість того, щоб не уявляючи 0 0 0, але давайте зробимо 1 0 1, які можуть бути як Lakisa, раніше, просто вимовити його 1 0 1. Але тепер, як же ми візьмемо його до вищого рівень числа ми, люди могли б знати? Так що ж це число? Це 5, число, яке ми знаємо як 5. Ну, чому? Ну, ми можемо насправді свого роду пройти через нього методично 4 рази 1, 2 рази 0, 1 раз 1. Додайте їх разом, так це 4 плюс 0 плюс 1. І це, насправді, 5. Таким чином, це стає трохи утомливих прямо зараз робить арифметику знову і знову. Але процес точно такий же. Єдине, що має змінилося в нашому світі в тому, що наші стовпці 1, 2, 4, 8, 16, і так далі, а не 1, 10, 100, 1000. І це тільки тому, що наш алфавіт має скоротилася від 0 до 9 тільки від 0 до 1. Так як трохи вікторини тут, як би ви уявляєте число 7 в двійковій системі? 0? Ну, 0, ви маєте на увазі 0 0 0? Скажи це ще раз, Карина. Відмінно. Чому так? Це ефективно 4 плюс 2 плюс 1. Так добре. Як ми представляємо трохи another-- як щодо числа 2? Близько, але в зворотному напрямку. Так що ж це? Є 4 плюс 1, так що це 5 разів. Так what's-- мені дуже шкода, Карина? 0 1 0. 0 1 0 буде 2, тому що ще раз, навіть якщо він начебто не вискочити на тебе, просто робити математику. 4 рази 0, 0, 2 рази 1, 2, 1 раз 0 0. Так що це число, яке ми знаємо як 2. Як щодо числа 8? Хм? Добре. Таким чином, ми якось потрібен інший заповнювач. Нам необхідно 1 0 0 0. І це правда нашого роду старої системи шкільного десяткової. Як ви уявляєте числа 1000? Ну, ви, здавалося б, вид в скрутному становищі, якщо попросити вас представити числа 1000, тому що навіть якщо ви даєте собі, як 9 з них, 9 з них, 0 з них, який є найбільшим число, яке ви Тобто, ви не зовсім дістатися до 1000 чоловік. Так що якщо у вас тисячі, вам просто потрібно інше становище, так що ви можете зробити 1 0 0 0, ерго номер 1000. Так що тепер, давайте карту такого роду концептуальне обговорення назад в апаратних засобах, де знову ж, вхід був просто цей маленький кабель живлення, електрику входячи і витікання. І так, що буде відображатися тут щоб там, ну, що нам дійсно потрібно? Ну, ви можете думати, щоб бути всередині з комп'ютер, ціла купа лампочок, якщо ви будете. Вони насправді називається транзисторів. І транзистори тільки перемикачі який може або бути включена або виключена. Таким чином, ви можете думати про транзистор, який знаходиться на це дозволяє електрику текти і транзистор, що виключений як зупинка електрику від витікання. І замість того, щоб за вогні тут, чому я не робити такого роду нового стилю школи. Так що це може бути 1, ліхтарик будучи на, тільки чуть-чуть, хоча. І це може бути 0, і тепер він вимкнений. Таким чином, використовуючи це фізичний пристрій, я тепер може представляти двійкову систему. Мені просто потрібно два стану. Не має значення, що колір це або що це таке. Все, що має значення в тому, що у мене є одна держава, і інший стан вимкнено. Таким чином, використовуючи свій телефон тут, як я можу являють собою число, ми знаємо як 0? Або, що те ж саме, то, що номер я тепер представляє? 0, так як пристрій вимкнений. І якщо я це зробити? А тепер, як я можу представляють номер 2? Чи можу я взяти свій телефон тут, як ми це робили вчора? Отже, давайте подивимося, так що якщо я хочу, щоб представити номер 2, це число 2? Немає. Який номер я я випадково представляє тут? Це насправді число 3. То який з них я хочу, щоб відключити? Чорний телефон ілі-- добре, якщо they're-- чорний телефон або білий телефон? Білий телефон. Так що якщо я повернути це і ми лінія його тут, у нас є 1 в 2 свого місця і а 0 замість 1 ст. І ось тепер я представляє число 2. І це, звичайно, було б число 3, тому що тепер обидва цих вогнів включені. І я буду тут зупинятися, але само собою зрозуміло, якщо я хочу, щоб представляти номер 4 або 8 або вище, Я буду потребувати більше телефонів. Але це все, що відбувається. Так що якщо ви коли-небудь чули, що всередині a-- подякувати you-- комп'ютер мільйони транзисторів, це тільки мільйони крихітних перемикачів. І вони не горять лампочки, які запалюються і гаснуть, але вони або дозволяють електрику текти кудись або зупинити його. І таким чином, є ваші два states-- включення або виключення, включення або виключення. Таким чином, ми б, здається, в даний час щоб мати цю здатність щоб представити цю концепцію, ми хотіли б в реальному обладнанні. Але все, що ми маємо тепер можливість для представлення чисел, здавалося б. Так як же нам йти про представляють літери алфавіту, які відчуває себе подібно наступного роду функції ви хотів би додати до сучасного комп'ютера коли у вас є номери? І справді, якщо ви думаєте про це, історично, комп'ютери були введені дійсно служити калькуляторів чисельно. Але, звичайно, ці днів, вони роблять набагато більше. Навіть коли вони завантажуються, ви зазвичай бачимо одне або кілька слів. Так як же ви уявляєте слова, якщо все у вас є, знову ж таки, електрику в кінці день, або, що еквівалентно 0 і 1.? Так. Так, я маю на увазі, ми якось зробили це вчора в тій чи іншій формі, де в якийсь момент, Я думаю, що завгодно каже, що, якщо ми хочемо, щоб представляти буква А, ми могли б просто назвати це 1. Саме в контексті криптографію, де ми просто потрібен якийсь код, свого роду відображення. Так що, може бути, буде представлена ​​у вигляді 1, і B буде представлений у вигляді 2, і Z будуть представлені як 26, наприклад. І тоді єдиний нюанс в тому, що якщо я кодуватиме букви в моєї електронної пошти або в моїх текстових повідомлень як числа, ви все повинні погодитися використовувати той же набір конвенцій. І справді, світ зробив саме це. Існує система в світі називається ASCII, американський стандарт Код для обміну інформацією, який є просто рішення кілька років тому, що люди зробили, що вирішив, що буде дорівнювати, а не 1, 2, і 26, і таким чином forth-- це трохи different-- але 65, 66, 67. І я буду тягнути вгору діаграма в мить. Але це довільно. Але це не має значення що це довільно. Світ повинен просто бути послідовним. Тепер, зовсім недавно, є щось любитель називається Unicode, так як-то в світі реалізованого, після винаходу комп'ютерів, що є більше, ніж добре 256 символів в світі що ми могли б уявити, особливо, коли ви приведете Азіатських мов і інших символік що потрібно більше виразності, ніж ви може поміститися в самій ранній версії цей код, який називається ASCII. Так що фактично дозволяє Unicode використовувати більш 0 і 2. Зокрема, ви тримаєте почувши слово байт в суспільстві і навіть просто вчора. І байт, що знову? Що таке байт? Це всього 8 біт. Так що ж це насправді означає? Ну, це означає, що раніше, коли ми були говорити про бінарних і я використовую довільно три біта, коли ми були говорити про binary-- місці 1, в в 2 вказане місце, і 4-х place-- добре, байт просто означає, що ви говорите не в одиницях три, але чотири, п'ять, шість, сім вісім, що дає нам місце 8, в 16-х, 32-х, 64-х і 128-х. Іншими словами, трохи не всі що корисна одиниця виміру, тому що це просто як одна крихітна частина інформації, увімкнене. Так кілька років тому, світ просто вирішив це трохи зручніше говорити умови байтів, вісім речей одночасно. І ось таким чином, був народжений поняття байта. І тому у нас є вісім біт тут. І виявляється, теж, подібне причини, світ вирішив років тому, що для подання ASCII літери, ви збираєтеся використовувати блоки з 8 бітів. Так що навіть якщо ви цього не зробите потрібно, що багато, ви завжди буде використовувати 8 біт являють собою літери алфавіту. І це зручно, тому що тоді, якщо вам отримати повідомлення, яке має 0 0 0 1 1 1 1 0, потім ще 1 1 1 0 1 0 0 1, так що якщо ви отримуєте 16 біти, світ може просто Припустимо, що перші 8 є однією буквою а другий 8 представляють собою ще один лист. Не має значення, скільки є. Це просто важливо, що ми все послідовне коли ми інтерпретувати ці біти. І це було просто випадковим чином. Це означає, що щось, але я не зробив дійсно думати про те, що це означає. Так що це маленька біла брехня. Спочатку, ASCII фактично використовується тільки 7 біт. І восьмий біт називається розширеною ASCII. Але справа в тому, в кінці кінців, те ж саме. Світ в цілому стандартизований по 8 біт. Так що це, здавалося б трохи обмеження, тому що я можу тільки являють собою капітал A, капітал B через капіталу Z. Але насправді немає, якщо я йду, метою яких є купа ресурсів в Інтернеті, наприклад, asciitable.com, це буде трохи переважною спочатку. Але я вкажу то, що тут важливо. Це як раз трапляється be-- і я буду walk-- давайте подивимося, якщо я піду сюди. Тут, в десятковій системі стовпець, число 65. А на колонці з буквою правої руки характер, Chr, це буква А. І ви можете ігнорувати, на даний момент, все в середині. Це шістнадцяткове, восьмеричної, і HTML-код. Для того, щоб цей сайт просто намагається кинути багато інформації на вас відразу. Але все, що ми дбаємо про десяткове стовпець і стовпець символів. Таким чином, за цією логікою, то, що число, що світ вирішив представляє рядкової варто? Так, 97. І тільки заплутати потенційно чуть-чуть, яке число в світі вирішив представлятиме номер 1? Правильно, тому що we-- 49, здається, тут, вниз в лівому нижньому кутку. Тепер, що я маю на увазі під цим? Так виходить, що в комп'ютерних системах, є взагалі принципова відмінність між числом і характером. Ряд є те, що ми дізнався, коли зростають ми були супер молодих в початковій школі. Це речі, які ви порахувати. Але персонаж просто форма, гліф, так би мовити, на екрані. Тепер ми, люди роду см то, що виглядає в такий спосіб. І ми говоримо, про, тобто число 2. Але ні, це просто символ, який виглядає як то, що ми знаємо, як число 2. І ось там це фундаментальна відмінність між фактичними цифрами і символами. Це число. Але, як правило, в Контекст комп'ютера, якщо ви замість того, щоб побачити щось на зразок цього quoted-- і ви не завжди повинні побачити це в лапки, але заради discussion-- якщо ви бачите лапки навколо числа, це тепер персонаж. Так що це номер 2 під капот всередині комп'ютера буде представлений з малюнком бітів, які представляють число 50 відповідно до таблиці онлайн. Однак, якщо комп'ютер просто бачить це, це буде представлена ​​з зразок біт 0 0 0 0 0 0 1 0. У той час як цей персонаж буде насправді бути представлена ​​as-- і тепер, Я повинен думати трохи harder-- так що це символ буде представлений з 0 0 1-- що мені потрібно тут? 0 0 1 1 0 0 1 0. Як мені це зробити? Ну це число 50, якщо ви множать його за допомогою цих стовпців, це номер 2, і т.д. ось чому існує ця дихотомія. І це просто тизер тепер для функцій які існують в мовах програмування що ми торкнемося коротко пізніше сьогодні. У мовах програмування, у вас є, як правило, але не завжди, речі викликати різні типи даних. Іншими словами, programmer-- коли він або вона пише, програміст вирішує, в якому формат для зберігання своїх даних. Ви можете або зберігати дані як сирі номера, такі як номер 2. Або ви можете зберігати їх у вигляді рядків, або послідовності символів що ви, як правило, висловлюють з котирування на вашій мові програмування. Ви можете мати речі called-- Я буду спрощувати і називати їх реальний numbers-- так чисел, не є цілими числами, як номер 2, але номера, як 4.56. Так що реальні цифри можуть також мають десяткового дробу, так що це інша фундаментальна частина даних в комп'ютері. І тоді ви можете навіть інші типи даних як і раніше. Так що це просто тизер дійсно з найпростіший проектних рішень що програміст може зробити під капотом. Так що будь-які питання, тільки поки що? Так давайте спробуємо зробити це трохи більш реальним. Це устаткування не так багато в використанні більше. Але більшість все в цій кімнаті, ймовірно, виріс з і до сих пір використовує жорсткі диски якимось чином. Хоча більшість з більше не наші ноутбуки є пристрої, які працюють, як це, замість ноутбуків сьогодні в цілому мають твердотільні накопичувачі без будь-яких рухомих частин. І це, як правило, дорожче, на жаль, але трохи швидше і a-- добре, часто, набагато швидше, яка є однією з причин. А також не генерувати стільки ж тепла. Це може бути менше, так що в цілому чистий позитивний. Але це дозволяє відобразити трохи конкретніше, що ми говоримо про на 0 і 1 в рівень тепер до фізичного пристрою. Це одна річ для мене, щоб поговорити близько 0 і 1 з точки зору мого телефону або абстрактно з точки зору перемикачів бути і вимикається. Але як щодо жорстких дисків? У ноутбуках, якщо у вас є старі один, або в настільному комп'ютері, або, звичайно, в серверах сьогодні, де у вас є жорсткі диски, які мають терабайт простору, 4 терабайт простору, ну що ж це значить? Жорсткий диск з 1 терабайт космічних засобів є 1 трильйон байтів всередині нього так чи інакше, або, що еквівалентно 8 трильйонів біт усередині. 1 терабайт буде 8 терабіт або 1 трильйон біт, що означає, що якщо у вас є жорсткий диск, ви якимось чином або інші трильйон 0 ' і 1 всередині нього. А якщо ми просто подивимося на довільне зображення жорсткого диска Представник, це те, що жорсткий привід зазвичай може виглядати всередині. Це теж, ніби як старий патефон гравець але в цілому з кілька записів всередині, так щоб speak-- множинний Жорсткі диски, як вони називають, металеві круглі диски, і потім трохи голівки, що зчитує, так само, як старий патефон. І, що зчитує голівка переміщається назад і вперед і якимось чином зчитує біти. І те, що на цих тарілках, навіть хоча ми, люди, не можемо їх бачити, ні в реальності, ні в цій картині, є крихітні магнітні частинки. І навіть якщо ви вже давно забув, як працює електрику, магнітна частка який стягується в цілому має північний кінець і південь end-- так на північ і південь. І тому світ просто вирішив деякий час назад що, якщо магнітний протокол по суті вирівнюється, як це, з півночі на південь, давайте назвемо, що в 1. Якщо це замість того, щоб південь-північ, давайте просто називаємо це 0. І тому, якщо у вас є на Ваше розпорядження трильйон крихітна магнітна particles-- і, сподіваюся, апаратні винахідливість в Для того щоб привернути оточуючих як ви бачите fit--, якщо ви хочете являють собою цілу купу 0, ви просто потрібно 8 магнітних частинок вирівняні, як це. І якщо ви хочете, щоб представити вісім 1-х, ви просто потрібно 8 магнітних частинок вирівняних спина до спини до спини, як це. Що я маю на увазі під магнітні частинки? Чесно кажучи, всі ці роки по тому, річ, яка до сих пір приходить в голову цей хлопець, якщо ви виріс з цією річчю. Це little-- для ті unfamiliar-- маленька іграшка дитинства, має цей голу людина тут що є всі ці крихітні трохи чорного магнітні частинки, які приходять з нею. І за допомогою цього червону палицю, який тільки магніт, Ви можете сортувати дати йому вуса або брови або волосся або що-небудь на нього. Так що насправді, якщо ми збільшити в, наприклад, цей це вид гри ви може грати з Wooly Віллі. І це тільки сказати, ці набагато більші магнітні частинки ніж насправді на жорсткому диску, і набагато менше магнітних частинок. Але давайте насправді побачити потім, якщо у вас є крихітні магнітні частинки в жорсткий диск, як ви можете насправді використовувати їх для представлення даних. [Відеовідтворення] -The Жорсткий диск, де ваш комп'ютер зберігає більшу частину своїх постійних даних. Щоб зробити це, дані подорожує з ОЗУ по з програмними сигналами, які говорять жорсткий диск, як зберігати ці дані. Схеми жорстких дисків перевести ті сигнали в коливання напруги. Це, в свою чергу, контроль жорсткого диска переміщення parts-- деякі з небагатьох рухомих частини залишили в сучасному комп'ютері. Деякі з сигналів управління двигуном, який обертається пластин з металевим покриттям. Ваші дані насправді що зберігаються на цих пластинах. Інші сигнали переміщення головок читання / запису для читання або запису даних на пластинах. Цей механізм настільки точний, що людське волосся не могли навіть проходять між головками і спінінг пластин. Проте, все це працює на приголомшливих швидкостях. [КІНЕЦЬ ВОСП] І ви можете бачити на задній кінець відео, там, як правило, кілька пластин. І так, що читання голови не просто читати зверху. Це ніби як три або або ще чотири головки читання цей крок, як це, зчитування даних одночасно. Таким чином, є багато складність і вид часу що бере участь в жорсткому диску. І справа крутиться дійсно штопати швидко, так що є багато складності. Але давайте збільшувати трохи глибше і побачити, де ці магнітні частинки і як ми отримуємо на них. [Відеовідтворення] Погляд -Давайте на те, що ми тільки що бачив в уповільненому русі. Коли короткий пульс електрики відправляється головки читання / запису, він перевертається на маленькому електромагнітному за частки секунди. Магніт створює поле, яке змінює полярність крихітне, крихітне частина частинок металу які покривають поверхню кожної пластини в. Шаблон серії цих крихітних кайфом області на диску являє собою один біт даних в двійкова система числення використовується комп'ютерами. Тепер, якщо струм надсилається один шлях через головку читання / запису, площа поляризований в одному напрямку. Якщо струм надсилається в в протилежному напрямку, поляризація відновлюється. Як отримати дані з жорсткого диска? Просто зворотний процес. Так що частинки на диск, отримати струм в голівці читання / запису руху. з'єднаний мільйони ці намагнічені сегменти, і у вас є файл. Тепер, шматки одного файлу може бути розкидані по всьому тарілках кластерів диска, ніби як безлад документів на вашому столі. Таким чином, спеціальний додатковий файл зберігає трек, де все. Хіба ви не хотіли б мати щось схоже? [КІНЕЦЬ ВОСП] Таким чином, будучи згадується там, мабуть, що тема з учорашнього дня від видалення. при видаленні файл, вчора ми говорили що комп'ютер насправді робить що, коли ви щось перетягнути в кошики або відро для сміття? Він просто забуває. Але 0 і 1-х, магнітні частинки які виглядають як червоний і синій речі тут, або моя рука тут, все ще є на жорсткому диску. І тому існує software-- Нортон Утиліти і Yesteryear і інші більш сучасні software--, що просто буде сканувати весь жорсткий диск шукає у всіх цих 0 і 1-х, тому що Виявляється, що більшість файлів formats-- Текстові документи, файли Excel, зображення, відео files-- все мають певний візерунки, які є поширеними серед них. Кожен відео файл може бути іншого відео, але перші кілька біти зазвичай однакові. Або останні кілька бітів як правило, те ж саме. І тому з великою часткою ймовірності, ви можете подивитися на ці моделі. І навіть якщо файл був забутий, Ви можете сказати, з високою ймовірністю, але це виглядає як документ Word, дозволяє відновити його і зніміть забути, якщо ви будете. І ось як ви можете відновити дані, які або були випадково видалений або видалений або навмисно видалений для будь-яких цілей. На противагу цьому, безпечне видалення робить що в контексті картини, як це? Точно, робить їх все випадкове. Так що це свого роду переміщує деякі з їх вниз, деякі з них вгору, залишає деякі з них без змін, а як правило, робить випадковий шум з нього, або просто, може бути, робить все Them 0 'або все з них 1-х. І це теж може взагалі скраб ваші дані геть. Так давайте тепер повернемося до питання обчислювального мислення, в результаті чого ми маємо формулу входів. І алгоритми дає ви в кінцевому підсумку виводить. Зараз ми зосереджені на входах і виходи, тому що тепер я претензії у нас є спосіб що представляють входи і виходи. Ми просто будемо використовувати бінарний файл. І незалежно від того, що ми хочу представити сьогодні, будь то номер або лист або тисячі їх в телефонній книзі та зображень чи відео, в кінці дня, все це 0 і 1 .. І я стверджую, що, навіть якщо це це супер просто світ тільки з 0-х років і 1-х, ми можемо побудувати себе вгору. І ми вже бачили один приклад що з листами до сих пір. Так що давайте зосередимося тепер в цьому середній компонент, алгоритм. І давайте повернемося до цього питання Приклад Майк Сміт. Так що в цій телефонній книзі, яка за загальним визнанням, ми не використовуємо так багато більше, є проблема, яку потрібно вирішити. Ми хочемо, щоб знайти кого-то, як Майк Сміт. А що я міг би зробити, щоб знайти Майк? Ну, я міг би просто відкрити цей Книга, почніть з першої сторінки, і розумію, про, я в секції А. Майк не там. Мені потрібен розділ S для Сміта. Так просто тримати поворот на одну сторінку за один раз. Дозвольте мені робити вигляд, що все це білих сторінок, а не жовті сторінки, тому що ми не збираємося, щоб знайти Майк в жовтих сторінках в будь-якому випадку. Але я на білих сторінках. А тепер, я перебуваю в розділі B. Я до сих пір не знайшов його. Так що я продовжую повертаючи одну сторінку за один раз. Це алгоритм. Це набір інструкцій для вирішення якоїсь проблеми. Іншими словами, зверніть увагу на сторінка, якщо Майк не так на ньому, повернути сторінку, і повтори знову і знову і знову, в ідеалі, дивлячись вниз, як ви робите це. Так що цей алгоритм, цей процес, правильно? Вибачте. Ні, я чую деякі NOS. Добре, але is-- так, це, звичайно, втомлює. Мовляв, ми будемо тут весь день, якщо я продовжуйте шукати Майка на цій швидкості. Але дозвольте мені стверджувати, що це правильно. Це нерозумно, але це правильно. Зрештою, поки вона може прийняти, я знайду Майк, якщо він там і я звернути увагу. І я врешті-решт досягти своєї сторінки. І якщо я отримую занадто далеко, якщо Я отримую в розділ T, то я можу трохи оптимізувати і просто сказати, гм, все зроблено. Я навіть не потрібно витрачати Час йти до Заболоцького. Але це дуже лінійний підхід, якщо ви буде, дуже вид зліва-направо підхід, пряма лінія. І його правильно, але повільно. Так що я пам'ятаю з початкової школи, сортувати з оптимізації від першого грейдера, де я навчився не розраховувати одиницями, але по twos-- так 2, 4, 6. Це А, набагато складніше робити, але в теорії, це faster-- 8, 10, 12, 14, і так далі. Як щодо цього алгоритму? Чи є це більш ефективним? Чи є це швидше? АУДИТОРІЯ: Це ефективно. DAVID Маланки: Так, так що це def-- це буквально в два рази швидше, якщо припустити, я не отримують підставляли з моїми пальцями. Це в два рази швидше, тому що Я перетворююся через два сторінок відразу замість одного, але це потенційно правильно, тому що, чому? АУДИТОРІЯ: Ви пропускаючи деякі з них. DAVID Маланки: Вірно, що, якщо Майк відбувається бути sandwiched-- може бути, коли я пізніше в телефонній книзі, Майк, трапляється, затиснуті між цими двома сторінками, і я просто сліпо пропустити його. Таким чином, нам потрібно трохи виправити там. Після того, як я потрапив в розділ T, I не можу просто з упевненістю сказати, ми не знайшли Майка Сміта. Я, ймовірно, доведеться загнути. Або справді, коли я досягаю когось названий S-N, замість С-М для Сміта, негайно, я міг би подвоїти тому, тому що, можливо, він був на попередній сторінці. Але у мене немає загнути далеко. У теорії, якщо я роблю це в потрібний час час, я просто повернутися одну сторінку. Так що це додавання тільки один додатковий крок. Так що я пішов в два рази швидше, але це коштувало мені одну додаткову сторінку. Але що відчуває, як чиста перемога. Але це не так, як більшість людей в Цей номер буде вирішити цю проблему. Що б типова людина, може бути, Кілька років тому зробити, щоб знайти Майка Сміта? Так, не знайшли Майка. Що мені робити? Так що трохи ближче, але я знаю--, що правда про телефонній книзі? АУДИТОРІЯ: Це послідовний. DAVID Маланки: Це послідовний. Це алфавітний. І тому, якщо я перебуваю в розділі M, Майк явно вправо, Я можу буквально розірвати проблема в half-- як правило, легше, ніж that-- сльозу проблема навпіл і викинути, так що тепер, у мене є проблема, що це вже не одна тисяча pages--, що було важко, тому що я думаю, що я насправді розірвала телефонна книга це не time-- 1000 сторінок, але 500. Таким чином, проблема буквально вдвічі менше. І це досить переконливим, тому що з моїми попередніми алгоритмами, версія 1 і 2, я тільки що робить проблему на одній сторінці, менші дві сторінки менші зараз. У той час як зараз, я зробив це 500 сторінки менше, все відразу. ОК, так що тепер, Карім пропонує що я йду в праву половину. Так що я збираюся йти приблизно до середини, дати або прийняти. І якби я зробив це математично, Я міг би піти прямо до центру. А тепер, я розумію, про, Я перебуваю в секції T. Я насправді дуже далеко. Але я можу, знову ж таки, рвати Проблема навпіл, викинути. І мої байти не настільки великий. Це тільки, що, 256 сторінок або 250 сторінок, давати або приймати прямо зараз. Але це все ще набагато більше ніж на одній сторінці або двох сторінок. І ось тепер, я йду приблизно до середини. О, я не пішов досить далеко зараз досить. Тому я повторюю, повторюю, повторюю, Повторюю, поки я сподіваюся, залишилося тільки з однієї сторінки. Так що пропонує питання, якщо я почалося приблизно з 1000 сторінок, скільки кроків це брало мене з версією 1 мого алгоритму? Ну, якщо Майк знаходиться в S розділ, в гіршому випадку, це досить близько до кінець алфавіту. Так що, якщо телефонна книга має 1000 сторінок, Я знайду Майка в межах 1000 сторінок, дай або візьми. Може бути, це як 800 або близько того, але це досить близько до 1,000. Беручи до уваги, у другому Алгоритм, скільки сторінка виявляється максимально може я вимагає, щоб знайти Майка Сміта? Там в 1000 сторінок, але я робить їх два одночасно. Правильно, так як максимум 500ish, тому що якщо я йду через всю телефонну книгу, в який момент я можу зупинитися. Але я можу збрити кілька по просто зупинка на ділянці Т. Але це в гіршому випадку 500 сторінок. Так що, скільки разів я можу розділити 1,00o сторінках телефонної книги в половині знову і знову і again-- від 1000 до 500 до 250 до 125? Як довго, перш ніж я потрапив на одну сторінку? Так, це близько 10. Залежно від заокруглення і такі, це близько 10 всього сторінок повинні бути включені або телефонні книги повинні бути розірвані. Так що це досить потужний. Ми почали з проблемою в 1000 сторінок у всіх трьох цих історій. Але в першому алгоритмі, його взяв мене, найгірший випадок, 1000 стр Виявляється, щоб знайти Майк. Другий алгоритм, 500 сторінки, щоб знайти Майк. Третій алгоритм, 10 сторінок, щоб знайти Майк. І це ще більше потужний, коли ви думаєте про свого роду протилежної сценарію. Припустимо, що в телефонній компанії наступної рік, може бути, об'єднує два міста разом, і телефонна книга раптово Грубий, замість цього, що, так 2000 сторінках замість 1000. Ну, мій перший алгоритм шукає Майк Сміт в телефонній книзі 2000 сторінках, найгірший випадок, він збирається прийняти скільки поворотів сторінки в наступному році? Телефонна книга становить 2000 сторінок, so-- добре, а не ще один. Якщо телефонна книга в два рази товще в перший алгоритм, перший алгоритм, 2000, чи не так? У гіршому випадку, Майк дійсно Ближче до кінця книги, так що 2000 сторінках по черзі. Другий алгоритм йдучи двійок, як і 1000 сторінок. Але як в моїй третини і самий останній алгоритм? Якщо телефонна компанія подвоює кількість сторінок від 1000 до 2000, скільки ще раз потрібно Я рву що книга навпіл, щоб знайти Майк? ГЛЯДАЧІ: Тільки один. DAVID Маланки: Тільки ще один, тому що з однієї сторінки сльоза, Я можу буквально розділити і перемогти, якщо ви будете, що проблема в половині взяття масивний укус з нього. І таким чином це є прикладом коефіцієнт корисної дії і, можливо, алгоритм з якими всі ми свого роду інтуїтивно знайомі. Але це так само, як правильно як мої інші алгоритми з цим підстроювання для Другий алгоритм, але це набагато більш ефективним. І справді, що комп'ютер вчений, або в свою чергу, програміст, зазвичай роблять при написанні код спробувати з'ясувати, все в порядку, я не хочу, щоб мої програма просто, щоб бути правильним, Я також хочу, щоб бути ефективним і вирішувати проблеми добре. Уявіть собі, в реальному світі сьогодні, як Google індекси, пошуки як мільярди сторінок, уявіть собі, якщо вони використовується перший алгоритм, щоб знайти кішок серед мільярд pages-- дивлячись на перша сторінка в їхній базі даних, другий, третій, просто дивлячись для кішки, шукає кота. Це досить штопати уповільнити здавалося б. Замість цього вони могли б використовувати щось званий бінарний пошук, який НЕ coincidence-- бі означає два, ми тримати щось розділивши на 2, в half-- вони могли б використовувати бінарний пошук і, можливо, знайти кішок ще швидше, або те, що ви шукаєте. І, чесно кажучи, є навіть більш вигадливі алгоритми що зробити набагато більше, ніж просто розділяючи речі навпіл для того, щоб швидко знаходити потрібну інформацію. І ми будемо говорити трохи про тих, хто після обіду сьогодні. Отже, дозвольте мені просто спробувати уявити це. Нам не потрібно вдаватися в будь-які математичні або реальні цифри. Ми можемо говорити про це абстрактно. Але дозвольте мені запропонувати, якщо ви були з обговорення в даний час з інженерами пропонуючи цей алгоритм і ви намагаєтеся зробити розраховане рішення, тому що, може бути, інженер каже вам, ви знаю, що я можу реалізувати лінійний пошук в як дві хвилини. Це так просто. Двійковий пошук не те, що фантазії, але вона збирається взяти мене, як 10 хвилин, так в 5 разів до тих пір. Там в торговій тут, навіть з точки зору рішення, що програмне забезпечення для запису. Ви пишете простіший алгоритм, який буде просто вас дві хвилини? Або ви проводите більше часу, 10 хвилин, написання мисливця алгоритм? Як ви вирішуєте, що таке питання? Або ви могли б зробити його трохи більш реальним. Я говорю своєму босові, що збирається взяти я ні за один тиждень або 10 тижнів для реалізації програмне забезпечення таким чином, як ви вирішуєте, які алгоритм зелене світло? Карім? ГЛЯДАЧІ: Глядачі, я думаю. DAVID Маланки: Глядачі. Що ви маєте на увазі під аудиторією? ГЛЯДАЧІ: Якщо це відбувається які будуть використовуватися користувачами які [нерозбірливо] користувачами [нерозбірливо]. Але якщо це щось ви просто робить для себе щоб полегшити завдання, [Нерозбірливо] швидше. DAVID Маланки: Так, це швидко і брудний це хороший спосіб, щоб описати це. Насправді, якщо ви описуючи велику частину мого часу в аспірантурі, в результаті чого часто часи, Я написав поганий код свідомо so-- по крайней мере, це те, як я раціоналізувати it-- свідомо так, тому що навіть якщо я пишу код що було відносно повільним, щоб виконати, Я був в змозі написати сам код досить швидко, витрати всього в декількох хвилинах або годин не днів. І виявилося, я іноді потрібно спати. Так що навіть якщо мій код потрібно 8 годин для роботи, так що це нормально, Я буду просто піти спати, поки він працює. Так що в той час, я думав, що це було дуже розумний, хоча я мабуть, працював через мій кандидат дуже повільно. Але зворотне, що є що, якби я писав програмне забезпечення для інших людей, які мала більше значення, ніж у мене, ну, маючи їх чекати 8 годин отримати назад свої результати пошуку не всі, що переконливими. І тому витрачати більше часу фронт, щоб написати програмне забезпечення що є більш ефективним, більш як нашого третього алгоритму, ймовірно, приносить користь користувачам протягом довгого часу. Так що це дійсно залежить від більш час, як ці витрати складаються. Якщо ви збираєтеся писати програмне забезпечення, щоб використовувати його один раз, ймовірно, могли б також зробити швидкий і брудний, як вони кажуть. Просто викинути його разом. Це код, який заганяють ви, це так погано, але вона виконує свою роботу правильно, незважаючи на те, що це не ефективно. З іншого боку, ви проводите більше часу на щось, отримати його в самий раз. А потім амортизується протягом довгого часу, що початкові витрати часу напевно варто, якщо ви тримаєте оптимізації для загального випадку. І справді, це тема програмування, інформатика або більше як правило, намагається оптимізувати не для незвичайного випадку але загальні case-- яка операція відбудеться знову і знову? Якщо ви збираєтеся мати мільярди користувачів пошуку на вашому сайті, Ви, ймовірно, слід провести додаткові тижнів фронт писати краще програмне забезпечення, так що всі ваші користувачі отримують вигоду. Тепер давайте спробуємо захопити це трохи зображально, але не так багато, чисельно. Так ось якраз стара школа діаграма. І дозвольте мені сказати, що цей час. І це не має значення что-- насправді, ні, не час. Давайте покладемо, що на іншій осі. Припустимо, що це час, і це розмір проблеми. І вчений може зателефонувати в цілому це просто п. п походить наш йти до змінної, де п є число, п число, і це кількість будь-яких входів у вас є. Так що в цьому випадку п кількість сторінок. Так що це може бути 1000 в випадок ми тільки що сказали. Так що час може бути будь-яка одиниця виміру. Може бути, це друге. Може бути, це дні. Може бути, це як поворотів сторінки. Не має значення. Що б ви хотіли розраховувати на, що буде час або стоїть що те ж саме. Так що з самого першого Алгоритм, якщо я, наприклад, мав телефонну книгу на 1000 сторінок, Я збираюся намалювати крапку там, тому що, якщо це 1000 сторінок, він взяв приблизно 1000 поворотів сторінки, дати або прийняти. А потім, якщо б я був 2000 сторінках телефонної книги, і я збираюся намалювати другу точка тут, тому що на 2000 сторінок, це як 2000 секунд або поворотів сторінки або будь-який інший. І ось, коли я вже говорив раніше, це вид лінійної залежності, що було навмисним, тому що я хотів пізніше on-- право now--, щоб намалювати лінію. Це свого роду прямий лінія відносини. Схил 1/1, якщо ви будете. У той же час, другий алгоритм сказав, що якщо у вас є 1000 сторінок і ви використовували другий алгоритм, де я нарахував на 2-х, повертаючись дві сторінки в той час, я повинен малювати точка вище або нижче моєї вихідною точкою? ГЛЯДАЧІ: Нижче. DAVID Маланки: Нижче, тому що, як ми бачили, це займає менше часу, в два рази менше часу. Таким чином, точка повинна бути наполовину настільки ж високо, як і інші. І та ж угода тут, це точка слід, ймовірно, приблизно там. І ось мій другий алгоритм, так само, має лінійну залежність з часом. І ми можемо зробити це як такої. Так що тепер, третій і останній Алгоритм трохи складніше зробити. Але інтуїтивно, якщо у мене 1000 сторінки з мого третього алгоритму, він повинен прийняти мене тільки як 10 кроків. І якщо у мене є 2000 сторінок з моїм третім алгоритмом, він повинен прийняти мене не 10 кроки, але 11, тільки ще один. Таким чином, ми ледь будемо бачити це. І виходить, якщо Я збільшити на це, я збирається перебільшувати для ефекту, форма цієї лінії, в кінцевому рахунку, не є прямою line-- тому що, справді, якби це було, це буде виглядати як others-- це насправді вигнуті лінії що, якщо ми наближати, збирається дивитися набагато більше, як це. It-- добре, добре, ігнорувати цю частину. Це було моє перо збирається кута. Це вигнута лінія, яка завжди росте, завжди, завжди, завжди росте, але тільки чуть-чуть. І так протягом довгого часу, у вас є Відносини, які більше схоже на це. Це виглядає майже прямо. Але це дуже повільно зростає. Але для багатьох точок уздовж ваша вісь х, горизонтальна вісь, це нижче, ніж ті, інші лінії. Так що це може бути відносини п, причому якщо у вас є п сторінок, приймає вас н секунд. Це може бути ставлення N / 2. У вас є п сторінок, він приймає Ви п / 2 секунди, вдвічі менше, ніж. І це логарифмічна відносини, які якщо згадати, логарифм 2 з п захопленнями таке зростання, так би мовити. Так що це свого роду святий Грааль серед трьох з них тут, тому що це просто так набагато більше ефективний, але, можливо, більш складний впровадити. Які-небудь питання? Ну дозвольте мені зробити це, нехай мені відкрити текстове вікно тільки так ми можемо спробувати формалізувати щось тут. Отже, дозвольте мені йти вперед зараз і реалізувати цей алгоритм для знаходження Майка Сміта в коді, якщо ви будете, псевдокод код. Я не збираюся використовувати Java або C ++. Я просто збираюся використовувати свого роду Англійська-подібний синтаксис, який ми як правило, викликати код псевдокоду. Ось, у мене є пусте вікно. І я крок 1 дуже кажучи Перший алгоритм підібрати телефонну книгу. Крок 2 відкрита книга для першої сторінки. Крок 3 дивитиметься на сторінка для Майка Сміта. Якщо на сторінці, викличте Майк. інший поворот сторінки і перейдіть до кроку 3. Готово, скажімо. І тому це не зовсім досконала, який ми побачимо в хвилину. Але давайте розглянемо, що Поняття я представив тут. Так кроки 1 і 2 і 3 досить багато дієслів. Вони заяви, actions-- зробити це. І так в програмуванні мова, ми, як правило, називати їх заяви або функції або процедури, називати їх будь-яку кількість речей. Але вони просто actions-- зробити це. Крок 4 принципово відрізняється, тому що це свого роду задає питання. Це говорить, що ми свого роду з на розвилці доріг. Якщо Майк на сторінці, викличте його, так що повернути ліворуч, якщо ви будете. А якщо ні, то повернутися до деяких інший page-- або, скоріше, вибачте, повернутися до будь-якої іншої крок, який індукує деякий вид циклів, в. І ми робимо це знову і знову і знову. І насправді, ви знаєте, що? Так. інакше, якщо в кінці книги зупинки. Так що нам потрібно вид третього стан, тому що ви не може тримати перегорнути сторінку оголошення нудоти, тому що в кінці кінців, я буду потрапив в кінці книги. І помилка в програмі може бути без вичікування такого сценарію. А потім я просто зрозумів, ой, почекайте хвилину, мені потрібен третій сценарій. Якщо я зі сторінок, я повинні дійсно просто зупинити. В іншому випадку, це не визначено. Що станеться, якщо я тримаю кажучи перегорнути сторінку і повернутися, це коли комп'ютери заморозити або аварії, коли ви натиснете деякі непередбачені ситуації, як це. Тепер, що стосується Mike третій algorithm-- Сміта візьміть телефонну книгу, відкрита книга для first-- до ні, не перша сторінка на цей раз, до middle-- ой, ну, що б бути другий алгоритм. Давайте просто пропустити третій. ГЛЯДАЧІ: Ой, мені дуже шкода. DAVID Маланки: Це нормально. Давайте просто перейти до third-- відкритим до середини і тепер шукає Майк Сміт. якщо на сторінці, викличте Майк. І тоді те, що ми хочемо сказати? ще що? Ми можемо висловити це в будь-якій кількості шляхів. Там немає правильної відповіді. Добре, якщо не раз, але нам потрібно be-- ОК, ми хочемо розділити на дві частини, але ми хочемо, щоб піти наліво або йти прямо? Як ми висловлюємо це поняття? Ну, а в разі Майка, так, це справедливо. Але добре, так що це насправді хороша точка. Добре. Ми будемо продовжувати йти до цієї логіки. Так-- ГЛЯДАЧІ: менше половини. DAVID Маланки: Так. Так що інакше, якщо сторінка, ми скажемо, менше ніж Сміт, зліва від Сміта, then-- давайте подивимося, є це буде ускладнювати? інакше, якщо сторінка передує Сміт, сльозу навпіл, викинути якусь половину? АУДИТОРІЯ: Я думав, це було [нерозбірливо]. DAVID Маланки: Я чую, як відповіді. ГЛЯДАЧІ: зліва. DAVID Маланки: OK, кинути геть ліва половина, а Lakisa сказав раніше, лівий половина, то я як би хочу просто йти я йду, метою яких вправо. Або що те ж саме, і я зробив трохи трохи безлад початку тут, Я хочу ефективно перейдіть до кроку 2 знову, де відкритий для middle-- або open-- да, давайте просто скажемо, сторінки в середині. І це фіксує це. Це вже не книга. Це всього лише половина книги, тому відкриті сторінки в середині. else-- були майже там. Крок 6, інакше, якщо сторінка приходить після того, як Сміт, розірвати навпіл, викинути праву половину, Перейдіть до кроку 2. ще кинути палити, четвертий сценарій, якщо у нас немає сторінок не залишилося, щоб повернути. Таким чином, ми могли б очистити це. І ми повинні очистити це. Це дуже псевдокод код, якщо ви буде, опис дуже високий рівень. Але це, як правило захопити цю ідею. І, знову ж таки, в цьому сценарії, ми є поняття стану, гілка, розвилка, що робить decision--, якщо це, йти цим шляхом, інакше, якщо, йти цим шляхом, інакше, якщо, йти цим шляхом. І це дуже поширена методика програмування щоб вирішити, в якому напрямку йти, так би мовити. І у нас також є якийсь пробігаємо структури, де що ми робимо щось знову і знову. Тепер, виявляється, набагато як в цьому прикладі, бути супер точним важливо. Але ми також бачили щось що ми продовжувати називати абстракції. Що це означає, щоб підняти телефонну книгу? Ми тільки частково приймаючи як само собою зрозуміле в цій кімнаті що це має деякий смислове значення. Всі ми тільки знаємо частинно, про, ну, підійміть телефонну книгу. Що це насправді означає? Ну, це насправді означає продовжити руки, нахилитися, розширте пальці, затиснути книгу між пальцями, встати, тягнути руку до вас. І ми могли б бути насправді педантичним про це, насправді бути супер точним щодо того, що я роблю. Але всі ці кроки колективно що це значить, щоб підняти телефонну книгу. І ось раніше, коли я сказав, кожен з цих перших двох тверджень можна розглядати як продовжити або функцію, насправді вона являє собою те, що ми продовжують називати абстракції. Це походить на високий рівень концептуальної Опис проблеми, яка насправді включає в себе досить багато кроків. І ось це теж є повторювані теми в програмуванні, в результаті чого я міг би написати програму використовуючи синтаксис як this-- pick_up_phone_book (). А потім синтаксично, я збирається вкрасти щось від більшості мов програмування. Тепер, крок 1 виглядає навіть більше як функції, як програміст назвав би це. Схоже, що хтось код дав ім'я і дав мені використовувати somehow-- в інших словами, що лінія я виділив представляє функціональні можливості, які, можливо, Я навіть не реалізувати себе. Хтось старше, мудріше я вже розібрався як ви висловлюєте поняття збирання телефонну книгу. І це як п'ять кроків, які я просто відбарабанили, з верхньої частини моєї голови. Але він або вона вже реалізована це, дав ті кілька кроків ім'я, pick_up_phone_book. І дужками тільки те, що більшість програмістів робити в кінці заяв, як це. Тепер я можу стояти на його або її плечі і ніколи, думати про те, що це означає щоб підняти телефонну книгу. Я можу просто сказати, візьміть телефонну книгу. І це саме те, що всі ми люди робили тут. Коли ми були, ймовірно, 1 річний, 2-х років, хтось повинен навчити нас, що це мав на увазі, щоб підняти телефонну книгу. І з тих пір, ми абстрагуємося від дуже нецікаві механічні кроки. І ми просто мати інтуїтивне розуміння що це значить візьміть телефонну книгу. І ви можете екстраполювати прямо зараз до більш складним things-- побудувати будинок. Мовляв, для деяких людей, що насправді має сенс. Для підрядників, архітекторів, що має якесь значення. І вони будуть знати, що робити, якщо Я сказав, йди побудувати будинок. Але більшість з нас в кімнаті не міг мати справу з цим рівнем абстракції. Ви повинні сказати нам як піти отримати лопату і піти отримати бетон і цвях шматки дерева разом і все інше бере участь в будівництві будівлі. І це тому, що ми не маємо все ж був запрограмований, щоб зрозуміти, що означає побудувати будинок. У нас немає цієї абстракції. У нас немає цієї функціональності. І так, що ви будете бачити в мови програмування, в загальному, особливо більш сучасні мови, як Java, PHP, Ruby і Python, вони набагато більш зрілим ніж старіших мов, як С і С ++, і все ж інші. І тому вони приходять з більш Функціональність вбудовується. Більше код був написаний люди в минулому що тепер ми можемо назвати або закликати або використовувати, так як я натякав при цьому з лінії маршруту тут. І тому, навіть якщо ми не говоримо про мови програмування самих по собі, просто псевдокод код, все з ідеї все ще в цій дискусії. І виходить, точність супер важливо, як це абстракція. І давайте спробуємо повідомити, що в такий спосіб. Я випадково міг би зіпсований це миготінням слайд на екрані передчасно. Але дозвольте мені попросити хороброго добровольця, якщо ви не заперечуєте, підходячи. Ви б в передній частині камери, якщо ви в порядку з цим. хто хотів би, щоб придумати і дати інструкції для ваших колег тут? Просто повинні прийти сюди і стояти тут і сказати кілька слів. Вікторія посміхається самий і уникаючи очі найбільше. Ви були б готові прийти на вгору? ДОБРЕ. І якщо всі інші на своїх місцях може вийняти шматок макулатури, якщо ви будете. Підкладка папір добре. Приходьте таким чином. Чи хтось із паперу, Вам дали вчора, просто будь-який чистий аркуш паперу, якщо ви могли б. І якщо у вас немає будь-якої, просто запитайте свого сусіда, якщо ви могли б. Так що на даний момент, для У цьому прикладі, Вікторія буде грати роль програміст, інженер, який необхідно запрограмувати вам все, як і комп'ютери, щоб зробити щось. І ми подивимося, які припущення Ви вирішили зробити. Ми подивимося, наскільки точно вона хоче бути. І якщо ця демонстрація йде педагогічно добре, багато помилок буде зроблено, що ми будемо потім використовувати що в якості можливості для обговорення. Але проблема для вас повинен бути, щоб уникнути цих помилок, бути хорошим програмістом. І тому завдання під рукою, якщо ви б любив гуляти тут, знаходиться в передній частині Вікторії на екрані here-- і, сподіваюся, ніхто з вас пам'ятайте про це, коли я миготять на екрані. І не оглядайся взагалі, тому що є ще один екран в цій кімнаті що я можу вимкнути. Так що не обертатися. У передній частині Вікторія це той же крик. І її робота зараз розповісти вам все на вашому аркуші паперу, що малювати. І ми побачимо, грунтуючись на усні інструкції поодинці, комп'ютерний код, якщо ви будете, наскільки точні ваші малюнки are-- ваші реалізацій. Мати сенс? ГЛЯДАЧІ: Так. DAVID Маланки: OK, виконати. ГЛЯДАЧІ: Намалюйте квадрат. [Сміх] DAVID Маланки: І немає можуть бути задані питання. Можна тільки робити те, що ви сказали. Так, і якщо у вас є сучасні гірки відкрити на вкладці, не дивіться на вкладці. ДОБРЕ? ГЛЯДАЧІ: ОК, намалюйте коло. Slope-- я можу сказати, нахил? DAVID Маланки: До вас. ГЛЯДАЧІ: Схил. І трикутник. DAVID Маланки: Добре. І залишитися тут на мить. І я збираюся приїхати навколо всього декілька хвилин. І не потрібно ставити свої імена на ньому. Дозвольте мені навколо і зібрати свої малюнки, якщо ви не заперечуєте, розриваючи їх. Ось те, що ми повернулися. Я буду проектувати його на екрані. Я бачу, квадрат, коло, схил, і трикутник. Так що була одна відповідь там. І let's-- вигуки. Дякую. Ось інший асортимент, і один за ним. Так що всі вони, здається, щоб захопити дух. Дякую. Там інша, і ось ще один. Інтерпретація нахилу є трохи відрізняється, трохи спокуслива. І ближче, або через чудова специфіка, з якою ви маєте описано, або, може бути, ви начебто бачив його раніше, це дійсно що Вікторія була насправді з описом. Але тепер, ті з вас, хто не одержати його зовсім вірно, давайте запропонувати деякі заперечення тут. Так що Вікторія спочатку сказав намалювати квадрат. І тепер, ми можемо припустити, заради сьогоднішнього дня що все знають як малювати квадрат. Але це не зовсім зрозуміло, правда? Як ще ви могли б малюється квадрат, або де можуть бути деякі неясності тут для комп'ютера? ГЛЯДАЧІ: Розташування та розмір. DAVID Маланки: Місцезнаходження, чи не так? Всі ви мали папір якійсь формі, як правило, прямокутниками, але трохи різні розміри. Але ви, звичайно, могли б намальовані, якщо ви хочете, величезний квадрат, може бути, крихітний квадрат. Може бути, це був повернений. Я не думаю, що ми побачили, що. Але це могло б бути більш алмазів як, але до сих пір, проте, математично квадрат. Так що, можливо, було неоднозначним. Потім вона сказала, намалюйте коло. Деякі з вас зробив зробити його поруч з він, який не є необгрунтованим, тому, що люди схильні думати, чи читати справа наліво в більшості мов, тому не погане припущення. Але це коло може мати був всередині квадрата, могло бути навколо квадрат, міг би бути в іншому місці на аркуші, так що, можливо, неоднозначний. Нахил може бути, може бути, приймаючи свободи в усній формі з тим, що це означає. І деякі з вас інтерпретовані це як хвиляста лінія або пряма лінія чи щось таке. А потім трикутник, теж може мати був орієнтований в будь-якій кількості шляхів. Коротше кажучи, навіть з чимось, що ви дивитеся і ви як, нічого собі, так просто, дитина може намалювати, а не насправді, якщо ви не супер, супер переконливими і сказати комп'ютера точно, що робити. Так що, якщо ми могли б, якщо у вас є інший аркуш паперу, давайте спробуйте це ще раз. І я збираюся дати Вікторії один Інший приклад на екрані тут. І знову ж таки, не обертайся і не дивіться на слайдах. І я дам їй на мить, щоб думати про те, як описати це. Не дозволяйте їм бачити страх в ваших очах. [Сміх] І знову, на цей раз важелі деякі з цих страв додому і спробувати отримати майже всіх по крайней мере, правильну відповідь. АУДИТОРІЯ: Добре, візьміть шматок паперу, подивіться в середині цього шматка паперу. В середині цього шматка паперу, малювати куб. [Сміх] DAVID Маланки: Що ми дізналися? Ми були так близькі. Добре, повторіть, якщо ви могли б, для всіх. ГЛЯДАЧІ: В середині аркуш паперу, намалюйте об'єкт, який виглядає як куб. DAVID Маланки: Добре, це все, що ви отримаєте, щоб працювати с. Дозвольте мені бути аналітичним і не стільки критично, але зробити заявку що Вікторія виразно здається, думає в дуже абстракціями високого рівня, які не є необгрунтованим. Тому що в іншому випадку, ми б все бути досить дисфункціональним, якщо ми повинні були бути дуже точним з усім, що ми робимо в світі. Але сказати, перейти до middle-- I думали, що ми були на такій хорошій трасі там, як перейти до самого центру сторінки, а потім намалюйте куб. Таким чином, вона думає в абстракціях, тому що вона як і раніше перегляду що на екрані, як насправді куб. Але є дуже багато можливостей для інтерпретації там. І справді, є так багато інші способи, якими Ви могли б висловити що, що я пропоную в хвилину. Так що тут у нас є одне втілення з picture-- whoops-- одного втілення картини, так трохи тривимірності до нього, що приємно. Ось ще одна, де у вас є те ж саме, хоча це свого роду відкритий куб. Деякі люди взяли його трохи більш плоским, двовимірним. І це прекрасно. Так що, насправді в центр паперу. Це той, який я думаю, що ви будете як, тому що якщо ми йдемо сюди, це те, що вона описувала. Так що тепер, дозвольте мені запропонувати, як ще ми могли б описати цю ситуацію. Назад в день, один з найбільш більш поширені способи навчитися програмуванню повинен був написати код, пише лінії інструкцій, яка управляла трохи черепаха на екрані. Логотип і інші варіанти цього була назва мови. І черепаха жила в світі. Отже, нехай це прямокутний простір його світ. А ви б почати з assuming-- I насправді не знаю, як малювати черепаху, так що давайте робити це так. А потім у нього снаряд а потім, можливо, деякі ноги. Таким чином, ви могли б мати цей маленький символ на екрані. І предмет цього мова програмування повинен був змусити черепаху йти вгору, вниз, вліво, вправо і покласти перо вниз або забрати його пера вгору, так що він може насправді малювати на екрані в цьому дуже плоский прямокутний світ. Так де я думав, що ти міг би йти, і де ви повинні розглянути дайвінг вниз подумки при описі інструкції в більш загальному плані, Я б стверджувати, це покласти ваші перо вниз в middle-- і ми позбутися черепаха, тому що я не можу зберегти малюнок його дуже добре. А тепер, як ще міг Я говорю малювати куб? Ну, ми могли б сказати щось на кшталт нічиєю діагональна лінія на північний схід, наприклад, або під кутом 45 градусів вгору. І це, можливо, отримали мене тут. І я досить далеко від куба. Але тепер, я міг би сказати щось як повернути на 90 градусів вліво і намалювати лінію рівної довжини на північний захід. І я міг би продовжити з аналогічними напрямками. І це не буде легко. І, чесно кажучи, ми, ймовірно, був тут протягом п'яти хвилин. Але, можливо, ми отримали б, щоб то, що, врешті-решт, закінчує тим, що куб, але ми пірнув всередині цієї абстракції зробити це при такій низькій рівень, який ви не можете реально побачити, що ви робите, поки все річ, насправді є на сторінці. І так це загальний принцип, знову ж таки, programming-- цієї ідеї абстракції. Це так чудово потужний, тому що знову, вона просто сказала, малювати куб, який все ми досить багато б звертав уваги дуже швидко. Ми б просто зрозуміти, Добре, малювати куб. Ми не могли б знати орієнтацію, таким чином, ми могли б бути трохи більш точним, але ми можемо уявити собі, як правило або знаєте, що таке куб. І це корисно, тому що якщо кожен раз, коли ви сіл програмістом в клавіатура для написання коду, якщо ви повинні були думати в таких низький рівень, ніхто з нас буде коли-небудь що-небудь зробити. І, звичайно ж, ніхто з нас не буде отримувати задоволення від процесу написання коду. Було б, як писав в 0 і 1-х, який відверто не так давно люди були написання коду в 0 і 1-х. І ми дуже швидко придумали це вищий рівень languages-- C ++ і Java, і інші. Так давайте спробуємо це ще раз просто перевертати столи, так що все з нас мають можливість подумати в досить таким же чином. Чи можемо ми отримати ще один доброволець цей час, щоб підійти до дошки і малювати, не читати? Так, добре. Бен, давай вгору. І, Бен, в цьому випадку, як тільки ви особою до дошки, не дивитися вліво, не дивитеся прямо. Тільки зробіть те, що ваш колеги тут сказати вам. А для всіх інших в кімнати, ви тепер програміст. Він комп'ютер. І картина, яку я вибрав тут Заздалегідь це один тут. Вони просто-- вони думають смішні жарти все. Так чи хтось хотів би добровольцем першу інструкцію або твердження, що має перо командного Бен? І ми зробимо це все разом, може бути, одна команда від кожної людини. Мені дуже шкода? ГЛЯДАЧІ: Намалюйте коло. DAVID Маланки: Намалюйте коло це перше, що я почув. ГЛЯДАЧІ: нагорі. DAVID Маланки: нагорі. Добре, ми можемо дозволити вам видалити, скасувати. А тепер хтось інший. Ден, ви були б зручними пропонуючи таку інструкцію? АУДИТОРІЯ: Звичайно, малювати центр в нижній частині кола, з small-- трохи невеликий простір від того, намалювати пряму лінію вниз до трьох чверті шляху вниз дошки під невеликим кутом до лівої сторони. DAVID Маланки: Добре. ГЛЯДАЧІ: невеликий кут. DAVID Маланки: Undo, Control-Z. ДОБРЕ. Андрій, ви хочете запропонувати до наступної інструкції? АУДИТОРІЯ: Звичайно. З нижньої частини цієї лінії, подальше незначне angle-- whoops-- може бути близько третини довжини [нерозбірливо], невеликий кут вниз і, як третину довжини [нерозбірливо]. Так що так, з цього моменту, намалювати лінію на третину довжини попереднього лінія далі вліво. DAVID Маланки: Це добре? Пряма лінія, це нормально? Добре, Олів'є, ви хочете запропонувати на наступний? ГЛЯДАЧІ: [нерозбірливо] з нижній частині кола, [нерозбірливо]. Намалюйте на правій стороні з [нерозбірливо] сантиметрів. [Сміх] DAVID Маланки: Я думаю, що ви збираєтеся повинні перетворити це дюйма тут. АУДИТОРІЯ: Стоп. [Сміх] DAVID Маланки: OK. [? Ара ,?] Ви хочете запропонувати на наступний? ГЛЯДАЧІ: малювати [нерозбірливо] верхня [нерозбірливо] те ж саме. [Нерозбірливо] коло, залучити до [Нерозбірливо] і малювати [нерозбірливо]. DAVID Маланки: Добре, більше не скасувати. Давайте зробимо ще одну або дві команди. Кріс, ви хочете запропонувати один? ГЛЯДАЧІ: На дні окружності, [нерозбірливо] намалювати лінію, рівну виносних вниз вліво [нерозбірливо]. DAVID Маланки: OK. Ендрю? Ми did-- Karim? ГЛЯДАЧІ: Починаючи з правої лінії, кінець лівої лінії, в нижній частині, ви збираєтеся йти прямо про такої ж довжини, як лінії ви на, залучаючи до правий [нерозбірливо]. [Нерозбірливо] градусів, так що [нерозбірливо] градусів на правій стороні. DAVID Маланки: Добре. Давайте паузу. Не оглядайся поки. Давайте паузу, і давайте спробувати ще одну спробу перш ніж відкрити Бен що він малював. Чи можете ви перетасувати Бена right-- або насправді, немає, давайте просто дати вам інша дошка, ще краще. Так що б хтось зараз подобається прийняти більш підходу що Вікторія прийняла раніше, де ми говоримо на більш високому рівні абстракції і всього пропозиції або два опису Бен що малювати без потрапляючи в бур'янах, так би мовити, на цьому нижчому рівні? Вікторія. [Сміх] ГЛЯДАЧІ: Намалюйте фігуру пішого людини. І його ноги і руки повинні бути права сторона. DAVID Маланки: Добре, це все, що ви отримаєте. Добре. Чому б нам не відкрити Бен, що він зробив. Так оплесками. Це було найважче, мабуть. Так що навіть якщо ми говоримо в досить дурні терміни про просто малюнок фотографії, сподіваюся, ви може реально оцінити ступінь виразність, які можуть бути необхідні для того, щоб повідомити комп'ютера, що робити. І справді, той факт, що Бен був в змозі зробити це так швидко є свого роду заповіт з використанням мова, може бути, більш високий рівень версія англійської мови, що дозволяє йому просто використовувати слова або почути слова від Вікторії, які дозволяють йому ці abstractions-- просто малювати фігура ходити до right-- такого роду має деякі смислове значення для нього цього не майже настільки ж очевидно, коли ви тільки кажучи, покласти ручку вниз, малювати вправо, малювати вліво. І ось це теж дуже поширені в програмуванні. Це було б сказати, що подібно дуже низький рівень мови, програмування в 0 і 1, якщо ви будете. І це було б більш високий рівень Мова програмування в Java, або щось в цьому роді. трохи спрощенням, але це свого роду як емоційний відчуття, що ви відчуваєте, коли використовуючи один вид річ або інший. Трохи розчарування тут необхідністю для такої точності, але можливість щоб бути трохи вільніше з інтерпретація тут. Але, звичайно, помилки може виникнути в результаті. Якщо ви хочете на home-- ми не робитиме це одне в class-- але якщо ви хочете довести цей один будинок, Я думав, що ми зануримося в це. Так що якщо ви хочете грати в цю гра з іншими значними або діти чи щось таке, ви могли б насолоджуватися, що добре. Так що давайте йти вперед і дивитися на один останній річ тут для обчислювального мислення. І це підводить нас до Джону Олівер, а не для кліпу Ви, можливо, бачили минулої ночі, але кілька недавніх випусків. Кілька місяців тому, Volkswagen взяв зовсім небагато зенітної з якої причини, якщо ви знаєте? Що вони отримали неприємності через? Так, так що вони emissions-- намагалися бити викидів Тести по суті, маючи їх автомобілі забруднюють навколишнє середовище менше коли їхні автомобілі випробовувалися і забруднюють навколишнє середовище більше коли автомобілі не були випробувані. І що все більше і більше цікавим в світі, так як ви можете припускаються від обговорень like--, що it-- CarPlay, програмне забезпечення від Apple для автомобілів а також той факт, що багато з нас все більше і більше мають сенсорні екрани в наших автомобілях, є страшне кількість програмного забезпечення в Народному автомобілі сьогодні, що відверто відкриває цілу банку з хробаками, коли мова йде про безпеку і фізичної небезпеки. Але на сьогоднішній день, давайте зосередитися тільки на те, що участь в написанні програмного забезпечення що могло б маніпуляціям систему. для визначення проблема, для тих, хто не знайомий, давайте поглянемо на Джона Олівера. А для тих, хто знайомий з проблема, давайте подивимося на нього в цікавій ігровій лінзи через Джон Олівер, а також. Отже, дозвольте мені вдарив грати на цьому, я думаю, трихвилинний введення. Блін. [Відеовідтворення] -Cars-- DAVID Маланки: Очевидно, на YouTube, it's-- - --the Розумні персонажі Форсаж фільми. На цьому тижні, німецький автовиробник Volkswagen виявився в середині скандалу потенційно кримінальні пропорції. -Volkswagen Готується мільярди штрафів, можливі кримінальні звинувачення для її керівників, а компанія вибачається за фальсифікацію 11 мільйонів автомобілів в допомогти йому перемогти випробування на викиди. -Certain Дизельні моделі були розроблені зі складним програмним забезпеченням, використовували інформацію, в тому числі положення рульового колеса і транспортного засобу Швидкість, щоб визначити, що автомобіль був проходять випробування на викиди. Відповідно з цією обставиною, двигун призведе до скорочення викидів токсичних речовин. Але машина була оснащена обійти що, коли він був женуть. Викиди збільшилися від 10 до 40 рази вище допустимих рівнів EPA. -Wow, Від 10 до 40 раз більше, ніж EPA дозволяє. Це найгірше, Volkswagen коли-небудь робив, щось ви могли б сказати, якщо ви ніколи не чули про Другу світову війну. Але, можливо, найвірніший ознака того, як багато клопоту Volkswagen перебуває, є те, що люди на самому зверху зробили крок вниз. Генеральний директор подав у відставку в середу після того, як підіймаються, щоб зробити ремонтно-відновлювальні роботи, сказавши, що він нескінченно шкода, що звучали чудово, поки не вийшло він був всього лише 10% шкода але підстроїв його рот щоб штучно завищити його sorriness. А між тим, Volkswagen в США головним було вибачення його власної. -Давайте Бути ясно говорить про це, наша компанія була нечесним. І в моїх німецьких слів, ми були повністю облажався. Ага, Але повністю угвинчується до ненімецького роботи. І німецьку мову має багато красивих фраз описувати ситуації, так само, як це, таких, як [Німецька], що означає, грубо кажучи, печаль, яка приходить від бізнесу, пов'язаних брехні, або [НІМЕЦЬКИЙ], який переводить а соромити одні батька за участю хмари бензину. Це красиву мову. Він просто відпливає мову. І, до речі, в той час як чоловічий вибачення може звучати щира, варто відзначити, що він говорив на офіційний запуск партія за 2016 рік Volkswagen Passat, а це означає, що найближчим часом після того, як говорив шкода, що він сказав це. -Спасибі Велике, що прийшли. Насолоджуйтеся ввечері. До наступного Ленні Кравіц. [МУЗИКА] -Добре, OK, закінчення вашого Вибачення з до наступного Ленні Кравіц НЕ кричати тверезий каяття. Він кричить, ми попросили Bon Jovi, і він сказав, що ні. Марка Volkswagen має були сильно пошкоджені. І, чесно кажучи, їх нове оголошення кампанія точно не допомагає. - [НІМЕЦЬКИЙ], ми в Volkswagen хотів би вибачитися за обман вас наші транспортні засоби. [КІНЕЦЬ ВОСП] DAVID Маланки: Так що це було манівці of-- sorry-- це був манівці представляючи фундаментальну проблему в програмному забезпеченні, яке є те, що вам необхідно виявити певні умови. І тому питання тут під рукою це, як робить автомобіль потенційно, як це реалізовано в програмному забезпеченні цими програмістами, виявити, що це насправді проходить випробування? Таким чином, щоб бути супер ясно, що вони роблять був, в середовищах, де програмісти фігурний автомобіль був бути випробувано, вони якимось чином зробив автомобіль викидають менше викидів, менше викиди, тим менше токсичної пари тощо. Але коли це нормально водіння на дорозі, було б просто випускати стільки забруднення навколишнього середовища, як вона хотіла. Отже, як ми могли б написати псевдокод для цього алгоритму? Як ми могли б написати псевдокод для програмного забезпечення, що працює в машині? Я маю на увазі, в двох словах, він кипить вниз до чогось на кшталт цього. якщо тестується, випромінюють менше. ще випромінює більше. Але це трохи Занадто високий рівень, чи не так? Давайте спробуємо пірнути, як до чого це абстракція бути перевіреними засобами. Іншими словами, навіть якщо ви нічого не знаєте про машинах, які питання ви могли б попросити, щоб визначити, чи є ви випробовується, якщо ви автомобіль? Які характеристики можуть бути уявити, якщо автомобіль проходить випробування? ГЛЯДАЧІ: Випробувальне обладнання. DAVID Маланки: Випробувальне обладнання. Так що, якщо випробувальне обладнання поруч, а потім випромінюють менше. Так що я міг собі уявити, реалізації що з якоїсь камер або виявлення того, що навколо вас. І дозвольте мені запропонувати, що просто відчуває себе занадто складно насправді є додаткова апаратне забезпечення тільки для цієї мети. ГЛЯДАЧІ: Якщо ви перебуваєте в парк, якщо ваш капот відкритий. DAVID Маланки: У парку або капот відкритий, так що це добре. ГЛЯДАЧІ: І машина працює. DAVID Маланки: Так що це трохи більше concrete-- і машина працює. Так що це було б збіг кілька різних умов, якщо ви будете. Так що, якщо автомобіль знаходиться в парку, і навіть хоча це дуже механічна річ як правило, я міг уявіть собі написання програмного забезпечення, особливо тому, що є часто світло там в ці дні, Я міг собі уявити, щоб там бути програмне забезпечення, яке може запросити важіль перемикання або те, що немає, ти в парку, є Ви в приводі, ти в зворотному напрямку. І я можу отримати назад відповісти на це або так НЕ чи ні до тих видів питань. І таким чином я міг би також, ймовірно, відповісти питання, як, є відкритим капотом. Може бути, є якийсь датчик що або дає мені назад 1 або 0, істинним або хибним, капот відкритий. А потім машина працює, я міг би виявити щось за допомогою якого механізму? Мовляв, автомобіль працює, я може виявити, що він включений, я міг виявити якимось чином що автомобіль рухається? АУДИТОРІЯ: РПМ. DAVID Маланки: Так, так що є завжди, що голка, яка говорить вам, скільки оборотів в хвилинні колеса відчувають. І таким чином я міг дивитися на це. І якщо це не 0, що, ймовірно, означає, що автомобіль рухається. Але ми повинні бути трохи там обережно, because-- давайте спростити this-- якщо ми тільки що сказали, якщо машина працює, ми не хочемо, щоб просто викидають менше, ми хочемо, якщо автомобіль працює і це перевіряється. Таким чином, є кілька інших інгредієнти, які люди припустили, що програмне забезпечення робить, бо відсутнього фактичного вихідного коду, ви можете тільки свого роду виводимо з фізичні ефекти автомобіля щодо того, що могло йти далі під капот в програмному забезпеченні. Так що, якщо машина працює і, можливо, скажімо, задні колеса не рухаються, чи може це бути показово якийсь тест? Що я тут натякаєте? Так, може бути, це на один з цих роликових речей, де, як колеса повертаються в передній або в задній частині, в залежності від того, чи є це переднє колесо або задній привід коліс, так що половина коліс рухаються, але Два інших немає, що це дивна ситуація в реальному світі. Якщо ви за кермом на дороги, що не повинно статися. Але якщо ви на складі на якийсь роликової системи, що дійсно може статися. Я думаю, що люди також запропонував, що, можливо, якщо автомобіль працює і рульове управління Колесо не рухається, що теж може бути сигналом, тому що це розумно як не відкладаючи на дорозі. Але навіть тоді, людина, ймовірно, переміщаючи його трохи або, звичайно, протягом декількох секунд. або ході хвилина, шанси це не фіксуватиметься в точно таке ж становище. Отже, іншими словами, ми може взяти віднімання, ви тестується, і зламати цю функціональність в цих складових компонентів. І це дійсно те, що Фольксваген інженери якось зробив. Вони написали програмне забезпечення свідомо виявити, якщо автомобіль проходить випробування, тому випромінюють менше, інше випускають звичайним способом. І проблема тут теж, в тому, що програмне забезпечення не є то, що ви не можете реально побачити, якщо у вас є так званий вихідний код. Таким чином, є два різних типи code-- принаймні, два різних типи коду в світі. Там щось називається джерело код, який не є на відміну від того ми писали, вихідний код. Це вихідний код, написаний на мова називається псевдокод, який тільки щось англійською, як. Там немає офіційного визначення цього. Але С і Java, C ++, ті, всі офіційні мови, які, коли ви пишете в них, що у вас є являє собою текстовий файл, який містить вихідний код. Але є і щось в світ називається машинний код. І машинний код, на жаль, це тільки 0 і 1-х. Так машинний код, що машини розуміють, звичайно. Вихідний код це те, що люди розуміють. І взагалі, але не завжди, є програма що програміст використовує, який приймає джерело код і перетворює його в машинний код. І ця програма зазвичай називають компілятор. Таким чином, ваш внесок вихідний код, ваш вихід машинний код, і компілятор є частиною програмне забезпечення, яке робить цей процес. Так що це насправді карти красиво наші входи, алгоритми, виходи. Але це дуже специфічне втілення про те, що сказати, що, навіть якщо у вас є один з Фольксваген автомобілів, що винні в цьому, це не так, як ви можете просто відкрити капот або відкрити керівництво користувача або подивитися у вихідному коді, тому що на той час, він досягає вашого автомобіля в дорозі, це вже було перетвориться в 0 і 1-х. І це дуже важко, але не неможливо, але дуже важко почерпнути багато всього від просто дивлячись на що лежить в основі 0 і 1-х. Таким чином, ви можете зрозуміти це, в кінцевому рахунку, якщо ви розумієте, як машина operates-- Intel inside--, якщо ви розумієте, архітектура Intel, але це дуже багато часу. І навіть там, ви могли б же не бути в змозі побачити всі що код може реально зробити. Є питання з цього приводу або це Такий процес в більш загальному плані? І насправді, ми можемо пов'язати цю дискусію вчорашнього обговорення Apple. Це теж, чому ФБР не може просто піти і подивитися в телефон підозрюваного і знайти рядки коду, для наприклад, що дозволить код доступу або включити цю затримку 80 мілісекунд. Тому що на той час, це на iPhone стипендіата, це вже було перетвориться в 0 і 1-х. Що ж, давайте зупинимося тут для нашого дивитися на обчислювальної мислення. Чому б нам не взяти 15-хвилинну перерву. І коли ми повернемося, ми будемо поглянути на програмування само по собі і почати карту деякі з цих концепцій високого рівня до фактичного, якщо грайливий, мова програмування.