None (1) Flashcards
Vì vậy, những gì chúng ta sắp xem, những gì chúng ta sắp viết từ giờ trở đi, chúng ta sẽ bắt đầu gọi mã nguồn. Mã mà bạn, lập trình viên con người viết, từ đó trở đi được gọi là mã nguồn.
Machine code
Vì vậy, thiết kế là chủ quan hơn.
6:26
Đó là một nghệ thuật học được nhiều hơn, theo đó hai người cuối cùng có thể không đồng ý về phiên bản nào của chương trình được thiết kế tốt hơn.
6:32
Nhưng chúng tôi sẽ cung cấp cho bạn các khối xây dựng và nguyên tắc trong những tuần tới để bạn có thể tự hiểu rõ hơn nếu mã của riêng bạn được thiết kế tốt.
Trong thế giới của Scratch, nó đơn giản như nhấp vào lá cờ xanh vì về cơ bản MIT đã làm tất cả những công việc nặng nhọc ở đó để tìm ra
4:57
làm cách nào để chuyển đổi các mảnh ghép đồ họa này thành mã máy bên dưới. Nhưng bây giờ bắt đầu từ hôm nay, khi chúng ta bắt đầu học lập trình và khoa học máy tính
5:04
đúng rồi, bây giờ sức mạnh đó chuyển sang bạn.
Tuy nhiên, nó chỉ là một phần trong vấn đề hôm nay. Quan trọng hơn, kể từ hôm nay trở đi, là việc viết mã tốt. Và đây là thứ mà bạn không thể học được trong một sớm một chiều. Nó cần có thời gian. Nó cần thực hành.
5:36
Cũng giống như việc viết một bài luận về bất kỳ chủ đề nào có thể mất thời gian, thực hành và lặp đi lặp lại theo thời gian. Nhưng trong một lớp lập trình như CS50, chúng tôi
5:44
nói chung sẽ mong muốn đánh giá chất lượng mã theo ba trục này.
correctness: chính xác
design: thiết kế
style: phong cách
Nó có đúng không, đầu tiên và quan trọng nhất? Liệu mã làm những gì nó phải làm? Rốt cuộc, nếu nó không, thì, vấn đề là gì
5:54
viết nó ở nơi đầu tiên? Vì vậy, không cần phải nói rằng bạn muốn mã bạn viết là chính xác. Và rõ ràng là không phải lúc nào cũng vậy.
6:00
Một lần nữa, bất cứ khi nào máy Mac, PC hoặc điện thoại của bạn gặp sự cố, một số người ở đâu đó đã viết lỗi– đó là mã có lỗi.
6:07
Nhưng tính chính xác của mã sẽ là mục tiêu đầu tiên và quan trọng nhất.
Và chúng ta đã thấy một chút về điều này vào tuần trước khi tôi đề xuất rằng chúng ta có thể thiết kế các chương trình scratch thậm chí còn tốt hơn,
6:19
có thể bằng cách sử dụng các vòng lặp thay vì chỉ bằng cách sao chép và dán lặp đi lặp lại cùng một khối. Vì vậy, thiết kế là chủ quan hơn.
6:26
Đó là một nghệ thuật học được nhiều hơn, theo đó hai người cuối cùng có thể không đồng ý về phiên bản nào của chương trình được thiết kế tốt hơn.
6:32
Nhưng chúng tôi sẽ cung cấp cho bạn các khối xây dựng và nguyên tắc trong những tuần tới để bạn có thể tự hiểu rõ hơn nếu mã của riêng bạn được thiết kế tốt.
6:40
Và tại sao điều đó lại có giá trị? Chà, mã của bạn được thiết kế càng tốt thì thường chạy càng nhanh, bạn hoặc đồng nghiệp sẽ càng dễ bảo trì mã hơn
6:47
nếu bạn đang làm việc với những người khác trong thế giới thực. Vì vậy, thiết kế tốt là một điều tốt. Nó giúp bạn truyền đạt ý tưởng của mình, giống như trong một bài luận tiếng Anh điển hình.
Và cuối cùng, tuần này chúng ta sẽ nói về phong cách. Và đây thực sự chỉ là tính thẩm mỹ của mã của bạn.
6:59
Hóa ra máy tính thường không quan tâm mã thực của bạn cẩu thả đến mức nào,
7:04
trong thế giới mã hóa, hóa ra bạn không thực sự cần phải thụt lề mọi thứ theo một cách đẹp đẽ.
7:10
Bạn không cần phải đánh số trang như trong một bài luận. Máy tính thường không quan tâm, nhưng con người thì có.
7:16
Trợ giảng thì có. Bạn sẽ quan tâm vào ngày hôm sau khi bạn chỉ đang cố hiểu mã của mình làm gì.
7:21
Vì vậy, cuối cùng chúng ta sẽ tập trung vào phong cách, tính thẩm mỹ của mã mà bạn đang viết.
Tuy nhiên, ở đây có một giao diện mà nhiều người có thể chưa biết. Đó là cửa sổ terminal.
9:44
Và một cửa sổ terminal cung cấp cái được gọi là Giao diện Dòng lệnh hoặc CLI.
9:49
Và điều này trái ngược với Giao diện Người dùng Đồ họa hoặc GUI. Bây giờ, bạn và tôi hàng ngày đang sử dụng GUI trên điện thoại và máy tính của chúng ta.
9:57
Và GUI thực ra là đồ họa - vì vậy có menu, nút và biểu tượng. Và bạn thường sử dụng ngón tay hoặc touchpad hoặc chuột để tương tác với nó. Nhưng hóa ra nhiều lập trình viên - họ nói rằng hầu hết các lập trình viên, ít nhất là theo thời gian, thích sử dụng CLI, Giao diện Dòng lệnh, nơi bạn thực sự làm mọi thứ hơi phức tạp chỉ thông qua bàn phím.
10:20
Tại sao? Thì với việc sử dụng bàn phím, chỉ có nhiều tính năng được tích hợp vào hầu hết các máy tính.
10:26
Hóa ra, hầu hết chúng ta có thể gõ nhanh hơn là bạn có thể chỉ tay vào và nhấp chuột. Và vậy điều đó dẫn đến việc tiết kiệm thời gian hiệu quả theo thời gian.
10:32
Vì vậy, theo thời gian, bạn sẽ cảm thấy thoải mái sử dụng cửa sổ terminal này để làm những việc như biên dịch mã hoặc tạo chương trình của mình,
10:39
cũng như chạy nó. Ban đầu, bạn sẽ không có thói quen chỉ đôi lần nhấp chuột vào biểu tượng như chúng ta làm trong thế giới thực của chúng ta.
10:45
Bạn sẽ làm theo cách của lập trình viên. Tuy nhiên, điều đó không loại trừ việc thêm biểu tượng và khả năng nhấp chuột, v.v.
Và xa xa bên trái là cái gọi là Activity Bar,
11:09
và đây là nơi bạn nhận được rất nhiều menu và nút truyền thống. Vì vậy, VS Code tự cung cấp cho bạn cả GUI và CLI.
11:16
Nhưng chính trong CLI, cửa sổ đầu cuối, vùng dưới cùng của màn hình mà chúng ta thực sự sẽ nhập hầu hết các lệnh của mình.
11:22
Và nói chung trong lớp, tôi sẽ giấu tất cả những thứ đồ họa không mấy thú vị.
11:28
Vì vậy, như đã nói, hãy để tôi thực sự chuyển sang phiên bản trực tiếp của Mã VS. Và tôi thực sự đã ẩn trong Activity Bar.
11:34
Tôi thực sự đã ẩn File Explorer. Vì vậy, những gì tôi có ở đây để hiển thị là một khu vực thực sự lớn để viết mã và một cửa sổ đầu cuối thực sự lớn ở phía dưới.
code hello.c
make hello
./hello
Vì vậy, nếu tôi không mắc lỗi đánh máy nào, Enter, dường như không có gì xảy ra.
14:37
Và đó là một điều tốt. Hầu như luôn luôn, nếu không có gì xuất ra trên màn hình, thì bạn đã làm tốt. Bạn đã không phạm sai lầm nào.
14:43
Bạn đã không bị la mắng. Không có thông báo lỗi. Vì vậy, đây thực sự là một điều tốt.
tiêu chuẩn io: standard io
statement: printf(“Hello, world /n”);
escape sequence: /n
header file : tuyên bố chức năng tồn tại
Lưu ý rằng tài liệu của nó không nhất thiết phải thân thiện với người dùng.
33:52
Nhưng những gì chúng tôi có cho khóa học là phiên bản đơn giản hóa của tài liệu chính thức dành cho C tại URL này tại đây, manual.cs50.io.
34:01
Vì vậy, trong thế giới của C và các ngôn ngữ khác, có những thứ được gọi là trang thủ công. Và đây chỉ là tài liệu dựa trên văn bản
34:08
thành thật mà nói, nó thường được viết bằng một giọng văn mà bạn phải là một lập trình viên có kinh nghiệm mới hiểu được phần nào.
34:14
Vì vậy, những gì chúng tôi đã làm trong phiên bản này của cùng một tài liệu là chúng tôi đã nhập tất cả các tài liệu chính thức ban đầu,
34:20
nhưng chúng tôi đã thêm các bản dịch ít thoải mái hơn bằng tiếng Anh cho nhiều chức năng mà bạn có thể chỉ sử dụng trong lớp
34:26
để giúp đỡ bạn trên tàu.
Nhưng hóa ra tài liệu cuối cùng sẽ luôn là nguồn có thẩm quyền của bạn cho những câu hỏi như, tôi có thể làm gì,
35:16
và làm thế nào tôi có thể làm điều đó?
Hóa ra trong C, đầu ra thực sự là
35:28
khá dễ dàng, nói một cách tương đối, một khi bạn đã quen với tất cả các dấu ngoặc nhọn, dấu ngoặc đơn, dấu ngoặc kép, v.v.
35:34
Nhưng đầu vào là một chút khó khăn hơn. Và nếu bạn đã lập trình trước đó, thì việc nhập liệu không khó đến thế trong Python.
35:41
Nó không khó để làm trong Java. Điều đó khó thực hiện hơn trong C. Và chúng ta sẽ thấy lý do tại sao sau vài tuần nữa.
Vì vậy, trong C, khi bạn sử dụng một dấu bằng duy nhất,
38:58
điều đó có nghĩa là sao chép giá trị bên phải sang giá trị bên trái– từ phải sang trái.
Bây giờ, hãy để tôi đề xuất rằng một điều phổ biến trong lập trình là ngay khi chúng ta đưa ra quyết định về cách thiết kế một thứ gì đó,
48:57
chúng ta thường dồn mình vào một góc và hối tiếc về một quyết định. Có ai có thể nghĩ ra vấn đề phát sinh từ việc sử dụng %s làm trình giữ chỗ không
49:08
trong chuỗi này để printf? Điều gì có thể sai nếu chúng ta sử dụng phần trăm theo cách đặc biệt này?
49:14
KHÁN GIẢ: [KHÔNG NGHE ĐƯỢC] DAVID J. Malan: Vâng. Nếu bạn thực sự muốn nói, vì bất kỳ lý do kỳ lạ nào,
49:20
%s trên màn hình– hay thành thật mà nói, thậm chí chỉ một %. Nó chỉ ra rằng một dấu hiệu phần trăm được xử lý
49:25
đặc biệt bên trong chuỗi printf. Vậy giải pháp ở đây là gì?
49:31
Có nhiều kiểu giải pháp khác nhau cho những vấn đề như thế này. Nhưng giả sử bạn muốn nói, tôi có 100% chẳng hạn.
49:40
Hãy để tôi tiếp tục và thay đổi điều này hoàn toàn. Vì vậy, tôi đã đạt 100% trong bài kiểm tra của bạn hoặc bất cứ điều gì.
49:47
Được rồi, hãy để tôi tiếp tục và chạy chào, Enter. Được rồi, do đó, công cụ xác định chuyển đổi không hợp lệ.
49:52
Ý tôi là, tôi không biết điều này có nghĩa là gì, nhưng nó nhấn mạnh dấu phần trăm là có vấn đề. Chà, hóa ra con người nhiều năm trước đã quyết định, ugh, được rồi, chết tiệt.
50:00
Chúng tôi đã sử dụng %. Vâng, hai dấu hiệu phần trăm sẽ có nghĩa là một phần trăm, theo nghĩa đen.
Đây là một câu hỏi làm rõ hơn. Chính xác thì %s có nghĩa là gì?
50:52
DAVID J. Malan: Nó chỉ là một phần giữ chỗ. Nó được gọi là mã định dạng và nó chỉ có nghĩa thông thường là nhập một số giá trị
50:58
đây. Và printf– những người đã viết printf nhiều thập kỷ trước đã quyết định xử lý %s
51:04
đặc biệt. Tại sao? Chỉ vì. Họ cần một số giữ chỗ. Họ quyết định rằng, ồ, sẽ không có ai thực sự muốn gõ %s.
51:10
Và nếu có, họ chỉ có thể làm %%s. Vì vậy, họ quyết định triển khai printf theo cách mà họ có mã
51:17
phân tích bất kỳ văn bản nào xuất hiện, tìm kiếm %s, rồi bằng cách nào đó chèn các giá trị tiếp theo vào trình giữ chỗ đó.