[MUSIC PLAYING] [MUSIC - ROSSINI, "Ranz DES Vaches "DARI WILLIAM TELL] [MUSIC - THE ENGLISH BEAT, "MARET DARI KEPALA SWIVEL "] [Tepuk Tangan DAN bersorak] DAVID Malan: Jadi ini adalah CS50. Nama saya David Malan. Dan 73% dari Anda tidak memiliki pengalaman sebelumnya dengan ilmu komputer, bertentangan dengan apa yang mungkin Anda pikirkan. Jadi hari ini kami pikir kami akan chip jauh pada saat itu kurangnya keakraban, tetapi juga memberikan rasa, bagi anda dengan lebih nyaman, yang arah Anda dapat pergi semester ini. Jadi mari kita mulai dengan ini. Aku benar-benar tidak tahu apa yang ada dalam komputer, meskipun, seperti Anda, saya menggunakannya setiap hari. Tapi itu semacam kotak, dan ada tidak banyak masukan ke dalamnya. Minimal, ada, apa? Mungkin kabel listrik. Dan memang dengan satu bahan, listrik, sepertinya kita harus mampu melakukan sedikit hari ini. Tetapi pada akhir hari, kita harus mewakili hal-hal bahwa kita peduli. Kita harus merepresentasikan informasi dalam beberapa bentuk. Dan kau mungkin setidaknya samar-samar akrab dengan ide dengan biner atau bit entah bagaimana, komputer dikurangi menjadi nol dan satu. Tapi bisa kita merangkul itu dan setidaknya menaruh sedikit cahaya itu? Jadi saya punya ini sedikit lampu meja di sini. Saya memiliki outlet listrik di sini. Dan aku akan mengusulkan dalam yang komputer saya setidaknya satu dari hal-hal ini, sesuatu yang mampu dari yang dinyalakan atau dimatikan. Dalam kasus ini, itu memang lampu meja, tetapi pada tingkat yang lebih rendah, itu adalah sesuatu disebut transistor. Tapi dalam dunia kita, itu adalah lampu meja, sehingga Aku akan pergi ke depan dan pasang ini menjadi listrik saya di sini. Dan saya menyatakan bahwa menggunakan sederhana ini, perangkat sederhana, switch ini sederhana, saya dapat mewakili informasi. Misalnya, sekarang, saya mewakili apa-apa, kan? Saya mewakili apa yang saya akan menelepon atau 0 palsu, kebalikan dari sesuatu benar-benar hadir. Tapi jika saya hanya menyalakan saklar ini, sekarang saya sudah mewakili 1. Jadi menggunakan ini bagian yang sangat sederhana memori, jika Anda mau, saya bisa mewakili informasi. Sekarang sayangnya, komputer saya tidak bisa melakukan semua itu banyak. Hal ini hanya dapat mewakili dua nilai di seluruh dunia - 0 atau 1. Tapi apa solusi yang jelas, sekarang, jika kita ingin memperluas komputer kita memori dan mewakili lebih dari hanya 0 dan 1? Nah, mari kita ambil lagi bit tersebut. Mari kita ambil tombol lain, yang lain transistor, namun Anda ingin berpikir tentang hal ini. Biarkan aku pergi ke depan dan pasang ini ke komputer saya juga. Dan aku akan mengklaim, sekarang, bahwa dengan menggunakan sedikit lebih banyak listrik dan berputar lebih dari switch ini dan off, saya bisa mewakili lebih seperti informasi. Jadi sekarang, ini adalah 1. Jika saya ingin sekarang merupakan 2, aku bisa melakukan ini. Tapi biasanya, konvensi, seperti yang kita akan akhirnya melihat, akan saya lakukan ini. Jadi ini adalah 0, ini adalah 1. Ini akan menjadi 2. Dan tidak mengherankan, ini akan menjadi 3. Jadi dengan cara ini, masih, bisa kita menghitung lebih jauh? Jika saya mendapatkan sedikit ketiga, switch ketiga, apa jumlah tertinggi sekarang saya bisa menghitung sampai dari 0? Jadi 7 jika saya mulai dari 0, bukan? Karena jika saya mengubah cahaya ini dan sebenarnya pasang ini ketiga dan terakhir cahaya ke dalam soket listrik saya di sini, maka saya memiliki kemampuan untuk mewakili salah satu dari dua nilai di sini, dua nilai di sini, dua nilai di sini - dan jadi saya bisa mewakili 2 kali 2 kali 2, atau delapan nilai yang mungkin. Dan jika saya mulai akuntansi pada 0, sehingga itu 0, 1, 2, 3, 4, 5, 6, 7. Jadi biner ini. Itu benar-benar adalah yang sederhana seperti itu. Dan aku berpendapat bahwa ini sebenarnya cukup akrab bagi kebanyakan semua orang di ruangan ini. Biarkan aku pergi ke depan dan membuka editor teks kecil di sini. Dan Anda mungkin ingat dari sekolah dasar bahwa kita memiliki hal-hal seperti ratusan tempat, tempat puluhan, dan yang tempat. Dan ingat bahwa jika Anda memiliki beberapa desimal nomor, seperti sesuatu yang acak seperti 123, Anda akan dasarnya menulis yang keluar dalam bentuk dari tiga kolom. Dan mengapa 1, 2, 3 apa kita kenal sebagai 123? Nah, di kolom paling kiri, kita memiliki satu 100 ditambah dua 10s, jadi itu 120, ditambah tiga 1s, jadi itu 123. Sekarang dunia ini bahwa kita hanya diterangi adalah persis sama dengan Anda sudah akrab dengan selama bertahun-tahun, kecuali sekarang, kolom kami tidak pangkat 10. Mereka hanya kekuatan dari 2. Jadi sementara itu adalah tempat yang, ini akan menjadi tempat yang berpasangan, ini akan menjadi tempat merangkak. Dan karena saya hanya menggunakan sederhana mekanisme untuk membalikkan keadaan dan mematikan - listrik mengalir atau listrik tidak mengalir - Saya tidak cukup memiliki ekspresif yang sama range 0 sampai sembilan. Kita akan tetap super sederhana di dunia ini komputer. Saya hanya memiliki 0 atau 1 - off atau on, palsu atau benar. Dan apa yang saya mewakili sekarang adalah 1, 1, 1, karena masing-masing lampu menyala. Nah, yang memberi saya satu 4 ditambah satu 2, sehingga itu 6, ditambah satu 1, dan itu 7. Dan ergo melakukan ini urutan tiga bit mewakili angka 7. Jadi selama ini, dalam Anda komputer, telah sejumlah transistor, jumlah bit. Tetapi pada akhir hari, kita dapat mewakili informasi sesederhana itu. Sekarang sayangnya, kita hanya menghitung sampai dengan 7 di CS50 sejauh ini, tetapi mudah-mudahan kita bisa melakukan sedikit lebih baik dari itu. Dan memang kita bisa. Misalkan kita sebagai manusia hanya sewenang-wenang memutuskan bahwa kita akan untuk mengasosiasikan angka seperti 1 dan 2, 3, 4, 5, 6, 7, dengan huruf spesifik alfabet. Dan untuk alasan historis, aku akan mulai agak sewenang-wenang, tapi aku akan mengatakan, manusia, kita akan memutuskan sebagai standar, secara global, yang 65 merupakan jumlah huruf A. 66 akan mewakili B. Dot, titik, titik. 90 akan mewakili huruf Z. Dan mari kita misalkan, jika kita benar-benar menaruh beberapa berpikir ke dalamnya, kita bisa datang dengan nomor untuk tanda seru dan huruf kecil, dan memang, orang lain telah melakukan itu untuk kita. Jadi sekarang kita memiliki bit yang kita dapat mewakili angka, angka dengan yang kita dapat mewakili huruf, dan dengan surat yang kami dapat sekarang mulai membuat email dan mencetak karakter di layar. Jadi biarkan aku mengundang, jika aku bisa, delapan relawan berani - yang tidak keberatan muncul tidak hanya di depan kamera tapi di internet - untuk datang ke sini dan mewakili delapan seperti bit, bukan tiga. Jadi bagaimana satu, dua? Bagaimana tiga? Bagaimana empat cahaya biru, lima di akhir? Tentang seseorang di sini? Enam di depan, tujuh di depan, dan delapan di depan, juga. Jadi saya hanya kebetulan datang disiapkan dengan sejumlah besar potongan kertas. Dan pada potongan-potongan kertas nomor yang mewakili apa yang kolom kalian akan mewakili. Jadi Anda akan - siapa namamu? SISWA: Anna Leah. DAVID Malan: Anna Leah, Anda akan menjadi kolom 128s. Anda? SISWA: Chris. DAVID Malan: Chris akan menjadi kolom 64s. Anda? SISWA: Dan. DAVID Malan: Dan akan menjadi kolom 32s. SISWA: Pramit. DAVID Malan: Pramit akan menjadi kolom 16. SISWA: Lillian. DAVID Malan: Lillian akan 8s tersebut. SISWA: Jill. DAVID Malan: Jill akan menjadi kolom 4s. SISWA: Mary. DAVID Malan: Maria akan menjadi 2s, dan? SISWA: David. DAVID Malan: David akan menjadi kolom 1s. Jadi, jika kalian bisa melangkah sedikit ke depan sehingga semua orang bisa melihatnya. Apa yang kalian tidak lihat adalah bahwa pada kembali dari potongan kertas adalah sedikit contekan yang akan menginstruksikan delapan bit untuk baik mengangkat tangan mereka atau tidak mengangkat tangan mereka. Jika tangan mereka naik, mereka mewakili 1. Jika tangan mereka tetap di bawah, mereka mewakili 0. Sementara itu, kita penonton harus dapat mengetahui, berdasarkan ini pemetaan, apa tiga huruf kata tersebut orang sekitar untuk mengeja. Jadi hanya dalam beberapa saat, Anda akan membaca baris pertama dari belakang contekan Anda, dan Anda baik akan menaikkan atau tidak menaikkan tangan Anda. Jika Anda seorang 1, Anda meningkatkan, jika Anda seorang 0, Anda berdiri di sana canggung, begitu saja. Go. Nomor berapa, pertama dan terutama, adalah orang-orang yang mewakili? 66. 66, kan? Kami memiliki 1 di kolom 64s, 1 di kolom 2s. Itu memberi saya 66, jadi yang muncul akan mewakili B. Jadi kalian telah dieja - OK, itu sudah cukup. B. Jadi sekarang mari kita pindah ke Surat kedua kami. Go. Siapa tercepat di matematika di sini? Jadi 79. Sekali lagi, jika kita menambahkan semua kolom di mana ada 1, saat ini, hanya seperti yang kita lakukan sebelumnya dengan sederhana contoh 7, sekarang kita mendapatkan nomor 79. Yang menurut kami adalah pemetaan Surat O. Jadi kita sudah hampir sampai. B, O. Dan terakhir, pergi. Apa yang mereka mewakili sekarang? Kurang konsensus. Itu hanya sebuah gumaman mutlak. Ya, itu sebenarnya 87. Baik. Jadi jika sekarang kita memetakan kembali bahwa sampai - mari mulai memanggil grafik ASCII kami, American Standard Kode untuk Informasi Interchange. Yang memberi kita surat - bukan "bo" tapi "busur." Dan itu sempurna isyarat bagi kalian untuk mengambil busur dan kepala di bagian belakang. Terima kasih banyak. [Tepuk Tangan] DAVID Malan: Anda dapat menjaga mereka. Meskipun sebenarnya, siapa pun akan seperti lampu meja, juga? [BAGASI DARI PENONTON] DAVID Malan: Lampu meja? [Tertawa] DAVID Malan: Benarkah? Lampu meja untuk semua orang? Baik. Jadi dimulai dengan sangat sederhana prinsip, kita sekarang tidak hanya dihitung naik dari 0 semua jalan sampai dengan 7, kami telah diasumsikan bahwa hanya dengan melemparkan lebih bit atau lebih lampu atau lebih transistor pada masalah ini, kita bisa merupakan angka yang lebih besar dan lebih besar, dan ergo, rentang yang lebih besar dan lebih besar dari huruf, seperti bahasa Inggris. Dan mari kita pada iman untuk hari ini yang sama bisa kita mulai mewakili grafis dan video dan jumlah media lain yang kita akrab hari. Jadi ini adalah CS50, dan di kelas ini bersama Anda, sekali lagi, sangat banyak teman sekelas yang memiliki sesedikit pengalaman seperti Anda. Dan saya menyebutkan ini hanya karena cukup sering, termasuk baru-baru ini sebagai salah satu mahasiswa menasihati peristiwa dan pada sophomore musim semi lalu menasihati acara, kita sering mendengar siswa melepaskan ketika datang ke meja CS, baik, Aku sudah berpikir tentang mengambil ini kelas intro, tapi aku tidak benar-benar orang komputer. Atau, tapi semua orang pasti lebih tahu dari saya. Dan saya menempatkan ini dalam font terbesar mungkin, untuk menyampaikan pesan ini bahwa itu tidak pada kenyataannya kasus ini. Dan jika Anda bertanya-tanya, harus Saya, pada kenyataannya, berada di sini? Sadarilah bahwa tidak hanya ini saja yang Judul Pengantar Komputer Ilmu pengetahuan, Pengantar Komputer Ilmu I. Jadi memang ada pengenalan seperti kedua. Jadi Anda tidak, pada kenyataannya, di tempat yang salah. Dan di antara tujuan saya miliki untuk hari ini untuk meredakan kekhawatiran seperti itu Anda mungkin, tetapi juga untuk melukis gambaran tentang apa yang ada di toko untuk siswa yang kurang dan lebih nyaman sama dalam kursus ini. Tapi pertama-tama, sebuah kata pada salah satu handout Anda miliki saat ini, di antaranya sejumlah FAQ. Sudah visi kami selama beberapa waktu sekarang untuk memperkenalkan gradasi baru pilihan dalam kursus ini - yaitu, SAT / UNSAT. Secara filosofis bagi saya, itu jauh banyak, jauh lebih penting bahwa siswa di kelas ini terlibat dengan material, ditantang oleh materi, dan khawatir jauh, jauh lebih sedikit tentang mekanisme nilai aktual dan nilai huruf pada semester end, tapi benar-benar merangkul kursus dan materialnya. Dan sungguh ini terasa, lebih umum, untuk apa yang menarik bagi mereka, untuk merasa tertantang dan dihargai tapi tanpa takut gagal. Dan memang, ini juga merupakan berulang Tema dalam hal ini dan lainnya pengantar program di bidang lain, bahwa Anda memiliki gentar ini ketika datang ke menempatkan jari kaki seseorang dalam perairan asing. Saya sendiri, kembali pada tahun 1995, adalah mahasiswa baru. Saya sangat fokus untuk menjadi konsentrator Gov di sini. Namun aku selalu tumbuh dengan sedikit suatu kepentingan dalam ilmu komputer. Aku selalu penasaran. Tapi saat itu, bahkan, aku punya rasa takut ini bahkan melangkah kaki di CS50, begitu banyak sehingga saya bahkan tidak berbelanja itu tahun pertama. Dan satu-satunya alasan aku meletakkan kaki di Pintu tahun kedua adalah karena saya diizinkan untuk mengambil lulus / gagal. Tetapi bahkan lulus / gagal diperlukan bahwa saya mendapatkan keberanian untuk membuat janji dengan Profesor Kernehan pada saat itu, membawa lembar kertas besar, dan meminta dia untuk tanda tangan dan nya izin untuk mengeksplorasi perairan asing. Dan itu tidak membantu dalam beberapa tahun terakhir bahwa ketika melakukan hal ini dalam CS50, ketika kita digunakan untuk menjadi lulus / gagal, sama akan puluhan atau ratusan teman sekelas Anda harus datang, Allah melarang, di depan Sanders dengan formulir ini, bahwa dalam beberapa pikiran merupakan ketidakmampuan, Saya berani mengatakan, untuk melakukan adalah tingkat rekan-rekan Anda. Yang konyol, tapi saya pikir ada mentalitas itu. Dan tidak pernah ada dalam budaya ini SAT / UNSAT, atau lulus / gagal lebih umumnya, dalam kursus ini, atau benar-benar di kampus ini. Jadi tahun ini kami mengubah itu. Aku akan setengah gembira dari kelas ini atau lebih berakhir up mengambil CS50 SAT / UNSAT. Dalam waktu satu tahun, itu akan menjadi indah jika hampir semua orang. Setelah itu mungkin kita akan bekerja pada nilai surat di Harvard Perguruan tinggi lebih umum. Tetapi untuk sekarang, kita akan melakukan ini dalam kami wilayahnya sendiri, dan saya akan sungguh-sungguh mendorong Anda untuk meninjau mereka FAQ dan mengajukan pertanyaan sesuai keinginan Anda, sehingga mudah-mudahan Anda, seperti saya, tidak akan cukup memiliki faktor ketakutan yang sama ketika mengeksplorasi apa yang mungkin tempat yang asing. Jadi apa CS50? Ini adalah pengenalan perusahaan intelektual komputer ilmu pengetahuan dan seni pemrograman. Tapi apa benar-benar berarti? Nah, sejauh ini, kami berbicara sangat singkat tentang mewakili informasi. Tapi misalkan kita benar-benar ingin untuk melakukan sesuatu dengan itu. Kita perlu untuk memperkenalkan gagasan apa yang akan kita sebut algoritma. Algoritma adalah suatu prosedur, proses, satu set instruksi untuk melakukan sesuatu. Dan algoritma dapat menjadi sesuatu super sederhana. Misalnya, contoh dengan yang beberapa Anda mungkin akrab ini hal di sini. Jadi buku ini di sini adalah semakin tanggal, tapi sekali waktu, itu berisi seluruh banyak nama dan nomor telepon. Dan memang, jika saya ingin menemukan seseorang dalam buku telepon ini - mengatakan, seseorang bernama Mike Smith - Aku bisa menemukan Mike Smith dalam jumlah cara cukup mudah. Aku bisa mulai dari awal dan pindah ke halaman 1, tidak ada. Page 2, tidak ada. Halaman 3. Apakah algoritma itu, adalah bahwa proses, benar? Jadi benar, kan? Aku agak idiot untuk melakukannya dalam cara itu, tapi akhirnya aku akan menemukan nama S, dan mudah-mudahan Mike adalah pada bagian tersebut, dan saya akan menjadi dilakukan dengan algoritma saya. Tapi tentunya itu tidak intuitif. Kebanyakan setiap manusia yang wajar dalam kamar tidak akan melakukan itu. Apa yang akan Anda lakukan? Anda akan pergi langsung ke tengah, kan? Kira-kira ke tengah. Dan Anda menyadari, oh, ini adalah Ms Jadi Mike Smith, nama terakhir menjadi Smith, tidak, jelas, maka dalam kiri setengah dari buku ini. Ia harus menuju S ada di sebelah kanan. Dan pada titik ini, meskipun sebagian besar dari kita jangan lakukan ini pada kenyataannya, kita bisa harfiah merobek masalah ini di setengah. [Bersorak DAN Tepuk Tangan] DAVID Malan: Terima kasih. [Bersorak DAN Tepuk Tangan] DAVID Malan: Anda benar-benar dapat merobek ini masalah dalam setengah, meninggalkan saya dengan, harfiah, masalah setengah besar. Jadi jika buku telepon ini - dan itu mungkin itu - sekitar 1.000 halaman, sekarang itu hanya 500. Jika saya melakukan ini lagi dan saya menyadari, oh, sialan, aku pergi terlalu jauh, aku di Ts ini bagian, aku sama bisa - kiasan atau secara harfiah - merobek buku telepon - itu benar-benar waktu itu jauh lebih mudah. Aku benar-benar dapat merobek buku telepon dalam setengah, meninggalkan aku sekarang dengan tidak 1.000, tidak 500 - 250 halaman. Dan aku bisa pergi 125, dan setengah dari itu, dan setengah dari itu, dan setengah dari itu, sampai akhirnya aku akan pergi dengan hanya satu halaman. [Tertawa] DAVID Malan: Itulah bagian I gagal pada. Satu halaman di mana Mike mudah-mudahan. Sekarang mereka algoritma yang berbeda dapat semacam dinilai atau dievaluasi cara yang berbeda. Yang pertama adalah sangat linier, kan? Mengubah halaman, mencari Mike. Mengubah halaman, mencari Mike. Ini sangat linear. Jika ada satu halaman yang lebih dalam telepon buku, itu mungkin akan membawa saya satu detik, satu unit lebih banyak waktu, namun kami sedang menghitung waktu. Jadi saya mungkin menarik seperti ini baris ini di sini, dimana sebagai ukuran masalah meningkat dari kiri ke kanan - buku telepon semakin kecil ke besar - dan waktu akan meningkat pada sumbu vertikal, semakin besar buku telepon. Jadi n hanyalah sebuah variabel umum bahwa ilmuwan komputer digunakan untuk mewakili beberapa nilai, beberapa nomor. Jadi n akan meningkat secara linear. Dua kali ukuran buku telepon, itu akan membawa saya dua kali lebih banyak waktu, kemungkinan besar, untuk menemukan Mike. Sekarang saya bisa pintar tentang hal ini, kan? Aku mulai bosan dengan cepat. Bisa melakukan ini dengan berpasangan. Jadi dua halaman, lalu empat, lalu enam, lalu delapan. Dan aku bisa mulai terbang melalui sebuah sedikit lebih cepat, meskipun dengan risiko kecil overshoot Mike, tapi kurva yang tidak akan semua yang berbeda. Ini masih akan menjadi lurus line, tetapi sedikit lebih cepat. Tapi apa yang saya lakukan? Aku benar-benar melakukan sesuatu fundamental yang lebih baik. Aku mencapai apa yang akan kita sebut logaritma waktu, log n, dimana hijau ini garis memiliki banyak, banyak, banyak tepi kurang langsung ke itu. Dan sebaliknya, itu menunjukkan, seperti semacam mendekati tak terhingga pernah secara bertahap, bahwa saya benar-benar bisa mengambil 1.000 halaman buku telepon, dua kali lipat ukurannya tahun depan - karena kira banyak lebih banyak orang pindah ke kota. Jadi sekarang aku punya 2.000 halaman, tapi bagaimana banyak langkah cerdas adalah bahwa algoritma akan mengambil? Hanya satu. Maksudku, itu adalah hal yang sangat kuat. Jika kita pergi ke 4.000 halaman tahun depan, itu akan membawaku hanya dua langkah lagi. Jadi Anda bisa melempar besar dan lebih besar masalah pada saya, tidak seperti web adalah melemparkan masalah yang lebih besar dan lebih besar setiap hari di Googles dan facebooks dari dunia, dan itu tidak masalah besar. Karena saya menempatkan lebih banyak pemikiran dan perawatan ke algoritma saya yang dapat digunakan untuk memecahkan masalah efisien. Dan memang, yang akan menjadi salah satu tujuan dari program ini. Anda akan, sepanjang jalan, mempelajari bagaimana program. Anda akan belajar bagaimana program di sejumlah bahasa. Tetapi pada akhir hari, program ini tentang memecahkan masalah dan mendapatkan lebih baik untuk memecahkan masalah - dan, seperti dalam kasus seperti ini, pemecahan masalah lebih efisien. Sekarang sejauh ini, kami telah melakukan ini cukup intuitif. Mari kita memperkenalkan sesuatu yang cukup generik disebut pseudocode. Jadi kita akhirnya akan mendapatkan, dalam kursus ini, untuk berbagai bahasa pemrograman. Tapi hari ini kita akan melakukannya dalam bahasa Inggris-seperti sintaks, di mana Anda hanya semacam mengatakan apa yang Anda maksud, tapi kau pernah jadi ringkas dan Anda tidak perlu khawatir tentang tata bahasa dan kalimat lengkap. Anda hanya mengekspresikan diri sebagai seringkas mungkin. Jadi pseudocode adalah bahasa Inggris-seperti sintaks yang mewakili bahasa pemrograman. Dan untuk mencapai tujuan itu, saya mengusulkan bahwa sekarang kita memodelkan proses kita hanya dijelaskan menghitung sesuatu yang sedikit berbeda, kali ini mengambil lihat ini lima menit video yang dihasilkan oleh teman-teman kita di TED yang mendefinisikan apa pseudocode adalah, mendefinisikan apa berpikir algoritmik adalah, dan bahkan meskipun contoh Anda akan melihat adalah, dalam dirinya sendiri, super sederhana, itu akan mulai memberi kami mental Model, kosa kata, yang dapat digunakan untuk berbuat banyak, jauh lebih kompleks algoritma cukup cepat. [BEGIN VIDEO PEMUTARAN] [MUSIC PLAYING] Narator: Apa itu algoritma? Dalam ilmu komputer, sebuah algoritma adalah set instruksi untuk memecahkan beberapa masalah langkah demi langkah. Biasanya, algoritma dieksekusi oleh komputer, tetapi kita manusia memiliki algoritma, juga. Misalnya, bagaimana Anda akan pergi tentang menghitung jumlah dari orang di sebuah ruangan? Nah, jika Anda seperti saya, Anda mungkin akan titik pada setiap orang, satu di waktu, dan menghitung dari 0. 1, 2, 3, 4, dan sebagainya. Nah, itu sebuah algoritma. Bahkan, mari kita coba untuk mengekspresikan itu sedikit lebih formal dalam pseudo - Inggris-seperti sintaks yang menyerupai bahasa pemrograman. Mari N sama 0. Untuk setiap orang di ruangan, mengatur N sama dengan N ditambah 1. Bagaimana menafsirkan pseudocode ini? Nah, satu baris menyatakan, sehingga untuk berbicara, variabel yang disebut N dan menginisialisasi nilainya ke 0. Ini hanya berarti bahwa pada awal algoritma kami, hal yang dengan kita menghitung memiliki nilai 0. Setelah semua, sebelum kita mulai menghitung, kami belum menghitung apa pun. Memanggil variabel ini N hanya konvensi. Saya bisa menyebutnya apa yang paling. Sekarang lini dua demarks awal dari lingkaran, urutan langkah-langkah yang akan mengulang beberapa beberapa kali. Jadi, dalam contoh kita, langkah yang kami ambil adalah menghitung orang di ruangan itu. Di bawah baris kedua adalah line tiga, yang menggambarkan dengan tepat bagaimana kita akan pergi tentang menghitung. Lekukan menyiratkan bahwa itu tiga baris yang akan mengulangi. Jadi apa yang dikatakan pseudocode adalah bahwa setelah mulai 0, untuk setiap orang di ruangan itu, kita akan meningkatkan N oleh 1. Sekarang algoritma ini benar? Nah, mari kita menggedor sedikit. Apakah itu bekerja jika ada dua orang di ruangan itu? Mari kita lihat. Sejalan satu, kita menginisialisasi N ke 0. Untuk masing-masing dua orang, kita kemudian kenaikan N oleh 1. Jadi pada perjalanan pertama melalui lingkaran, kami memperbarui N dari 0 ke 1. Pada perjalanan kedua melalui itu sama lingkaran, kami memperbarui N 1 ke 2. Dan pada akhir ini algoritma, n adalah 2, yang memang sesuai dengan jumlah orang di ruangan itu. Sejauh ini, begitu baik. Bagaimana tentang kasus sudut, meskipun? Misalkan ada 0 orang di kamar - selain saya, siapa yang melakukan penghitungan. Sejalan satu, kita menginisialisasi N ke 0. Kali ini, meskipun, baris ketiga tidak mengeksekusi sama sekali karena tidak ada orang di ruangan. Dan N tetap 0, yang sesuai dengan jumlah orang di dalam ruangan. Cukup sederhana, kan? Tetapi orang-orang menghitung satu per satu sangat tidak efisien, juga, bukan? Tentunya kita bisa berbuat lebih baik. Mengapa tidak menghitung dua orang sekaligus? Alih-alih menghitung 1, 2, 3, 4, 5, 6, 7, 8, dan sebagainya, mengapa tidak menghitung, 2, 4, 6, 8, dan seterusnya? Bahkan terdengar lebih cepat, dan itu pasti. Mari mengungkapkan optimasi ini dalam pseudocode. Mari N sama 0. Untuk setiap pasangan orang di ruangan, mengatur N sama dengan N ditambah 2. Perubahan yang cukup sederhana, kan? Daripada orang hitungan satu pada suatu waktu, kita malah menghitung mereka dua sekaligus. Algoritma ini adalah dengan demikian dua kali secepat terakhir. Tapi apakah itu benar? Mari kita lihat. Apakah itu bekerja jika ada dua orang di ruangan itu? Sejalan satu, kita menginisialisasi N ke 0. Untuk itu sepasang orang, kita kemudian kenaikan N oleh dua. Dan pada akhir ini algoritma, N adalah 2, yang memang sesuai dengan jumlah orang di ruangan itu. Misalkan berikutnya bahwa ada 0 orang di ruangan itu. Sejalan satu, kita menginisialisasi N ke 0. Seperti sebelumnya, line tiga tidak mengeksekusi sama sekali, karena tidak ada pasangan orang di ruangan. Dan N tetap 0, yang memang sesuai dengan jumlah orang di ruangan itu. Tapi bagaimana jika ada tiga orang di ruangan itu? Bagaimana ini algoritma tarif? Mari kita lihat. Sejalan satu, kita menginisialisasi N ke 0. Untuk sepasang orang-orang, kita kemudian kenaikan N dengan 2. Tapi kemudian apa? Tidak ada sepasang penuh orang lain di dalam ruangan, sehingga garis kedua ada lagi berlaku. Dan pada akhir ini algoritma, N masih 2, yang tidak benar. Memang, algoritma ini dikatakan menjadi buggy, karena memiliki kesalahan. Mari kita ganti rugi dengan beberapa pseudocode baru. Misalkan n sama dengan 0 untuk setiap pasangan orang di ruangan. Set N sama dengan N ditambah 2. Jika seseorang tetap berpasangan, mengatur N sama dengan N ditambah 1. Untuk mengatasi masalah khusus ini, kami telah diperkenalkan, sejalan empat, seorang kondisi, atau dikenal sebagai cabang yang hanya mengeksekusi jika ada satu orang bahwa kita tidak bisa pasangan dengan yang lain. Dan sekarang, apakah ada satu atau tiga atau ganjil orang ruang, algoritma ini sekarang akan menghitungnya. Bisakah kita melakukan bahkan lebih baik? Nah, kita bisa menghitung dalam 3s 4s atau atau bahkan 5s dan 10s, tetapi di luar itu, itu akan mendapatkan sedikit sulit untuk titik. Pada akhir hari, apakah dieksekusi oleh komputer atau manusia, algoritma hanya satu set instruksi dengan yang untuk memecahkan masalah. Ini adalah hanya tiga. Masalah apa yang akan Anda memecahkan dengan algoritma? [END VIDEO PEMUTARAN] DAVID Malan: Itulah satu-satunya waktu Aku akan muncul dalam bentuk kartun. Tapi di mana cerita itu daun off, sekarang, adalah bagaimana kita bisa berbuat lebih baik? Bertiga dan merangkak, kita mengklaim, kita dapat menghitung orang jauh lebih cepat, tapi bisa kita lakukan secara fundamental lebih baik dari itu? Dan saya bertaruh kami bisa. Jika kami memperkenalkan sedikit kita sendiri pseudocode di sini, aku akan mengusulkan bahwa kita dapat mencapai garis seperti ini. Kami tidak akan menghitung orang satu, dua, tiga, empat. Kami tidak akan pergi dua, empat, enam, delapan. Kami akan melakukan yang lebih baik fundamental dengan mengkaji ulang masalah, dan dalam hal ini kasus, memanfaatkan sebaliknya kurang dimanfaatkan sumber daya. Dalam sesaat, saya harap Anda akan memaafkan dan humor kami dengan berdiri di tempat, di mana titik kita akan meminta Anda masing-masing untuk mengambil di Anda pikiran nomor 1. Anda kemudian akan semakin canggung, dengan berjalannya waktu, cari orang lain yang berdiri, menggabungkan nomor Anda bersama-sama dengan menambahkan mereka. Salah satu dari kalian kemudian akan berlomba untuk duduk pertama turun, dan orang lain akan mengulangi. Jadi dengan kata lain, dengan pembenihan semua Anda dengan nomor 1, dan kemudian menggabungkan mereka ke dalam 1s 2s dan mereka 2s ke 4s, dengan semua orang semakin duduk, kita harus, di akhir algoritma ini, hanya memiliki satu pinjaman jiwa yang tidak duduk cukup cepat tetapi yang memiliki seluruh jumlah penonton dalam pikirannya. Jadi, jika Anda akan, mari kita pergi ke depan dan - langkah satu - berdiri di tempat. Dan mengeksekusi. [Banyak membisikkan] DAVID Malan: Apakah Anda tahu mana Lauren? 729? [Banyak membisikkan] DAVID Malan: Baiklah? [Banyak membisikkan] DAVID Malan: Baiklah, kita harus akan mendekati akhir. Kami melihat satu rekan berdiri di sini masih. Siapa lagi yang perlu dipasangkan? Jika kalian ingin berpasangan. Seseorang di bagian atas. Mengapa saya tidak meminjamkan tangan di sini. Untuk sangat sedikit orang yang masih berdiri, apa nomor yang Anda ada dalam pikiran Anda? SISWA: 78. DAVID Malan: 78 plus - siapa yang berdiri di sini? SISWA: 39. DAVID Malan: Ditambah 39. Ditambah siapa lagi yang masih berdiri? 81? OK, siapa lagi? 81 lain? Wow. Dan kemudian apa yang ada di belakang? SISWA: 49. DAVID Malan: 49, ditambah? SISWA: 98. DAVID Malan: 98 plus? Apakah itu orang lain? 12? Good job. [Tertawa] DAVID Malan: Oh, 112 - oh. Good job! [Tertawa] [Tepuk Tangan] DAVID Malan: Orang lain masih berdiri? Maaf? SISWA: 99. DAVID Malan: 99. Orang lain masih berdiri? Dan jumlah siswa di sini sebenarnya, menurut - Anda punya nomor? Oh, jumlah sebenarnya orang di kamar, menurut account yang rekan-rekan mengajar lakukan di jalan semua orang di, 729. Begitu keluar dari sebuah ruangan penuh mahasiswa Harvard yang dihitung sendiri, Jawabannya adalah 637. [Tertawa] DAVID Malan: Begitu dekat. Tapi tetap. OK, jadi itu suatu ajaran saat, kan? Ini sekarang adalah apa yang kita gambarkan sebagai bug. Di suatu tempat di sepanjang jalan, kami melakukan beberapa aritmatika yang salah, atau seseorang duduk, atau kiri, atau sesuatu yang tidak beres. Tapi itu baik-baik saja. Karena bahkan masih, kami mendapat cukup dekat. Dan aku berpendapat bahwa kita harus salah menjawab jauh lebih cepat dari saya akan menggunakan pendekatan saya lebih linear. Jadi mari kita asumsikan kita sebenarnya mendapatkan bahwa benar, tapi pikirkan sekarang tentang apa yang yang terjadi setiap kali, dibandingkan saya sendiri naif menunjuk algoritma. Satu, dua, tiga. Jika memang ada 729 atau 637 orang di sini, yang akan membawaku harfiah 637 atau 729 pointings dari jari dan incrementing jumlah total saya. Dan aku bisa melakukan sedikit lebih baik dengan akan dua, empat, enam, delapan, dan dua kali lipat kecepatan itu, bahkan mungkin tiga atau quadruple, tergantung seberapa baik aku bisa melakukan itu menghitung dalam kepala saya. Tetapi pendekatan ini bahwa kalian mengambil secara fundamental berbeda. Karena pada awalnya, kalian semua berdiri. Jadi semua 729. Dan kemudian secara harfiah setengah Anda duduk. Dan setelah itu, yang lain setengah dari Anda duduk. Dan setelah itu, yang lain setengah dari Anda duduk. Dan jumlah waktu yang Anda orang bisa duduk kira-kira delapan atau sembilan atau sepuluh kali jumlah, tergantung pada apa jumlah total kita. Dan kita bisa melakukan semacam ini cara lain. Jika kita memiliki 1.024 orang di ruangan, jumlah kali Anda bisa membagi 1.024 orang adalah 10. Sekarang pikirkan tentang hal itu dalam arah lain. Misalkan, ridiculously, yang kita miliki, katakanlah empat miliar orang di ruangan ini, atau ruang yang lebih besar. Berapa kali kita harus pergi melalui algoritma ini, seperti setengah kelas yang duduk? Ini hanya akan mengambil 32 seperti operasi, bahkan dalam kelas ukuran empat miliar. Kenapa? Karena empat miliar pergi ke dua miliar, pergi ke satu juta, pergi ke 500 juta, pergi ke 250 juta, titik, titik, titik. Saya hanya bisa melakukan pembagian bahwa beberapa 32 kali, di mana titik, semua orang kecuali satu orang akan dibiarkan berdiri. Dan itu juga, adalah semacam kuat gagasan bahwa semakin kita akan mencoba untuk leverage dalam kursus ini, dan dalam pemrograman dan ilmu komputer lebih umumnya, ini kuman dari sebuah ide dengan yang kemudian kita bisa memecahkan masalah banyak, jauh lebih kuat. Jadi kami mulai cukup sederhana dengan pseudocode dan seorang pria dalam sebuah ruangan, tetapi sekarang dengan seluruh ruangan penuh orang telah kita lakukan secara fundamental lebih baik. Nah, mari kita transisi dari pseudo untuk beberapa kode yang sebenarnya. Bahasa ini Anda akan melihat terjadi untuk disebut JavaScript, dan kita akan kembali ke arah ini akhir semester. Ini adalah bahasa pemrograman yang Anda gunakan untuk membuat website dan lain seperti perangkat lunak hari ini. Dan kami telah menggunakannya, berkat teman dari kami di Stanford, untuk mengkodekan beberapa informasi tersembunyi di sini. Ini adalah seni steganografi, sehingga untuk berbicara, di mana Anda dapat menyembunyikan informasi apa yang sebaliknya tampaknya ada kebisingan atau sama sekali berbeda gambar sama sekali. Tapi tertanam dalam gambar ini khususnya memang pesan rahasia macam. Jadi biarkan aku pergi ke depan dan menarik gambar yang sama di sini, ini waktu dalam browser web. Dan aku akan melambaikan tangan saya di beberapa rincian untuk saat ini, terutama bagi anda yang ini tampak seperti tidak hanya JavaScript tetapi Yunani, sebagai benar bahasa asing. Tapi ini adalah contoh bahasa pemrograman. Dan untuk saat ini, mengambil keyakinan bahwa ini baris pertama dari kode - dan menurut kode, saya hanya berarti teks. Teks yang saya bisa benar-benar mengetik ke Microsoft Word, jika aku punya perangkat lunak yang tepat untuk kemudian melakukan sesuatu dengan itu. Kode sumber pemrograman, pemrograman kode, benar-benar hanya teks, dan terlihat berbeda berdasarkan bahasa apa Anda menggunakan, tidak seperti bahasa Inggris dan Spanyol dan Rusia semua terlihat berbeda saat Anda mengetikkannya di keyboard Anda. Jadi baris pertama ini, untuk saat mengambil iman, hanya membuka grafik dari internet, yang bising grafis kita hanya melihat. Baris ini berikutnya di sini adalah contoh dari lingkaran, dan kita benar-benar melihat bahwa sama jargon dalam video TED. Sebuah lingkaran adalah sesuatu yang terjadi lagi dan lagi, dan meskipun ini benar-benar terlihat samar, dengan kata kunci untuk, dan beberapa tanda kurung, dan beberapa titik koma. Kami akan datang kembali ke sebelum lama, tetapi loop yang ada pada dasarnya adalah mengatakan program, iterate atas semua dari titik-titik berisik, dari kiri ke kanan, atas ke bawah. Karena pada akhir hari, gambar seperti ini - dan Anda dapat benar-benar jenis melihatnya pada proyektor ini - benar-benar hanya grid titik. Jadi kita dapat mengidentifikasi masing-masing titik oleh koordinat, x, y, dan dengan ini Program, sekarang dapat kita mulai melakukan sesuatu untuk titik-titik. Jadi apa yang saya akan pergi ke depan di sini dan lakukan adalah saya akan membuat beberapa perubahan. Pertama aku akan pergi ke depan dan menyingkirkan dari semua itu kehijauan dan kebiruan kebisingan, dan aku akan pergi ke depan dan ketik berikut diakui samar sintaks. im untuk gambar. mengatur biru di lokasi x, koma, lokasi y, untuk 0. Dengan kata lain, saya ingin hanya matikan semua dari biru titik di foto itu. Aku akan pergi ke depan sekarang lalu klik Run ini / tombol Simpan, dan Anda akan perhatikan di sisi kanan, gambar yang dihasilkan muncul. Sekarang hijau super, tapi itu tidak mengejutkan, karena saya benar-benar berubah off, dengan membuat 1 0, semua biru di foto itu. Nah, sekarang mari kita lakukan sedikit lebih. im untuk gambar, dot setGreen, x, y. Dan itu hanya berarti iterate dari kiri ke kanan dan kemudian atas ke bawah. Menghidupkan yang mati dengan nilai 0, juga. Simpan. Dan pada proyektor, Anda tidak bisa benar-benar benar-benar melihat apa-apa sama sekali. Pada layar laptop saya, jika saya mengintip hanya dengan cara yang benar, aku bisa melihat sedikit gambar, karena mereka masih beberapa merah di sana. Jika Anda pernah mendengar singkatan RGB - merah, hijau, biru - itu mengacu pada komposisi ini dari suatu gambar dengan menggunakan hanya tiga warna. Dan sekarang, kami telah dibuang semua hijau, biru semua, tapi tidak ada banyak merah. Jadi biarkan aku mendongkrak merah. Bagaimana saya bisa melakukannya? Yah, pertama, aku akan meminta Program daftarnya. Aku akan pergi ke depan dan sebut saja variabel, seperti dalam aljabar. Anda dapat memiliki x atau y atau z. Aku akan mendeklarasikan variabel dan berkata, dimasukkan ke dalam variabel ini, sementara, nilai dari gambar getRed nilai pada x, y. Dan lagi, kami akan kembali ke semua detail ini di masa depan. Tapi untuk saat ini, hanya mengambil pada iman bahwa baris ini meminta program, apa adalah nilai merah pada x, y? Pada saat itu titik tertentu? Lalu aku akan melakukan sesuatu untuk itu. Lalu aku akan melakukan gambar dot set red pada x, y, y tapi kali ini aku akan meningkatkan dengan melakukan kali merah, katakanlah, 10. Jadi meningkatkan dengan faktor 10. Mari saya zoom out sekarang dan klik bisa Jalankan / Simpan. Dan voila, yang ada di sana seluruh waktu, meskipun mata manusia tak bisa melihatnya. Jadi sekali lagi, ini sekarang adalah kode nyata, sebuah contoh bahasa yang kita akan datang kembali ke sebelum lama. Tapi menyadari, terutama bagi Anda tanpa pengalaman seperti itu, itu cukup segera bahwa kita sendiri akan menulis kode seperti itu ada. Bahkan, alat dengan mana Anda semua agak akrab, mungkin, adalah CS50 ini sendiri alat kursus-belanja, yang sebenarnya reboot musim panas ini oleh beberapa mantan mahasiswa CS50 sendiri, kini giliran TF. Jadi ini terjadi untuk menjadi sebuah website yang dibangun dalam bahasa yang disebut PHP. Ini menggunakan database yang disebut MySQL, hal dengan yang kita akan mendapatkan tangan kami kotor kemudian dalam semester. Tapi percaya atau tidak, bahkan sesuatu seperti ini pada akhirnya mengurangi ke sederhana dan kondisi loop dan cabang, seperti yang kita lihat hanya saat yang lalu dalam video TED. Apa yang saya pikir saya akan lakukan sekarang adalah berbagi tidak hanya sesuatu yang kita staf telah membuat untuk kampus, melainkan sesuatu mantan mahasiswa - tiga siswa, pada kenyataannya - membuat ini tahun lalu, Sierra, Daniel, dan Sam, yang terakhir di antaranya tidak memiliki sebelum Pengalaman programing ketika ia mengambil CS50. Dan untuk proyek akhir mereka, mereka dipamerkan, di CS50 Adil, sebuah aplikasi bernama wrdly, yang merupakan program berbasis web yang mereka buat video ini yang saya pikir saya akan berbagi dengan memberikan rasa apa yang mungkin pada akhir istilah itu. [MUSIC PLAYING] DAVID Malan: Itu dari Nol Minggu Week 12 tahun terakhir ini. [Tepuk Tangan] DAVID Malan: Sebagai teaser, juga, benar-benar untuk merangsang selera Anda adalah apa yang mungkin, Anda mungkin telah melihat sudah, atau akan segera melihat, market.cs50.net, sebuah alat baru bahwa tim tentu memiliki telah bekerja pada, kali ini di bekerjasama dengan Harvard Mahasiswa Agen, sehingga mulai tahun ini dan mudah-mudahan terus ke ini datang musim panas Anda akan memiliki standar kesempatan di kampus untuk membeli dan menjual sesuatu yang menarik bagi Anda. Dan dengan kemitraan melalui HSA, Anda akan juga bisa drop item off di salah satu toko fisik HSA ini di beberapa titik di masa depan, sehingga hal proxy, terutama karena Anda lulus dan tidak selalu ingin membuang hal, tapi benar-benar membayar meneruskan kepada orang-orang yang mungkin mengikuti Anda di kampus. Jadi lebih pada datang. Tapi sedikit lebih konkret, alat yang keluar dari CS50 di akhir tahun, dengan mana sebagian dari Anda mungkin akrab dan orang lain Anda mungkin googling sekarang, CS50.net/2x, Anda akan menemukan link ke sebuah ekstensi Chrome yang demonstratif tentang bagaimana Anda bisa menggunakan JavaScript, bahwa bahasa yang sama kita digunakan dengan menara Eiffel saat yang lalu, untuk menerapkan kecepatan pemutaran 2x untuk semua Harvard video iSites. Ini adalah sesuatu yang dibangun ke CS50 itu pemutar video sendiri. Tapi ini, juga, jika Anda mulai menggali ke kode sumber, yang kita akan dengan senang hati membuat tersedia, Anda akan melihat bagaimana Anda bahkan dapat memecahkan masalah seperti itu, mempercepat widget di website dengan yang Anda sudah baik akrab. Jadi kata sekarang di lapangan dan harapan dan apa yang ada di depan. Secara umum, kami memang akan berkumpul di sini pada hari Senin dan Rabu - meskipun Jumat ini, kita akan berkumpul karena Belanja Minggu - 1:00-2:00, meskipun kadang-kadang sampai 2:30. Mengingat bahwa Anda mungkin karena ingin atau harus mengambil beberapa kelas di 02:00 seterusnya, atau bahkan sebelumnya, jangan menyadari tentu saja mendukung apa yang disebut pendaftaran simultan, dimana kita akan mendukung petisi kepada Dewan Iklan dan penduduk Anda dekan atas nama Anda jika Anda memiliki konflik di suatu tempat di 1:00-2:30 jangkauan. Kepala ke URL online untuk rincian tambahan. Namun dalam hal struktur penyangga yang mencirikan CS50, bagi siswa lebih dan kurang nyaman sama, kita menawarkan trek yang berbeda bagian. Dan ini adalah beberapa minggu off, tapi tak lama, Anda akan diminta untuk tingkat kenyamanan Anda. Apakah Anda termasuk orang yang kurang nyaman, lebih nyaman, atau suatu tempat di antara? Dan kita akan memiliki tiga berbeda trek yang melayani justru mereka penonton. Jadi tanpa titik dalam istilah harus Anda bahkan merasa seperti Anda bersaing terhadap setiap siswa dengan lebih atau latar belakang kurang dari Anda. Memang, tentu saja ini dimaksudkan untuk menjadi jauh lebih kolaboratif dan banyak lebih terbuka dari itu. Dalam hal set masalah, Anda akan menemukan, juga, bahwa di samping edisi standar masalah setiap minggu ditetapkan, sering ada "hacker edisi "yang dimaksudkan untuk ditargetkan pada 5% sampai 10% atau lebih dari demografis siapa di antara mereka memang lebih nyaman dan ingin lebih dari tantangan daripada standar edisi pset yang mengharapkan. Rincian lebih lanjut tentang orang-orang untuk menjadi ditemukan dalam silabus. Tapi juga dalam ada dapat menemukan rincian pada kursus hari terlambat. Biasanya masalah set akan jatuh tempo pada hari Kamis. Namun, Anda dapat memperpanjang banyak Anda tenggat waktu ini jatuh dari Kamis sampai Jumat hanya dengan pertemuan kita di tengah jalan, sehingga untuk berbicara, menjawab pemanasan beberapa pertanyaan dalam beberapa masalah minggu set, yang akan secara otomatis kemudian memberikan Anda tambahan 24 jam. Kami juga akan turun terendah Anda skor, sesuai silabus. Untuk memberikan rasa apa masalahnya set adalah - karena itu memang masalah saja dandanan yang akhirnya menentukan hampir setiap Pengalaman siswa, lebih dari kuliah, lebih daripada bagian, lebih daripada kebanyakan lainnya aspek saja. Tahun lalu, misalnya, kami mulai, seperti kami akan mulai tahun ini, dengan Scratch. Terutama hari Jumat ini, kita akan menggunakan, untuk waktu hanya satu hari, sebuah grafis bahasa pemrograman, dengan mana kita akan memulai pemrograman dengan menyeret dan menjatuhkan potongan puzzle yang hanya merakit secara fisik jika masuk akal untuk melakukannya secara logis. Minggu depan, kami akan cepat transisi ke C, yang cukup tua tapi sangat kecil dan bahasa yang sederhana yang akan memungkinkan kita untuk benar-benar pergi dari 0 hingga 60 selama kursus hanya beberapa minggu, dan kemudian Parlay keterampilan dan pengetahuan yang sama konstruksi pemrograman dasar menjadi bahasa tingkat tinggi seperti PHP, JavaScript, dan yang lain masih. Tahun lalu, pset ketiga dalam kursus adalah bahwa kriptografi, sebuah aplikasi domain-spesifik dimana kita siswa ditantang untuk mengimplementasikan jumlah cipher, program dengan mana untuk berebut atau menguraikan informasi, untuk mengenkripsi itu. Untuk edisi hacker, sebaliknya, kami memberikan siswa hacker file dari komputer Unix standar yang mengandung nama pengguna dan password, yang terakhir yang dienkripsi, dan kami menantang hacker tersebut siswa untuk mendekripsi, sebisa mungkin, mereka password, masih itu domain yang sama. Perebutan, permainan dengan yang beberapa dari Anda mungkin familiar. Sepotong forensik, di mana kami meminta siswa untuk memulihkan data yang telah jika tidak dihapus dari digital saya sendiri kartu compact flash kamera, dengan sebenarnya menulis perangkat lunak untuk mencari tahu, di mana adalah nol dan yang di bahwa kamera digital yang sebelumnya terdiri grafis JPEG? Sebuah tantangan macam tahun lalu melibatkan menulis tercepat pemeriksa ejaan mungkin, bersaing terhadap teman-teman dan teman sekelas jika mereka ingin. Menerapkan Huff 'n Puff, program kompresi. Dan kemudian mengakhiri semester dengan CS50 Keuangan, sebuah aplikasi berbasis web dengan mana Anda membuat sebuah website Etrade seperti untuk membeli dan menjual saham, sehingga untuk berbicara, dengan benar-benar menarik hampir real-time quotes Yahoo! Keuangan. Apa yang kita tidak lakukan tahun lalu adalah satu masalah set yang tetap tetap menjadi favorit. Jika Anda belum pernah pergi ke shuttle.cs50.net, Anda akan melihat pengguna antarmuka sedikit seperti ini. Tapi dua tahun yang lalu, kelas diimplementasikan, menggunakan Google Maps dan Google Earth plug-in dan sedikit dari cerdas dengan mengemudi di sekitar kampus, sehingga tujuan dari permainan ini adalah, karena Anda dapat melihat beberapa wajah, adalah untuk berkeliling kampus mencari staf, rekan pengajar dan CA, dan ketika Anda melakukannya, menempatkan mereka ke shuttle bus Anda. Tak satu pun dari mereka benar-benar tampaknya berada di sini, jadi kita akan memasukkan kode cheat. [Tertawa] DAVID Malan: Di sana kami pergi. Baik. Dan di sini sekarang adalah staf dicampur seluruh kampus. Dan seperti yang Anda lihat, di kanan sisi layar, shuttle bus memiliki kursi kosong. Dan tujuannya adalah untuk menulis kode yang dapat digunakan untuk mensimulasikan ini mengemudi dan mengambil dan mengantar off penumpang. Yang satu itu, juga menggunakan bahasa disebut JavaScript. Jadi menyadari bahwa program-program seperti itu akan berada di lintasan yang sama kami ini tahun, juga. Dalam istilah sekarang, dukungan tambahan, kami memiliki jam kantor. Seperti Anda mungkin telah melihat di rumah Anda sendiri ruang makan atau di Annenberg, kami akan berada di rumah makan ruang empat malam dalam seminggu - Leverett, Pfoho, Eliot dan Annenberg tahun ini, 20:00-23:00. Dan apa yang kami pikir kami akan lakukan tahun ini adalah sesuatu yang sedikit berbeda. Jika Anda mendengar kabar burung tahun lalu yang itu agak terlalu stres, hal ini jam kantor tahun ini, seperti yang kita akan menjelaskan minggu depan, akan lebih organik, dimana pada saat kedatangan, Anda akan dikirim ke satu meja tertentu di mana beberapa anggota staf menunggu, dan kami akan melakukan hal-hal yang jauh lebih organik. Tidak ada lagi antrian, tidak ada lagi iPad, namun suka memiliki lebih intim percakapan di sekitar meja hanya delapan atau lebih siswa, sehingga kita perkiraan nuansa apa yang sebaliknya akan menjadi kelas jauh lebih kecil. Kami menawarkan, juga, hal-hal yang kita disebut walkthrough, video difilmkan di maju oleh salah satu pengajaran mata kuliah tersebut fellows, Zamyla, di mana dia menuntun Anda melalui masalah minggu set, menawarkan tips dan trik untuk tantangan yang terbentang di depan. Dan sebaliknya, setelah set masalah yang karena, tahun ini, kita akan juga melepaskan klip kecil sebut pasca-otopsi yang benar-benar berjalan Anda melalui solusi perwakilan, baik dan buruk, melalui mana Anda dapat menyimpulkan bagaimana Anda bisa memiliki atau seharusnya diimplementasikan solusi Anda sendiri. Dan apa yang kami akan menawarkan untuk pertama kalinya tahun ini juga, terutama bagi siswa yang menyediakan sendiri tentu saja yang lain sumber daya tapi tetap berjuang semua terlalu banyak, tentu saja sendiri akan memasangkan para siswa, sebagai sumber daya memungkinkan, dengan tutor sehingga Anda memiliki lebih intim kesempatan daripada ruang makan rumah memungkinkan untuk bantuan satu-satu. Sekarang sekilas akhir di beberapa dari permainan akhir yang terlihat. Anda mungkin akrab dengan yang CS50 Hackathon. Nah, Desember mendatang ini, dari 8:00 PM sampai 7:00 pagi, pada awal Membaca Periode, akan menjadi kesempatan untuk berkumpul dengan teman sekelas - ini akan menjadi sekitar 9:00 - selama Anda menyelam ke akhir Anda pelaksanaan proyek bersama teman sekelas, teman, dan makanan. Ini akan menjadi sekitar 01:00, ketika batch pertama dari makanan tiba. Dan ini adalah sekitar 4:00 bahwa tahun tertentu di CS50 Hackathon. Tapi klimaks benar tentu saja adalah dimaksudkan untuk Fair CS50, kampus-lebar pameran proyek akhir Anda sendiri, yang keluarga dan teman-teman semua diundang, sebagai perekrut dan teman-teman kita dari industri. Ini, misalnya, adalah sekilas Orang 2.000-plus yang pernah menghadiri tahun terakhir. Ekspresi seperti ini tidak biasa, dan sama-sama lakukan Anda teman sekelas senang dalam hal Anda capai. Dan sebenarnya, untuk mencapai tujuan itu, kami telah acara start-of-panjang, juga. Jika hal-hal seperti ini menarik bagi Anda, atau Anda setidaknya ingin tahu apa ini, tahu bahwa tradisi baru Tentu saja disebut CS50 Hari Puzzle. Dan ini dilembagakan pasangan dari tahun untuk benar-benar kembali sinyal ke kampus bahwa ilmu komputer bukan tentang pemrograman, dan itu tentu saja tidak tentang merangkul hanya mereka siswa yang memiliki pengalaman sebelumnya. Ini benar-benar tentang pemecahan masalah lebih umum. Dan Puzzle Hari, selama beberapa masa lalu tahun sekarang, telah berkembang menjadi bagus kemitraan dengan teman-teman kita di Facebook, dimana ada akan menjadi luar biasa hadiah dan pizza di seberang sungai di i-lab ini Sabtu mendatang. Kepala ke URL bahwa dengan dua atau tiga teman-teman jika Anda ingin mengambil bagian dalam tradisi baru ini. Jadi saya ingin meminta Anda untuk menjaga satu hal dalam pikiran, dan kami punya hanya dua menit klip yang untuk menutup hari ini. 73% adalah angka yang perlu diingat. Kue, juga akan menunggu Anda di luar ini transept seperti yang kita menunda hanya dalam beberapa saat, yang merupakan tradisi tentu saja, juga. Tapi ini adalah kutipan kunci dari silabus untuk diingat. Akhirnya yang terpenting dalam kursus ini tidak begitu banyak di mana Anda berakhir relatif terhadap teman sekelas Anda, tetapi di mana Anda, dalam Minggu 12, akhirnya relatif terhadap diri dalam Minggu 0. Tapi sekilas bahwa kita akan meninggalkan Anda dengan di sini hari ini adalah yang terakhir ini di sini oleh Daniel kami sama, yang melakukan Video wrdly beberapa saat yang lalu. Aku meninggalkan Anda dengan ini sekilas apa yang ada di depan. Dan seperti yang kita lakukan ini, jika kita bisa memiliki CS50 staf dari depan ruangan untuk datang ke panggung untuk melukis semua lebih dari gambaran visual untuk apa yang menanti Anda tahun ini - semakin canggung. Kami akan menyimpulkan dengan ini di sini di layar. [MUSIC PLAYING] DAVID Malan: Ini adalah CS50. [MUSIC - MATT & KIM, "'S IT ALRIGHT"] SPEAKER 1: I love CS50 lebih dari kucing. SPEAKER 2: Whoaaaa! [Tertawa] DAVID Malan: Ini, kemudian, adalah CS50. Kita akan melihat Anda pada hari Jumat. [Tepuk Tangan DAN bersorak] Narator: Pada CS50 berikutnya, sebuah panggung demo tidak berjalan seperti yang direncanakan. DAVID Malan: Kami ingin mencari Mike Smith dalam buku telepon ini. Nah, apa saja naluri Anda? Aku mungkin melompat kasar ke tengah buku telepon, melirik, melihat bahwa Aku di M, dan aku tahu sekarang bahwa Mike Smith tidak ke kiri. Ia harus ke kanan. Dan pada titik ini, kita harfiah dapat merobek - pada titik ini, kita benar-benar bisa merobek - pada titik ini, kita bisa kiasan merobek buku telepon di setengah. [Ukelele memetik]