Hello World! This is CS50
Hello chào các bạn ^^ Tiêu đề bài này là câu nói đã ghi sâu vào tâm thức của mình, trong suốt những tháng ngày học cái khóa học...
Hello chào các bạn ^^
Tiêu đề bài này là câu nói đã ghi sâu vào tâm thức của mình, trong suốt những tháng ngày học cái khóa học mà mình sắp review cho các bạn đây. Sâu đến nỗi giọng điệu, âm sắc của giáo sư David J.Malan, giảng viên của khóa học này đang hiện lên rất rõ trong đầu mình ngay lúc viết dòng này.
Kể chuyện tí, ngược về hồi sinh viên, mình vốn chả phải sinh viên ngành công nghệ thông tin (IT) hay khoa học máy tính (CS) gì cả, mình không nhớ cơ duyên cụ thể như nào, chỉ nhớ hình như có đọc vài bài ca ngợi cái ngành này thì phải, có lẽ đâu đó trên Spiderum cũng nên. Thế là mình mở laptop, vào W3School đọc tutorial và làm một lều bài tập về HTML, CSS. Ô hóa ra cũng dễ nhỉ, lại thú vị phết, ra lệnh máy tính hiển thị ra mấy cái theo ý mình, "tầm này chả mấy chốc mình lại thành chuyên gia IT cũng nên". Nhưng không, khi dấn thân vào ngôn ngữ lập trình thực sự, JavaScript, mình mới biết mình đã ảo tưởng như thế nào :v Thực sự có quá nhiều thứ mà mình không hiểu tại sao lại như vậy, hoặc mình hiểu sai hoàn toàn, và khi vọc vành viết code thử, code mình hoạt động theo một cách khác hẳn với mình nghĩ. Điển hình là hàm swap 2 số a và b, nếu bạn là người học lập trình thì có lẽ bạn sẽ hiểu ^^ , còn nếu không thì bạn cứ đơn giản hiểu theo ý của mình ở câu trước nha, ví dụ chỉ để thêm sinh động. Nói chung là mình thiếu căn bản trầm trọng. Nên mình đã tạm dừng việc học lập trình một thời gian, cho đến khi mình vô tình lướt thấy thông tin về dự án Kiến học (hình như cũng từ Spiderum thì phải). Và Kiến học có giới thiệu CS50, và đó là lần đầu tiên mình tiếp xúc với khóa học tuyệt vời này ^^
var a = 1; var b = 2; function swap(x, y) { var temp; temp = x; x = y; y = temp; } swap(a, b); console.log(a, b);
Output: 1, 2
Đây là đoạn code đã làm mình đau khổ, hehe chắc không ít bạn sẽ cười ^^
Vậy, CS50 dạy gì? Tên đầy đủ của nó là CS50 - Introduction to the intellectual enterprises of Computer science and the art of programming. Với thời lượng trung bình khoảng 8-9 tuần, có thể nhiều hoặc ít hơn 1, 2 tuần (cái này mình chưa check :v), mỗi tuần một bài giảng. Xuyên suốt khóa học sẽ là các problem set (pset), và cuối cùng kết thúc bằng 1 final project. Khá đúng với cái tên, CS50 dạy cho mình những khái niệm căn bản nhất của khoa học máy tính, mình sẽ liệt kê ra đây những thứ theo mình là trọng yếu :3
+ Mở đầu, với bài giảng về hệ nhị phân, ASCII, RGB... chúng ta có thể hiểu được khái quát cách máy tính lưu trữ thông tin và thể hiện thông tin, có bao giờ bạn thắc mắc máy tính xử lí như thế nào để có được đống chữ bạn đang đọc này, hay mấy hình hot girl trên facebook, instagram lưu trữ ra làm sao? ^^. Với Scratch, một ngôn ngữ lập trình cho trẻ em, CS50 giúp mình tiếp xúc căn bản với những khái niệm điển hình trong lập trình nói riêng và giải quyết vấn đề nói chung: vòng lặp, điều kiện, biến, hàm..., một cách rất trực quan. Sau đó, những khái niệm này được khéo léo dịch chuyển sang và thể hiện trong C, một ngôn ngữ lập trình thực sự.
+ Tiếp theo, CS50 giới thiệu về thuật toán và cấu trúc dữ liệu. Đây là phần mình thích nhất của khóa học này, khai sáng cho mình rất nhiều. CS50 dành 1 bài giảng để nói về thuật toán với các khái niệm cơ bản, mình rất ấn tượng với hình ảnh giáo sư Malan xé đôi cuốn danh bạ trong bài giảng để nói về thuật toán ^^. Khóa học cũng giải thích các thuật toán sắp xếp, tìm kiếm cơ bản như: bubble sort, merge sort, selection sort, binary search... C là ngôn ngữ bạn sẽ được học trong phần lớn thời lượng của CS50. Với C, và phong thái giảng dạy tuyệt với cùng ví dụ khá dễ hiểu, giáo sư Malan giảng giải một cách xuất sắc về các cấu trúc dữ liệu cơ bản: array, linked list, hash table... Phần này cũng có 1 bài giảng về bộ nhớ máy tính (Memory), giúp mình hiểu máy tính sử dụng RAM như thế nào khi chương trình hoạt động, hiểu về call stack, về đệ quy (recursion),... khi học và hiểu mấy cái này mình thực sự rất phê ^^ Mình thích phần này vì nó đã giúp mình hiểu rõ các vấn đề từng khiến mình đau khổ khi tự học Javascript, hồi đó mình hoàn toàn méo hiểu các khái niệm như passing by value, passing by reference, hoàn toàn không biết đến cách mà một array được tổ chức trên RAM, hoàn toàn không hiểu primitive type là cái mọe gì luôn ^^.
+ Phần tiếp theo và cũng là phần kết (lưu ý là mình chia các phần theo chủ quan của mình nha), phần này theo mình thấy thì thường thay đổi qua từng năm, bổ sung thêm bớt vài thứ. Nhưng cơ bản bạn sẽ được học về cơ sơ dữ liệu cơ bản, cùng với đó là 1 ngôn ngữ lập trình bậc cao. Cơ sở dữ liệu, dạy bạn về cách tổ chức xây dựng, lưu trữ, cũng như truy vấn cơ bản về dữ liệu, cụ thể bạn sẽ học về xi khồ SQL ^^. Bạn sẽ hiểu được, cơ bản làm sao mà mấy ông nội Facebook, Google lưu trữ được hàng đống thông tin người dùng, hay bạn sẽ có khả năng tưởng tượng ra, mấy bài viết trên Spiderum, phân theo danh mục khác nhau, được tổ chức sắp xếp như thế nào trong cơ sở dữ liệu. Tiếp theo là ngôn ngữ mới, mình thấy thì các năm gần đây sẽ dạy về Python, trước đó hình như là PHP. Phần này sẽ giúp bạn hiểu được cơ bản giá trị của việc "don't reinvent the wheel". Bạn sẽ hiểu được C là rất tốt, nhưng Python, với cách xây dựng của nó, có thể khiến vấn đề của bạn được giải quyết đơn giản mà không tốn quá nhiều công sức để viết code. Khi bạn cần hiểu được cách bộ nhớ hoạt động gắn liền với các cấu trúc dữ liệu cũng như thuật toán, C thực sự tuyệt vời, và nếu ai hỏi mình nên học những thứ đó với ngôn ngữ nào, mĩnh không ngần ngại trả lời là C ^^, nhưng khi bạn đã nắm được những khái niệm đó, và cần làm những sản phẩm mà không phải "đau khổ" với sự phức tạp khi dùng C, thì Python hay những ngôn ngữ tương đồng khác, được phát triển hỗ trợ bạn xử lí với bộ nhớ, bạn không còn phải quan tâm đến bộ nhớ quá nhiều trong mỗi dòng code như với C, nên là lựa chọn ưu tiên. Tiếp sau đó, CS50 đi đến hồi kết với những khái niệm cơ bản về các lĩnh vực chuyên sâu khác trong IT, như bảo mật, AI, phát triển game, ứng dụng Android hoặc IOS, phát triển website,... Nhưng mình sẽ không đi vào chi tiết, vì mình nghĩ nó không còn là cơ bản nữa rồi ^^
Như giáo sư Malan có nói trong 1 bài giảng:
"Learn to become comfortable being uncomfortable"
Đây là thứ mình nghĩ quan trọng nhất mà CS50 dạy - nhận thức được rằng sự khó khăn, chướng ngại vật (uncomfortable) là điều đương nhiên khi bạn muốn làm, muốn học một thứ gì đó; từ đó có một thái độ đúng đắn (comfortable), chấp nhận giới hạn bản thân, và biết giữ lửa để tiếp tục những gì mình thích, mặc những thứ khó khăn khó chịu khó chiều khó chơi. Mình nhớ những ngày đầu mới JavaScript như mình kể ở trên, có khi mình đọc 1 tutorial, thì phải mở thêm mười mấy tab để đọc về những khái niệm liên quan, những key words mình không hiểu. Sau này khi thực sự bắt đầu học CS50, việc này cũng lặp lại. Nhưng mình thấy rõ được nhận thức của mình ở 2 khoảng thời gian là khác nhau. Có lẽ câu nói của giáo sư Malan tác động đến mình khá nhiều. Sau này khi tự học sâu hơn về IT, mỗi khi gặp vấn đề mình không hiểu, mình chỉ đơn giản tự nhắc bản thân, đó là điều quá bình thường, không nên vì thế mà nản chí, cứ từ từ tìm hiểu, rồi sẽ hiểu thôi ^^.
Học CS50 như thế nào? CS50 là khóa học của đại học Harvard, thường được giảng dạy trực tiếp trong cho sinh viên vào mùa thu và mùa xuân, nếu mình nhớ không nhầm. Vậy làm sao một đứa không học Harvard như mình có thể học? Bởi vì video bài giảng CS50 được cung cấp miễn phí trên các nền tảng Youtube, Edx. Bạn có thể tìm hiểu thông tin đăng kí và bắt đầu bất cứ khi nào. CS50 công cấp các công cụ cho phép bạn gửi bài tập và được chấp điểm rõ ràng, cũng như theo dõ tiến trình làm bài của bản thân. Lợi điểm của việc học online là CS50 không giới hạn thời gian hoàn thành khóa học, và kết quả của bạn sẽ được giữ nguyên khi khóa học bước qua năm mới. Mình bắt đầu khóa học này đâu đó vào 2016-2017, submit pset đầu tiên vào tháng 9-2019 và mình mới hoàn thành nó vào đầu năm 2021, quả là một tốc độ sấm sét :3. Sau mỗi bài giảng, CS50 thưỡng sẽ có 1 pset, dạng như bài tập để bạn làm. Bên cạnh đó tài nguyên khóa học khá phong phú, với những video tóm lược kiến thức, giải thích kĩ hơn, hoặc hướng dẫn giải bài tập được thức hiện bởi các trợ giảng. Bạn nên tận dụng vì chúng giải thích cụ thể những gì có trong bài giảng chính, cộng thêm lượng kiến thức bổ sung rất ấn tượng. Nói chung, việc học CS50 như thế nào là do bạn hoàn toàn quyết định, CS50 hỗ trợ tối đa. Nhưng bạn cần chú tâm vào việc tự học, và nên tự tìm hiểu thêm, để có thể lắp ráp kiến thức với nhau, tạo nên một bức tranh dễ nắm bắt.
CS50 dành cho ai? Mọi người. Tất cả mọi người đều có thể học khóa học này, nếu bạn muốn có những hiểu biết căn bản về khoa học máy tính. Đặc biệt với những bạn tự học về CS - IT, mình nghĩ khóa học này là sự bắt đầu khá phù hợp.
Bạn có những gì sau khi học CS50? Nếu bạn học chú tâm, mình nghĩ bạn sẽ có rất nhiều. Những kiến thức nền tảng về khoa học máy tính sẽ giúp bạn dễ dàng hơn khi muốn học chuyên sâu một ngôn ngữ, công nghệ nào đó. Bạn cũng sẽ có cái nhìn tổng quan về các mảng chính trong nhóm ngành này. Hơn nữa, mình hi vọng các bạn sẽ đạt được những tiến bộ trong mindset, trong khả năng tự học, trong connect với cộng đồng (CS50 có một cộng đồng người học khá là đông đảo),... Và khá là thú vị, nếu bạn hoàn thành tất cả các Pset và Final Project của CS50, bạn sẽ nhận được Certificate của khóa học này, đem đi lòe chơi ^^
Và không nên kì vọng gì sau khi học CS50? CS50 theo mình là tuyệt, nhưng bạn đừng hi vọng, CS50 sẽ khiến bạn trở nên thuần thục các ngôn ngữ, công cụ mà nó dùng để giảng dạy như C, Python. Và nếu chỉ học CS50 và muốn xin việc trong ngành IT, câu trả lời là không. Để làm được điều đó bạn phải học thêm rất nhiều ^^
Điều gì sau CS50? Như bất kì một bộ phim hay nào, khi đi tới kết thúc, cũng sẽ là cảm giác nuối tiếc ^^. Thực sự mình đã cảm thấy như vậy ^^. Nhưng đừng lo lắng, nếu bạn muốn gặp lại những người đã đồng hành cùng bạn suốt CS50, hoặc bạn muốn theo đuổi con đường này, bạn có thể tiếp tục những khóa học nâng cao đi sâu vào từng mảng, mình nghĩ chúng khá tốt ^^. Các khóa học bạn có thể tiếp tục sau CS50:
+ CS50 Web Programming with Python and JavaScript
+ CS50's Mobile App Development with React Native
+ CS50's Introduction to Artificial Intelligence with Python
Hoặc bạn có thể theo học bất cứ khóa học nào khác bạn muốn, mình nghĩ CS50 cho bạn đủ kiến thức, kĩ năng để làm điều đó.
Mình vừa kết thúc CS50, mình gắn bó với CS50 khá lâu (do tốc độ sấm sét quá :v), mình nhớ những đêm thức khuya tập tành gõ từng dòng code, những ngày chạy Grab cầm theo giấy bút vẽ nguệch ngoạc mấy cái Trie, hay Linked list để giải quyết Speller, hay là cả trăm vòng tròn để giải quyết Tideman. Cảm giác chú tâm để làm điều gì đó thực sự hấp dẫn theo cách khó tả. Cảm xúc của mình bây giờ, và với những gì mình trải qua với CS50, mình muốn viết bài review này, hi vọng giúp được gì đó cho các bạn đã hoặc chưa biết về khóa học này, cho những bạn muốn tự học IT mà chưa biết bắt đầu từ đâu, hoặc đơn giản cho bạn, nếu bạn muốn học hỏi một thứ gì mới mẻ. Cũng là để CS50 mang đến kiến thức, thái độ tích cực cho nhiều người hơn, như cách nó đã giúp mình ^^.
HELLO WORLD, THIS WAS CS50
P/S: Gần đây Spiderum mở bán DevUP, nếu có thể, mình nghĩ bạn nên mua về đọc nha, ủng hộ tác giả và Spiderum ^^. Do mình khá là gà nên bài viết có sai sót thì hi vọng mấy bạn góp ý để mình hoàn thiện hen. Cảm ơn các bạn đã đọc!
----------------------------
Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất