Một sinh viên ngoại thương có thể học lập trình không?

Có lẽ đối với một số người, việc theo đuổi ngành lập trình với một người ngoại đạo là điều không thể. Bản thân tôi lúc đầu cũng có những suy nghĩ như vậy và có sẵn định kiến trong đầu là đây là một ngành đặc thù, khô khan và cần nhiều đến toán chỉ có dân chuyên mới có thể làm được. Tuy nhiên sau khi trải qua quá trình gần một năm tìm tòi và tự học, quan điểm của tôi về ngành này đã thay đổi một cách rõ rệt. Một sinh viên kinh tế hoàn toàn có thể học lập trình nếu có đam mê và chịu tìm tòi, học hỏi.

Khoá học CS50 của Harvard khó hay dễ?

Mình là dân kinh tế, trước khi tham gia khóa Techmaster đã từng đi làm biên dịch được khoảng 2 năm và sau đó có làm freelance về mảng tiếng Anh. Sự tò mò về ngành lập trình của mình khởi nguồn từ khóa hoặc Computer Science 50 (CS50). Đầu nằm 2022, một lần khi tình cơ lướt web mình có đọc được bài giới thiệu về CS50 và lợi ích mà khóa học đó mang lại. Với bản tính tò mò sẵn có và mong muốn tìm hiểu xem Computer Science là gì, mình đã đăng ký học thử. CS50 là khóa học nhập môn về lập trình, được dạy offline cho sinh viên Harvard và được dạy online free cho tất cả mọi người có hứng thú với ngành này. Người học sẽ bắt đầu bằng Scratch và sau đó sẽ học và thực hành chủ yếu về ngôn ngữ C. Gồm 14 bài giảng trải giải các khái niệm cơ bản nhất của khoa học máy tính như trừu tượng hóa, giải thuật, cấu trúc dữ liệu, sự đóng gói, quản lý tài nguyên, và bảo mật, học viên có thể tiếp cận được những kiến thức sơ khai nhất về lập trình. Đối với bản thân tôi, đây là những kiến thức nền móng giúp xây dựng khả năng giải quyết vấn đề và tư duy phản biện sau này.

Sau mỗi lecture là một problem set với độ khó tăng dần. Điểm đặc biệt của những problem set này là những câu hỏi sẽ được thiết kế rất thực tiễn, liên quan đối nhiều vấn đề trong cuộc sống giúp học viên thấy được ứng dụng thường nhật của lập trình. Một trong những problem set tôi thấy khó nhất là Tideman. Câu hỏi yêu cầu viết thuật toán tìm ra ứng cử viên trúng cử dựa trên số phiếu bầu của cử tri. Để giải quyết được bài toán này, ta cần chia vấn đề thành nhiều phần nhỏ hơn và phải giải quyết từng phần nhỏ đó một cách tuần tự. Tuy nhiên, nếu bug xuất hiện trong một phần nhỏ nào đó cũng có thể khiến cho thuật toán bị sai và phải sửa lại. Ngoài ra còn một số problem set rất thực tế, liên quan đến việc xử lý pixel của ảnh. Nhiệm vụ của học viên là phải dùng vòng lặp trên mảng hai chiều (tượng trưng cho pixel của ảnh) và thay đổi màu sắc của từng pixel dựa trên yêu cầu của đề bài về hiệu ứng cần tạo ra (blur, black-and-white, rotate). Nếu hoàn thành được bài này, chúng ta sẽ hiểu hơn cách máy tính và AI xử lý ảnh và video như thế nào.

Sau 13 bài giảng, học viên phải làm một project lớn để nộp, thuyết trình, tổng kết và kết thúc khóa học. Tuy CS50 là một khóa học tương đối khó theo đối với người chưa biết gì về lập trình và ngôn ngữ sử dụng hoàn toàn là tiếng Anh, cảm giác thích thú khi giải được 1 problem set sau vài ngày ngồi suy nghĩ thật khó quên và chứng chỉ do Đại học Harvard cấp có thể được xem là phần thưởng đền đáp cho những nỗ lực đó.
cs50-certifi

Tôi đã luyện LeetCode như thế nào?

Sau khi có nền tảng về lập trình, mình bắt đầu tìm hiểu những khái niệm cơ bản về cấu trúc dữ liệu và giải thuật (CTDL & GT) trên LeetCode. Đây là trang web miễn phí dành cho những người muốn tự học và làm bài tập về CTDL & GT. Đây có thể được xem là nơi trau dồi kĩ năng cho những ai muốn vượt qua bài Technical Interview một cách suôn sẽ. Với hơn 1900 câu hỏi trải dài từ nhiều khái niệm lập trình (Array, Linked List, Binary Tree, Hash Map, String, Recursion, Dynamic Programming), các kỹ sư phần mềm có thể luyện tập lĩnh vực mình còn yếu. Điểm mạnh của LeetCode là hỗ trợ nhiều ngôn ngữ lập trình, giúp loại bỏ rào cản cho các bạn mới học chỉ biết một ngôn ngữ. Đối với tôi, những câu hỏi Easy với %Acceptance (tỉ lệ chấp nhận) cao có thể làm được. Tuy nhiên khi %Acceptance giảm đi, có nhiều câu Easy thật sự cần tư duy tốt mới có thể giải quyết vấn đề. Khi sang mức Medium, nhiều câu hỏi trở nên khó nhằn hơn và cần áp dụng nhiều cấu trúc dữ liệu khác nhau mới giải được. Hầu hêt các cấu Medium không thể giải được bằng Brute Force vì giới hạn thời gian và lập trình viên cần tìm ra được lời giản có Time Complexity thấp nhất thì mới được chấp nhận.

Việc bắt đầu trên LeetCode có thể là khó khăn với nhiều người. Tôi nghĩ rằng nên bắt đầu bằng độ khó Easy trước và tập trung vào một chủ đề (ví dụ như Array). Khi kĩ năng giải quyết vấn đề được cải thiện, ta có thể chuyển sang khái niệm lập trình khác hoặc tăng độ khó lên. Việc luyện tập thuật toán trên LeetCode có thể tạo ra áp lực. Tôi cũng đã từng cảm thấy chán nản và muốn bỏ cuộc không giải quyết được một câu Medium trong mấy ngày liền. Tuy nhiên điều chúng ta cần làm là thay vì chán nản, hãy tham gia vào các diễn đàn như StackOverflow để tìm hiểu khái niệm lập trình liên quan câu hỏi đó và từ từ nghiên cứu. Nếu gặp một câu hỏi quá khó và bạn hoàn toàn không có ý niệm nào để bắt đầu, tôi sẽ xem cách mọi người thảo luận và dựa trên gợi ý đó để phát triển câu trả lời của mình. Mặc dù khó khăn và áp lực là vậy, cảm giác sung sướng khi tìm được câu trả lời hay lời giải tối ưu hơn lời giải cũ là điều mà tôi không thể nào quên khi tham gia LeetCode.

Leetcode

Hành trình học lập trình Web ở Techmaster

Hoàn thành xong khóa học CS50, tôi quyết định đăng ký khóa học Web Development - ReactJS của Techmaster để học song song cùng với việc tập luyện trên LeetCode. Điểm đặc biệt của khóa học là học viên sẽ được làm hai đồ án: web tĩnh làm bằng Javascript thuần và một đồ án bằng ReactJS. Điều này giúp học viên hiểu sâu hơn về cơ chế vận hành của Javascript và tư duy component hóa trong React. Mặc dù học online, giảng viên vẫn hỗ trợ tôi rất nhiệt tình từ kiến thức trong bài giải tới việc giải đáp những thắc mắc của tôi trong việc làm đồ án. Sự hỗ trợ của giảng viên tại Techmaster trở nên vô cùng quan trọng đối với những học viên một đẩy nhanh tiến độ học lập trình, đặc biệt khi React đòi hỏi khả năng tư duy lập trình và logic cực kỳ lớn. Khi hoàn thành xong đồ án, giảng viên cũng giúp học viên review lại đồ án của mình, góp ý những thiếu sót và đưa ra hướng cải thiện, cách fix bug để giúp học viên bảo vệ đồ án một cách thành công nhất. Những kiến thức, trải nghiệm tại Techmaster sẽ là hành trang không thể thiếu để học viên áp dụng khi làm việc sau này.

Giáo trình tại Techmaster được thiết kế bài bản, logic, bài giảng trước sẽ là nền móng để học tiếp bài giảng sau. Cũng chính vì lẽ đó, học viên nào bỏ học một hôm sẽ gặp khó khăn trong việc hiểu bài ở các bài giảng tiếp theo. Lợi ích lớn nhất khi theo học tại Techmaster là học viên sẽ được tiếp cận những framework và công nghệ mới nhất trong lĩnh vực phát triển web. Bài giảng được thiết kế theo từng module nhỏ, xây dựng theo mức độ khó tăng dần (HTML-CSS-Javascript-React), giúp người học có nền tảng chắc chắn khi chuyển sang học React. Sau mỗi buổi học, học viên được giao bài tập thực hành để củng cố và mở rộng kiến thức về nội dung mình vừa học.

Kế hoạch đi tìm việc của tôi trong năm 2022

Sau khi kết thúc khóa học trực tuyến tại Techmaster, tôi muốn apply vào vị trí Front-end Developer và làm việc với Javascript, React, Redux. Tôi mong muốn kiến thức của mình được áp dụng trong thực tế và đây cũng là cách để kiểm tra liệu những kiến thức mình trau dồi trong một năm qua có đáp ứng được yêu cầu của nhà tuyển dụng hay không.