Làm thế nào để trở thành một lập trình viên giỏi?

Thời gian gần đây có nhiều email hỏi tôi về cách làm thế nào để trở thành một lập trình viên giỏi, và tôi cũng thường xuyên giúp để các bạn có cách tiếp cận tốt hơn với nghề lập trình viên. Hôm qua cũng có một bạn sinh viên năm 3 gởi email với nội

Thời gian gần đây có rất nhiều bạn email hỏi tôi về cách làm thế nào để trở thành một lập trình viên giỏi, và tôi cũng thường xuyên giúp để các bạn có cách tiếp cận tốt hơn với nghề lập trình viên. Hôm qua cũng có một bạn sinh viên năm 3 gởi email với nội dung:

“Em hiện đang là sinh viên năm 3 trường Đại học Tôn Đức Thắng. Chuyên ngành của em là Công nghệ Thông tin. Sau khi ghé thăm trang web của anh, em thấy có rất nhiều điều hữu ích mà em cần phải học hỏi. Vì thế hôm nay em gửi email này mong anh có thể chia sẻ những kinh nghiệm và cách học lập trình như thế nào cho hiệu quả khi anh mới bắt đầu nghiên cứu về lĩnh vực lập trình này được không?

Có lẽ anh sẽ thắc mắc vì sao em là sinh viên IT lại đặt ra câu hỏi này? Thật ra, trong 3 năm học vừa qua em có nhờ chút may mắn nên mới qua được những môn học lập trình. Em chưa giành thật nhiều thời gian cho ngành mà em đang theo học. Đã có lúc em cảm thấy mình đã chọn sai ngành để học, nhưng tới thời điểm này khi đã không còn tham gia nhiều vào các hoạt động của trường, của đoàn, của hội, của các câu lạc bộ, thì em đã có nhiều thời gian hơn để suy nghĩ về tương lai sau này của mình. Có một câu nói mà em rất thích là: “Nothing is impossible”. Vì thế em sẽ thử sức cho ngành IT này, nhất là về lập trình. Em sẽ bắt đầu lại từ đầu!

Em mong là anh sẽ chia sẻ những kinh nghiệm mà anh có được khi đến với ngành lập trình, để em có thể học tập ở anh những điều thật bổ ích về ngành này.

Em cảm ơn anh rất nhiều!”

 

 

Tôi cũng đã viết một bức thư khá dài để trả lời cho bạn này, trong thư không đề cập đến bất kỳ ngôn ngữ lập trình nào, hay phải học cái gì trước cái gì sau, mà chỉ là những suy nghĩ của tôi về tâm thái mình cần phải có để học lập trình. Hôm nay tôi mạn phép đưa lên đây để chia sẻ cùng với mọi người, và nếu có điều gì các bạn cho là không phải thì hãy cứ thoải mái comment nhé. Hy vọng rằng bài viết này sẽ giúp ích được ít nhiều cho các bạn sinh viên CNTT và các bạn bắt đầu khởi nghiệp trong nghề lập trình viên.

“Không lạ lắm khi em hỏi về cách học lập trình, bởi chỉ có sinh viên CNTT & kỹ sư CNTT mới đặt ra câu hỏi này thôi.

Trên thực tế, lập trình không hề khó nếu như em thực sự quan tâm đến nó. Vậy thì nên học như thế nào cho tốt? Qua một email ngắn này thì anh chưa thể nói lên hết được, nhưng đại khái theo kinh nghiệm của anh thì em cần phải lưu ý mấy việc như sau:

1. Phải có khả năng tự kỷ ám thị, ví dụ như: “lập trình là mục đích của cuộc đời tôi”, “không trở thành một lập trình viên giỏi thì tôi không biết phải làm gì khác”, “lập trình thật là dễ” v.v… Làm sao để cho mình cảm thấy việc học lập trình và lập trình là công việc thiết yếu, mang tính sống còn (quan trọng như việc thi Đại học vậy), em sẽ học được nhanh và hiệu quả hơn.

2. Học tập thường dựa trên việc tích lũy kiến thức, không có việc học chỉ trong một ngày. Với anh, anh có thể viết nguyên một ứng dụng bằng PHP hoặc Ruby On Rails chỉ trong một ngày (dù anh chưa học hai thứ này trước đó) nhưng đó không phải là nhờ vào tài năng bẩm sinh, nó nhờ vào quá trình học tập và tích lũy những khái niệm tương tự từ .NET, Java… Quỹ thời gian để học tập/ viết bài/ làm dự án cá nhân của anh là khoảng 4 giờ/ mỗi tối.

3. Không thể làm ứng dụng đàng hoàng nếu thiếu lý thuyết, nhưng cũng không thể làm việc hiệu quả nếu không làm dự án thực tế và luyện tập miệt mài. Vì vậy, việc đọc sách/ báo/ bài viết và tự nghĩ ra các bài tập để rèn luyện kỹ năng đã học là việc cần làm thường xuyên, xen kẽ và không bao giờ ngừng lại.

4. Tri thức là vô hạn, năng lực học tập của con người là hữu hạn, vì vậy em không thể cùng một lúc học hết được tất cả, hãy học thứ cốt yếu, lưu lại (bookmark) và sưu tầm những thứ là thứ yếu để sau này có thể dùng đến khi cần. Ví dụ: biết lập trình Javascript là cốt yếu, biết cách sử dụng một plugin để hiển thị album ảnh theo kiểu như LightBox hoặc như Facebook là thứ yếu, tuy nhiên vẫn cần phải tìm kiếm các thư viện và đánh dấu nó để dùng đến khi cần.

5. Viết ứng dụng không phải là viết ra một cách liền mạch như dòng suy nghĩ, vì suy nghĩ đôi khi nó tràn tới như vũ bão và không có thứ tự, còn ứng dụng cần phải được cấu trúc rõ ràng, rành mạch, vì vậy là lập trình viên tốt cần phải biết cách cấu trúc ứng dụng, phân chia ứng dụng ra thành các thành phần cụ thể, ráp nối chúng lại với nhau, làm sao để mỗi lần có sự thay đổi, chỉ cần thay đổi một thành phần của dự án chứ không đi xới tung toàn bộ dự án.

6. Mã lệnh mình viết ra không chỉ để mỗi mình ta đọc, mà để dành cho cả team cùng đọc. Phần mềm, như mọi sản phẩm khác, muốn là sản phẩm tốt và tinh xảo thì cần phải huy động bộ máy nhiều người cùng góp sức mới có thể tạo ra được sản phẩm dùng được, tốt và có tương lai. Vì vậy, hãy luôn tâm niệm rằng mọi thứ ta lập trình ra cần phải giữ được sự đơn giản, dễ hiểu, gọn gàng, tinh tế và dễ dàng sửa đổi hoặc thay thế. Làm ra một mớ xà bần thì không khó, nhưng tạo ra những thứ dễ hiểu đối với tất cả mọi người là cả một nghệ thuật. Vì vậy, người lập trình, bản thân họ phải tự rèn luyện mỗi ngày để trở thành những kỹ sư chuyên nghiệp và là những nhà nghệ thuật bậc thầy.

7. Việc lập trình cũng gần giống như công việc của các công nhân & kỹ sư xây dựng, ngôi nhà xây ra xấu hay tốt phụ thuộc vào rất nhiều yếu tố như: bản vẽ tốt, chất liệu tốt, tay nghề xây dựng tốt để áp dụng đúng kỹ thuật và cách thức, và một yếu tố cũng không kém phần quan trọng đó là sự hiểu biết lẫn nhau và phối hợp nhịp nhàng để thực hiện công việc. Nói nhỏ thì là team working (làm việc nhóm), nói lớn thì là process và project management (quy trình làm việc và quản lý dự án). Muốn dự án hoạt động trơn tru, thì kỹ sư phải có thêm sự hiểu biết rõ rệt về quy trình, cách thức vận hành dự án, sao cho có thể phối hợp với mọi người và trưởng nhóm hiệu quả để dự án thành công. Vì vậy, em không chỉ nên học mỗi lập trình, mà cũng cần phải học cách làm việc nhóm, quy trình phát triển phần mềm, các vai trò trong dự án phần mềm, tại sao cần có những thứ đó, ví dụ tại sao cần có tester, các dự án càng lớn, kỹ sư càng giỏi nhưng số lượng tester không giảm đi mà lại càng cần nhiều thêm? v.v…

8. Làm khoa học là “tự sướng”, làm kinh doanh / sản phẩm là “làm cho người dùng sướng” (trích dẫn lời của anh Nguyễn Thành Nam nguyên Tổng giám đốc Công ty FPT Software, anh nghe được hồi bác ấy đi nói chuyện với sinh viên miền Trung để vận động cho cuộc thi Trí Tuệ Việt Nam). Vì là “làm cho người dùng sướng” nên cái tôi cá nhân phải được đặt trong vị trí khiêm tốn, thay vào đó, lập trình là vì sự thỏa mãn của khách hàng, tất cả là vì khách hàng. Khách hàng thường hay thay đổi, họ không biết diễn tả chính xác thứ họ cần, họ hay phàn nàn, họ không hiểu rõ nỗi khổ của lập trình viên… nhưng sao cũng được, khi họ là khách hàng, ta là người cung cấp sản phẩm, hãy cố bằng mọi cách mang lại những sản phẩm tốt nhất và kịp thời nhất trong mức có thể cho khách hàng. Giao tiếp, thương thảo, khả năng mô tả, diễn đạt ý tưởng là những kỹ năng quan trọng mà ta cần phải có. Nhưng trên hết vẫn cần có thái độ cầu thị, nhiệt thành, chân thật, và luôn mong muốn mang lại giá trị tốt đẹp cho mọi người.

9. Mình học được nhiều thứ từ người khác, từ các blogger trên Internet, từ sách mua/ sách chùa, từ open source… Ở đời, đã biết nhận thì phải biết cho, nên luôn coi “chia sẻ” là việc nên làm và làm thường xuyên. Cho đi không chỉ mất, mà còn được lại rất nhiều, được sự ghi nhận của cộng đồng, được comment (đánh giá, nhận xét) nhờ đó mà mình hoàn thiện được những thứ còn thiếu sót, được trở thành thành viên của một cộng đồng, và nhận được sự giúp đỡ nhiệt tình hơn từ mọi người. Và thực ra “cho” là một cách để “nhận” được nhiều hơn. Sống là sẻ chia! Triết lý tuy giản đơn, nhưng để áp dụng thành công thì rất khó!

Trên đây là những dòng anh viết ra khi mới mở laptop ở công ty, cắt xén chút thời gian để chia sẻ với em. Em hãy đọc và xem thử có những thứ em sẽ cần phải in đậm để nhớ rõ hơn. Thực ra anh không chia sẻ cách học, mà anh chia sẻ các nguyên lý mà theo anh nó sẽ cần để trở thành một người lập trình viên chuyên nghiệp. Chỉ 30 phút viết email thì chưa nói lên hết được mọi điều, nhưng anh hy vọng rằng nó sẽ vừa đủ để em có thể “refresh your mind”, học tập & lập trình tốt hơn!”

error: Content is protected !!