Chào các bạn,
Theo các bạn, để trở thành một lập trình viên chúng ta cần có gì? Điều đầu tiên có lẽ là phải có máy tính, thứ hai là phải biết ngôn ngữ lập trình, thứ ba là phải viết được một chương trình. Ba điều kể trên đủ chưa nhỉ, không biết bạn nghĩ thế nào chứ đấy chính là câu trả lời của mình cách đây khoảng 5 năm cho câu hỏi trên. Còn hôm nay, nếu có ai đó hỏi mình câu tương tự, thì chắc mình sẽ trả lời khác. Trả lời như thế nào thì mời bạn theo dõi hết bài viết này nhé.

Yếu tố 1: Tư duy lập trình

Tư duy lập trình là gì?

Hiểu theo một cách không hề sách vở, thì tư duy là cách chúng ta suy nghĩ để giải quyết vấn đề. Lập trình là chỉ ra các bước cho máy tính giải quyết vấn đề. Vậy tư duy lập trình, là bạn phải biết cách suy nghĩ sao để giải quyết một vấn đề bằng máy tính.
Hồi còn bé, hễ đứa nào tính toán nhanh thì sẽ được coi là thông minh. Vậy nếu lấy tốc độ tính toán làm thước đo cho sự thông minh thì chắc chắn máy tính là công cụ thông minh nhất thế giới. Nhưng thực tế hoàn toàn ngược lại, máy tính thật sự rất ngu. Một đứa trẻ có thể tính toán chậm, nhưng nếu gặp phải người không quen biết, bé sẽ nhớ lại lời bố mẹ dặn rằng “không được tiếp xúc với người lạ” và tự động tránh xa đối tượng đó. Còn máy tính, tuy tính toán nhanh, nhưng nếu bị một người lạ sử dụng thì nó không thể phân biệt được, đấy cũng là lý do tại sao người ta hay đặt mật khẩu cho máy tính.
Thế mới nói, máy tính rất ngu. Chúng không thể tự nhìn nhận vấn đề, cũng không thể tự giải quyết vấn đề trừ khi bạn lập trình cho chúng. Nhưng khổ, máy tính với người là hai “loài” khác nhau, nên không dễ dàng gì để bạn và máy tính có thể giao tiếp. Muốn giao tiếp với máy tính, bạn phải học ngôn ngữ của chúng, chính là ngôn ngữ lập trình, bạn cũng cần phải học cách giải quyết như một máy tính – chính là tư duy lập trình.

Làm sao để biết mình có tư duy lập trình hay không?

Không có một tiêu chuẩn nào để đánh giá cả, nhưng có thể dựa vào một số dấu hiệu thế này.
1. Với mỗi bài toán, bạn hứng thú tìm ra cách giải hơn là tìm ra đáp số cuối cùng
Nhớ hồi học cấp 2, môn toán mình thường hay bị trừ điểm do cộng trừ nhân chia bị sai, mặc dù hướng giải thì đúng. Do những lúc lúng túng thì 3 + 3 = 9 là chuyện dễ hiểu. Nhưng với máy tính thì bạn không phải lo, bạn chỉ cần tìm ra cách giải, còn đáp số chi tiết thì máy tính sẽ tính cho bạn. Đáp số sẽ chỉ sai, khi bạn đưa ra cách giải sai.
Nói như vậy không có nghĩa là bạn vừa thích tìm cách giải, lại vừa thích đáp số đúng là không có tư duy lập trình đâu nhé. Nếu bạn có cả hai yếu tố như vậy, thì tương lai có thể bạn sẽ là một lập trình viên giỏi đấy.
2. Bạn luôn xâu chuỗi mọi sự kiện hàng ngày
Nếu bạn để ý thì các sự kiện trong ngày xảy ra đều có một nguyên nhân. Ví dụ như vì tối qua ngủ muộn nên sáng nay dậy muộn, dậy muộn nên đi làm bị tắc đường, tắc đường nên đi làm muộn, đi làm muộn nên bị phạt tiền,… Đại loại là các sự kiện trong ngày là một chuỗi liên hoàn, sự kiện xảy ra trước sẽ là tiền để để phát sinh sự kiện tiếp theo.
Trong lập trình cũng vậy, chương trình sẽ chạy từ trên xuống dưới và từ trái qua phải, kết quả của bước chạy trước sẽ là tiền đề cho bước chạy tiếp theo. Ví dụ như tính năng mở khóa bằng mật khẩu trên điện thoại, có thể diễn giải thành các bước như sau:
  • Bước 1: Hiển thị giao diện nhập mật khẩu
  • Bước 2: Nhận mật khẩu từ người dùng
  • Bước 3: Kiểm tra mật khẩu có chính xác hay không? Nếu chính xác, thực hiện bước 4. Nếu sai, quay lại bước 2
  • Bước 4: Mở khóa và mở màn hình chính
Bạn thấy không, lập trình là một chuỗi các bước có liên quan tới nhau, giống như các sự kiện xảy ra trong ngày vậy.
3. Nếu được giao việc, bạn luôn tìm cách chia việc đó thành các bước nhỏ
Nếu bạn được giao một công việc, bạn thường có xu hướng chia nhỏ công việc đó thành các bước nhỏ, mỗi bước sẽ đạt được một kết quả nhất định. Khi đạt được hết kết quả của mỗi bước nhỏ thì bạn cũng đạt được mục đích cuối cùng của công việc lớn. Cách tư duy này khá giống với cách tư duy để lập trình ra một phần mềm máy tính. Bởi một phần mềm máy tính có rất nhiều logic phức tạp, chắc chắn bạn không thể nào nhớ hết được. Cách làm đơn giản một logic phức tạp là chia nó thành các phần nhỏ, với mỗi phần xử lý một công việc riêng, nhưng khi ghép các phần lại thì ta được một phần mềm hoàn chỉnh.

Yếu tố 2: Có khả năng tự học

Tự học hỏi là một trong những kỹ năng quan trọng nếu bạn muốn trở thành một lập trình viên trong thời đại bây giờ. Bởi vì công nghệ đang thay đổi từng ngày. Tại thời điểm này bạn đang sử dụng ngôn ngữ lập trình X nào đó, thì ngoài kia người ta đang nghiên cứu và chuẩn bị cho ra mắt một ngôn ngữ lập trình Y mới siêu việt hơn ngôn ngữ X của bạn. Bạn đang sử dụng windows 10, thì Bill Gate đã đang thử nghiệm windows 11,… Tóm lại công nghệ đang thay đổi rất nhanh, cái bạn biết ngày hôm nay có thể là xu hướng nhưng ngày mai có thể đã lỗi thời. Không ai biết trước được điều gì. Vậy nếu bạn không tự học hỏi, không chủ động tìm hiểu công nghệ mới, thì chẳng bao lâu sau bạn sẽ thành con “vượn cổ” trong thế giới công nghệ.
Trên blog, mình đã có một bài viết về việc làm sao để tìm hiểu một công nghệ mới hiệu quả, bạn có thể tham khảo thêm.

Yếu tố 3: Có lòng đam mê lập trình

Đánh giá khách quan thì lập trình là một công việc khô khan hơn những ngành khác. Bởi bạn sẽ phải làm việc với một màn hình toàn những mã lệnh dài ngoằng ngoằng như thế này cả ngày – Cái mà đa phần mọi người đều thấy nhàm chán.

Là lập trình viên, bạn còn phải luôn trong trạng thái sẵn sàng OT (Overtime – Làm thêm giờ) khi cần thiết. Phải có một tinh thần thép để đối mặt với những con bugs do chính mình gây ra. Phải chịu áp lực từ deadline, áp lực từ sếp (tùy công ty), áp lực từ tester,…
Nếu không có đam mê, bạn còn chẳng thể gắn bó với nghề này lâu dài chứ đừng nói đến việc phát triển hay thăng tiến.

Một vài yếu tố khác

Có lòng kiễn nhẫn: Có một sự thật là các lập trình viên thường dành thời gian để sửa code nhiều hơn là viết code. Sửa code có thể là cải tiến những dòng code đã viết cho đẹp hơn, cập nhật lại business logic, hoặc tìm kiếm bugs và fix bugs. Mặc khác, việc sửa code cũng chán hơn nhiều so với việc viết code mới, vì code sau khi sửa nghiễm nhiên phải tốt hơn code trước đó. Tuy nhiên nếu không làm cẩn thận, bạn sẽ rất dễ gặp phải tình trạng “chữa lợn lành thành lợn què” – code trước khi sửa thì chạy còn sau khi sửa thì không. Vì thế mỗi lần sửa code, đều phải kiên nhẫn kiểm tra lại thật kỹ càng và cẩn thận.
Đầu tư thời gian nhiều cho sức khỏe: Do tính chất công việc ít vận động, nên các lập trình viên phần lớn đều “yếu xìu”. Tư thế ngồi làm việc cũng khiến chúng ta dễ bị mắc các bệnh liên quan tới vai gáy, cột sống, trĩ. Chưa kể nhiều bạn còn có thói quen hút thuốc, uống cà phê, nước tăng lực mỗi khi căng thẳng hay mật tập trung, cộng thêm thói quen sống đêm ngủ ngày, khiến sức khỏe đã yếu lại càng yếu hơn. Vì vậy bên cạnh việc trau đồi kiến thức chuyên môn thì bạn cũng nên đầu tư thời gian cho sức khỏe. Một số cách để rèn luyện sức khỏe cho lập trình viên như là đi bộ đi làm nếu nơi làm không quá xa, đến phòng tập gym 2 lần/tuần, tạo thói quen sinh hoạt, ăn uống hợp lý… Như mình là mình có sẵn 2 quả tạ tay ở nhà, đi làm về là mình dành khoảng 30 phút để tập, không nhiều nhưng cũng đủ để không bị “teo cơ”. Đừng quên các các cụ ta có câu “có sức khỏe là có tất cả, không sức khỏe là không có gì”, muốn làm gì thì làm, trở thành ai thì trở, trước tiên cứ phải khỏe đã.
Luôn sẵn sàng làm việc, kể cả nửa đêm, hay ngày nghỉ: Sự cố liên quan tới phần mềm có thể xảy ra bất kỳ lúc nào, không kể ngày đêm hay lễ tết. Sự cố cũng có nhiều nguyên nhân khác nhau như bugs, hệ thống quá tải, hoặc hệ thống bị hacker tấn công, vvv… Tuy có nhiều nguyên nhân nhưng chúng có một đặc điểm chung là để càng lâu thì lại càng nguy hiểm và càng khó khắc phục. Vì vậy các lập trình viên chúng ta luôn phải trong trạng thái sẵn sàng làm việc, để đảm bảo có thể khắc phục một cách sớm nhất khi có sự cố xảy ra.
Cẩn thận, tỷ mỉ: Trong cuộc sống hiện nay, công nghệ đang dần có mặt ở tất cả các lĩnh vực. Chiếm một phần lớn trong thế giới công nghệ, chính là phần mềm. Vì vậy một phần mềm đem ra hoạt động thực tế cần phải đảm bảo được yếu tố chính xác. Bởi hãy tưởng tượng, một phần mềm hoạt động trong lĩnh vực ngân hàng, y tế, giáo dục, quân sự mà xảy ra lỗi thì hậu quả sẽ khó đoán như thế nào. Để đảm bảo một phần mềm hoạt động chính xác, thì yêu cầu người tạo ra chúng – là các lập trình viên chúng ta phải có đạo đức nghề, và có tính tỷ mỉ, cẩn thận trong từng ký tự.

Kết luận

Tóm gọn lại, để trở thành lập trình viên thì bạn cần có tư duy lập trình, tính ham học hỏi cái mới, và niềm đam mê. Còn việc có máy tính và có thể tạo ra phần mềm chỉ là hệ quả sau khi bạn có những yếu tố trên. Nếu bạn có thiếu yếu tố nào, thì cũng đừng vội nản, vì thiếu cái gì thì ta học cái đó, quan trọng vẫn là bạn có quyết tâm theo đuổi tới cùng đam mê hay không thôi.
Bài viết được viết dựa trên kinh nghiệm cá nhân, xin nhận mọi gạch đá.
(*) bugs: Ý chỉ những lỗi xảy ra trong lập trình.
(*) fix bugs: Là quá trình đi giải quyết các lỗi trong lập trình.
(*) code: Là các lệnh “loằng ngoằng” trong lập trình, hoặc cũng có thể hiểu là công việc của các lập trình viên.
(*) deadline: Là hạn trót bạn phải hoàn thành công việc.
(*) tester: Là những người chuyên kiểm thử phần mềm, mục đích là tìm ra lỗi của phần mềm. Đây được coi là kẻ thù của các lập trình viên.
(*) business logic: Hay còn được gọi là logic nghiệp vụ, trong lập trình logic nghiệm vụ là những ràng buộc giữa các tính năng của phần mềm. Ví dụ muốn download video thì phải đăng nhập tài khoản, thì ràng buộc giữa đăng nhập tài khoản và download video là một business logic.