kiến thức Cùng học CS50 - khoá học của Harvard dành cho những ai bắt đầu từ con số 0

Rồ Trung Lập

Senior Member
Chào các thím, mình là 1 thanh niên sinh năm 96 tốt nghiệp ngành cơ khí :D

Tuy nhiên ngay từ khi đi học thì đây là định hướng của gia đình nên mình không thích và cũng không xác định sẽ theo ngành. Bươn chải vài năm làm đủ mọi việc từ chạy grab, bưng bê tiệc cưới, MMO, airdrop, chơi coin, order hàng nước ngoài, kinh doanh tuy nhiên kết quả cuối cùng - buồn là - không tích luỹ được gì.

Nhiều thím sẽ kiểu "lại 1 thằng loser cùng đường tìm đến lập trình"

Cũng đúng, nhưng từ hồi cấp 2 mình cũng đã từng mày mò nhiều thứ liên quan tới máy tính, đa số là làm theo tutorial tiếng anh như đa số các thanh niên hồi đó: lập forum, làm wap sites, mod java cho Nokia...v.v.

Khi thi ĐH mình để nguyện vọng 1 là CNTT, nhưng gia đình mình - có ông ngoại là 1 thợ cơ khí tay nghề cao và khá nổi tiếng tại tỉnh - bảo thôi cứ để nguyện vọng 1 là Cơ khí đi, nếu trượt thì xuống CNTT như ý con. Nhưng đời, về cơ bản là trớ trêu, mình lại đỗ ngành Cơ khí. Lúc đầu cũng tặc lưỡi kiểu "ừ thôi cứ học sau về tiếp quản lại xưởng, cơ khí thì chả chết đc". Càng học càng không hiểu, và vì không thích nên không học, cứ thế như 1 vòng lặp vô tận cho tới khi mình ra trường mà trong đầu vẫn không có chữ gì về cơ khí cả :)

Mình cũng nghĩ nhiều về việc tự học CNTT và apply fresher vào 1 công ty nào đó. Nhưng mà sự lười biếng cứ kéo lùi mình lại, phần cũng vì thu nhập từ MMO và coin những năm ấy đủ để mình làm 1 tháng và ăn chơi cả năm còn lại.

Cuối cùng mình cũng đã bắt tay vào được để bắt đầu 1 quãng đường mới trong đời. Đó là học khoá CS50

Nói ngắn gọn, tl;dr:
  • CS50 là khoá học dài 12 tuần nhưng tuỳ tốc độ của bạn mà bạn thích học dài hơn hay ngắn hơn đều được
  • CS50 miễn phí
  • CS50 rất cơ bản dành cho những ai muốn học nhưng chưa biết bắt đầu từ đâu
  • CS50 có cộng đồng học viên đông đảo trên toàn thế giới nên rất dễ trao đổi và bàn luận về bài tập
  • CS50 sẽ trao cho bạn 1 chứng chỉ từ Harvard nếu bạn hoàn thành khoá học

CS50 là một khóa học cực kỳ căn bản, dành cho những người chưa biết gì về lập trình. Đừng lo nếu bạn chưa biết gì bởi vì hai phần ba số người học CS50 đều chưa từng học về lập trình hay khoa học máy tính trước đây.

1647257137245.png


Quan trọng hơn: CS50 hoàn toàn miễn phí!

Thay vì phải bỏ một số tiền cho trung tâm mà không biết rằng mình có khả năng học hay không, thì hãy thử học CS50. Bạn sẽ biết liệu bạn có phù hợp với ngành hay không? Liệu bạn có đủ khả năng để theo ngành hay không? Liệu bạn có đủ thông minh để giải quyết các vấn đề mà lập trình hay khoa học máy tính yêu cầu hay không?

1647257155392.png


"Điều quan trọng ở khoá học này có lẽ không phải là khi bạn kết thúc khoá học thì bạn sẽ giỏi hay dốt hơn bạn cùng học, mà là bạn sẽ tiến xa hơn bao nhiêu so với khi bạn bắt đầu."

Điều quan trọng nhất là số lượng học viên đông đảo đến từ tất cả các quốc gia trên thế giới, đồng thời cũng có cộng đồng hỗ trợ và hướng dẫn giải bài tập cũng như giải đáp các thắc mắc của học viên. Có lẽ đây là lý do quan trọng nhất, bởi vì khi bắt đầu học nếu không có ai cùng học hay hướng dẫn thì sẽ rất dễ rơi vào ngõ cụt, khi gặp khó khăn rất nản chí. Nên đây chính là yếu tố then chốt khi mình chọn học CS50.

1647257373775.png


Đây là những gì mà bạn sẽ học, 12 tuần là 1 kì học của sinh viên Harvard. Thực tế chúng ta học online nên tốc độ có thể nhanh hơn hay chậm hơn là tuỳ thuộc vào bạn.

1647257515358.png


Đây là giáo sư David J. Malan, người sẽ đi cùng chúng ta trong 12 tuần học. Việc học khoá này hấp dẫn thêm 1 điểm là tạo cảm giác rất hype, kiểu như đang tham gia 1 lớp học y như thật chứ không như kiểu phải xem 1 ai đó thuyết trình ê a dài lê thê


6bb8f3e6-6bd9-4a5e-8a24-81b3be4d23fd.png


Ảnh minh hoạ certificate của CS50 nếu bạn hoàn thành khoá học và hoàn thành tất cả các yêu cầu


Okay, vậy bắt đầu từ đâu?
 

Attachments

  • 1647257314336.png
    1647257314336.png
    34.8 KB · Views: 449
Đây là trang chủ của khoá CS50x: https://cs50.harvard.edu/x/2022/

Giải thích: CS50 là tên khoá học tại trường Harvard
CS50x là khoá học online, miễn phí trên trang web https://www.edx.org/

2 khoá học này về cơ bản là 1. Tuy nhiên CS50 dành cho sinh viên Harvard sẽ có thêm quiz và bài test

Bước 1: tạo 1 tài khoản edX tại https://www.edx.org/course/introduction-computer-science-harvardx-cs50x và chọn Enroll this course

Bước 2: giờ chúng ta không cần quan tâm edX nữa vì đa số edX và trang chủ khoá CS50x (ở ngay trên đầu kia) là giống nhau. Vào trang chủ dễ nhìn và dễ thao tác hơn

Bước 3: ở bên trái của trang chủ khoá học, bắt đầu học từ Week 0: Scratch :D

ĐỪNG QUÊN Youtube đã có sẵn phụ đề, và các bạn có thể bật dịch tự động lên nha!

Nhưng nếu tiếng anh của bạn không tới mức không hiểu gì, thì mình khuyến khích nghe tiếng Anh để tiện nâng cao trình độ luôn :D

1647258965827.png


Ngoài ra, các bạn sẽ cần tạo tài khoản Github để sử dụng codespace (codespace là môi trường lập trình trên đám mây, bạn không cần cài đặt Visual Studio Code mà có thể dùng luôn trình duyệt như Chrome)


Hãy tham gia các cộng đồng CS50, mình đánh giá cá nhân thì Discord: https://discord.gg/cs50 là nơi sôi động nhất, gần như có người giải đáp tức thì các thắc mắc. Tuy nhiên hãy nhớ là mọi người chỉ trao đổi bằng tiếng Anh.


Giải thích một số thuật ngữ cơ bản:

Lecture:
là video bài giảng của giáo sư, trong Lecture, họ đã tách toàn bộ các phần của video bài giảng bao gồm:
  • audio (file âm thanh)
  • notes (nội dung bài giảng nhưng dưới dạng chữ và hình)
  • slides (các slide trên màn hình khi giáo sư đang giảng)
  • source code (mã nguồn của các chương trình mà giáo sư gõ khi giảng, có thể hiểu dễ hơn là 1 bản copy lại những gì giáo sư code)
  • subtitles (file phụ đề)
  • transcript (như phụ đề, nhưng để sẵn ở dạng file text, nếu ai không nghe kịp thì tải về dùng google dịch để theo dõi)
Problem Set x (0, 1, 2...v.v): là bài tập tương ứng của bài giảng

NẾU bạn chỉ muốn học qua, không có nhu cầu lấy chứng chỉ, không cần hoàn thành problem set

Nếu bạn muốn chứng chỉ như trên #1, thì yêu cầu tối thiểu là hoàn thành tất cả problem set và lab kèm với 1 final project. Và điểm của các bài tập này phải tối thiểu 70%.

Sang tới Week 1: C, có thêm 1 mục nữa là Shorts, đây là video tóm tắt và mở rộng thêm các nội dung đã học trong lecture, khuyến khích nên xem sau khi xem xong Lecture.

Từ đây các bạn sẽ gặp 2 dạng problem set: less comfortable more comfortable. Nếu các bạn đã có nền tảng lập trình có thể chọn more, còn nếu cơ bản thì chọn less.

Ở tuần 1 thì sẽ phải giải bài Mario (vẽ kim tự tháp bằng code C). Mình đã phải ngồi 3 ngày nghĩ cách giải bài mario-more vì tưởng mình giỏi :D chuyển qua mario-less thì dễ hơn (chỉ phải làm 1 bên, và có thêm ví dụ và gợi ý)

Tuần 1 này thì mình nghĩ nhiều người sẽ nản, vò đầu bứt tai vì không giải được bài Mario, mình đưa ra suy nghĩ đầu tiên cần phải viết ra giấy ý tưởng, sau đó bắt đầu code. Nếu nhắm khó quá thì mở video walkthrough trên Youtube khá nhiều. Tuy nhiên đừng chỉ copy, mà xem cách giải quyết vấn đề, sau đó tự gõ lại code theo ý hiểu của bản thân. Mình mất 2 ngày mới giải quyết đc bài Mario-less.

Sang tới Week 2: Arrays, có thêm mục Lab 2. "Phòng thí nghiệm" giống như 1 bài tập, nhưng thay vì bắt bạn tự giải, phòng thí nghiệm dạy bạn cách để xử lý, giống như hoá học vậy.

Nếu có bất kì thắc mắc gì, hãy comment tại topic này, hoặc đặt câu hỏi trong discord CS50 :D
 
Last edited:
học mỗi khoá cs50 trên edx trong 1 tuần thế là thành dev
kieu2.png


via theNEXTvoz for iPhone
Cs50 trên edx của đh harvard
Programming Fundamental của đh duke trên Coursera
Siêng siêng viết cái financial aid thì đc cái chứng chỉ free.
Người ta làm được thì mình làm được. Dù là thiên tài đi nữa cũng cần 10 năm mới nổi tiếng, người ta thông minh tài giỏi thì giải bài toán đó trong 2 tiếng, thím ko giỏi thì làm trong 1 ngày. Luôn trau dồi bản thân để có kinh nghiệm thì lần sau sẽ nhanh lên.
Trầm cảm thì inbox em có thể trò chuyện cho yêu đời lên nè. :)

via theNEXTvoz for iPhone

Mời anh xem khoá CS50 rất nổi tiếng của Havard xem họ dạy ngôn ngữ gì đầu tiên và con trỏ ở bài thứ mấy.

Nhân tiện, anh nào muốn bắt đầu học lập trình thì nên bắt đầu với CS50 là tốt nhất :rolleyes:

mới bắt đầu thì mình nghĩ nên học thử mấy khóa kiểu CS50 của havard hoặc CS101 của MIT để lấy cái mindset cơ bản (nhất là cs50).

https://cs50.harvard.edu/x/2021/
https://ocw.mit.edu/courses/electri...nce-and-programming-fall-2008/video-lectures/

Một số comment phổ biến về CS50

Và các thím hãy nhớ rằng CS50 là cái nền tảng, nền móng để sau này phát triển lên thôi
 
Chia sẻ cá nhân:

Week 0: Scratch

Ở tuần đầu tiên, mình học cảm thấy khá dễ, vì bắt đầu đi vào các khái niệm cơ bản.

Mình gợi ý mọi người nên lấy giấy bút ra note lại các ý chính, hoặc note lại các cách giải quyết vấn đề trong bài giảng.

Ngôn ngữ lập trình này mặc dù nhìn khá trẻ con, tuy nhiên lại rất dễ bắt đầu vì chỉ kéo thả. Cái cần phát triển đó là tư duy lập trình.

Problem set đầu tiên sẽ là sử dụng Scratch để tạo ra 1 chương trình theo yêu cầu

1647271514251.png


Cách hoạt động: Bóng sẽ liên tục di chuyển theo tốc độ -5 đi xuống, nếu chạm vào batter (người đánh bóng) thì bóng sẽ đổi hướng -90 độ và bay ra viền. Nếu bóng chạm vào viền hoặc bóng chạm vào line màu đỏ thì bóng sẽ di chuyển lên toạ độ X(ngẫu nhiên);Y(trên cùng)

Bấm nút mũi tên trái-phải để di chuyển batter

Vì lần đầu làm nên mình cũng làm sơ sài để đạt đủ requirements thôi chứ không làm chi tiết

Week 1: C

Bắt đầu khó, lúc nghe giảng thì ok hiểu, nhưng bắt đầu bị sự phức tạp của C làm rối trí

Không còn những block kéo thả sẵn như Scratch nữa

Có 2 dạng problem set: less comfortable more comfortable. Nếu các bạn đã có nền tảng lập trình có thể chọn more, còn nếu cơ bản thì chọn less. Mình bị ảo tưởng nên lúc đầu tưởng mình ở mức more :pudency: .

Tuần này mình đánh giá bài Mario khá khó, dễ gây nản. Yêu cầu của bài này nếu chọn more là vẽ ra 1 kim tự tháp cân 2 bên và không có bất kì gợi ý nào. Còn less thì bạn sẽ in bên phải trước (dễ hơn) sau đó in bên trái và nộp bài. Mình đã phải ngồi 3 ngày nghĩ cách giải bài mario-more vì tưởng mình giỏi :D chuyển qua mario-less thì dễ hơn (chỉ phải làm 1 bên, và có thêm ví dụ và gợi ý để làm)

Tuần 1 này thì mình nghĩ nhiều người sẽ nản, vò đầu bứt tai vì không giải được bài Mario, mình đưa ra suy nghĩ đầu tiên cần phải viết ra giấy ý tưởng (pseudo code), sau đó bắt đầu code.

Nếu nhắm khó quá thì mở video walkthrough trên Youtube khá nhiều. Tuy nhiên đừng chỉ copy, mà xem cách giải quyết vấn đề, viết ra giấy, sau đó tự gõ lại code theo ý hiểu của bản thân. Mình mất 2 ngày mới giải quyết đc bài Mario-less.

  • Yêu cầu user nhập số tầng
  • Sử dụng vòng lặp for để xuống số dòng đúng bằng số tầng, tức là từ tầng 0 tới tầng 7 (nếu user nhập 8 tầng)
  • Đồng thời cũng sử dụng for in ra số dấu # tăng dần, tịnh tiến theo đúng số dòng. Tức là tầng 0 sẽ có 1 dấu #, tầng 1 có 2 dấu #..v.v.v

Đối với bên trái của kim tự tháp thì cũng như trên, nhưng có dấu cách ở đầu để căn lề, số dấu cách này sẽ bằng [số tầng - 1] ở tầng 0, sau đó giảm dần, tịnh tiến theo lần xuống dòng. Số # tăng dần, số dấu cách giảm dần

Tuy nhiên hãy nhớ Academy honesty, tức là sự trung thực trong học thuật. Bạn phải tự cam kết với bản thân sẽ không gian lận, copy, sử dụng sự trợ giúp quá chi tiết của người khác. Người khác chỉ nên gợi ý bạn ý tưởng để giải, không phải giải hộ. Cái này vì học online nên dựa vào bản thân là chính.

Vậy là mình chỉ mất 2 ngày là hoàn thành 2 tuần đầu tiên.

Week 2: Arrays

Bắt đầu nhiều hơn những khái niệm khó hiểu

Bài caesar là điển hình cho việc nếu bạn không kiểm soát và hiểu được data type thì nó sẽ lỗi lòi loz

Ở bài caesar, đoạn xoay vòng chữ cái (rotate) họ gợi ý sử dụng phép toán modulo.

Phép toán modulo là phép toán tính lấy phần dư

Tức là nếu 26/26 = 0, không dư, nhưng 28/26 thì dư 2, 50/25 = 0, 52/25 = 2

Ví dụ 'a' = 97, 'z' = 122. Tức là array size = 26

Hãy ví dụ là user nhập chữ z, xoay vòng int n = 5

(122 + 5)%26 = 23

Vừa thiếu, vừa sai, cái thiếu ở đây là phép toán trên chỉ tìm ra được phần dư, tức là nếu chạm tới cuối array thì nó sẽ chạy tiếp bao nhiêu lần, chứ không trả lại được ký tự tương ứng

Vậy ta phải cho nó biết nếu vòng về ban đầu thì "ban đầu" là gì

"Ban đầu" chính là ký tự 'a', khởi đầu của array

97 + (122+5)%26 = 120

Đủ, nhưng không hề đúng, nếu rotate n = 5 thì từ 'z' phải quay về (a1 b2 c3 d4 e5) 'e' =(101). 120 ở đây là ký tự 'x'. Vẫn sai.

Sai ở chỗ 122 kia đơn giản là số ASCII của chữ 'z', không phải VỊ TRÍ của chữ 'z' trong array này.

Array size = 26, thì chữ 'z' nằm ở vị trí 26

Phép toán kia phải đưa số 122 trở thành số tương ứng với vị trí chữ 'z' trong array => 122 - 97 = 25

Lúc đầu mình nghĩ mãi ủa tại thế nào mà nó lại là 25, phải là 26 chứ?

97 + (122 - 97 + 5)%26

Xong mình chợt nhận ra

25 % 26 = 25

GIẢ SỬ mà rotate = 0, thì phép tính trên sẽ là

97 + (122 - 97 + 0)%26 = 122 😂

Đúng, nhưng vẫn đ hiểu gì. Nhưng nói chung là do nó tính từ 0 tới 25, nên 25 là đúng vị trí thứ 26 rồi



FAQ: I don't understand the Caesar formula and how the modulo 26 fits in. Why do we use that?

The caesar cipher formula

(p + k) % 26

works on the premise that p (the plain text character) has a value of 0 - 25 (representing a - z or A - Z)

So if your plain char is 'x', that would have a value of 23, and if your key was 2, then the ciphered char would be

(23 + 2) % 26
( 25 ) % 26
= 25 'z'

If the key was 10 (23 + 10) % 26
( 33 ) % 26
= 7 'h'

The modulo works here in the same way it works on an analog clock, which is % 12 because if it's 10 o'clock and you had 4 hours, you don't get 14 o'clock, you get 14%12 = 2 o'clock

So your code should take the plainchar, convert it from the ASCII range down to a value from 0 to 25 (simply through subtraction), add the key, modulo the result by 26, and then convert that back up to the ASCII range for printing.

Chốt lại, thuật toán Caesar sẽ rotate char c int n, nếu vượt array size cho phép thì nó sẽ trả lại phần dư. Phần dư đó nói cho ta biết char c tiến đi bao nhiêu. Nếu vượt quá 26 (vd int = 500) thì nó vẫn chỉ trả số dư vì chia hết 26.

Khi quy đổi sang ASCII thì ta phải cộng kết quả phần dư với chữ cái đầu tiên để xác định index của kết quả.

Bên trong thuật toán caesar cũng cần phải trừ chữ cái đầu tiên vào vì input của thuật toán là ASCII number (chuyển sang index trong array)

https://cs50.harvard.edu/x/2022/psets/2/caesar/#background
 
Last edited:
hehe em cũng đang ĐH ngành cơ khí năm 3 , cũng chia sẻ tình trạng của em luôn. :big_smile:
  • Do có điều kiện hơn thím chút là vẫn còn học ở trường trong 1.5 năm nửa nên ngoài các môn của ngành cơ khí , em tự do đăng ký các môn core của CNTT như Kỹ thuật lập trình ( dạy về C++ ở mức nhập môn , dừng ở linked list và OOP ) , Toán rời rạc , CTDL GT, OOP , CSDL nhồi nhét trong 1.5 năm cuối cùng , chưa kể thời gian còn lại còn đi thực tập và làm đồ án tốt nghiệp ngành cơ khí + học ngoại ngữ Anh/ Nhật ( tiếng Anh em đọc hiểu tốt với TOEIC 800 thi hồi 2019 còn tiếng Nhật đang cày lên N3 để có bằng và giao tiếp tạm vào thời điểm tốt nghiệp tháng 11/2023 )
  • Thực sự giờ em cũng mông lung không biết học ngành nào là hợp với mình , nên em cứ tận dụng thử hết cả 2 ngành hiện tại xem có thể gắn bó được với hướng nào , và tất nhiên cũng có đường lui nếu theo CNTT không được thì quay về làm cơ khí vì ít ra có tấm bằng ĐH cũng xin được việc làm đúng ngành , không bị thất nghiệp .
 
hehe em cũng đang ĐH ngành cơ khí năm 3 , cũng chia sẻ tình trạng của em luôn. :big_smile:
  • Do có điều kiện hơn thím chút là vẫn còn học ở trường trong 1.5 năm nửa nên ngoài các môn của ngành cơ khí , em tự do đăng ký các môn core của CNTT như Kỹ thuật lập trình ( dạy về C++ ở mức nhập môn , dừng ở linked list và OOP ) , Toán rời rạc , CTDL GT, OOP , CSDL nhồi nhét trong 1.5 năm cuối cùng , chưa kể thời gian còn lại còn đi thực tập và làm đồ án tốt nghiệp ngành cơ khí + học ngoại ngữ Anh/ Nhật ( tiếng Anh em đọc hiểu tốt với TOEIC 800 thi hồi 2019 còn tiếng Nhật đang cày lên N3 để có bằng và giao tiếp tạm vào thời điểm tốt nghiệp tháng 11/2023 )
  • Thực sự giờ em cũng mông lung không biết học ngành nào là hợp với mình , nên em cứ tận dụng thử hết cả 2 ngành hiện tại xem có thể gắn bó được với hướng nào , và tất nhiên cũng có đường lui nếu theo CNTT không được thì quay về làm cơ khí vì ít ra có tấm bằng ĐH cũng xin được việc làm đúng ngành , không bị thất nghiệp .
Thím đăng ký học đc chung với sinh viên CNTT cũng là điểm tốt rồi. Đợt vừa rồi mình cũng nhắn hỏi thử vài em SV khoá dưới cho mình vào học zoom cùng mà tụi nó chả thèm đọc tin nhắn :D

Khoá CS50 này hơi thiếu về OOP nên chắc sau khoá này cần học thêm về OOP

Thím còn trẻ nên đừng ngại thử. Miễn là đừng để phí hoài thời gian là đc :D thấy mấy năm qua mình lông bông mà tiếc thời gian quá
 
học xong được cấp chứng chỉ hay phải đóng phí mới có chứng chỉ vậy thím :smile:
Học xong, điểm OK thì sẽ tự động có chứng chỉ như #1 nhé thím. Ảnh ở #1 là chứng chỉ free. Được in ra bởi team CS50. Nói chung nó mang tính vinh dự chứ không mang tính xác thực thông tin.

Còn chứng chỉ nộp tiền trên edX là chứng chỉ đc cấp từ HarvardX, có đi kèm là thím phải KYC thông tin cá nhân trên edX để họ liên kết certification vô. Mình nghĩ nếu như bên tuyển dụng hay gì đó mà họ check lại thì sẽ thấy certification đó có thông tin chứng mình là thím đã hoàn thành khoá học.

Cá nhân mình đánh giá lấy cái free cũng đc rồi :D nếu sau này muốn lấy bản xịn thì có thể nộp tiền sau để lấy (hoàn thành hết rồi vẫn có thể nộp tiền để lấy bản xịn)

Bản xịn là nó như này nè:

RDT_20220315_0526121665498418893947232.png
 
khóa này mình học mấy năm trước, giờ đã mình chuyển ngành sang IT rồi, nhưng mình làm automation tester chứ k làm dev.
 
mấy thím cho mình hỏi cái certificate này đi học xong apply đi làm được k nhỉ ,
Theo như nhiều thím chia sẻ thì hên xui

Cái này có thể rèn cho thím trả lời đc một số câu hỏi về thuật toán nhưng sẽ cần thêm, ví dụ project nào đó thím tự tay làm, chứ cái chứng chỉ này bản thân nó chắc không so được với bằng cấp trung tâm hoặc bằng ĐH
 
mình muốn học cái này để củng cố nền tảng nhưng công việc lại quá bận rộn , mình có thể học từ từ được không hay là bắt buộc phải hoàn thành khoá học trong một thời gian nhất định nhỉ ? :D
 
Back
Top