Bài đăng

Đang hiển thị bài đăng từ 2018

Hướng dẫn đăng ký khóa học trên Coursera và edX miễn phí

Hình ảnh
Chào các bạn, cũng sắp Tết rồi và chắc mọi người rất mong ngóng khoảng thời gian nghỉ Tết phía trước để bắt đầu kế hoạch "ăn-ngủ-chơi" của mình. Được nghỉ mấy tuần liền mà có vài việc cứ làm hoài cũng chán phải không? Sao chúng ta không tận dụng thời gian rảnh rỗi đó để học hỏi thêm một điều gì đó mới mẻ, tự nâng cấp kiến thức của bản thân trong khi mà không bị áp lực từ việc học tập hay đi làm. Nếu như bạn có ý định như vậy vào kỳ nghỉ này, hãy đọc bài viết này. Giới thiệu về Coursera và edX Cả edX và Coursera đều là nền tảng cung cấp các khóa học trực tuyến về nhiều lĩnh vực từ các trường đại học danh tiếng trên thế giới. Mục tiêu của cả hai tổ chức này đều giống nhau đó là mang kiến thức từ các trường đại học ra toàn thế giới, khiến chúng dễ dàng được tiếp cận bởi bất kỳ ai. Trong đó, Coursera được sáng lập bởi hai giáo sư Stanford là Andrew Ng và Daphne Koller vào năm 2012. Cũng vào tháng 5 năm đó, hai trường đại học danh tiếng thế giới là Harvard và M

Stack và Heap là gì? Phần 2: Heap

Hình ảnh
Ở phần trước chúng ta đã nói về Stack và những đặc điểm của vùng nhớ này. Nhưng do giới hạn về kích thước bộ nhớ có thể được lưu trữ trên Stack cũng như kích thước đó phải được xác định trước khi biên dịch chương trình, đâ gây một ràng buộc không nhỏ lên lập trình viên chúng ta. Từ đó, Heap ra đời để giải phóng chúng ta khỏi những giới hạn đó. Tuy nhiên, cái gì cũng có giá của nó, còn đó là gì thì các bạn cùng mình tìm hiểu trong bài này nhé. Heap Nếu Stack được coi như là một chồng đĩa được sắp xếp ngay ngắn và có thứ tự đàng hoàng, thì Heap hoàn toàn ngược lại. Vùng nhớ này giống như là một đống đĩa hổ lốn và bừa bãi, như có ai đó vừa làm đổ chồng đĩa của bạn rồi bỏ chạy để nguyên hiện trường vậy. Nhưng điều này là tốt, do vùng nhớ Heap mà máy tính cung cấp cho chương trình lớn hơn nhiều so với Stack, đồng thời chúng ta cũng có thể yêu cầu thêm nếu muốn. Heap không giới hạn kích thước bộ nhớ được cấp phát và cho phép ta làm điều đó trong khi chương trình đang chạy.

Stack và Heap là gì? Phần 1: Stack

Hình ảnh
Stack và Heap là hai vùng nhớ cơ bản trong một chương trình máy tính. Khi lập trình, chúng ta thường làm việc với chúng mà không hề hay biết. Hiểu được ưu nhược của từng vùng nhớ sẽ giúp ta kiểm soát chương trình hiệu quả hơn. Khi máy tính chạy một chương trình, chương trình đó sẽ được giao cho một vùng nhỏ trên RAM, ta gọi đó là vùng nhớ . Mỗi chương trình đều có 2 vùng nhớ mà ta cần quan tâm hơn cả đó là Stack và Heap. Stack Bạn có thể tưởng tượng Stack như một chồng đĩa. Khi ta muốn lấy một chiếc đĩa, ta chỉ cần lấy chiếc ở trên cùng và khi bắt đầu xếp chồng đĩa ấy, ta sẽ bắt đầu từ dưới lên. Ta gọi thứ tự xếp đĩa này là LIFO: L ast I n - F irst O ut. Chiếc đĩa nào được đặt vào cuối cùng sẽ được lấy ra đầu tiên. Ngược lại, chiếc đĩa được đặt vào đầu tiên sẽ được lấy ra cuối cùng Ta gọi LIFO là một kiểu cấu trúc dữ liệu. Những dữ liệu của ta ở vùng nhớ Stack cũng được quản lý một cách tương tự. Bây giờ có thể bạn vẫn chưa hình dung được và để mình có thể nói sâu h

Thuật toán tính lũy thừa nhanh. Giải thích một cách đơn giản

Hình ảnh
Khi được yêu cầu viết một hàm tính lũy thừa. Bạn sẽ làm như thế nào? Đáp án khá đơn giản phải không, chỉ với một vòng lặp for  thì có thể giải quyết tất cả. Nhưng như vậy liệu đã tối ưu chưa? Gần đây mình có xem qua một vài chương của cuốn Nhập môn lập trình  và tìm thấy một vài điều thú vị. Trong đó, có phương pháp tính lũy thừa nhanh mà mình muốn chia sẻ lại. Cuốn sách Nhập môn Lập trình Phương pháp thông thường Với đề bài trên, cách làm dễ nhất là: Để dễ dàng thử độ hiệu quả của thuật toán, mình dùng kiểu dữ liệu int64_t  tức kiểu số nguyên sử dụng 64 bit ( 8 byte ) để chứa dữ liệu và kiểu long tức kiểu số nguyên sử dụng 32 bit ( 4 byte ) để chứa dữ liệu. Nếu các bạn đã biết về phân tích độ phức tạp của thuật toán thì độ phức tạp của thuật toán trên là O(n) , có nghĩa là nếu n càng lớn thì thời gian tính toán xong của ta càng lâu. Nếu các bạn cho hàm trên chạy với n = 1 000 000 000  (1 tỷ cho bạn nào lười đếm). Máy mình chạy mất xấp xỉ 8  giây. Đây là một thời g

Tham trị, Tham chiếu và Con trỏ

Hình ảnh
Trong lập trình, tham trị, tham chiếu và con trỏ là ba phương thức khác nhau để truyền dữ liệu trong toàn bộ chương trình. Nắm được chắc chắn những khái niệm này và sử dụng một cách thuần thục sẽ là bàn đạp vững chắc đến trên con đường trở thành lập trình viên giỏi. Ở bài viết này, mình sẽ giải thích ba khái niệm này một cách dễ hiểu nhất kèm theo những ví dụ cụ thể. Mình sẽ dùng C++ cho những ví dụ minh họa trong bài Giới thiệu Khi sử dụng hàm (function) trong lập trình. Ta có quyền lựa chọn có truyền tham số cho hàm hay không. Ngoài việc xác định bao những tham số phù hợp cho hàm, một việc quan trọng cần phải cân nhắc nữa đó là phương pháp truyền tham số đó. Chúng ta có ba phương pháp:  Tham trị Tham chiếu Con trỏ Tham trị Tham trị là cách được sử dụng phổ biến trong lập trình. Tham trị chỉ đơn giản là sao chép giá trị được đưa vào. Như bạn có thể thấy trong hình minh họa, hai biến "Tham số truyền vào" và "Biến số trong hàm" tuy có

Singularity - Liệu trí tuệ nhân tạo sẽ cướp hết việc làm của con người... hay còn tệ hơn?

Hình ảnh
Khoảng vài tháng trước, có một tựa game mới được ra mắt đã nổi lên rất nhanh đó là Detroit:Become Human . Detroit lấy bối cảnh về thế giới tương lai, khi con người bắt đầu chung sống với những người máy thông minh (hay còn gọi là các Android). Cốt truyện của game xoay quanh quá trình những Android bị con người phân biệt đối xử dần nổi lên đấu tranh đòi quyền bình đẳng. Thú thật, cốt truyện, gameplay và hình ảnh của Detroit đều rất tốt và sâu sắc. Tôi đã có một khoảng thời gian thú vị với nó. Mặt khác, viễn cảnh được vẽ ra trong đó khiến tôi ít nhiều cũng phải suy nghĩ cho câu hỏi. Trong tương lai, AI sẽ là gì đối với chúng ta? Connor-một trong ba nhân vật chính trong Detroit: Becoming Human Giả sử rằng... à không, chắc chắn một ngày, con người sẽ có đủ khả năng tạo ra những người máy thông minh như trong trò chơi. Lúc đó, liệu con người có đủ tỉnh táo và thông suốt để có thể có cuộc sống với một chủng loài mới ngang hàng hoặc có thể còn thông minh hơn chúng ta? Tô

Các ngôn ngữ lập trình tiêu biểu hiện nay

Hình ảnh
Thời xa xưa, ngôn ngữ lập trình với số lượng rất ít ỏi khiến sự lựa chọn của các lập trình viên thật dễ dàng. Nhưng hiện nay, số lượng ấy dường như đang tăng lên rất nhanh, mỗi ngôn ngữ lập trình cung cấp một tính năng riêng cho người sử dụng. Vì thế, việc chọn ngôn ngữ lập trình nào để học là một trong những quyết định trọng yếu mà lập trình viên cần phải đưa ra để có thể dễ dàng đạt được mục tiêu mà mình nhắm tới. Nắm được điều đó, tác giả xin cung cấp cho các bạn kiến thức của tác giả về những ngôn ngữ lập trình được cá nhân cho là nổi bật trong thời đại hiện nay. Trước khi vào bài Trước khi chúng ta bắt đầu nói về những ngôn ngữ lập trình, mình xin lưu ý các bạn vài điều: Ngôn ngữ lập trình chỉ là một công cụ  . Vì thế, đừng quá chú trọng vào việc ngôn ngữ A mạnh mẽ hay phổ biến hơn ngôn ngữ B cũng như thứ tự liệt kê các ngôn ngữ lập trình của mình. Hãy sáng suốt và chọn ngôn ngữ phù hợp với bạn nhất. Đừng chỉ học một ngôn ngữ duy nhất. Đúng là việc chuyên nghiệp h

Tự học đang là một hình thức học mới và cách để có thể tự học hiệu quả

Hình ảnh
Xin chào các bạn. Vài ngày qua, sau vài cuộc trao đổi mình nhận thấy một điều rằng tự học vẫn còn là khái niệm mới mẻ đối với khá nhiều người. Có vài bạn đã bắt đầu tự học nhưng độ lớn của Internet khiến họ choáng ngợp vì nguồn thông tin thì nhiều nhưng chất lượng vẫn là một ẩn số. Hôm nay, mình xin chia sẻ với các bạn những kinh nghiệm mình có được thông qua việc tự học gần 2 năm của chính mình. Đa số những kiến thức mình có hiện nay đều là kết quả của quá trình này. Mong rằng bài viết sẽ cho các bạn những thông tin tham khảo hữu ích trong quá trình học tập của các bạn Tự học là gì? Tại sao cần phải tự học? " Tự học, tôi chắc chắn tin rằng, là hình thức học tập duy nhất " - Isaac Asimov Các bạn biết Twitter chứ? Founder của nó - Jack Dorsey - là một trong những self-taught programmer (dịch nôm na là lập trình viên từ việc tự học ) thành công nhất hiện nay. Hay Elon Musk, nhà sáng lập hai công ty Tesla và SpaceX cũng xuất thân là một người có khả năng tự