Hê lô các bạn, nhân dịp mới mua con bàn phím mới, và có hứng chia sẻ nên mình viết bài này như một gợi ý cho những ai đang chưa biết làm gì để có thể tiếp cận lập trình. Bài viết chủ yếu dựa trên kinh nghiệm của mình và không phải là cách tiếp cận học thuật thuần túy.
Mình là một lập trình viên trái ngành, từ lúc tiếp xúc với lập trình tới nay đã gần 2 năm, tính ra không nhiều, và chắc chắn là không thể nào bằng được với những lập trình viên 'cao thủ' ngoài kia, he he.
Lần đầu tiên mình nghĩ về lập trình đó là khi tìm cách để quản lý đống file hợp đồng trong máy, cùng với danh sách của khác hàng. Sau khi xuất ngũ mình tìm được một công việc làm sale bản quyền sách, công việc chủ yếu là quản lý sản phẩm, cũng như hệ thống được lượng khách hàng của mình. Một điều mà mình rất bất tiện đó chính là việc mọi người sử dụng những cách thức lưu trữ và quản lý dữ liệu rất xưa cũ, như là file excel thuần túy (không query, functions,...), điều đó khiến cho việc truy xuất và tham khảo thông tin rất cực khổ. Vì vậy, mình thử suy nghĩ xem liệu còn cách nào giúp mình dễ dàng quản lý công việc hơn không. Mình bắt đầu tìm hiểu về những ứng dụng CRM sau khi vô tình bắt gặp được những tính năng hay ho của Gmail ( ví dụ như bạn có thể gửi hàng loạt thư cho khách hàng với những khuôn mẫu, và nội dung tùy vào từng người). Đại khái , CRM lúc ấy như giúp mình giác ngộ về thế giới khoa học công nghệ thông tin vũ bão ngoài kia, cho mình xem những thứ hay ho (tất nhiên là chưa là gì so với những gì mình biết bây giờ) mà máy tính và công nghệ làm được. Những tuần sau đó, mình tìm hiểu chung về Hubspot, Base,.. nói chung là những ứng dụng có thể giúp mình và công ty và chuẩn bị một bài demo cho các sếp, ngây thơ chưa. Dĩ nhiên là rất khó để thuyết phục mọi người thay đổi, hay nói hàn lâm là chuyển đổi số, đúng vậy, vì điều đó cần rất nhiều thời gian, công sức, đào tạo, tuyển dụng, phần mềm,...và khoản tiền không nhỏ, chứ không đơn giản chỉ là một bài demo.
Sau hơn 04 tháng làm việc tại đơn vị kinh doanh bản quyền sách thì mình quyết định nghỉ vì mình có cảm giác và niềm tin rằng công nghệ thông tin là một vùng đất hứa đầy thử thách. Lĩnh lương một cục tầm đâu đó hơn mươi triệu, cộng thêm với hai mươi triệu để dành, mình xin nghỉ việc, với không một kế hoạch cụ thể trong đầu. Nhân tiện chia sẻ với các bạn, nếu bạn muốn chuyển từ công việc hiện tại của mình sang lập trình (hay nghề khác), bạn nên có một kế hoạch thật cụ thể càng tốt, và quan trọng hơn cả là một khoản tài chính đủ cho bạn xoay sở trong ít nhất 6 tháng. Như trường hợp của mình, mình đã tiết kiệm nhiều nhất có thể để sống với hơn ba mươi triệu đó trong vòng 7 tháng, trước khi tìm được công việc đầu tiên.

Cuốn sách đầu tiên ?

Không như nhiều người trên mạng nói về việc chọn học gì đầu tiên khi tiếp cận lập trình, front-end hay back-end,...Điều đầu tiên mình nghĩ tới là nên đọc một cuốn sách, một cuốn sách cung cấp những điều cơ bản nhất. Mình cần nền tảng để rồi mới có thể xây dựng trên nó. Vậy là cuốn sách đầu tiên mà mình đọc là cuốn Head First: Java, lúc đấy mình chọn Java vì nhiều người nói rằng nó là một ngôn ngữ nền tảng, được dùng rất nhiều nơi, lâu đời, ông vua của OOP,... kiểu vậy. Nhưng thật ra sau này nhìn lại thì mình thấy lựa chọn này không phù hợp lắm, vì thật sự là Java rất khó, rất nặng tính lý thuyết. Với một người không học bài bản, thì không nên chọn Java, thay vào đó, chúng ta có thể chọn Python. Không phải vì mình thấy trend bây giờ là Data Science mà gợi ý các bạn Python, mà sự thật là mình thấy Python rất dễ hiểu, rất dễ thực hành, chỉ cần bật Terminal lên và chạy file là xong (không khổ như Java, phải tạo main() các thứ, compile các kiểu,...). Sau khi đọc xong cuốn sách đầu tiên thì mình thú thật là mình muốn bỏ cuộc luôn, khó quá mà. Thế nên, mình biết là mình chọn sai rồi. Nếu gặp cái khó quá thì các bạn nên làm gì ?
Đúng vậy, mình chọn một cuốn sách nào đó dễ hơn. Lựa chọn thứ 2 mình nhắm đến sau khi tham khảo các diễn đàn, cũng như cơ hội nghề nghiệp đó là Javascript. Javascript là ngôn ngữ sử dụng phổ biến trong việc phát triển Web, gần đây là cả mobile và server,...Nói chung Javascript rất ghê (với mình) vì nhiều cơ hội việc làm, và đặc biệt là nó dễ tiếp cận, dễ xin việc tại thời điểm đó (đến tận bây giờ). Thế nên mình lại tiếp tục đọc sách, tìm hiểu về hàng tá thứ liên quan đến web, một số cuốn sách mà mình đọc lúc đấy là Head First Javascript, Head First HTML,...mình đặc biệt yêu thích series sách của Head First, viết rất hay, dí dỏm và kiến thức rất căn cơ, mang tính học thuật. Bên cạnh việc đọc sách thì mình cũng phải tham khảo khá nhiều thứ trên google . Đó cũng là một kỹ năng quan trọng sau này trong nghề, hãy google trước khi đặt câu hỏi. Quay trở lại việc đọc, ngoài sách ra thì mình còn tìm thấy một viên ngọc thật sự cho những ai muốn tìm hiểu về mọi thứ liên quan đến Web - chính là MDN (Mozilla Developer Network). Ở đây cung cấp những bài viết từ chất tới chất hơn về cách mà mạng Internet hoạt động hoàn toàn miễn phí. Nó giúp mình khai sáng lần hai, đó là không có sự phân chia front-end hay back-end hay bất cứ điều gì khác giữa những mảng khác nhau của lập trình, hay nói rộng hơn là khoa học máy tính. Điều đó có nghĩa là, bạn cần nắm thức cơ bản, chứ không phải những công nghệ xây dựng trên nó, vì:
Một dev front-end hoàn toàn có thể làm back-end side, thậm chí là Mobile miễn là người ấy nắm chắc kiến thức cơ bản và ngôn ngữ mình đang dùng. Tổng kết lại ở giai đoạn đầu lập trình, hãy nắm chắc kiến thức cơ bản trước đã, đừng phân chia lĩnh vực - vì nó chỉ kìm hãm suy nghĩ và khả năng của bạn. Và việc tiếp thu kiến thức cần thời gian, bạn cũng cần phải đọc đủ nhiều (cho dù không hiểu được hết) để những kiến thức ấy đủ lớn mà kết nối lại với nhau.

Framework đầu tiên ?

Cho bạn nào chưa biết thì mình có thể giải thích Framework trong lập trình như này, ví dụ bạn mở một quán cà phê nhượng quyền của 2Land, bạn sẽ không phải đi làm những việc như mua bàn ghế, nguyên liệu, tập huấn nhân viên,...Tất cả những việc đó 2Land cung cấp cho bạn, bạn bỏ tiền thôi, và những việc ở trên đối với 2Land nó lặp đi lặp lại với mỗi khách hàng mới của họ. Nên, 2Land chuẩn hóa quy trình và bộ dịch vụ đó, cứ mỗi khách hàng mới là đem ra triển khai- rất chuyên nghiệp và tiết kiệm thời gian. Trong lập trình cũng thế, những đoạn code lặp đi lặp lại nhiều thường được chuẩn hóa thành một framework (ở mức thấp hơn là Library) cho nhiều lập trình viên khác cùng dùng (như tinh thần của open-source).
Và framework (cho Javascript) đầu tiên mình chọn học để làm Web là React ( he he, React thật ra không hẳn là framework đâu, nó chỉ là library thôi). Lúc ấy, có 3 anh lớn trên thị trường tuyển dụng là AngularJS, ReactJS, và VueJS. Angular thì thấy khó quá và cũng không tuyển nhiều, Vue thì còn ít hơn nữa. Suy đi tính lại thì React là ổn nhất, được chống lưng bởi Facebook. Nên là mình bắt đầu dấn thân vào React. Và lại bắt đầu quá trình học một thứ mới, mình tìm sách để học, nhưng không tài nào tìm được một tài liệu đầy đủ và dễ hiểu cả. Thế nên, chỉ còn nước quay lại với trang chủ và đọc thật kỹ thông tin trên đấy, sau đó thực hành với ứng dụng TO-DO (một ứng dụng siêu điển hình, xuất hiện rất nhiều trong những bài hướng dẫn của bất kỳ framework nào). Sau này khi đi làm rồi, mình vẫn lên trang chủ của React để đọc lại những chỗ cần tham khảo, và đảm bảo với các bạn rằng, tài liệu (documentation) của React trên trang chủ của họ là đầy đủ và chính xác nhất. Một bài học cho mình, đó là hãy đọc documentation thật kỹ, đó không chỉ là tài liệu về công nghệ, mà còn là tâm huyết và công sức của những lập trình viên phía sau.
Tổng kết giai đoạn hai, khi tìm hiểu kiến thức mới, đừng để thời gian hay điều gì làm bạn áp lực. Thay vào đó, hãy đọc thật từ từ, chậm rãi, và để ý đến cách mà tài liệu thể hiện ý nghĩa. Giai đoạn này cũng là lúc để các bạn tìm hiểu đến những thứ xung quanh thứ bạn đang học, ví dụ như khi học lập trình, bạn phải biết thao tác với Terminal, IDE, Git, browser console, .... rất rất nhiều thứ, mà chỉ cần để ý thì các bạn sẽ thấy tài liệu hoặc sách đề cập đến. Hãy google nó ngay lập tức. Và đặc biệt hay bổ sung tiếng Anh, vì nếu các bạn muốn được giải đáp nhanh gọn và đầy đủ nhất thì đó chỉ có thể là những tài liệu, bình luận, video bằng tiếng Anh.

Project đầu tiên ?

Học phải đi đôi với hành đúng không các bạn.
Tuantam2lan
Sau khi giành hơn 3 tháng để chìm đắm trong sách vở, cùng với những ứng dụng nho nhỏ chạy trên trình duyệt, mình quyết định làm một trang web từ A tới Z bằng kiến thức mình đã học. Một ý tưởng nảy ra lúc ấy là tạo ra một ứng dụng có thể gợi ý cho người dùng một cuốn sách tùy theo cách người đấy trả lời các câu hỏi được đưa ra.
Vậy là mình bắt tay làm nó, logic ứng dụng khá đơn giản, đó là trả lời một loạt câu hỏi và nhận được một số điểm tương ứng. Số điểm này, sau đấy được dùng để so sánh và tìm ra cuốn sách phù hợp. Thời điểm này đã gần giữa năm, và mình đã thất nghiệp được đâu đó 05 tháng. Tài chính cũng sắp cạn nên áp lực khá lớn và vồ vập, có những hôm mình thức tới 2 - 3h sáng để code và cũng chỉ có thể ngủ được 5 tiếng mỗi đêm. Sau gần 3 tuần thì mình không trụ nổi, đành phải giành ra mấy ngày nghỉ dưỡng sức. Trong thời gian nghỉ ngơi, mình cũng thử viết CV và nộp vào một vài công ty với vị trí mong muốn là fresher, hê hê, mình cũng thử nộp vào Zalo ( thất bại 100% luôn ). Tình cờ trong giai đoạn này, người bác của mình cũng gọi điện hỏi han, đồng thời cũng nói rằng có một ông anh đang tuyển nhân sự cho công ty mới mở ở Việt Nam, hỏi xem mình có muốn thực tập vài tháng cho biết hay không. Mình lại đồng ý quá.
Sau khi hoàn tất được dự án nho nhỏ, mình được 02 công ty gửi mail phỏng vấn, và quan trọng hơn là ông anh kia cũng hẹn mình một buổi. Mình gặp cả ba mối và pass cả 3 ( thật ra tuyển fresher cũng dễ các bạn à). Nhưng cuối cùng thì mình làm cho ông anh, vì đó là một công ty nước ngoài, hy vọng sẽ có cơ hội để trau dồi tiếng anh.
Vầng, vậy là mình làm ở công ty mà mình thực tập đến tận bây giờ luôn. Vì công ty là startup, và liên tục mở rộng nên luôn có những điều hay ho để học hỏi. Nghĩ đi nghĩ lại thì, mình may mắn thật.
Tổng kết phần này, hãy cố gắng làm một dự án nho nhỏ, có thể là blog cá nhân của bạn hay bất cứ thứ gì, miễn là các bạn có thể cho nhà tuyển dụng thấy được lượng kiến thức và khả năng của mình. Một vài suy nghĩ nho nhỏ
Lập trình cũng như bao nghề và bao nghề khác cũng đáng quý, đáng để theo đuổi cả. Bài viết không có ý muốn cổ vũ các bạn đổ xô đi làm lập trình, hy vọng mình có thể chia sẻ suy nghĩ này rõ hơn ở bài viết sau. Thay vào đó, điều mà mỗi chúng ta nên hướng đến là tìm được sự nghiệp phù hợp, một công việc có thể giúp bản thân dừng chất vấn về ý nghĩa cuộc sống.
Nhưng, học lập trình cơ bản thì mình nghĩ ai cũng nên thử, vì chính bản thân mình, cảm nhận được cái cách mà lập trình thay đổi tư duy, thói quen tư duy và thái độ với cuộc sống.
Các bạn có thể xem project mà mình nhắc tới trong bài ở đây nhé, đã rất lâu rồi mình chưa đụng vào nó, và cũng không có thời gian nữa, nên phần ứng dụng gợi ý sách bị hư rồi (mình mới kiểm tra T.T)