Trong xã hội hiện đại, các kĩ năng về công nghệ đặc biệt là lập trình đang ngày càng trở nên quan trọng. Số lượng công việc liên quan đến lập trình gia tăng chóng mặt khiến cho nó trở thành môn học bắt buộc trên ghế nhà trường của nhiều quốc gia phát triển. Kể cả không làm về công nghệ thì code cũng là một cách tốt để luyện tư duy logic và tập thể dục cho não. Cá nhân mình viết bài này một phần do có khá nhiều bạn bè hỏi về cách học, và cũng một phần muốn giúp cho thế hệ trẻ Việt Nam có cách học đúng đắn và bền vững, tạo ra những sản phẩm công nghệ có giá trị cao thay vì chỉ đi gia công phần mềm như bây giờ.
Nơi luyện tập của những kĩ sư công nghệ hàng đầu thế giới

I. Đối tượng mà bài viết hướng đến

_ Những bạn có kiến thức cơ bản về lập trình, đã giải quyết được một số bài toán cơ bản, nắm vững cú pháp và muốn phát triển lâu dài trong thế giới công nghệ.
_ Các bạn học sinh sinh viên đang có nhiều thời gian rảnh, có thể luyện tập nhiều để tham gia các cuộc thi về lập trình và xây dựng một nền tảng vững chắc để phát triển sau này.
_ Những bạn đã lập trình nhiều năm và muốn apply việc ở các tập đoàn lớn ở trong lẫn ngoài nước, hoặc chỉ đơn giản là muốn mài giũa kĩ năng và tư duy.
Vậy cụ thể là chúng ta sẽ học kiểu gì? Câu trả lời đó là giải thuật (Problems Solving and Algorithm). Tại sao đây lại là cách học tối ưu và bền vững? Vì chúng ta sẽ được học cách tư duy, chứ không phải chỉ học cú pháp và Google Search bất kì vấn đề gì như nhiều lập trình viên hiện nay.
Mình đã nói chuyện với nhiều bạn tự học programming và nhiều bạn bị cuốn theo cách học Google knowledge–có vấn đề gì thì google–stackoverflows có câu trả lời sẵn. Cuối cùng thì chương trình cũng vẫn chạy, các bạn vẫn thấy hạnh phúc, nhưng lần sau gặp vấn đề khác các bạn không tự trả lời được. Cũng giống như hồi nhỏ ở trường học “How are you?” và trả lời “I’m fine, thank you”. Đến lúc người ta hỏi “How do you feel today?” thì không biết trả lời thế nào - Giang Phương Hoa

II. Tầm quan trọng của việc học giải thuật

Thuật toán (algorithm) nghe có vẻ đao to búa lớn, đọc định nghĩa cũng không hiểu gì hết trơn.
Trong toán học và khoa học máy tính, một thuật toán, còn gọi là giải thuật, là một tập hợp hữu hạn các hướng dẫn được xác định rõ ràng, có thể thực hiện được bằng máy tính, thường để giải quyết một lớp vấn đề hoặc để thực hiện một phép tính. Các thuật toán luôn rõ ràng và được sử dụng chỉ rõ việc thực hiện các phép tính, xử lý dữ liệu, suy luận tự động và các tác vụ khác. (Wikipedia)
Thực ra thuật toán rất đơn giản và gần gũi trong cuộc sống. Ngắn gọn thì nó là tập hợp các bước, thao tác để giải quyết một vấn đề gì đó. Giả sử bạn có một vấn đề cần giải quyết đó là xin việc, bạn sẽ phải thực hiện các bước như sau: 
Học thêm kĩ năng, bằng cấp -> Nộp CV cho nhà tuyển dụng -> Test và phỏng vấn -> Nếu thất bại thì quay lại bước 1
Đây là một ví dụ về "thuật toán xin việc" mà chắc hẳn ai cũng đã từng thực hiện. Nói ngắn gọn, giải thuật là việc giải quyết vấn đề bằng ngôn ngữ lập trình. Lợi ích của việc học giải thuật trong công việc thì nhiều vô kể:
_ Rèn luyện tư duy logic và tư duy giải quyết vấn đề, đây là những kĩ năng cực kì quan trọng trong lập trình
_ Có khả năng code tối ưu (chương trình chạy nhanh hơn) và clean (đoạn code gọn gàng, tinh tế, đọc phát là hiểu)
_ Cơ hội được vào làm các big tech company, vì họ rất thích hỏi về giải thuật
Dưới đây là một ví dụ ngắn từ series phim Silicon Valley về thuật toán tối ưu "quay tay cho 800 thằng con trai"
Ngắn gọn thì thuật toán này sẽ để cho 2 thằng con trai úp mặt vào nhau, và với 2 tay thì anh nhân vật chính sẽ quay tay được cho 4 thằng một lúc. Nhờ thế mà thời gian có thể giảm gần 4 lần so với chỉ quay tay cho từng người một =))

III. Giới thiệu về Leetcode

Đây là website tập hợp những câu hỏi phỏng vấn về giải thuật đến từ các công ty công nghệ lớn nhất trên thế giới, chủ yếu là từ Silicon Valley. Rất nhiều kỹ sư giỏi khi thi tuyển vào các công ty lớn đều lên đây để luyện tập. Đây là những minh chứng cho thấy việc luyện tập giải thuật ở Leetcode có mối quan hệ tương quan đến trình độ công nghệ của cả một quốc gia.
Lượt traffic của Leetcode 
Google Trend từ khóa "Leetcode"
Như chúng ta có thể thấy, traffic và lượt search về Leetcode chủ yếu đến từ các cường quốc về công nghệ như Trung Quốc, Mỹ hay Ấn Độ. Đặc biệt là Trung Quốc, cường quốc về công nghệ này cho thấy sự yêu thích đặc biệt với Leetcode, chưa kể việc công ty này còn tạo hẳn một trang Leetcode nữa dành riêng cho dân Trung Quốc và các nước nói tiếng Trung khác https://leetcode-cn.com/.

IV. Cách sử dụng Leetcode để tối ưu hóa quá trình học

Ở Việt Nam cũng đã có một vài người bày cách sử dụng Leetcode rồi, ví dụ như Yuh lập trình viên với YouTube Link hay The Brown Box với YouTube Link, nên mình sẽ không đi sâu vào giới thiệu, mà chỉ nói về cách học sao cho hiệu quả.
Các topic trên Leetcode
Đầu tiên, Leetcode sẽ chia ra thành rất nhiều topic dựa vào các dạng thuật toán và cấu trúc dữ liệu. Bạn chỉ nên làm những topic phù hợp với nhu cầu của bản thân. Gặp những topic mới chưa biết cách làm thì hãy sử dụng Google và YouTube tìm kiếm những bài hướng dẫn về chủ đề đó.
Ví dụ như mình muốn theo hướng Data Science thì chỉ cần làm những topic sau: Array, String, Math, Hash Table, Greedy, Sort, Two Pointer, Stack, Sliding Window. Rồi sau đó nếu có nhu cầu làm về một dạng nào khác thì sẽ làm thêm. Như hồi trước mình có học cả Graph để build game Pikachu Classic. Thuật toán của game này không thể tìm được trên mạng bởi vì chỉ có mỗi Việt Nam chơi, nên đành phải tự nghĩ. Nhờ việc giải Leetcode chủ đề Graph được tiếp xúc với nhiều bài toán hay trong topic tìm đường ngắn nhất, cuối cùng mình cũng có thể code được game Pikachu Classic theo phong cách Dota một cách tối ưu nhất


Bước tiếp theo là sort các bài tập dựa theo % Acceptance, chỉ số này sẽ giúp bạn chọn được bài tập để làm từ dễ đến khó, tránh việc gặp bài khó quá gây nản lòng. Và nếu không có mục tiêu đi thi đấu hay thi Google Facebook thì nên bỏ phần Hard, chỉ làm Easy với Medium là đủ.
Khi vào làm một bài nào đó thì phải xem 2 phần sau: số Like Dislike và phần Related Topics. Nếu một bài nào đó có số Dislike gấp 2 gấp 3 lần số Like và phần Related Topics nếu có sự xuất hiện của những topics mình chưa học thì cũng không nhất thiết phải làm.
Lúc làm bài thì có thể code trước trên Google Colab hoặc các IDE khác như Pycharm, VSC rồi copy paste vào Leetcode. Và sau khi submit thì nó sẽ có xếp hạng về mức độ tối ưu của đoạn code bạn viết (phần này hơi lởm nhưng cũng là một thông số để tham khảo để kiểm tra độ tối ưu của đoạn code) kèm theo code đã submit của các coder khác được xếp hạng dựa theo mức độ tối ưu, bạn nên tham khảo code của nửa trên bảng xếp hạng
Vậy code như thế nào là tối ưu? Điều này liên quan đến Big O Notation và sau đây là video để các bạn tham khảo.

Ngoài ra khi giải thuật toán thì bạn còn cần phải luyện kĩ năng viết code một cách clean. Đây là một kĩ năng cực kì quan trọng, để tránh sự ức chế của sếp, đồng nghiệp hay thậm chí là bản thân khi đọc lại đoạn code mình viết. Bạn có thể search trên Google hoặc YouTube để biết rõ hơn, ngắn gọn thì code clean là code ngắn gọn, dễ hiểu, tư duy logic được thể hiện rành mạch, không quá dài cũng không quá ngắn. Phần này cũng có thể tham khảo từ bọn submit đứng top, cứ nhìn code đứa nào thấy ngắn gọn dễ hiểu sướng cả con mắt thì học theo :)). Ngoài ra thì có thể vào mục Discussion để tham khảo.
Đây là một ví dụ vui từ series phim Silicon Valley về anh nhân vật chính là CEO của một big tech firm nhưng do code không tối ưu nên bị đem ra làm trò cười :))

Hãy học cách viết code tối ưu và clean, tránh rơi vào trường hợp bị cười chê như anh chàng CEO ở trên. Tiện thể thì mình cũng strongly recommend series phim này. Theo ý kiến cá nhân thì đây là series phim must-watch cho những ai đang làm công việc có liên quan đến công nghệ hoặc start-up :))
Bonus thêm video của anh Phạm Huy Hoàng - Toidicodedao

Kết bài

Trên đây là bài hướng dẫn của mình để nâng cao trình độ code một cách tối ưu và khoa học trên Leetcode. Tất nhiên là có khá nhiều website khác tương tự, bạn có thể luyện trên bất cứ trang nào hợp với mình, nhưng về quy tắc cốt lõi để học tối ưu thì có thể tham khảo từ bài viết của mình. Ở Việt Nam có website https://codelearn.io/ của FPT để luyện giải thuật khá dễ tiếp cận, các bạn có thể tham khảo nếu trình độ tiếng Anh và code đang hạn chế. Ngoài ra thì Leetcode cũng có tập hợp các câu phỏng vấn về SQL của các big tech firm, những bạn nào muốn học để đi phỏng vấn các vị trí về Data thì có thể mua gói Premium để ôn luyện.

Link tham khảo:

Các bài viết khác của tác giả:
https://spiderum.com/nguoi-dung/khoilu95

Sắp tới mình sẽ viết thêm nhiều bài viết về khoa học dữ liệu, phân tích insight từ các bộ dữ liệu hay, và cả những chủ đề thú vị khác nữa. Nếu không muốn bỏ lỡ thì hãy follow mình nhé :))