>> 데이빗 : 안녕하십니까, 제 이름은 데이비드 Malan 그리고 이쪽은 CS50입니다. 그리고, 이것은 당신의 전형적인 고등학교 컴퓨터 과학 코스되지 않습니다. 이 코스는 좀 뭔가 특별한입니다. 나는 그것을 강의하고 있어요 때문이 아니에요. 이것은 하나, 우리는 생각하고 있기 때문에 그것은 사실과 너무 많은 일정을 너무 많이 학기 말까지 당신이 진정 영리 느낌을 당신의 두뇌를 했군 그 드문 코스. 그래서, 그 때 내가 다시 1996 년이 코스를 밟지 않은 느낌을 받았어요. 난 항상 여기에 정부 메이 하우스에 살고 나오나했다. 그리고, 나 [응원], 다른이므로 다른 다섯 거기. 그래서, 정부 당시 전공했다. 그리고 정부는 내가 항상 좋아하는 줄 때문에 역사를 전공했다. 저는 고등학교에서 헌법 법률을 좋아했습니다. 그래서,이 경로 신입생 년 내가 최고, 어떻게 내가 좋아하는 일을 할 일을 알고에서 출발했다. 그리고 난 항상 괴짜 조금 였읍니다, 난 항상 컴퓨터와 babbled거야. 하지만, 내 자신을, 어쩌면 아이러니하게도 생각해보면, 나는 항상 내 고등학교에서 과학을 컴퓨터를 복용했던 사람들을 본 싶지만, 진짜 괴짜로 내 친구. 사실 난 내 자신의 학년 나를 멀리 무서워했다라는 CS50이 작은 과정을 그리고 아직 드디어, 2 학년 때어요. 그리고 난 그 당시 사용자 조수했다. 그래, 난 확실히 이미 적어도 그 사이로 자격이, 내가 고등 학생의 재미를 만들어 그 괴짜. 하지만, 난 두려웠어요. 거기, 그것은 부분적으로 그것을 당시의 이러한 명성과 어쩌면 아직도했다, 그것은 무서운 코스되었습니다. 그것은 많은 일을했다. 그것은 열심히 아직 있었고, 하나, 세상에, 껍질은 멀리 물린 최악 그런 일이있어. 제가 제 자신을 올해 처음으로, 사실은 숙제 재미를 찾는 학년 발견. 그리고 나는 이것이 당신이 과정을 교차해서 말하는 게 아니에요. 이건 내게 진정한 실현했다. 자, 한 시점에서 생각하는, 내가 내 작은 맥북 앞에서 울다 지쳐 수 있기 때문에 CS50의 문제 집합에서 작동 내가 실제로 금요일 밤에 기대하는 데 사용되는 사실 geekdum에 선을 넘어어요. 그래서, 그 시점에서, 내가 분명하게 선을 넘어서는 것 같아요. 그리고,이 과정에서 우리의 목표는 그 사람으로, 모두를 돌리지만, 그냥 저이 과정에 대해 조금 특별한, 일반적으로 약간의 무언가를 컴퓨터에 대한 특별한 과학은 특히 요즘 말이 아니다. 그리고, 더 acclimated 우리 모두가 기술에있어, 더 많은 장난감 우리 주위에 컴퓨터가 스스로를하는 우리 주머니에 들어. 내 말은, 내 아이폰은 실제로 높은 실적이 컴퓨터보다 제 노트북이 대학에있다. 당신이 이런 것들과 스트레이트로 많은 것들을 할 수 있습니다. 우리가 아이튠즈로 이동하기 때문에 그리고 지금, 우리는이 방에서, 대부분의 아마 다른 사람의 소프트웨어를, 다른 사람의 도구, 문제가 다른 사람의 솔루션을 사용하여, 우리는 애플 리케이션 저장소와 우리가 뭔가 정말 깔끔한 할 수 Walla에서 몇 가지 애플 리케이션을 다운로드합니다. 하지만, 이번 학기의 마지막으로, 당신은 사람이 문제를 해결하는 일을 할 수 있습니다. 당신은 사람이 어떤 문제를 해결, 그 애플 리케이션, 소프트웨어의 조각, 중, 하나는 그냥 내가 즐거우니까 그 건물 도구가 될 수 있습니다 당신은 즐거우니까. 예를 들어, 말, 당신의 아이튠즈 라이브러리를 제어 이미 존재하거나 좀 더 쉽게 예를 들어 셔틀버스 시간표를 찾을 수 있습니다 명확하게 애플 리케이션 당신의 아파트에서 함께합니다. 그래서 사실, 하나는 또 있었어요 CS50를 데려 갔어요어요, 아마이 시점 금요일 야간과 토요일 밤에 있었던 첫 번째 물건에는 하버드 셔틀 버스를 실행 당시이 기회했다. 오늘 그리고,에, 그들은 여전히 일정을 인쇄되어 있습니다. 하지만, 거기 있었어요 정말 아무 때 다음 셔틀 있었 알아내는의 온라인을 의미합니다. 자, 내가 메이 난 자들 일반적으로 셔틀을 데려 사이 아니 었어에 살았더라도 있기 때문에, 관심이 없었어요. 하지만, 예를 들어 Pfoho에 친구들이 많이 있었다. 그리고 그 중 하나달라고, 한 시점에서 생각합니다. [응원] 좋아 Pfoho의 메이보다 분명히. 그럼, 하나는 내 친구 일종의 날 아마 내 친구 셔틀 시간표를 확인 종류의 도움을 조금 프로그램을 쓸 수 있습니다 생각이야. 따라서 불편라는 셔틀 아들 태어났고, 주위에 몇 년간의 수를 몇 가지 고학년 이상의 사이했는데 사전이 조각. 당시는이 작은 명령줄 프로그램의 정신에 도스와 유사했다. 그것은 UNIX 환경에서 실행되었습니다. 그래서, 매우 섹시 전혀되지 않았습니다. 당신은 몇 가지 명령을 입력하고 셔틀 있었 때 말했 잖아. 글쎄, 요즘 조금 더 세련 됐어요. 그리고, 그것은 실제로 사업이 코스의 마지막에 학생들은이 조항의 끝부분을 정확하게 만드는 유형의 대표 있어요. 그래서,이 버전은 4, 몇 15 년 늦은, Shuttleboy 있습니다. Google지도가 좀 느린가되고있는 것 같아. 하지만, 그 너 여기서 후에 클래스를 좀하고 말 가지에 대해, 최대, 쿼드 말할 가야 기념관과에서. 있다면, 글쎄, 당신도 2 분 안에, 이거 정말 당신을 위해 아직 작동하지 않습니다, 또는 당신은 많은 다른 옵션을 사용하면 좋아할 것 같은이 남길 수 있습니다. 그리고 곧, 우리는 CS50에서이 피치 수, 그것은 SMS를 사용하여 동일한 기능을합니다. 전화 할 수있는 텍스트를 통해 Shuttleboy. 당신은 Shuttleboy를 호출합니다. CS50의 전화 번호가 올해는, 음, 놀랍게도이 가능한 617 - 버그 CS50했다. 그럼, 곧 데뷔합니다. 난 용, 지금 당장 그것은 우리의 시스템 헤드 교사 동료의 휴대 전화에 전달되지있어주의를 듣고 들어왔 때문에 그러니 아직 전화하지 않습니다. 지금 셔틀 스케줄에 대해 궁금한 점이 있으면, 당신은 단지 그를 데려올 게요. 하지만, 조만간 시행됩니다. 그래서, 다른 일들이, 사실은, 우리 자신이 이번 여름에 준비 정말로 이번 학기에 보낸 우리가 해결하려고 및 다른 문제의 전체 뭉치가 있었는데. 예를 들어, 거기에 물건이 캠퍼스에 주어진 하루에 일어나는 모든 많아. 그리고 사실, 다른 방법을 넣어, 거기에 물건을 한꺼번에 많이 나는 확실히 활용 결코이 캠퍼스에서 무슨 일이. 그리고, 비록 내가 지금은 아직 시간을 못 찾을 것 얼마나 많은, 학교에서 일어나는 일들에 압도 해요. 하지만, Walla, 심지어 거기 CS50의 강연. 그건 어디 있는지, 그래서 이것이 있었어요, 이건 우리 모두가 캠퍼스에서 이벤트의 집계에 쓴 프로그램이었습니다. 그리고이 가지고 뭔가를이 같은 과정에서 다른 학생들은 자신에 태클이였습니다. 그리고, 우리는 캠퍼스에있는 다른 기관들과 정말 이렇게하기 위해 노력했습니다. 하지만 포인트가 CS50이 용어입니다 우리 모두가, 모든 Google 뉴스는, 이러한 모든 것들을 가지고가는이 있는지 여부 또는 한 장소에서 모두를 하버드의 뉴스의 수렴 여부에 일하고 있거든요 이런 작은 프로그램 중 어떤 API를의, 응용 프로그램 프로그래밍 인터페이스라고합니다. 그리고 이것이 단지 공상는 다른 사람을 보내는 수있는 능력에 대한 이야기,이 방에있는 사람들이, 사실은 같은 데이터로 뭔가를하고. 당신이 결정면, 조건에 의해 엔드는 물론 잘 우리가 최소한으로, 그게 전부 더 올해 쉬운 것입니다 인터페이스를 제공하여 최종 프로젝트를 뉴 스나 이벤트 또는지도, 관련 구현하는, 일종의 기능은, 그래서, 소프트웨어를 자신의 프로젝트에 상기 이동하고이 프레임 워크는 장소에서 그들되지 않았기 때문에 어디에 학생은, 아마, 시간이 과거에 갔을 이상 사용할 수있는 통화. 그리고 다시, 이것은 모두 나를 위해 시작 적어도 일부는 15 년 Shuttleboy를 구현하는 전. 그때 나는 Pfoho 내 친구 켄를 이메일로. 나는 '이봐, 무슨 생각 했어? 이 유용한가? 그는 Pfoho 열린 목록 Walla에 그것을 밖으로 우송, 이러한 모든 년이 전 분명히 아직이 프로젝트를 짜내는거야. 그리고 그것에 대한 깔끔한 것, 그리고 이곳이 바로 내가 생각 공학 및 컴퓨터 과학,이 같은 너무 코스, 조금 특별한 경우, 그 때 당신의 가정을 작동하며 때이 과정에서 귀하의 프로젝트를 할 것입니다, 당신 알다시피, 그들 중 많은 네, 당신은 옆으로 올려 진심으로 다시 사용할 수 없습니다. 하지만, 어떤 면에선, 당신은 것입니다. 그리고 이건 정말 강력한 건, 날 적어도,이 정말 짜릿한 건, 당신이 뭔가과 다른 사람들이 실제로 치료하게, 다른 사람들은 그냥 미소를하지 않고 자신의 삶에 대해 가지의 뒷면에 다음 정렬을 두드려. 그들은 실제로 당신이 자신의 삶에서하더라도 그것은 바보처럼 뭔가를하거나 그냥 그들이 여기서 쿼드로가는 다음 셔틀을 잡으려고 얻을 수 찾는 간단 하잖아 만들어 사용할 수 있습니다. 그래서, 조건에 의해 종료 한이 과정의 목표 중, 너희들은 좀 문제가 있는지 여부 그것은 캠퍼스에서 혹은 캠퍼스 잘하면 그 이상의 식별하고, 능력을 실제로 자신의 능력, 자신의 마음과 일부에서 문제를 풀기를 사용하여 부분, 기술. 그래서, 이것은 또한 당연히 우리가 강의 계획표에 어떻게 생각하는 당신을 가르치고 그것은 얼마나 더 효율적으로 문제를 해결하는 당신을 가르치는 코스 공식 설명이시키는대로합니다. 글쎄, 그게 무슨 뜻 이죠? 그럼, 당신이 당신의 포켓 또는 3 기가 헤르쯔에 가정에서 책상 아래에 600 메가 헤르츠 있는데, 당신은 전단 무력 효율적으로 그냥 많은 문제를 해결할 수 있습니다. 그러나,이 세계에 많은 문제가 있는지 여부는, 페이스 북의 네트워크 또는 Google을 통해 인터넷, 그것은 얼마나 빨리 특정 컴퓨터가 중요하지 않아라고 검색하는이야, 지옥에서 검색거야 방법은 없다 웹 페이지의 수십억 빨리 실제로는 지능적으로이 문제를 접근하지 않는 한. 위에서 아래에서 지구상의 모든 웹 페이지의 인스턴스에 대해 당신은 할뿐 아니라 검색, 거대한 목록 뭔가 어떤 검색어에 당신이 희망 Google과 아마도 구글과 페이스 북과 이러한 큰 엔티티를 찾고 관련을 찾고 똑똑한 사람들이보다 신속하게 데이터를 찾을 수있는 방법에 대해 많은 생각을 가지고, 그들이 어떻게보다 효율적으로, 그리고 그들이 어떻게 그냥 일반적으로보다 신속하게 그렇게 결과를 반환할 수 있습니다 당신은 아직 할 수있는 정보를 처리할 수있는, 이들 장치와 더 재미있는 것들. 그래서, 우리가 뭘에도 불구하고, 뜻이 어떻게, 얼마나 더 신중하게, 더 algorithmically 사람들의 생각을 가르치고. 음,이 작은 영상 항상 잘 검토해 것 같다. 그리고, 그것은 기억에 남을 것 같습니다. 그리고 난 어제 전직 학생, 오 다시 전화 번호부 일을하려고 질문을 받았다. 그리고 내가 그 자리에 거의 괜찮아 우리는 전화 번호부 사건을 만들어 확실히 결정했다. 물론 기술적으로 우리는 절반의 방식 아니지만에서 컴퓨터 과학 방법으로 내가 30에 이걸 찢어 수있을 것입니다 그것을 찢어 예처럼 그리고 그 때 절반은 바로 그것을 찢고 말아달라고했고, 그랬 었지. 그래서, 여기 우리는 한동안 제시 문제가 있습니다. 그럼 여기서 전화 번호부가. 그것은있어 천 정도 페이지 적어도. 그리고 손의 간단한 목표는 매우 현실 세계, 말, 여기에있는 사람을 찾을 수있다. 그럼, 마이크 스미스, 성 S로 시작 그래서, 나는 전형적인 인간이야,이 전화 번호부를 데리러. 그리고 밖으로 아무도, 어떤 사전에 어떤 페이지가 그 사실에 아는 사람이없고 마이크 스미스를 분명히 찾기 시작 하는게 좋을거에요 당신은 전형적인 사람. 좋아, 그래서 당신이 대략 중간에, 바로 이동하십시오. 그리고 이야기는이 시점에서, 난 아마 N이라는의 또는 남이야, 너도 알다시피, 약 절반 방법으로 전화 번호부를 통해이야. 알고 보니, 내가 어떻게든 호위 섹션에 자신을 찾은이 예제를 한게 언젠지. 그래서, 실제로는 똑같이 사이의 남과 N을 통해 조디악을 통해 균형을 못하지만, 오늘의, 우리는 사실은,에서 남이야, 알았지 그래서, 지금에있어 남이야. 하지만 내 테이크 아웃은 이제 거리의 정상적인 인간에서와 마찬가지로? 어디에서 다음 마이크 스미스 가지 않습니다. [안들 리게] 그래서,이 반은 그냥 아마도, 오른쪽, S는 엠은 그래서, 여기에 시각 드라마 거짓 후 오겠죠합니다. 그건 정말 반으로, 그렇지 끊어지고 아니에요. 전 그 복잡한이 센터를 속였어. 하지만, 우리가 지금 그 마이크는 적어도 절반에서 알아요. 우리는 말 그대로 멀리 떨어진 문제의 절반을 던질 수 있습니다. 그리고 나는 근본적으로 여전히 같은 일이 문제가 남아있어, 아주 큰 책에 마이크 스미스를 찾으십시오. 하지만, 문제는 이제 절반으로 대형이다. 그것은, 지금은 500을 가진 한 1000 페이지를 가져본 바랍니다. 당신은 무엇을, 다시는 같은 일을 할 수있어. 의 할 수있는 종류의 재귀적으로 또는 반복적으로 같은 일을. 지금은 아주 미에 나 티에이 아니야 그래서, 오 나는 너무 멀리 좀 갔다. 하지만, 이제 마이크, 몇 가지 클래스 언젠가 난 그냥 댐 건 눈물 수없는거야 안 오른쪽으로 알고, 난 내기. 하지만 지금은, 내가 보기엔 오른쪽이 아니란 걸 알죠. 그럼 이제 문제는 4 등분되었습니다. 그래서, 1000 500-250 페이지로 변화했습니다. 당신은 논리를 계속하면 다시,,, 내가 30 년, 30 년, 30 년 마침내 때까지 난이 문제를 서둘러 마무리하고있어 수학을 계속하거나 찾을 수 없습니다가는 어떤 스미스의 전혀 가능성, 또는 그럴거야 내가 찾는 사람을 찾으십시오. 바로 선형 책을 거치는하지만, 그, 그럼, 웃기는 질문이지만,이 모든 단지, 당신은 왼쪽부터, 아니이, 나, 아니, 알고 말하는 단순한 접근보다 낫지 않아? 음, 본능적으로 그래. 그것은 훨씬 빨리 될거에요. 하지만, 얼마나 덜 얼마죠? 전 1000 페이지 전화 번호부가있을 경우 또는하자 그럼, 그 두 사람의 초능력 같은 중 1,024 말, 얼마나 많은 시간이 난 절반에 스미스를 찾는 전에이 문제를 분리해야 할 수도 있습니다? >> 10. >> 데이빗 : 그래, 맞아 10. 당신은 1,024 페이지가있다면 당신은 반으로 그들을 분할, 하프, 하프, 하프, 난 1,000 페이지에서 내가 겨우 10 페이지에서 찾고 사람에게 갈 수있다는 10 배 편이 않습니다. 그리고 그 멋진 친절하지만, 알다시피, 당신이해온 대해 생각한다면이 모든 삶의. 그것은 극적인 아니에요. 하지만 지금, 그 전화 번호부 보스턴위한 게 아니, 이것은 전체 미국 또는 전체가 세계와이 일을위한 그것의 페이지 수십억을 가지고, 그래서 40 억 페이지에있는 전화 번호부를 상상. 얼마나 많은 페이지가 밝혀졌 내가 maximally 40 억 페이지 번호부에서 마이크 스미스를 찾으려면 어떻게해야하는 거요? >> 로그 기지 2. >> 다윗 : 그럼 네, 당신은 수학 유형의 종류면이 기지를 두 로그입니다. 하지만, 당신 생각한다면 4000000000-2000000000 to one 억 그래서 30 억. 난 실제로 whittles에게 내려 너한테 무척 빨리가는 자체를 의미. 사실 4 수십억 번호부의 32 halvings와도부터, 나는거야 내려 한 페이지 수 있습니다. 그리고 그 때이 물질이 강력한 도착, 전 생각합니다. 그 때 이러한 아이디어 때 40 억 페이지에 문제가있을 수 있으며, 32 단계에서 당신은 당신이 찾고있는 사람을 찾을 수 뛰어난 잡읍시다. 그래서, 그게 우리가 언제 우리가 얼마나 더 신중하게, 더 algorithmically 더 지능적으로 문제를 해결 대해 생각하는 법을 배우게 될 말이 그말이야. 그리고 반환하면 실제로이 일을 할 수 거대하고 다시, 세상 Facebooks 거대한 데이터 세트를 가졌다고 사치를 누릴의 구글의이 시점에. 이 방법으로이 문제를 접근 해 그렇지 않으면 그것은 단순히 작동하지 않을거에요. 그럼, 무슨 짓을 한 학생이 실제로 기억이야? 나는, 우리는 조금 바보 때로는 벗어 달리 새로운 소재의 많은 무엇의 가장자리를 받아 일종의하는 일을 좋아. 그래서, 그는 사실,이 전직 학생은 나에게, 그리고 재미로 누른 다음 마지막에 그것을 후회 단지, 내가 적극적으로 나서서이 링크를 보낸 uTube에 여기까지 뽑아. 그래서, 내가 무엇이 아닌 컴퓨터 과학자가 반으로 때 눈물이 전화 번호부를 의미 공유하는 줄 알았는데. [웃음]를 [국가 침묵] [안들 리게] >> 당신은 멋진 깨끗한 라인을 200 개 이상의 페이지에 대해 알고, 합법적인 눈물. [웃음]를 >> 데이빗 : 그래서, 제 생각엔, 그 방법도 작동합니다. 그럼, 내가이 코스의 모든 수년전에있어 네, Shuttleboy는, 그리고 컴퓨터 과학 예 학위를 누른 다음 컴퓨터 과학 박사 학위가 예. 그리고 우리로이 과정에서 대부분의 학생을 돌리려고 아니에요. 당신이 과정에서 대부분의 컴퓨터 과학 전공 갈 수 없습니다. 몇몇은 당신의 사소한 수 있지만 일부이의 터미널 코스됩니다. 그리고이 과정 때문에 완벽하게, 사실 잘 경우에도 단지 몇 개월 동안 회비를 납부하고 당신이 정말로 초점 당신이 정말 데려다 방식으로 구조의이 과정별로 할 수있는대로, 그럴거야, 안에 사실, 잘 돌아 경제학, 생물학, 심리학, 귀하의 세계에 수학을 적용 참석해야하고, 장착 실제로 우리가 개념으로 그것은 근본적으로 실용적입니다 희망으로 궁극적으로 코스를 재미있는 무엇을 사용합니다. 그리고 그건 너무 아마도 조금 찾기 드문 게있다. 제가 몇 가지 의견을 공유할 줄 알았는데 마지막 가을이 지난 년간 큐 가이드에 넣어에서 온 학생은 향후 학생에게하고 싶은 일에 대해서 물었다. 당신은 이미 이러한 의견을 쳐다보하지 않은 경우 아무튼, 한 학생은이 과정은 시간이 꽤 걸릴 것이라고 말했다. 하지만, 만약 완전히 새로운 세상, 전체로 작업을 넣어, 당신은 작업을 세우면, 경우에 작업을 넣어, 알았어요, 그래서이 그의 문법 안 내이다 그래서 당신은, 일,에 넣어 세우면 새로운 세상이 당신에게 열어 것입니다. 얼마나 난 겨우 12 주 동안 배운 놀라워. 또 다른 학생은, 당신은 받아 봐야 할 것 또는 당신이 그것을 후회하게 될걸요 썼습니다. 또, 좀 더 솔직하게, 그것은 당신의 엉덩이를 걷어차 것입니다 그리고 당신은 좋은 느낌을두고 썼습니다. 그리고 마지막으로, 이것은 아마도 내가 유일한 서면으로 보여줄 수 있지만, 바닥에서 뭔가 여기에 두 번째입니다. [웃음] 그래서, 나는 당신이이 코스를 밟지 않은하지만 우리가 어떤 작년의 학생들에게 피해를 많이 한 많은 친구가 있는지 확실하지 않습니다. 우리는 시작에 도입, 몇 가지는 몇 가지 퀴즈, 몇 가지 문제 세트, lolcats의 개념을 강의를했습니다. 내가 뭘 여기지만 순간에 당신은 젊은이 이른바 lolcat의 리더가 행복한 고양이 이름이 나타납니다 볼 수있는 볼 수 없습니다. 이것은 내가 솔직히이 두 신사 사이의 이분법 여기에 생각하고 우리가 지금이 화면에있다 아마이다 바보 같은 인터넷 전달의 하나입니다. [웃음] 한 날짜에이 극장의 가장 부적 절한 사용합니다. 그리고, 왜 우리가 더 좀 더 실제보다 효율적으로 문제를 해결의 개념 개인적인 진짜 좀하지 않습니다. 어느 학교에서 하루에 간단한 문제가 앉아서 또는 일어서서 학생부터 시작 종류의 오른쪽 점호입니다. 음, 가장 순진하지만 그럼에도 불구하고, 매우 정확한 접근 방식은 교사가 걸릴 수도 하나, 둘, 셋, 넷, 다섯, 여섯, 일곱이며, 우리는 꽤 오래 이곳거야. 그래서, 무슨 개선이 한계가이도 당신이 어렸을 때 일을했을 거에요? 어떻게 사람이 더 빨리 계산합니까? 그리고, 내 자신의 지시 사항을 읽고 시작할까요? 무슨 당신은 어릴 때 옹호할 셈인가? 같은 숫자 세 조로, 맞아, 내가 예쁜 2, 4시, 6, 8, 12 10 괜찮아요 정말. 그래서, 그게 뭔가 재미있는 맞아. 그래서, 어떻게 개선의 정도입니다 거기있어? 그래서, 분명히 두 가지의 요소가. 그것은 내게 많은 시간을 절반으로 걸립니다. 컴퓨터 세계에서 가장 아날로그 여기서 제가 CPU를에요이기 때문에 그러나, 당신은 우리가 이번 학기에, 큰 거래를 통해, 두 단지 요인에 의해 시간을 실행하는 속도처럼 찾을 수로 무엇을, 모든 흥미가 못 알아 제가 컴퓨터를 잘 하, 난 그냥 12 개월, 18 개월 기다리면 해요, 컴퓨터가 수있는 자연, 기가 헤르쯔의 나는 내 안에있는 숫자로이 방 안에 빨리 사람을 셀 수있을 것입니다. 그래서, 이러한 종류의, 3의 두 요소의 요소 같은 선형 speedups 이런 종류의 관심이 10, 심지어 요인? 그래, 우리는이 문제에 하드웨어를 던질 수 있습니다. 우리가 물건을 밖으로 기다릴 수 있어요. 우리는 빠른 기계를 개발할 수 있습니다. 똑똑하지만 그것이 정말 근본적으로 문제를 변경하지 않은 사람 이었어요하지만, 지적, 그래. 난 아직도 오른쪽 앞에서 뒤쪽으로 왼쪽에서거야. 정말 같은 알고리즘이야. 하지만, 나는 우리가 더 잘할 수 있습니다. 이것을보다 근본적으로 더 빠른 구현을 할 우리가 똑똑 할 수 있습니다. 하지만, 이것을 설명하기 위해, 우리는 우리를 위해 유머 잠시만 당신이 필요해. 그리고 그것이 나를 덜 얘기하고 더 얘기 할게이 시점에있어. 하지만 난 당신이 경우 것입 유머 우리는 1 단계를 함께 실행해야합니까, 일어서주십시오. 보드에 방향이 여기 당신, 괜찮아요, 앉아 야 겠어 당신은 몇 가지 알아. 그건 당신이 다시, 우리, 괜찮 이동하십시오. 감사합니다. 그래서,이 프로그램은 여기에 당신 앞에있다. 이제 컴퓨터에서이 프로그램을 실행하고 있습니다. 이건 상당히 설명이 시점에서 자기. 그래, 당신이 최고야이어야합니다. 알겠어? 좋아, 당신은 많은 분들이 아마도이 이미 어쨌든, 최초의 1 학년 생각하고 있습니다. 그럼, 자신에게 생각, 당신이 최고야. 그럼, 3 단계는 여기 서있는 사람과 떨어져 쌍으로 함께 두 숫자를 추가하고 그 금액을 채택하여 새 번호로 그리고 우리는 정신을 확인을 다하겠습니다. [시끄러웠 얼마나 많은 우리가 알고 계십니까 군중]에서? >> [안들 리게] >> 아니 [안들 리게]. >> 우리는 대답 키가 필요합니다. [국가 침묵] >> 응. [시끄러웠 군중]에서 >> 데이빗 : 알고리즘이 끝나가해야이 시점에서. [소음 군중]에서 아마 우리가 결국 내 방식으로 사라지고 있어야합니다. >> 43. >> 163. >> 데이빗 : 300 플러스 사람들 앞에서 우의 산술. [웃음] 우리의 최종 집계가 될거야? >> 180. [웃음]를 >> 1200. >> 386. >> 데이빗 : 386, 그리고 당신에게 마지막으로 서있는 거지? 모든 사람이 있나요? 당신은 대답을 알고 있나요? >> 왜? >> 데이비드 : 무슨 대답은 알고 계십니까? 우리는 우리와 함께 그렇게, 386은 사실 처음으로 정확하게 정답입니다 답변 열쇠를 안 가져 왔어요. [환호성] 괜찮아요 [박수 갈채]. [박수] 매우 잘했어. 그럼, 테이크 아웃되었다 확실히 조금 방금 onesies and twosies가는 그냥 왼쪽에서 오른쪽으로 끝내는 내 아주 그러나 그럼에도 불구하고 매우 올바른 단순한 접근보다 느린 느낌이 그 때문입니다. 하지만, 무슨 짓을 우리가 정말 거기합니까? 음, 만약 약이고,, 400 당신의 한 지점에 서서, 말 그리고 절반의 매우 빨리, 제가 말할 수있는 건,하자 앉아 싶었어요. 그래서, 당신의 절반에 앉아서, 우리는 400에서 200 다음 다음 50 개 100 다음 25를 보러 갔다. 그래서 다시 그 같은 분열은 우리가 전화 번호부와 아이디어를 정복했다. 또, 매일 반복으로 우리는 문제의 크기를 반으로 낮추었, 우리는 그것을 반으로 낮추었, 우리는 그것을 반으로 낮추었. 그래서, 이론, 당신의 알고리즘은 훨씬 빨리 제 선형 접근법보다 나의 접근 방식은 촬영했을 때문 했어야 400 단계이나 말이 어쩌면 내가 조금 200 단계 똑똑해면. 하지만, 당신은 훨씬 적은, 400 오른쪽에서 200, 6; 그래서 결국 대 10 단계보다 적은 100, 50, 25, 13 일 촬영했을 내 200 또는 400. 그리고 정말로 흥미로운 아이디어의 세균이야. 그리고 그래, 수학적으로 무엇을 당신이 한일에 약간의 자연의 로그 로그 기지 2에 의해 뭔가했다, 우리는 두 두 다시 나누어. 그리고 우리는 나중에 이번 학기에 다시 방문합니다. 그러나 그래서 다시 아주 지적이고 구현은 거짓말. 그리고, 우리가 문제를 우리가 궁극적으로 해결할 수도있는 매우 똑똑한 아주 지적이고 효율적인 접근 방법의 표면을 긁어 있습니다. 그럼, 누가 그냥 함께 chatted 사람들이있다면 간단히? 과정에 공통의 관심사가이 마음에 모두가 당신과 당신의 오른쪽에 명확하게 당신보다 더 많이 알고 있어야하는 사람의 왼쪽에있다. 음, 그런 경우 절대 아니에요. 그리고 사실, 최근 몇 년 동안이 과정은 이러한 협조 노력을 덜 편안하게, 말하자면에게 다가가려 만들었습니다. 그리고 그것에 의해, 우리는 정말 열심히 여기는 요즘 찾아보기에 있기 때문에 전에 컴퓨터를 만진 적이없는 사람,하지만 페이스 북은, 어쩌면 지금은 이메일을 사용하여 사용할 수 있지만 반드시 꽤 무엇을해야할지 확실하지 않은 사람은 안된다고 할 때 뭔가 잘못하거나 그들이 아무것도 기술에 대해 물어, 당신이 알다시피, 손이 올라갈 혹은 더 정통한 거기에 그들보다 친구에게 하드웨어를 밀어 그들은 일종. 음, 이건 작년 학기부터 몇 가지 통계가 있습니다. 그래서, 학생들은 작년에, 당신은 알 수 있도록 우리가 우리의 400 물어 물어, 무슨 안락의 수준이 클래스에오고있다, 그럼 34 % 내려 그 중에서 덜 쾌적한으로 자신을 썼습니다. 그래서, 당신이 방에 와서있다면 지금도, 그게 무슨,이 용어는 적게 편안한 날에 대해 설명합니다 알고 생각하는, 당신이 좋은 회사로 알고 있습니다. 하지만, 역시이 과정에서 컴퓨터 과학 배경으로 올 수 있는지 궁금해하고 그, 그렇게 중학교에서 괴짜 높은 코드 및 교육 스스로 언어, 잘 쓰고 있었어요 학교에 있었는지 그게 좋아도 있기 때문에 분명 nontrivial이야 이 배경과 크기의 관객뿐만 아니라, 약 13 %, 마지막 학기. 그리고, 거기에 다른 사람들이 덜 불편하다고 생각하지 않는 사람이 일종의, 그들은 확실히 그들이 더 편안지만 그들은 단지 과정에 밖으로 그것의 무언가를 얻을 수 있다고 생각하지 않는거야. 그래서,이 과정은 학생들이 꽤 스펙트럼을 그려 않습니다 실현. 그리고, 더 구체적인 용어, 학생의 71 %에서 작년, 이것을 넣어 그들 뒤에 0이 과정을했다. 그래서,이 코스를 오 CS50 소요 모두를 생각 입력하는 경우 고등학교 컴퓨터 과학 윙 그런 경우가 아니라, 이건했다. 대부분의 사람들은 아마도 그냥 관심이 있습니다. 그리고 네, 물론 작년에 어떤 과목을 일부, 또는 사람이 적어도 하나에 데리고 몇 가지는 이전 5 개 과목을 촬영했다. 그래서, 우리는 확실히 좀 outliers 있지만 다시 곡선의 고기 못한 낮은 값을 전부입니다. 그리고 다른 재미있는 통계는 우리가 지난 2 년 동안 몇 공유 성별 비율입니다. 그래서, 역사적으로, 컴퓨터 과학 적어도, 거기에 남성 여성의 왜곡 약간이다. 몇 년전에 나는 몇 훨씬 더 표시된 작년보다 전에. 그래서, 우리는 이제 거의 40 % 수준에 있습니다. 그리고 내년 3 파이 차트를 가진 사람을 위해서 단지, 그보다 더 공평한의 도전을 던져 수있다면. 제가 그 과목의 관점이 남성과 여성은 물론 이런 종류에 등록해서는 안에서 전혀 이유가있어 지적합니다. 상대적으로 평등의 숫자가 우리가 실제로 꽤 우리가 거의 다 온 거보고 기쁘게 생각 38 %, 48 %에 봤던, 50 %의 통계적으로 가치조차 적어도. 사실 그래서이있다면, 여자가, 나머지는 너무이게 아니, 사실은 남성 위주의 수업을 보장 않습니다. 음, 이건 너무나도 CS50의 20 번째 생일이기도 해. 난 당신을 잘 감사합니다. [환호성] 우리는 당신을 위해 실제로 케이크 가져왔다 때문에 정말 친절 하시군요의 [박수 갈채]. 그래서, 당신이 여기에 나중에 오늘 출구, 당신은 실제로 기회를 코스 복도에서 느린거야 사람들 많은 가르침을 충족 얻으실 수 있습니다. 그리고 네, 그것은 교육이 사람들 모임 incentivized 방법의 좋은 정렬됩니다. 우리가 그 재미있는 동안에도 불구하고 작품의 nontrivial 금액을 예상하고있는 동안 그러나, 우리는 작은 빵집에 다시 코스와 일치하는 여행을 차지 할 활달한 성격이다. 하지만, 우리는 하나 당신이 케익을했습니다. 당신이 웃는면 하나 그 이하의 편안한 가운데 것이 아닐지라도 최소한 당신이 그것을 알고 있기 때문에 [웃음] 그럼, 그 사실은 좋네요. 그건 당신의 14 %에서이 맛을 선호 수도 있습니다. 당신은 도대체 지금 벌어지고있는 건지없는 경우 [웃음]은 그리고 나서, 우리는 또한 당신의 나머지 이걸있다. [환호성] 우리가 말하는 [박수 갈채] 그래서, 그 조각은 밖으로 처단되고있다. 그럼 다시, 그리고 노치를 물건을 받아 적어도 몇 가지 기본적인 입주자를 당연하게 우리가 그때 할게요 소개하겠습니다 이번 학기에 남아. 그럼, 우리 모두가 아마 0과 애들 한테 그렇게 컴퓨터가 궁극적으로 졸이다 어떻게든 잘 알고, 이런 일은 비트했다. 그게 무슨 뜻 이죠? 그럼 당신은 그것을 솔직히 전구로 생각할 수있는, 조금도에하거나 그만이에요 전구입니다. 이것은 스위치가있어, 그것 역시하거나 그것 그만 이죠. 자, 컴퓨터 과학자들은 일반적으로 떨어져으로 생각 하나에 숫자 0 임의로과, 그리고의 개념. 그래서, 당신은 하나 그 0 그걸 해제 '에서 조명 스위치를 내리려고하면. 아니면, equivalently, 그것은 사실 그 거짓의 가치가 그것을 해제의 가치의에 등불을 켜십시오. 그럼, 이건 그냥 동의어가 없습니다. 하루의 마지막, 네, 모든 계산에 컴퓨터의 후드 아래에가는 모든 것들에 0과 애들을 위해 궁극적으로 종기를 않습니다. 그리고, 당신이 그것에 대해 생각을하지, 아주 댐 놀랍게도이 세상이 뭐라와 함께 행하신의 일부 당신 손에 쥐고있는 장치를 포함하여 이러한 기본적인 빌딩 블록. 글쎄, 왜 0과 유용 것들입니까? 세상에, 현실 세계에서도 우리는 최소한 9 0 통해 10 자리를 찾았습니다. 왜 이렇게 제한된? 음 하드웨어 측면에서 아주 간단합니다. 그것은 훨씬 쉽게 두 가지 상태를 바로 대표하는. 컴퓨터가있다면 벽에 이내에 연결되어, 당신은 바이너리 자연이 쉽게 소스를했습니다. 그것도의 켜거나. 전기가 흐르는 아니면 아니에요. 그럼, 한 초기 이유 중 종류의 세상이 그저 0과 컴퓨터 것들과 가봤. 하지만, 당신은 블록을 건물로 사용할 수 있습니다. 그래서,이 사실은 조금 작은 화면에 이곳하지만 우리는 이진에 셀 수 또는 우리가 바이너리에서 원하는 아무것도 표현할 수 단지 우리가 할 수있는, 십진수 말씀대로 우리가 수있는 사실에서도, 알파벳 문자와 마찬가지로. 그래서, 여기 빨리 동굴 이거든. 지금은 어떻게 계산하는 방법은 어떻게 바이너리 자신의 노트북처럼 말을 써야할지거야 단지 몇 분 시간이 있음. 글쎄, 당신의 이진, 일종의 세계가 초등학교 컬럼이나 값은처럼. 그래서, 학년 학교에서 우리는이 것들은 칼럼이 수만 칼럼, 수백 칼럼 등등입니다 배웁니다. 즉, 왜 우리가 알고있는 전화 번호는 123으로 번호가 123? 음, 내 선생님 한테 배운는 것들은 열, 이것이 수십 거였어, 이것이 수백했다. 그럼 그게 무슨 뜻이지? 그럼, 총액 달리 숫자의 문자열이 뭔지, 그냥 보드에 자국이 해시는 알아낼 수 있습니다. 글쎄, 우리가 한 100 개, 그래서 1 번 100 다음 더하기 어떤 두 개의 10 그래서 2 번 10 더하기 세 사람, 그래서 3 번 1, 괜찮아요, 그래서 다시 어디로 시작한을지 희한 하군요이에요. 하지만, 그냥 칼럼의 값으로 숫자를 곱한이 매우 간단한 과정을 정확히 이진은 모든 것입니다. 하지만 바이너리에 10의 두 아니 능력 능력을 사용할 수 있습니다. 그럼, 여기 8 전구 일련의가. 컴퓨터 과학자들은 모두 일반적으로 편리하게 값을 사용하기 때문에, 둘, 8, 16 및 24과 32 같은 값을 사용하는 것. 그럼, 우리가 순서대로 약 8 값을 얘기 이것은 바이트라는 것입니다. 그리고 요즘 우리는 거의 그냥 바이트 단위로 말하면, 우리는 메가 바이트를 기가 바이트 및 테라 바이트 요즘 이야기. 그렇지만 그것은 모두 궁극적으로 같은 건 없어. 여기에 8 비트는 1 바이트 일명, 그냥 간단한 전문 용어가. 그럼, 이러한 모든 전구의 해제됩니다. 그럼, 수학이 실제로 정말 쉽습니다. 그래서 오른쪽에, 그것은 작은 보이지만, 하나의 컬럼은, 2 인 1 조로, 발로, 여덟, 기관총, 32s, 64s, 128s입니다. 좋아, 아마 처음에는 열심히 외워하지만 그것은 단지 곱한 두로부터 왼쪽으로 오른쪽. 그래서, 항상 이것을 다시하실 수 있습니다. 글쎄, 그들은 모두 해제 그래서 0 번 자리 표시 자, 0 번 자리 표시 될 겁니다. 그래서,이 번호는 이진 표현은 0입니다. 즉, 어떻게 우리가 알고있는 번호를 기재 할 0 이진과 같이? 음, 하나, 둘, 셋, 넷, 다섯, 여섯, 일곱,이 모든 맨 앞에 0을 8 개, 그리고 기술적으로 막 진수처럼, 그들은 수식으로 그들은 아무것도 추가하지 그냥 우리가 임의로 우리가 결정하기 때문에 연속, 오른쪽 8 것들 싶어요. 그들은 실제 물체면, 우리는 그들이 모두 해제해야있어 여덟 있습니다. 그래서 우리는 그냥 하나의 0으로 쪘구만 수 있습니다. 그럼 어떻게 숫자 하나를 표시합니까? 음, 본능적으로 하나를 스위치 던질거야. 당신은 전구에 대한 방향을 돌리는거야. 그래서, 거기에 1 번 우리는 이제 하나,에 전구, 하나의 위치에 넣어 때문이다. 우리가 어떻게 두 가지를 대표하는 건가요? 음, 우리는 사실 지금이 상태 적어도 대 두 스위치를 던질거야, 우리 애들을 해제 열 두 개의 칼럼을 설정하고 지금 우리가 한 조로 열의의 가치를 가지고있다. 그래서, 그 두 가지의 총 가치는있어. 자, 빨리 정신 운동, 그럼 그 다음 순서는 어떻게되는 거죠? 어떻게 번호를 세 가지 제시합니까? 글쎄요, 하나는 2 인 1 조로 열 한 열로 열 및 아 하에서 필요합니다. 그래서, 지금은 증가된 것 하나. 그리고 지금,이 같은 기본 패턴 반복됩니다. 왜 전화 번호 4 뭐죠? 음 어디 보자, 난 그냥 발로 열의 하나를 누른 다음 1 조로과 사람에 0해야합니다. 그럼, 그런식으로 계속됩니다. 그리고, 그것은 단지이 단계의 순서는. 그리고 바이너리의 개념에 정말 그렇게 복잡하지 않습니다. 우리는 8 0을 가지고 가기 거기에. 아래에 우리가 7 0과 하나 있습니다. 아래에 우리가 6 0, 1, 그리고 0을 가지고 있고 그 바이너리가. Now, thankfully, we computer scientists, we programmers by terms end are not going to often be writing in binary, talking in binary, thinking in binary because we've built many layers of the traction on top of that. In fact, people rarely talk about bits except in a networking context they talk about bytes because one bit, not that useful, eight bits these days still not that useful, but at least eight bits, one byte is at least getting us toward more useful units of measure. But, when we start looking underneath the hood, when we do certain problems such as look at files and look perhaps at network traffic, it will become interesting to know how you're representing data because you're going to have to figure out how to display that same information. And, in fact, we, if we only have zeros and ones, how do we go about representing, say alphabetical letters? Well, we're going to have to have some mapping between binary and letters. But that's as of yet unclear. But to hammer this point home and to give me a break from speaking at, I thought I'd pause for a moment and see if we can't recruit eight volunteers, one byte eight people. Can I get eight people for whom it is not too awkward to come on up. good, good one, two, three, four, five, six, seven, eight very enthusiastic eight, come on down. So, you all, for just a moment here, oh and you have to be willing to not be on the internet because there is in fact a camera in the back of this room. So, turn back now if you don't want to be on the, hello mom, in perpetuity. So, let's see, you here will be the 128th column. And let me ask that you simply hold this before you. And actually, if you could scooch this way just a little bit, then I will get out of your way. You'll be the 64's column, you shall be the 32's column and the 16's. 32's, 16s, 8's, 4's, 2's and 1's. All right. So perfectly lined up with the place holders from before, but we need a little bit of mapping, so a quick set up. We just need an arbitrary way of mapping binary numbers, which really could be converted very easily to decimal numbers. So we need a way of converting numbers to letters if our computers are actually going to show us emails or type URL's or actually display non numeric information. And, in fact, there is a system for that, it's called ASCII, an acronym whose meaning is not so interesting, but whose utility is. This is just a mapping from letters to numbers and there's actually a lot more numbers on the screen, and you guys, don't worry, aren't going to have to test yourselves with this in just a moment. But there's a mapping between numbers and letters and I'm just going to get us started by pointing out a couple of these. The numbers of interest right now are going to be, whoops, are going to be this. Whoops. So in this column here, I can't seem to zoom in simultaneously, we have decimal. Dec for decimal. And then we have the character on the right hand side. So if I hop over into this column, thought it's a bit small on the screen, the number 65 represents what letter? Capital A. And the number 97? Lowercase A. All right. So those two alone, right, so do not go home and try to remember ASCII chart. Come quiz time, do not try memorizing an ASCII chart. Memorize two, 65 is capital A and 97 is lowercase A. And from there you can bootstrap yourself to all of the other alphabetical characters. But all this chart says, and I just downloaded this chart from ASCIItable.com, this is a standard that's been around for many, many, many years, but most computers still use it. What we now have is a means of encoding alphabetical information using what's ultimately numeric. So if these guys are just switches, light bulbs, computers, we can actually convey messages. So each of you has some hints on the back. We're going to have three rounds here where these guys are going to spell out in English, in ASCII, a very short message, a three letter word. It will involve them either raising their hand, thereby representing a one or just standing there awkwardly, thereby representing a zero. So why don't we proceed immediately with round one and you can either raise or not raise your hands. So the audience doesn't get off the hook. What number are they currently representing? 66. Right. Not hard because we have a one, a hand up in the 64s column, a hand up in the 2's column. 64 times one plus two times one is 66. They're representing the number 6, which means the first letter is B. So not too bad, right? Round two. First letter was a B. [웃음]를 >> Seventy Nine. >> David: Can someone second that? Yes. All right. So 79, which means it's now an O. So B,O. There's a third letter. Actually that is kind of, yeah. Third round. Third and final round. What number is this? I heard an 87. Someone else agree? All right, yeah. This is in fact 87, which maps to, and this is a very clever set up at which point you all B, O, W, it's bow. Very good. So actually besides that little souvenir, that was not a very enthusiastic applause, so I'll take care of you. So we do have a little something for these guys here now that they just appeared on center stage doing perhaps the geekiest thing they could. So maybe if we could humor them if only because I'm feeling a little bit awkward now. A little round of applause for these guys here. [ Applause ] All yours. All right. Thank you very much. So, so, it turns out that we can take this one step further, but you are now entering a community of people who understand things like this. [ Silence ] It's slowly spreading, yes? [ Laughter ] It's not cool that you understand this now. So we've already done some damage here today, but yes, there is now such a thing as geek humor that you might just catch a little bit more on to. So what are we going to do throughout this semester? So there's 12 weeks, zero index, so 13 weeks in total. You'll find throughout the semester that computer scientists tend to count starting from zero for reasons that will soon become clear. But what we're going to do this week, starting this Friday, is introduce you to programming. Now you may already be coming at this course with a background in the same, and that's perfectly fine, but we'll also be able to introduce some more sophisticated topics than are typically covered, things like events and threading, so just to toss out a couple of buzz words for those unfamiliar. But what we're going to do is not dive into what the typically traditional language like Java or C++ or C sharp catch phrases that you might have heard in the past, but we're going to use a programming environment, a graphical programming environment that was actually developed by MIT's media lab. And this is an environment that allows you to program, quite literally, by dragging and dropping puzzle pieces that fit together logically that lets you implement these things called loops and conditions and Boolean expressions and you can actually, on day one, after this Friday, write a program that actually some of your friends might care about. So in yester year, say when you've taken a computer science course in high school, odds are one of your first programs was the equivalent of hello world, like wow mom, I just made the computer type some characters on the screen. It's a very underwhelming experience. Much more interesting is it to implement a little something like this, as one of last year's students did. So I give you the work of a former classmate. It's a love story, of sorts, about dancing cookies. [ Music ] So this was actually from a student who had never programmed before. And just to give you a teaser of this interface, and we're only going to use this for one week time, really to get the comfort levels up and to really get folks excited about what you can actually make these machines do, this is an environment where you'll be programming by, for at least a week, just dragging and dropping puzzle pieces that fit together, as we'll see, in a logical fashion. And it lets you do fun, silly things quickly. And for any of you who are a little bit familiar with things like Java and C++, it's usually a good semester or two or three before you finally get to start writing something that another person might actually enjoy watching. Well, in week one of the course, or the second week, zero index, where we dive into a little more traditional environment. In this course we'll spend much of our time on a language called C. This is one of the earliest languages that, unlike Java, actually gives us much greater access for better or for worse, to manipulating hardware and actual memory, and we can do a lot of damage with that. In fact, any time you read of web servers being exploited or computers being hacked into, very often to this day it's the result of people having run software in a language called C or C++ without sufficient care given to what are called buffer overruns or lengths of arrays, so some fairly technical concepts that are not that hard to understand, but there's been a lot of humans making a lot of mistakes for years and with this language we'll actually understand some of those security implications. But each week, typically, we'll introduce also an interesting domain that will inspire that week's problem set. So we'll also take a look this week at the field of cryptology, cryptanalysis, the notion that you can encipher information in such a way that people can't read your messages, but if clever enough perhaps you can, in fact, crack what are otherwise secret messages. In week three we'll then look at some basic fundamentals of computer science like searching and sorting and we'll actually look at this notion of recursion, how to debug things. In short, we'll take things up to the level of problem solving and not so much about mere syntax and implementing short little cookie cutter programs. In week four we'll introduce more sophisticated problems still. What does it mean to manage memory? What does it mean to run out of memory? What does it mean to actually segfault, if you've heard this expression, and odds are you haven't, but very bad things happen and frankly by terms end you'll understand terms like my code segfaulted which actually is generally not going to be a good thing. But then again, we'll introduce some domain specific stuff. So actually one of my internships during graduate school was to work for the local Middlesex County District Attorney's office doing forensic investigations in a digital sense. The local Mass state police would bring to our office hard drives and floppy disks and sometimes for no reason mice and keyboards. And we would be tasked with finding evidence. Now it turns out, maybe just an FYI, that the criminals in Cambridge, Massachusetts, at least, not necessarily that clever. Very often our forensic analysis boiled down to booting the computer up and double clicking on the My Documents folder, and therein laid the evidence. But what we'll do this week is give you a sense of what it actually means to store information on a hard drive, on a flash drive, and why can't otherwise private information be disclosed to third parties when you drop off a computer to be repaired or even when you discard it. Well someone might very well be sifting through those hard drives and it's really not that hard to find data if you know how to look for it. Well, in week five we'll look at more sophisticated data structures, tools and techniques that you can use ala phone books and ala searching huge data sets much more intelligently. And the week's problem set will task you competitively to see just how fast the code you can write is and how little memory you can use. Toward terms end though we'll take things up to a higher level in terms of programming languages and put C behind us and introduce a web programming language known as PHP, one of the popular languages these days. Much of Facebook is still written in PHP, at least outward facing, and it's just a very easy language to learn quickly once you already know another. So with PHP we'll be able to solve problems and implement websites that do interesting things. The news site I showed you, the events site, the shuttle boy site, all of those all happen to be written in PHP. But by no means is that prerequisite. What you'll also find throughout this course is that you're not going to exit this course knowing C. You're not going to exit this course knowing PHP. Those are not interesting skills to claim, but knowing how to program, knowing how to use data structures and algorithms in an interesting way, that's a compelling story. Even I, all these years later, throughout college and graduate school, the only time I ever learned a language was probably in CS50 where it was still taught in C and CS51, which is one of the successor courses. Everywhere along the way since has been go learn this language and then work on this problem set because computer science is not supposed to be about here's a language, let's spend seven weeks teaching you where the semi colons are. There are much more interesting ideas out there. Databases, for one. And in week two we'll introduce you to this query language called SQL that'll allow you to store information in databases and actually implement some fairly interesting final projects. The week after we'll look at what's called client side programming, doing interesting things on a user's computer, taking advantage of their CPU cycles, doing things ala Google maps and these websites that actually use JavaScript, which is actually a language we'll introduce to let you do client side things, make more interesting, more sophisticated user interfaces, but at the end of the day have to be really mindful when implemented of a lot of sticky issues like network speeds, network performance and security. So it's not about again just coding something up that's fun to use or pretty to look at, but actually thinking about the design that'll be the interesting process. And then, the end result aesthetically will often be a really neat toy to show yourself or a friend. And then we'll look at hardware. We're going to take for granted that there are these physical boxes throughout much of the semester that will do what we tell them to do. But how are they doing that. So we'll actually take a peak under the hood and talk about what a compiler really is, what a CPU really is and actually consider what's making all of this fanciness from stupid YouTube videos on down possible. So what are the expectations? Attending lectures and sessions, completing nine problem sets assigned roughly weekly, two quizzes, the final project and there is in fact no final exam. Grades, it's always a question, broken down as follows here. You can take the course pass-fail. But let me say it here, and I've said it many times. I personally care relatively little about grades. I think they are a wonderful, well, they are a useful pedagogical tool with which to motivate and unfortunately sometimes de-motivate, but you'll find in this course that at the end of the day it's more about seeing how far you can go from weeks zero to week 12, as we say in the syllabus than it is about absolutely ranking all students in this course. So if you're coming into this course among those less comfortable, though a large demographic do not assume that that's automatically putting you in the lower third of the so called distribution. At terms end do I sit down with the TF's and discuss each and every one of the students. We take into account where a student came from, what kind of trajectory they were actually on and so at the end of the day please focus more on, and I don't mean to sound too grand, the process of learning and less on the numeric's. And you'll actually see that we grade problem sets, in particular, very coarsely, whereby along three axis, you will get a score of 1, 2, 3, 4, or 5, where 3, is in fact good. 3 is not C. 3 is good, 4 is better, 5 is best. But more on that as the problem sets are released. So the course's website is where you will find, as in most cases, a whole lot of useful things, if not silly things, too. And we have the luxury, as computer scientists of implementing it ourselves. So over the course of the semester you will see various new features rolling out. You'll find out over the course of the semester that the bulletin board is a wonderful place, certainly in the course of this size, to turn when you have questions about the problem set, questions about some computer science concept. You'll be able to check your grades, download all handouts in advance of lecture typically will I post the slides, if you're the type who wants to scribble on notes. But as you've seen, usually I shy away from long lists of details and more like pictures of cats and other visual cues. So you'll find, too, that we will provide printouts of code when we actually think it particularly advantageous to write right on the paper. Software, videos will be available, usually around 1 to 2 to 3 days maximally after each lecture. So the courses are being filmed and every lecture will go online in various formats including QuickTime and MP3's for downloads to iPods and such. And also you will find a link to download what we call the virtual terminal room, which as you'll see is related to virtual office hours. Books are expensive and in the computer world also not that useful. They are on the shelves of the coop, although we're told that last year they ordered like 120 books for the course and 30 were actually purchased, but this perhaps speak to the fact that there are places like Amazon.com, so if you are the type who actually enjoys the sort of support structure that a book provides, if you like to read up more than say a course's typical materials offer, by all means, procure one or more of the books that we recommend here and discuss more in detail in the syllabus. But realize there are so many resources that this course provides in printed form and electronic form, and my God, there's the whole internet out there. Books are not something that are required for this particular course. Lectures, in general, will be Monday's and Wednesday's, except for this Friday and next Friday, simply because of shopping period and Labor Day. So we'll meet this Friday, next Wednesday, next Friday, but there after this is just a Monday, Wednesday course. So this little visual cue here is to remind me that yes, we do distribute videos in QuickTime formats, MP3's, fun ways that you can, if you're actually this type, maybe in the 14 percent, watch a computer science lecture on your iPod, but it reminded me that at terms end last year, the course culminates in final projects, in which students can design most anything they want, and we actually had some students tackle some iPhone applications. Some one of these at least is now in the Apple store. It's called Rover. It's been adopted essentially by Harvard agencies and it's the iPhone version of the unofficial guide to life at Harvard. They did a brilliant job. I bring this slide up too, just to point out what other technologies might very well be down the road. Some of you may have seen this before, but just to give you a teaser of apparently what's in the pipeline, I thought I would offer this brief distraction here. [음악] >> With the MacBook wheel, Apple has replaced the keyboard with a sleek, touch sensitive click wheel. Apple CEO Steve Jobs introduced the product yesterday at the annual Mac Expo. Senior product innovator says the MacBook wheel will make typing a thing of the past. >> At Apple our philosophy is create products that are simple to use and nothing's more simple than a single giant button. >> Gilman showed me how the revolutionary new computer works. >> Gilman: Just open the intuit-type alphabet menu here, scroll to the letter you need and center click to select it and click again to capitalize and repeat this process for each new letter. It couldn't be simpler. You could also let the predictive sentence technology complete the sentence for you. >> Gilman says the MacBook wheel has also simplified organization of files, so searching your hard drive will be a snap. >> Gilman: Just press both sides of the wheel concurrently and center click and there, you have an alphabetical list of every file on your hard drive. Everything is just a few hundred clicks away. >> Apple is calling the MacBook wheel the most intuitive product every designed. >> Here at Apple we like to think that we're giving customers features they don't even know they want yet. >> While the MacBook wheel won't hit the shelves for another 3 to 15 months, many apple users already have it on their wish list. >> I'll buy almost anything [inaudible] and made by Apple. >> Alex [inaudible] was one of the lucky few to get to try out a MacWheel and spent 45 minutes typing an email to his friend. >> I never really realized how much I hated keyboards until I saw this thing. >> I like how it automatically says, sent with a MacBook Wheel, so people automatically know you have one. >> With a price tag of just under 2600 dollars for the lowest end MacBook Wheel, it is an investment. But the super thin laptop features numerous innovations, like the new ultra thin hummingbird battery, which can power the MacBook Wheel for a fill 19 minutes before needing to be recharged and the computer is virtually unbreakable unless dropped or hit. But Apple isn't resting on its laurels, Bryan Gilman says they're already hard at work on the next generation of the MacBook Wheel, which will be four ounces lighter due to its lack of streaming hard drive or wheel. For the Ugly news Network, I'm Jeff Tate. >> Thank you for that, Jeff. It remains to be seen if the wheel will catch on in the business world where people use computers for actual work and not just dicking around. Moving on, police warn. >> David: So I've seen that thing at least a half a dozen times now, including once at like two a.m. last night and I was scrolling down on YouTube and literally like an hour prior, some guy in all seriousness posted, just a wheel? That's the stupidest product I've ever seen. [ Laughter ] And then the rants ensued in the thread thereafter. So besides lectures there are also sections and it is your teaching fellow and the course's course assistants that you will get to know very well over the course of this semester. Sectioning won't begin for a week or so's time. More on that in the lectures to come. But know that the course will have several different tracks of sections, much like First Knight's has for music. Sections targeted more at those less comfortable, those more comfortable and those somewhere in between. And we also offer most Sunday nights before a problem set is due on the following Friday is what we call code walkthrough's where one of the course's teaching fellows will lead a session targeted specifically at the week's problem set and will help you answer the question where do I begin, how should I approach this? And that too will be filmed and made available online and always linked on the course's website. So this course has a huge staff. Our staff is larger than Harvard's average class size. We have over 50 people involved in the production of this course on a weekly basis. Some of them teaching fellows who hold sections, grade work, hold office hours and more. Course assistants who are former students, who are offering on a volunteer basis in fact multiple hours of office hours in the computer lab per week. System administrators, folks doing all of our AV and video production. Someone who will actually be taking notes for you. So it is actually my opinion that scribbling down almost every word that someone like me says is not a very good use of one's time. It's much more interesting I think to actually engage with what's on the screen, what's being presented. And so what we will do as a course is post PDF's online within a couple of days of lectures of scribe notes, which is essentially an authoritative version of course notes, unedited, but documenting what went on in lecture that day, thereby hopefully freeing your minds and pencils from jotting information down. We have some of our team here. Most of our team is actually shopping courses. But if a few of your guys would like to come on stage for a moment with our head teaching fellow and assistant head teaching fellow. Allow me to ask the latter to say a quick hello. And as these guys come up in absentia allow me to say that also on staff this year besides the folks you see here are Alex, Alice, Andrew, Batul, Charlotte, Chris, Dan, Dan, Daniel, David, David, David, Derek, Dev, Didi, Doug, Drew, Erica, Fil, Glen, Greg, Janice, Jason, Jean, Jeff, Jesse, John, John, Jonathan, Jordan, Josh, Karim, Kelly, Ken, Kent, Kyu Bok, Lee, Madhura, Marta, Matthew, Michael, Michelle, Mike, Mike, Nathan, Patrick, Peter, Peyton, Rose, Saba, Sanjay, Shannon, Stacey, Ted, Wellie, Yair and me. So our course is teaching fellows and course assistants, Cansu and Yuhki, would you like to say a quick hello? >> Hi. It's definitely a great honor to be back here for the third time. And if you're one of those who are like less comfortable. [ Laughter ] I think I can [inaudible]. Okay. [ Laughter ] If you're one of those [inaudible]. There's no need to be afraid. I walked in here two years ago with no experience what so ever, and I thought that I was like dumb and I was sure that I was going to fail the class. And I came back for the third time. I did not fail the class. This course is great because it has such a good community. As you can tell by the names listed by David. All the CA's and TF's are here to help you. So if you have any questions at all, just come up to us. Not taking this class because it's hard is not a good excuse. So, hi. >> [Inaudible]. >> Hi, so well both as a student and TF, I've really enjoyed being a part of this course. And even though it's a course that requires a lot of work from you, we've put a lot of work in to it for you as well to make it as enjoyable and as fun as possible. So, we really hope that all of you stay and take part in this very special experience. >> Thanks. >> David: So you will find, thank you, all of you, you will meet them in the hallway in just a few minutes as well. So you'll find that this course, perhaps more so than many is very much a shared experience. This is not a competitive course. This is not your premed course. This is a course which ultimately yes is about doing independent work, as you'll see each week by way of the problem sets. But you can't help but to get close to someone when you're fighting with some bug and banging your head against the computer screen proverbially to try to track down some bug. And I think you'll find that past students will concur that you exit this course with a lot of friends among students and also on staff. So where does that happen? Well, within office hours in the basement of the science center there's some large computer labs and we pretty much take them over five nights a week. These won't start for some time, and this, to be honest, is perhaps the most beautiful picture of the science center I've ever seen. [ Laughter ] It does not look like that on the inside. But it is a place where a good percentage of students do choose to spend time to get one on one assistance with each of the week's problem sets. Each week we will offer more than 100 hours of assistance one on one in the science center per the schedule that will eventually go online. And for those of you who live, say in the quad, or in Mather, or who just don't want to trek all the way to the science center to ask that quick question, we also offer what are called virtual office hours, much like remote technical support where you'll be able to log into a glorified chat room, in which yes, you can type back and forth with a TF or a CA, but you can also share your screen or share control of your mouse with them subject to your consent so that they can help you troubleshoot any problem or any question you have remotely. To give you a sense of what's involved in the course, these are statistics from last year. So you will, I think it's quite fair to say, work your ass off in this course. But per my promise from the start, this is one of those experiences that I don't think a typical student regrets. If you flip through, for instance, the Q Guide forms that are all on the course's website, you'll find that only by putting in the time to a course like this do you really exit having felt like you got something out of it and frankly might very well even have emerged even smarter. So what does it mean to actually write programs and implement problem sets? Well, the first problem set last year, a quick retrospective here, was to implement your very own programming scratch. And we spend just the first week there, and the goal is to implement your own game or animation or art or anything that appeals to you. In week one, then do you implement some basic C programs to get acclimated to some more traditional programming environments at the command line, at Linux so you get comfortable with some of these basics that will certainly serve you well in the long run. Last year's Problem Set 2 was about cryptography. We gave students the opportunity to implement some ciphers, some algorithms that let them encrypt information. And we also offered some students the opportunity to do the opposite. Each problem set, many problem sets, as you'll see are implemented in two editions. A standard edition that we expect almost everyone to do, say 90 percent of the class. And then a hacker edition, which presents the material from a more sophisticated angle, expects perhaps a bit more clever work for those more experienced, and for this one did those students get handed in the hacker edition pre existing user names and passwords in encrypted form and they had to figure out what those passwords for. We actually got into trouble for this a few years ago because all of the sudden FAS Computer Services saw like 50 people running a crack program on nice.fas.Harvard.edu, so they now have been given a heads up for programs like that. Last year students implemented the game of 15. Not all that much fun to play as a party favorite, moving the numbers up down, left, right, but a real stepping stone to implementing something interactive that involves a human and the hacker edition for this one had students implementing God mode, which actually solved this thing for the human, maybe cheat mode is the more apt term, in Sudoku, which was a step up toward that, where we provided the students, you, with a framework with a whole bunch of code that you needed to first understand before taking things the final mile and implementing some of the remaining functionality. And then we dabbled in forensics and this grew out of a real world experience between me and a friend. For this problem set last year, this buddy and I, who he being a particularly good photographer, strolled around campus and we shot photographs of unique, non obvious, but identifiable places on campus. And this was using his digital camera. All of these JPEGs got stored on a digital flash card or what not. And then I accidentally formatting the thing, or erased it. Well, it turns out formatting something or erasing something, usually means neither. It just means doing a little bit of work to make the human think their data has been erased, when in reality it hasn't. It's just been forgotten. And so we tasked last year's students with writing a program in C to actually recover these photos for my friend. We gave everyone a forensic image, so to speak, a big file representing that compact flash card, and they had to recover the several dozen photographs. And they also had to solve this little murder mystery. We provided folks with this image here. Those of you who've seen this before might be doing that squinting thing right now where you're trying to look through the picture, well you look pretty awkward, because this is not a magic eye puzzle. This is just random red noise that actually has behind it an actual message. And it turns out, I think it was Colonel, let's see, I've got my little solution here. Last year it was Colonel Mustard in the study with the candlestick. And this was the murder message recovered by students who wrote code to do so. And then in Problem Set 6 last year. We challenged students with implementing the fastest spell checker possible. What do we mean by that? Well, we handed the students a big text file containing 140 plus thousand English words, and we said write a program that loads all of these words into memory, but very quickly and very efficiently can tell us yea or nay, is this document perfectly spelled or are there errors? And what we provided was a testing framework, a harness, that students, if they wanted to compete, could run their code against some benchmarks, against some testing programs that we wrote. And then, ranked on the course's website from fastest to slowest were the running times, the amount of time it took for each student's code to actually execute, complete opt in. It's by no means required. And we took a bullet for the team and made sure that one of our own teaching fellows intentionally, I think, was at the very bottom of the list. So, there was definitely a lower bound. But the odd, the funny thing was we saw this in the cue guide evaluation, this problem set of all things, was apparently the one that people sunk the most time into. Not because it took any longer than all the other p sets, but they would come back from like dinner, look at the board, and realize dam my friend, my roommate just ever so slightly inch higher than me and so it incentivized people if only to one up their friends and roommates. In Problem Set 7, last year, we asked students to implement their own E*Trade like website, whereby you had to create a website using that language call PHP a database called mysql that actually lets people log in and then manage a portfolio of stocks, buy stocks quote unquote, sell stocks quote unquote, get stock quotes. And from where? Well, we have the students; we had the student patch into Yahoo Finance where they grabbed merely the Real time stock quotes to actually simulate the process of buying and trading stocks. Unfortunately some students, perhaps some economics majors or just folks with too much free time figured out last year how to gain the system. So, even though we gave everyone 10,000 virtual dollars, I think our winner turned teaching fellow this year actually, right don't push them away make them one of your own, for a billion dollars something like that ridiculous. Turns out we weren't really checking whether or not people were trading after hours. And it turns out that also, Yahoo stalk quotes are not in fact perfectly Real time which means if you just have a real E*Trade account you can see the future and see where the stocks are going. [ Laughter ] So, apparently you can exploit that if you put your mind to it. and then, in Problem Set 8, the course's final problem set last year, we had students implement a mash up where they take Google News and Google Maps and mash them together using JavaScript, PHP and SQL in such a way that they had a website that they could find all of the local news from whether it's zip code 02138 or 90210. And, you would actually pull the local current even articles by this thing called XML and integrate it into the view of a Google Map. And then, at very course's end was the true climax of the course. This course culminates in final projects, which ultimately will be your opportunity to design your very own piece of software, designed by you or two or three friends. And the course then climaxes with the new and improved, with the second annual computer science 50 fair which last year was an exhibition across the street in one of the engineering buildings with 300 laptops atop tables, popcorn was popping, music was playing, stress balls with CS50's logo were being thrown around. And this was an opportunity for our 300 plus students to exhibit their final projects not only to each other but also to some 900 attendees in total. And we also invited some recruiters as well. So, that is what you have to look forward in this course. You also have cake to look forward to in the hallway. This is CS50 and we'll see you on Friday. [박수 갈채] ==== Transcribed by Automatic Sync Technologies ====