Cs50 là gì

CS50 thật tuyệt vời. Tôi đọc rằng đây là khóa học phổ biến nhất ở Harvard. Những người thậm chí không chuyên về CS đăng ký tham gia khóa học. Trong khuôn viên trường, họ có áo phông, thức ăn miễn phí, một cuộc thi hackathon, v.v. Bạn không nhận được bất kỳ thứ gì trên edX, nhưng bạn nhận được những thứ sau: một IDE tuyệt vời được phát triển bởi CS50 TAs, một cộng đồng hỗ trợ trên reddit, stackoverflow, facebook, twitter, v.v., công cụ gỡ lỗi (debug50) và một công cụ để kiểm tra ngay xem giải pháp pset của bạn có đúng không (kiểm tra 50). Thậm chí còn có một chương trình truyền hình CS50 nhỏ vui nhộn với các tập dài 2 phút sau mỗi bài giảng. Tôi có thể tiếp tục. Bạn không cần phải ghi chú các bài giảng vì có một trang web có tất cả các ghi chú. Có các video ngắn được thực hiện bởi các kỹ thuật viên giải thích một số khái niệm chi tiết hơn. Có những hướng dẫn giúp bạn thiết lập các giải pháp pset.

Scratch và C - pset0 đến pset5

Pset0 có trong Scratch, một ngôn ngữ lập trình trực quan giúp bạn bắt đầu lập trình. 5 pset tiếp theo ở C, hoàn toàn ngược lại với Scratch. Nó là một ngôn ngữ lập trình cấp thấp. Bạn phải thực hiện quản lý bộ nhớ thủ công trong C. Rất nhiều thứ có vẻ như chúng phải dễ dàng (đặc biệt là sau khi sử dụng Udacity CS101 bằng Python), lại không. Bạn muốn thêm một phần tử vào một mảng? Ồ, điều đó thật dễ dàng, chỉ cần nối thêm. Cái gì đó sẽ hoạt động đúng không? Không. Bạn phải tạo một mảng mới bao gồm phần tử bổ sung đó trừ khi trước đó bạn đã cấp phát thêm bộ nhớ cho mảng ban đầu đó. Các khái niệm trở nên khá khó khăn, đặc biệt là trên pset C thứ 4 và 5. Con trỏ rất khó. Trees and Tries rất khó. Pset thử thách nhất và bổ ích nhất đối với tôi là pset C thứ 5, nơi bạn thực hiện một trình kiểm tra chính tả. Nghe có vẻ dễ dàng phải không? Bạn có một số loại từ điển, và nếu từ của bạn có trong từ điển, thì nó được viết đúng chính tả… Nhưng đây là C mà chúng ta đang nói đến. Bạn phải làm từ điển, bắt đầu với một tệp văn bản gồm nhiều từ… rất nhiều từ. Bạn không thể chỉ lặp qua tệp, điều đó sẽ mất quá nhiều thời gian. Bạn muốn chương trình của mình chạy nhanh. Các dấu thăng hoặc dấu thăng cho phép bạn tìm từ của mình trong từ điển trong khoảng thời gian cần thiết để lặp lại từng ký tự trong từ của bạn, chứ không phải số lượng từ trong từ điển của bạn. Khá gọn gàng, phải không? Đúng. Nhưng việc uốn nắn, phá bàn phím, khoét lỗ trên tường rất khó và tốn nhiều thời gian.

Python - pset6

Ngôn ngữ tiếp theo bạn học trong CS50 là Python. Và để cho bạn thấy việc học và sử dụng dễ dàng hơn bao nhiêu, họ yêu cầu bạn làm lại 3 pset đầu tiên bằng Python. Khi bạn mới nhìn vào nó, bạn nghĩ rằng nó sẽ mất mãi mãi, nhưng sau đó không mất nhiều thời gian và bạn ghét C và yêu Python. Bạn nghĩ, tuyệt vời, C thật tệ nhưng bây giờ tôi bắt đầu học Python, điều này sẽ trở nên dễ dàng! Sau đó bùng nổ.

Python và những thứ khác - pset7 và pset8

SQL, HTML, JavaScript.

CSS, JQuery, JSON.

Bootstrap, Django, Flask.

Tất cả những thứ này là gì? Đó là những ngôn ngữ? Khung là gì? Khuôn khổ là gì? Ahhh!

May mắn thay, bạn không phải xây dựng trang web từ đầu bằng mọi thứ tôi đã liệt kê ở trên. Vài pset tiếp theo liên quan đến việc hoàn thành các trang web được xây dựng một phần; tuy nhiên, nhìn vào mã bằng các ngôn ngữ và khuôn khổ mà bạn vừa mới học sơ qua là rất khó khăn. Nó giống như bắt đầu một bài luận ở trường trung học, hoặc một dự án ở trường đại học. Một nửa trận chiến chỉ mới bắt đầu. Một khi bạn bắt đầu và hiểu một khía cạnh của mã, bạn nhận ra nó có thể làm được, hãy bắt đầu một vai trò và bùng nổ 5 giờ trôi qua và bạn đang học và bắt kịp pset.

Pset7 là một ứng dụng giao dịch chứng khoán. Người dùng có thể đăng ký, đăng nhập, đăng xuất, mua kho, bán, tra cứu kho. Một khi bạn hoàn thành, bạn cảm thấy rất hoàn thành. Tôi (kinda) đã làm điều đó! Trước CS50, một trang web giao dịch chứng khoán dường như giống như một phép thuật. Bây giờ nó có vẻ khó khăn, và mặc dù tôi chắc chắn rằng còn nhiều điều hơn thế nữa khi có người dùng thực sự, nhưng ít nhất bây giờ bạn đã biết gần đúng những gì liên quan và nó hoạt động như thế nào.

Pset8 được gọi là “Mashup” và nó là một bản đồ Google Maps, nơi bạn có thể tìm kiếm một vị trí và bạn sẽ thấy 10 tin bài hàng đầu tại vị trí đó. Có rất nhiều JavaScript khó vì nó không đồng bộ. Mã không đồng bộ chỉ có nghĩa là một dòng mã có thể đưa ra yêu cầu và sau đó chờ phản hồi trong khi mã khác đang chạy ở nơi khác. Ngoài ra, đây là lần đầu tiên bạn tiếp xúc với lập trình chức năng. Rất nhiều hàm trong JavaScript lấy các hàm làm đầu vào hoặc trả về các hàm làm đầu ra có thể khiến bạn phải lặp lại. Điểm chính của tôi ở đây là nó khiến bạn suy nghĩ khác đi, buộc bạn phải phá bỏ xu hướng luôn suy nghĩ tuần tự. Tương tự như pset7, khi bạn đã hoàn thành pset8, bạn cảm thấy rất thành công vì bạn (kinda) đã xây dựng một ứng dụng web phức tạp, hữu ích!

Ôn tập

Bây giờ để xem xét của tôi và liệu CS50 có dành cho bạn hay không. Trước đây tôi đã nói rằng tôi nghĩ CS50 thật tuyệt vời. Nó giúp bạn hiểu nhiều khái niệm CS cốt lõi, và sau đó mang lại cho bạn sự tự tin để xây dựng các dự án thú vị. Nó rất khó và nhịp độ nhanh, nhưng nếu bạn gắn bó với nó, tôi nghĩ rằng nó sẽ được đền đáp. Khi tôi cố gắng giải thích nó cho sinh viên bootcamp, thật khó để nói rõ tại sao điều quan trọng là phải bắt đầu bằng C và học các khái niệm CS cốt lõi. Có lẽ tôi chỉ muốn nó có giá trị vì tôi đã lấy nó và thích nó. Lý do thực sự có lẽ là vì cả hai chúng tôi đều không đủ xa để thực sự biết đâu là cách tốt nhất.

Các sinh viên bootcamp phát triển web đang tham gia một khóa học về xây dựng dự án và tạo trang web. Họ đang chuẩn bị để ngay lập tức gia tăng giá trị cho một công ty. Trường phái tư tưởng khác tương tự như hệ thống giáo dục truyền thống. Bạn học các khái niệm cốt lõi và bạn sẽ có thể tiếp thu mọi thứ khác trong quá trình thực tập hoặc các dự án cá nhân. Là một người học tự học, bạn có cơ hội kiểm soát việc học của mình. Sẽ rất có lợi nếu bạn biết các khái niệm cốt lõi cho các cuộc phỏng vấn cũng như trong công việc và cho sự nghiệp lâu dài của bạn. Đây là lần tiếp xúc đầu tiên tuyệt vời, để sau này khi bạn nhìn thấy một số khái niệm này sẽ không cảm thấy quá xa lạ.

Nếu chúng tôi giả định rằng bạn cần hiểu các khái niệm cốt lõi, thì các khóa học giới thiệu cần có sự cân bằng giữa các khái niệm cốt lõi và yếu tố “WOW”. Nếu tất cả chúng ta đều là những người máy không có cảm xúc, thì tôi chắc chắn rằng tất cả các khóa học giới thiệu sẽ là những khái niệm cốt lõi mà không có dự án nào. Cho rằng chúng ta là con người chứ không phải rô bốt, nếu các khóa học giới thiệu đều là những khái niệm cốt lõi và không có dự án nào, thì mọi người sẽ né tránh vì cho rằng nó khô khan và nhàm chán. Nói chung tôi là kiểu người thích những khái niệm cốt lõi. Tôi không cần bắt đầu hành trình lập trình của mình bằng cách thực hiện một hướng dẫn để xây dựng một ứng dụng web ưa thích. Tôi muốn có được một nền tảng, biết rằng mặc dù nó có thể nhàm chán hoặc cũ kỹ, nhưng tôi sẵn sàng dành thời gian ngay bây giờ, để việc học các khái niệm khác sau này sẽ dễ dàng hơn và đến nhanh hơn. Sau khi nói tất cả những điều đó, tôi rất vui khi hoàn thành giao dịch chứng khoán và lập bản đồ các ứng dụng web. Ngoài ra, tôi chưa đề cập đến vấn đề này, nhưng David Malan là một diễn giả tuyệt vời, một trong những diễn giả hấp dẫn nhất mà tôi từng nghe. Mặc dù các bài giảng có thể kéo dài 2 giờ và họ có thể nói về các con trỏ và thử trong C, nhưng thời gian trôi qua và tôi đã tham gia toàn bộ thời gian.

Nếu tất cả những gì bạn muốn làm là phát triển web, không hơn không kém, thì CS50 có lẽ không hợp lý với bạn. Tôi chắc chắn rằng nó sẽ hữu ích, nhưng về mặt lợi tức đầu tư, tôi chắc chắn rằng bạn sẽ nhận được nhiều giá trị hơn khi bắt đầu với freeCodeCamp hoặc Colt Steele's Web Developer Bootcamp. Phải nói rằng, nếu loại công việc bạn đang tìm kiếm có các cuộc phỏng vấn liên quan đến HackerRank hoặc bảng trắng, thì đó là một câu chuyện khác. Nếu bạn muốn tìm hiểu các nguyên tắc cơ bản và bạn quyết tâm và có động lực để hoàn thành nó bất kể mất bao lâu, thì CS50 là dành cho bạn.

Hãy kiên trì làm bạn của bạn, và CS50 sẽ là bạn của bạn.

CS50 là khóa học nhập môn ngành học Khoa học máy tính của Đại học Havard, dành cho những “sinh viên” chưa có hoặc đã có kinh nghiệm học lập trình từ trước. Đây là một khóa học sơ cấp mà đứng đầu bởi giáo sư David J. Malan, khóa học này đã 14 năm tuổi rồi và năm nào cũng được làm mới và năm nào cũng được xếp hạng là lớp hot nhất nhì trường, thu hút không chỉ sinh viên Harvard mà còn các trường Ivy League khác như là Yale. Cực kỳ hấp dẫn.

Mục tiêu học của khóa này theo mình hiểu là: học tư duy theo hướng giải quyết vấn đề của máy móc, còn gọi là tư duy thuật toán, tư duy logic. Nó khá là đầy đủ kiến thức từ cấu trúc của máy tính, cách hoạt động của bộ nhớ, của hệ nhị phân… Tóm lại là từ nền tảng đi lên. Vì vậy mình rất thích và quyết định học.

Khóa này có đáng học không ? Có mất thời gian không? và Blog này là gì ?

Blog này là note ghi lại quá trình học của mình trên lớp CS50, nó cũng có thể là nơi mình brainstorm cũng như bàn luận các bài tập khó với các bạn nào cùng học. Thật ra bây giờ mình học đến tuần thứ 3 rồi và quyết định viết blog vì thấy khóa này quả thật rất hay nhưng cũng không dễ. Nhất là phần bài tập về nhà làm cho mình có cảm giác quay về học sinh cấp 3 vậy.

Để tham gia thì các bạn vào link: https://cs50.harvard.edu/x/2021

Học xong có Certificate đàng hoàng nhé, nhưng phải đạt trên 70 điểm, mà khó phết, bài tập về nhà ác kinh. Có 2 loại bài tập về nhà là:

là for those less comfortable : bài dễ, mình làm mất khoảng vài tiếng là xong bài này (cho đến tuần 3 là như vậy)

là for those more comfortable: Bài khó, bài này thì khó kinh. Thật sự là đọc hiểu đề nó đã là một vấn đề rồi chứ chưa nói đến chuyện giải.

Nhưng mà mỗi khi giải xong bài đều có cảm giác rất đã.

Cá nhân mình đến giờ này thấy xứng đáng bỏ thời gian học mặc dù là mất kha khá thời gian đấy. 1 tuần sẽ mất 3 buổi nghe để hiểu bài giảng (total 2 tiếng bài giảng), 1 buổi giải bài dễ mất tầm 3 tiếng và nếu làm bài khó thì mất ít nhất là 2 ngày.

Nó sẽ khó hơn nếu như vốn Tiếng Anh của bạn chưa tốt vì thầy giáo nói rất nhanh. Có subtitle nhưng là Tiếng Anh nốt.

Bạn sẽ học được gì?

– Hiểu biết rộng và sâu sắc về Khoa học máy tính và lập trình

– Học cách suy nghĩ một cách “thuật toán” và giải quyết các vấn đề lập trình một cách hiệu quả

– Được học những khái niệm như trừu tượng hóa, các thuật toán, các cấu trúc dữ liệu cơ bản, đóng gói, quản lý tài nguyên, bảo mật, phát triển web và phần mềm

– Làm quen với các ngôn ngữ lập trình C, PHP, Javascript + SQL, CSS, HTML. Mà đặc biệt là ngôn ngữ lập trình C.

– Tham gia một cộng đồng sôi động nhiệt tình gồm rất nhiều người ở mọi cấp độ kinh nghiệm

– Xây dựng phát triển và thuyết trình về bài tập lớn của bạn cho bạn bè của mình.

END