TRUNGTQ

Think Big, Act Small, Fail Fast and Learn Rapidly

NAVIGATION - SEARCH

Từng bước để trở thành một lập trình viên giỏi

Hôm nay chúng ta sẽ đọc một bài viết của tác giả John Sonmez về cách từng bước làm thế nào để trở thành một lập trình viên giỏi. Hy vọng với một hướng dẫn từng bước kiểu step-by-step này sẽ giúp một số bạn newbie có thể áp dụng và định hướng tương lai sau này.

“Tôi không sợ những kẻ tập một lần 10.000 cú đá, tôi chỉ sợ những kẻ tập 10.000 lần một cú đá.” ~ Huyền thoại võ thuật Lý Tiểu Long

Tôi phải làm thế nào để từng bước trở thành một lập trình viên xuất sắc?
Tôi phải làm thế nào để từng bước trở thành một lập trình viên xuất sắc?


Thời gian gần đây tôi có nhận được một số email mà về cơ bản đều hỏi rằng “làm thế nào để có thể trở thành một lập trình viên giỏi/ xuất sắc?”

Những dạng email kiểu này nói chung thường làm tôi cảm thấy buồn lòng, bởi vì tôi cảm thấy dường như khi bạn hỏi dạng câu hỏi này, thì bạn đang tìm kiếm một liều thuốc thần diệu nào đó khiến bạn có thể sẽ đột nhiên trở thành một lập trình viên tài ba.

Tôi nghi ngờ rằng có rất ít người trong số đã gửi email để hỏi tôi về câu hỏi này thực sự muốn biết làm thế nào để trở thành một lập trình viên xuất sắc, nhưng có lẽ họ đang chỉ muốn tìm kiếm cho mình một giải pháp nhanh chóng hoặc một câu trả lời dễ dàng.

Một mặt khác, tôi nghĩ rằng có thể có một số lập trình viên chân thật, và chỉ là họ không biết làm thế nào để đặt ra những câu hỏi cần thiết để định hướng cho tương lai của họ. Tôi nghĩ những lập trình viên này – đặc biệt là những người vừa mới vào nghề – có lẽ đang tìm kiếm cho mình một hướng dẫn từng bước để trở thành một lập trình viên xuất sắc.

Vì vậy, tôi cũng cố gắng từ chính kinh nghiệm của bản thân và những kiến thức tốt nhất mà mình có, để đưa ra một chỉ dẫn kiểu từng bước step-by-step dành cho bạn.

Lúc này đây, dĩ nhiên là tôi nhận ra rằng không có một công thức thần kỳ nào ở đây cả và rằng có rất nhiều con đường có thể dẫn đến thành công, nhưng tôi nghĩ rằng nếu làm theo những bước hợp lý được phác thảo ra sau đây thì một bạn trẻ mới vào nghề có thể vươn tới một mức trình độ khá cao và sẽ có khả năng trở thành một lập trình viên giỏi hoặc thậm chí là xuất sắc.

Bước 1: Hãy chọn lấy một ngôn ngữ lập trình, và học từ những thứ căn bản nhất

Trước khi có thể chạy, thì chúng ta phải học cách để đi trước đã. Bạn đi bằng cách học làm thế nào để lập trình trong một ngôn ngữ lập trình nào đó. Bạn đừng có học đi bằng cách cố gắng học 50 triệu thứ cùng một lúc, vì bạn không thể có phép phân thân ra như Tôn Ngộ Không được phải không nào.

Có rất nhiều lập trình viên bắt đầu bằng cách thử và nhảy vào tất cả mọi thứ một lần và không có đủ kiên nhẫn để học chỉ một ngôn ngữ lập trình duy nhất trước khi tiến lên phía trước. Họ nghĩ rằng họ phải biết tất cả những công nghệ mới đang “hot” thì mới có thể kiếm được một công việc lập trình. Trong khi đúng ra thì bạn cần biết nhiều hơn chỉ những kiến thức cơ bản của một ngôn ngữ lập trình duy nhất, bạn phải bắt đầu từ đây, vì như vậy thì bạn mới có thể tập trung được tốt nhất.

Chọn lấy một ngôn ngữ lập trình mà bạn nghĩ rằng sự nghiệp của mình về cơ bản sẽ xoay quanh nó. Ngôn ngữ lập trình đó tự bản thân nó thì không quan trọng nhiều lắm, nhưng bạn nên tính toán cả về lâu về dài nữa. Ý tôi muốn nói là bạn đừng nên thử và học một ngôn ngữ lập trình “dễ” khi bắt đầu. Hãy học bất cứ ngôn ngữ nào mà bạn cảm thấy thích thú và có thể nhìn thấy tương lai lập trình của mình trong một vài năm sắp tới. Bạn muốn chọn một cái gì đó mà sẽ mang lại giá trị lâu dài.

Một khi bạn đã chọn lấy ngôn ngữ lập trình nào đó thì bạn sẽ thử học và tìm một số cuốn sách hoặc bài thực hành mà chỉ liên quan đến ngôn ngữ lập trình đó thôi. Ý tôi muốn nói là bạn đừng tìm học các tài liệu mà dạy bạn quá nhiều thứ một lúc. Bạn nên tìm những tài liệu dành cho người mới bắt đầu mà chỉ tập trung vào ngôn ngữ đó, chứ không phải là rất nhiều công nghệ liên quan.

Khi bạn đọc xuyên suốt các tài liệu đó hoặc duyệt qua các bài thực hành mà bạn đã lựa chọn, thì hãy chắc chắn rằng bạn có thực hành viết code. Hãy làm thật nhiều bài tập có thể. Hãy thử nghiệm tất cả những gì bạn đã học được. Hãy thử gom các thứ lại với nhau và sử dụng tất cả các khái niệm mà bạn đã học được về nó. Vâng, điều này thì khá là “đau khổ”. Việc đọc hùng hục một cuốn sách từ trang đầu đến trang cuối thì rất dễ dàng, nhưng nếu bạn thực sự muốn học thực sự thì bạn cần phải thực hành.

Khi bạn đang viết code, hãy cố chắc chắn rằng bạn hiểu tất cả dòng code mà mình viết ra. Điều tương tự cũng cần làm cho bất kỳ dòng code nào mà bạn đọc. Khi viết ra những đoạn code, hãy làm chậm rãi và đảm bảo rằng bạn hiểu nó. Bất cứ điều gì mà bạn không hiểu, thì hãy tìm hiểu và làm rõ nó. Hãy dành thời gian làm điều này thì bạn sẽ không bị hổng kiến thức và mơ hồ về sau này.

Cuối cùng, hãy chuẩn bị tư tưởng là phải đọc qua một cuốn sách hoặc một hướng dẫn thực hành ít nhất 3 lần trước khi bạn có thể hiểu hết nó. Bạn sẽ không thu được phần “lập trình” trong lần thử đầu tiên – không ai từng làm được điều đó cả. Bạn cần lặp lại để bóc trần nó trước khi bạn bắt đầu có thể hiểu và thu nhận kiến thức từ nó và bạn hiểu được điều gì thực sự đang diễn ra. Cho tới một lúc bạn sẽ cảm thấy như bị lạc lối, điều đó là tốt, đó là một phần của quá trình phát triển. Chỉ việc chấp nhận nó và tiến lên phía trước.

Bước 2: Xây dựng một cái gì đó nhỏ thôi

Lúc này thì bạn đã có một hiểu biết cơ bản về một ngôn ngữ lập trình nào đó rồi, và đây là lúc để đưa những kiến thức đó vào làm việc và để nhận ra bạn đang thiếu hụt những gì. Cách tốt nhất để làm điều này là thử xây dựng một cái gì đó.

Đừng quá tham vọng tại thời điểm này – nhưng bạn cũng đừng quá nhút nhát. Hãy tìm kiếm ý tưởng tạo ra một ứng dụng mà đủ đơn giản để bạn có thể hoàn thành nó với một số nỗ lực, nhưng không phải là sẽ làm bạn mất vài tháng để hoàn thành. Cố gắng hạn chế nó chỉ trong ngôn ngữ lập trình bạn đã học nhiều nhất có thể. Đừng cố gắng để làm một cái gì đó mà phải áp dụng nhiều công nghệ khác nhau (nghĩa là, sử dụng tất cả những công nghệ từ giao diện người dùng cho đến database) – mặc dù bạn sẽ có thể cần sử dụng một vài framework hoặc API có sẵn.

Đối với ứng dụng đầu tay thì bạn có thể chọn giải pháp sao chép một cái gì đó đơn giản mà đã tồn tại rồi. Hãy tìm kiếm một ứng dụng đơn giản, kiểu như một ứng dụng dạng list nhắc việc To-Do chẳng hạn và cố gắng mô phỏng nó. Đừng cho phép các kỹ năng thiết kế của bạn cản trở việc học lập trình.

Tạo ra những ứng dụng đơn giản trước.

Tôi đề xuất bạn nên tạo ra một ứng dụng nào đó dành cho thiết bị di động, bởi vì hầu hết các ứng dụng di động thì thưởng nhỏ và khá dễ làm. Thêm nữa, việc học các kỹ năng phát triển cho di động thì rất có ích vì có rất nhiều các công ty đang bắt đầu cần các ứng dụng di động. Ngày nay, bạn có thể xây dựng một ứng dụng di động trong hầu như bất kỳ ngôn ngữ lập trình nào. Có rất nhiều giải pháp mà cho phép bạn xây dựng một ứng dụng cho các hệ điều hành di động khác nhau sử dụng rất nhiều các ngôn ngữ lập trình.

Bạn cũng có thể xây dựng một ứng dụng web nhỏ, nhưng cố gắng không nhảy quá sâu vào nhiều công nghệ phát triển web phức tạp. Về cơ bản tôi đề xuất bạn nên bắt đầu bằng một ứng dụng di động, bởi vì phát triển web thì có vẻ rắc rối hơn một chút cho người mới bắt đầu. Để phát triển một ứng dụng web thì bạn sẽ phải cần biết ít nhất là một số kiến thức về HTML, có thể một vài framework back-end và JavaScript.

Cho dù là bạn chọn cái gì để xây dựng, thì bạn có thể phải học chút ít về một vài framework – điều này thì rất tốt, chỉ đừng có quá sa lầy vào những chi tiết. Ví dụ, bạn có thể viết một ứng dụng Android khá đơn giản mà không cần phải thực sự biết nhiều về tất cả các hàm API của Android và làm thế nào Android hoạt động, chỉ bằng cách làm theo một số bài hướng dẫn đơn giản. Chỉ đừng tốn quá nhiều thời gian để cố gắng học mọi thứ về một framework nào đó. Hãy học cái mà bạn cần biết để phục vụ hoàn thành dự án của mình. Bạn có thể học về các chi tiết sau này.

Oh, và điều này có vẻ là hơi khó. Nhưng đó chính là cách bạn học như thế nào. Bạn phải vật lộn để nhận ra làm thế nào để làm một điều gì đó, sau đó bạn sẽ tìm thấy câu trả lời. Đừng bỏ qua bước này. Bạn sẽ chẳng bao giờ vươn tới đẳng cấp là một nhà phát triển phần mềm chuyên nghiệp nếu bạn không học những thứ khó khăn và nhận ra nhiều điều thú vị trong quá trình nghiên cứu. Đây là một khóa huấn luyện tốt cho tương lai của bạn.

Bước 3: Nghiên cứu về một framework

Lúc này là thời điểm để thực sự tập trung vào một framework. Vì lúc này bạn đã nắm được một lượng kiến thức kha khá về ít nhất là một ngôn ngữ lập trình rồi và đã có một số kinh nghiệm để có thể làm việc cùng một framework cho các ứng dụng di động hoặc web.

Hãy chọn một framework nào đó để học và nó sẽ cho phép bạn làm việc hiệu quả hơn trong một số môi trường. Dạng framework mà bạn lựa chọn để học sẽ được dựa trên kiểu nhà phát triển phần mềm nào mà bạn muốn trở thành trong tương lai. Nếu bạn muốn trở thành một nhà phát triển web, thì bạn sẽ muốn học một web framework cho bất cứ ngôn ngữ lập trình nào mà bạn đang làm việc trên nó. Nếu bạn muốn trở thành một nhà phát triển ứng dụng di động, thì bạn sẽ cần học về một hệ điều hành di động và framework đi kèm với nó.

Cố gắng đào sâu kiến thức của bạn về framework đó. Điều này sẽ khá mất thời gian, nhưng đầu tư thời gian để học bất cứ thứ gì về framework mà bạn đang sử dụng thì rất tốt. Đừng cố học nhiều framework vào lúc này – nó sẽ chỉ khiến phân tán sự tập trung của bạn mà thôi. Hãy nghĩ về việc học các kỹ năng bạn cần cho một công việc xác định mà bạn muốn nhận, có sử dụng framework và chính ngôn ngữ lập trình mà bạn đang học. Bạn có thể luôn luôn mở rộng tập kỹ năng của mình sau này.

Bước 4: Học về một công nghệ cơ sở dữ liệu

Hầu hết các nhà phát triển phần mềm sẽ cần phải biết về một số công nghệ cơ sở dữ liệu vì rất nhiều các ứng dụng phải có một database back-end. Vì vậy, hãy chắc chắn rằng bạn không bỏ bê việc đầu tư vào lĩnh vực này.

Bạn sẽ có khả năng nhìn thấy lợi ích lớn nhất nếu bạn học về SQL – thậm chí nếu bạn lên kế hoạch sẽ làm việc cùng cơ sở dữ liệu NoSQL như MongoDB hoặc Raven, thì việc học SQL sẽ mang lại cho bạn một nền tảng tốt hơn để làm việc sau này. Có rất nhiều công việc tuyển dụng ngoài kia mà yêu cầu kiến thức về SQL nhiều hơn là NoSQL.

Đừng quá lo lắng về nhiều loại cơ sở dữ liệu SQL. Những công nghệ SQL khác nhau thì thực ra chúng có rất nhiều điểm giống nhau và bạn sẽ không gặp phải vấn đề gì trong việc chuyển đổi qua lại giữa chúng nếu bạn biết những kiến thức cơ bản về một công nghệ SQL nào đó. Chỉ chắc chắn rằng bạn hãy học về những thứ căn bản như table, queries, và những thao tác phổ biến về database khác.

Tôi khuyến khích bạn nên chọn một cuốn sách tốt về công nghệ SQL phù hợp và tạo ra một vài dự án nhỏ, vì vậy bạn có thể thực hành cái mà bạn đang học – luôn luôn thực hành những kiến thức mà bạn đang học.

Bạn phải có đủ kiến thức về SQL để có thể:

  • Tạo các bảng (table)
  • Thực thi các truy vấn cơ bản
  • Join các bảng với nhau để truy xuất dữ liệu
  • Hiểu các kiến thức cơ bản về index làm việc như thế nào
  • Insert, update và delete dữ liệu

Ngoài ra, bạn sẽ muốn học một số dạng của công nghệ object relational mapping (ORM). Cái mà bạn học sẽ phụ thuộc vào công nghệ nào mà bạn đang làm việc trên đó. Tìm kiếm những công nghệ ORM phù hợp với framework mà bạn đã học. Có thể có một vài lựa chọn ở đây, vì vậy cách tốt nhất là bạn hãy chọn lấy cái phổ biến nhất.

Bước 5: Nhận một công việc hỗ trợ một hệ thống đang tồn tại

Ok, bây giờ bạn đã có đủ các kỹ năng và kiến thức để nhận được một công việc cơ bản như là một nhà phát triển phần mềm. Nếu bạn có thể chỉ cho tôi rằng bạn hiểu những kiến thức cơ bản của một ngôn ngữ lập trình, có thể làm việc cùng một framework, hiểu về cơ sở dữ liệu và đã xây dựng được ứng dụng của riêng bạn, thì tôi chắc chắn sẽ muốn thuê bạn – cũng như nhiều nhà tuyển dụng khác.

Bảo trì một hệ thống đang tồn tại.

Điểm mấu chốt ở đây là không quá nhắm vào một công việc nào đó yêu cầu trình độ cao. Đừng cố thử tìm một công việc trong mơ của bạn ngay lúc này – vì bạn vẫn chưa đủ trình độ. Thay vì đó, cố gắng tìm một công việc dạng bảo trì một hệ thống phần mềm đang tồn tại mà được xây dựng sử dụng ngôn ngữ lập trình và framework mà bạn đã học.

Bạn có thể không tìm thấy chính xác một công việc như vậy, nhưng nhiều khả năng là bạn có thể tìm thấy một công việc tốt hơn. Cố gắng ứng tuyển vào những công việc phù hợp chính xác với những công nghệ mà bạn đã được học.

Thậm chí với sự thiếu hụt nhiều kinh nghiệm, nếu bạn phù hợp chính xác với một tập kỹ năng và bạn lại sẵn lòng trở thành một lập trình viên bảo trì, thì bạn sẽ có thể tìm thấy một công việc.

Vâng, dạng công việc này có thể hơi tẻ nhạt một chút. Nó không được hứng thú như là việc tạo ra một cái gì đó mới mẻ, nhưng mục đích của công việc này không phải là mang lại niềm vui hoặc để kiếm tiền, nó là để học hỏi và thu được nhiều kinh nghiệm nhiều nhất có thể.

Làm việc trên một ứng dụng đang tồn tại, cùng với một nhóm các nhà phát triển khác, sẽ giúp bạn mở rộng các kỹ năng của mình và biết được một hệ thống phần mềm lớn thường được cấu trúc như thế nào. Bạn có thể sửa các lỗi và bổ sung thêm các đặc trưng nhỏ khác, ngoài ra bạn cũng sẽ học và đưa những kỹ năng của bạn vào hành động.

Dồn hết tâm trí của bạn vào công việc này. Học mọi thứ bạn có thể. Làm công việc ở mức tốt nhất bạn có thể. Đừng nghĩ về tiền bạc, đảm nhiệm nhiều vai trò khác nhau trong dự án này – tất cả sẽ đến sau đó – còn lúc này, bạn hãy chỉ tập trung vào để làm cho công việc hoàn thành một cách hiệu quả nhất có thể và mở rộng các kỹ năng của bạn.

Bước 6: Học những bài thực hành tốt nhất về cấu trúc (structural)

Bây giờ là lúc để bạn bắt đầu nâng cao chất lượng trong việc viết code. Đừng lo lắng quá nhiều về vấn đề thiết kế phần mềm tại thời điểm này. Bạn cần học làm thế nào để viết những đoạn “code sạch” (clean code) mà dễ dàng để hiểu và bảo trì. Để làm được điều này, bạn sẽ cần phải đọc rất nhiều và xem nhiều ví dụ về một số đoạn code tốt (good code).

Hãy bổ sung vào giá sách của bạn với những cuốn sách sau đây:

Các cuốn sách về cấu trúc ngôn ngữ xác định như:

Tại thời điểm này bạn thực sự muốn tập trung việc học của mình vào xử lý cấu trúc để viết ra những đoạn code hay và làm việc trên nhiều hệ thống đang tồn tại. Bạn sẽ cố gắng để dễ dàng thực thi một thuật toán trong ngôn ngữ lập trình của bạn đã chọn và làm nó theo cách dễ dàng để đọc và hiểu nhất.

Bước 7: Học một ngôn ngữ lập trình thứ hai

Tại thời điểm này bạn nên phát triển khả năng bằng cách học một ngôn ngữ lập trình thứ hai thực sự tốt. Bạn nên chọn một ngôn ngữ lập trình mà khác hẳn ngôn ngữ mà bạn đã biết.

Điều này có vẻ như là hơi kỳ quặc, nhưng hãy để tôi giải thích lý do tại sao việc này là rất quan trọng. Khi bạn biết một ngôn ngữ lập trình thật giỏi, thì bạn chỉ hiểu các khái niệm của phát triển phần mềm trong ngôn ngữ lập trình đó, mà việc phát triển phầm mềm thì lại vượt quá một ngôn ngữ hoặc công nghệ riêng rẽ nào. Nếu bạn dành thời gian trong một môi trường hoặc ngôn ngữ lập trình mới, thì bạn sẽ bắt đầu nhìn thấy mọi thứ theo một cách mới. Bạn sẽ bắt đầu để học một cách thực tiễn hơn là theo cách bắt chước.

Là một lập trình viên mới, bạn thường rất thích làm mọi thứ theo một cách đặc biệt nào đó mà không cần biết lý do tại sao bạn lại đang làm chúng theo cách đó. Một khi bạn đã học một ngôn ngữ lập trình thứ hai và nắm vững công nghệ, thì bạn sẽ bắt đầu tìm hiểu xem về lý do tại sao. Tin tôi đi, bạn sẽ phát triển nếu bạn thực hiện điều này. Đặc biệt là nếu bạn chọn lấy một ngôn ngữ lập trình mà bạn ghét.

Chắc chắn rằng bạn xây dựng một thứ gì đó cùng với ngôn ngữ mới này. Không cần phải hoành tráng, nhưng một cái gì đó đủ phức tạp để bắt bạn phải suy nghĩ động não thật nhiều và có thể thậm chí phải đập đầu vào tường – nhè nhẹ.

Bước 8: Xây dựng một cái gì đó có giá trị

Tốt rồi, bây giờ tiến đến việc kiểm tra thực sự để chứng tỏ khả năng phát triển phần mềm của bạn. Liệu bạn có thể thực sự xây dựng một cái gì đó quan trọng cho chính mình?

Nếu bạn tiếp tục tiến lên và tự tin để nhận một công việc xây dựng một cái gì đó, và có lẽ thậm chí thiết kế một cái gì đó cho một ông chủ của mình, bạn biết là bạn có thể làm nó. Không có cách nào tốt hơn để biết nó hơn là bắt tay vào làm nó.

Chọn một dự án mà sẽ sử dụng được toàn bộ các kỹ năng của bạn. Chắc chắn rằng bạn kết hợp cả cơ sở dữ liệu, framework và mọi thứ khác mà bạn cần để xây dựng một ứng dụng hoàn chỉnh. Dự án này nên là một cái gì đó mà sẽ chiếm của bạn nhiều hơn một tuần làm việc và yêu cầu một số suy nghĩ nghiêm túc và thiết kế. Thử làm một cái gì đó mà bạn có thể kiếm được tiền từ nó để bạn có một vài động lực làm việc.

Nên chắc chắn rằng bạn không phát triển nó ra quá lớn. Bạn vẫn không muốn mang quá nhiều tham vọng vào đây. Chọn một dự án mà sẽ thách thức bạn, nhưng không phải là một dự án mà bạn sẽ chẳng bao giờ hoàn thành được. Đây là một bước ngoặt quan trọng trong sự nghiệp của bạn. Nếu bạn có sự cam kết để theo và hoàn thành dự án này, thì bạn sẽ đi được rất xa, còn nếu bạn không thể… vâng, thì tôi không thể nói trước được điều gì.

Bước 9: Kiếm một công việc tạo một hệ thống mới

Ok, bây giờ là lúc để bạn lại tiếp tục đi tìm công việc tiếp theo. Bởi vào thời điểm này, bạn đã đạt được lợi ích lớn nhất từ công việc hiện tại – đặc biệt là nếu nó vẫn chỉ là công việc bảo trì.

Tham gia tạo ra một hệ thống phần mềm mới.

Đây là thời điểm để tìm kiếm một công việc mà sẽ thách thức bạn – nhưng đừng quá nhiều. Bạn vẫn sẽ phải học rất nhiều, vì vậy bạn không muốn nhận một công việc mà quá phức tạp so với bạn. Lý tưởng là bạn nên tìm một công việc nơi mà bạn sẽ có cơ hội để làm việc trong một nhóm đang xây dựng một sản phẩm gì đó mới mẻ.

Có thể bạn không phải là người kiến trúc ra hệ thống đó, nhưng việc tham gia tạo ra một ứng dụng sẽ giúp bạn mở rộng các kỹ năng của mình và thách thức bạn trong nhiều cách khác nhau hơn là chỉ ngồi bảo trì một hệ thống phần mềm đang tồn tại.

Bạn đã có một sự tự tin trong việc tạo ra một hệ thống mới rồi, bạn vừa kết thúc việc tạo ra một hệ thống quan trọng cho riêng mình, vì vậy bạn có thể bước vào buổi phỏng vấn mà không cảm thấy quá hồi hộp và cùng với niềm tin rằng bạn có thể làm được công việc đó. Sự tự tin này sẽ giúp bạn có thể nhận được bất cứ công việc nào mà bạn ứng tuyển vào.

Hãy chắc chắn rằng bạn khiến cho nhà tuyển dụng được tập trung. Hãy nêu bật lên tập các kỹ năng xác định mà bạn đã đạt được. Đừng cố gây ấn tượng với bất kỳ ai bằng một danh sách dài dằng dặc của những kỹ năng chả liên quan gì. Tập trung vào những kỹ năng quan trọng nhất và tìm kiếm những công việc mà phù hợp chính xác với chúng – hoặc ít ra thì cũng phù hợp nhất có thể.

Bước 10: Học những bài thực hành tốt nhất về thiết kế phần mềm

Bây giờ là thời điểm để bạn đi từ một junior (ít kinh nghiệm) thành một senior developer (lập trình viên lão luyện). Các junior developer thường bảo trì các hệ thống, còn senior developer thì thiết kế và xây dựng các hệ thống của họ. (Thường là vậy, dĩ nhiên là cũng có một số senior developer chuyên đi bảo trì các hệ thống.)

Bạn đã sẵn sàng để xây dựng các hệ thống ngay lúc này, nhưng bây giờ bạn cần phải học cách làm thế nào để thiết kế ra chúng.

Bạn nên tập trung vào việc nghiên cứu vào các bài thực hành thiết kế tốt nhất và một số chủ đề nâng cao kiểu như:

  • Design patterns
  • Inversion of Control (IOC)
  • Test Driven Development (TDD)
  • Behavior Driven Development (BDD)
  • Các phương pháp phát triển phần mềm như: Agile, SCRUM, v.v…
  • Message buses và integration patterns

Danh sách này có thể sẽ còn dài ra rất nhiều – bạn sẽ chẳng bao giờ có thể kết thúc việc học và phát triển các kỹ năng của bạn trong lĩnh vực này. Chỉ nên chắc chắn rằng hãy bắt đầu cùng với những thứ quan trọng nhất trước tiên – điều này sẽ phụ thuộc vào cái mà bạn cảm thấy thú vị và nơi mà bạn muốn đến trong sự nghiệp của mình.

Mục tiêu của bạn ở đây là có khả năng không chỉ là xây dựng một hệ thống mà một ai đó đã thiết kế ra, mà nó phải hình thành dựa trên quan điểm của chính bạn về phần mềm nên được thiết kế ra làm sao và những dạng kiến trúc nào thì phù hợp cho những loại vấn đề này.

Bước 11: Tiếp tục học

Tại thời điểm này thì bạn đã làm ra sản phẩm phần mềm, nhưng bạn cần phải tiếp tục phát triển để trở thành một lập trình viên giỏi, thậm chí có thể trở nên “xuất sắc”. Luôn tâm niệm rằng bạn sẽ luôn có một cái gì đó để học thêm.

Phải mất bao lâu thì bạn mới có thể tới được điểm này? Tôi cũng không biết chắc. Nó có thể mất ít nhất một số năm, nhưng có thể phải đến 10 năm hoặc hơn – nó còn tùy thuộc vào việc bạn cống hiến nhiều như thế nào và những cơ hội nào xuất hiện với bạn nữa.

Có một con đường tắt khá tốt đó là cố gắng và luôn luôn bao quanh bạn bởi những lập trình viên giởi hơn bạn để có thể học hỏi từ họ.

Một số điều cần làm trong suốt quá trình thực hiện các bước trên

Có một số điều mà bạn nên làm trong suốt quá trình mà bạn đang làm theo 10 bước nói trên. Nó sẽ rất khó để liệt kê chúng trong mỗi bước, vì vậy tôi sẽ liệt kê chúng một cách tóm tắt ở đây:

Dạy – Toàn bộ thời gian trong quá trình bạn đang học các thứ nói trên, bạn cũng nên dạy chúng cho những người khác. Không quan trọng là liệu bạn là một người mới bắt đầu hay là một chuyên gia, bạn sẽ có một cái gì đó có giá trị để dạy, dạy người khác thì cũng là một cách tốt nhất để học. Ghi lại tài liệu tất cả quá trình và chuyến hành trình của bạn, và giúp đỡ những người khác trên suốt con đường mà bạn đi.

Tiếp thị bản thân bạn – Tôi nghĩ rằng đây là một điều rất quan trọng đến mức tôi đã xây dựng một khóa học hoàn chỉnh về ý tưởng này. Học cách làm thế nào để tiếp thị bản thân và tiếp tục làm nó trong suốt sự nghiệp của bạn. Nhận ra cách làm thế nào để có thể tạo ra thương hiệu cá nhân cho chính bạn, xây dựng một danh tiếng cho riêng mình trong ngành công nghiệp phần mềm và bạn sẽ chẳng bao giờ sợ thiếu việc làm cả. Bạn sẽ quyết định về tương lai của chính mình nếu bạn học được cách tiếp thị bản thân. Có rất nhiều công việc phải làm, nhưng nó cũng mang lại giá trị xứng đáng. Bạn đang đọc bài viết này từ chính nỗ lực của tôi cho mục đích đó.

ĐọcĐừng bao giờ ngừng học. Đừng bao giờ ngừng đọc. Luôn luôn làm việc theo cách của bạn thông qua những cuốn sách. Luôn luôn phát triển bản thân. Chuyến hành trình tìm kiếm tri thức của bạn sẽ chẳng bao giờ kết thúc, vì việc học là chuyện của cả đời. Bạn có thể sẽ không biết được tất cả. Nếu bạn tiếp tục học trong suốt sự nghiệp của mình, thì bạn sẽ luôn luôn vượt trội hơn so với những đồng nghiệp khác.

Làm – Với mỗi điểm dừng chân trên chuyến hành trình đó, đừng chỉ học mà hãy làm. Hãy đặt mọi thứ mà bạn học được vào hành động. Thiết lập một quỹ thời gian bên cạnh để luyện tập các kỹ năng của bạn và viết code và xây dựng một số thứ. Cũng giống như việc bạn có thể đọc tất cả các cuốn sách về hướng dẫn chơi golf mà bạn muốn, nhưng bạn sẽ chẳng bao giờ trở thành tay golf số 1 thế giới như Tiger Woods nếu bạn không vác gậy đi đánh golf thực sự.

LINK: https://vinacode.net/2014/10/31/tro-thanh-mot-lap-trinh-vien-gioi/

Bài viết được dịch từ blog Simple Programmer

16 Cuốn sách “kinh điển” mà tất cả lập trình viên đều nên đọc

 

Trong bài viết gần đây, một lập trình viên Mỹ đã than rằng:

“Tôi đã sai lầm khi dành quá nhiều thời gian để đọc những cuốn sách về một công nghệ nhất định nào đó như là ASP.NET hoặc Hibernate, thay vì nên đọc những cuốn sách kiểu như ‘Code Complete’, ‘Clean Code’, và ‘Agile Principles, Patterns And Practices in C#’. (Tất cả những cuốn sách này, nếu bạn chưa đọc chúng thì tôi khuyên bạn nên dành thời gian để đọc.)”

Chúng ta đều biết là số lượng không bằng chất lượng. Bằng chứng là vào năm 1958, một học giả người Mỹ là ông Sturgeon đã công bố nghiên cứu nổi tiếng về quy luật 90/10, rằng “90% tất cả mọi thứ trong đời đều là vớ vẩn“, bạn thử kiểm tra lại các mối quan hệ bạn bè đồng nghiệp, các sách báo mình đã đọc… xem có đúng không?

Và trước khi xem qua danh sách này thì chúng ta hãy cùng đọc lại một đoạn trong bài viết của một lập trình viên khá nổi tiếng tại Ấn Độ nhé:

“Cũng giống như ngoài đại dương bao la kia, phía trên bề mặt thì sóng rất dữ dội nhưng ở mực nước sâu thì mọi thứ tương đối yên tĩnh, phẳng lặng và hầu hết các sinh vật sống và phát triển tại đây. Vì thế, hãy tự cảm nhận rằng mình đang ở mực nước sâu và tiến gần với những công nghệ cốt lõi. Bạn hãy dành nhiều thời gian để học về những khái niệm cốt lõi hơn là cứ ngồi đó mà lo lắng về những framework và công cụ luôn thay đổi xoành xoạch xung quanh nó. Cùng với nền tảng vững chắc của những kiến thức cốt lõi, bạn sẽ luôn dễ dàng học được những framework, công cụ và các API mới.”

Lập trình viên nên chọn cuốn sách nào để “gối đầu giường”?

 

1. Code Complete 2

Code Complete 2

Cuốn sách Code Complete 2 của tác giả Steve McConnell đối với các nhà phát triển phần mềm thì cũng nổi tiếng như cuốn Joy of Cooking dành cho các chuyên gia đầu bếp vậy. Đọc nó nghĩa là bạn yêu thích công việc của mình, bạn có thái độ nghiêm túc về cái bạn làm, và bạn muốn làm cho nó trở nên tốt hơn. Trong Code Complete, tác giả Steve ghi chú rằng lập trình viên trung bình đọc ít hơn một cuốn sách kỹ thuật mỗi năm. Và với việc đọc cuốn sách này thì đã giúp kéo bạn ra xa khỏi 90% các đồng nghiệp của còn lại. Theo hướng tốt hơn.

Tôi thích cuốn sách này nhiều đến nỗi tên miền blog của tôi (Coding Horror) là xuất phát từ nó. Bạn nên đọc cuốn sách này đầu tiên, và là cuốn sách đầu tiên mà bạn giới thiệu đến các lập trình viên đồng nghiệp của mình.

2. The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)

The Mythical Man-Month

Có nhiều ý kiến cho rằng đây là cuốn sách “kinh điển” duy nhất trong lĩnh vực phát triển phần mềm của chúng ta. Nếu bạn vẫn chưa đọc nó, thì thật đáng hổ thẹn.

Tôi thách thức bất kỳ lập trình viên nào đọc cuốn The Mythical Man Month mà lại không tìm thấy câu chuyện về một hệ điều hành không tồn tại nữa, và nhóm người đã phát triển ra nó, rất đáng ngạc nhiên là chúng lại rất liên quan đến vấn đề của bạn ngày nay. Cuốn sách 25 năm tuổi đã minh họa sâu sắc một quan điểm rằng: máy tính có thể thay đổi, nhưng con người thì không.

Đọc cuốn sách kinh điển này chắc chắn sẽ tốt hơn rất nhiều việc bạn sử dụng thời gian để nghiền ngẫm trên hàng ngàn trang tài liệu kỹ thuật mới nhất hiện nay.

3. Don’t Make Me Think: A Common Sense Approach to Web Usability

Dont make me think

Một cuốn sách tốt nhất về usability (tính dễ sử dụng của phần mềm) mà tôi đã từng đọc. Tác giả Steve Krug đã bao quát mọi khái niệm quan trọng về usability trong cuốn sách này, và ông làm công việc đó rất tốt. Đọc cuốn sách này thì rất vui. Nếu bạn chọn đọc chỉ một cuốn sách về usability, thì hãy lựa chọn cuốn này. Nó chứa rất nhiều thông tin tuyệt vời, và hình thức trình bày thì ngắn gọn súc tích, dễ áp dụng theo. Nó phù hợp với bất kỳ độc giả nào: dân kỹ thuật, không phải dân kỹ thuật, người dùng bình thường, lập trình viên, nhà quản lý v.v…

4. Rapid Development

Rapid Development

Tiêu đề đầy đủ của cuốn sách này là Rapid Development: Taming Wild Software Development Schedules, nó không chỉ dài dòng và hơi buồn cười, mà nó còn dùng sai từ một cách đáng tiếc nữa.

Rapid Development thì không nói về việc phát triển nhanh ứng dụng như cái tên của nó. Nội dung cuốn sách nói về *thực tế của thất bại*. Phần lớn các dự án phát triển phần mềm đều thất bại: chúng thường vượt quá thời hạn kế hoạch đã đặt ra, tạo ra các kết quả không đạt yêu cầu, hoặc đôi khi thậm chí nó còn không thể kết thúc được. Điều này không còn phải tranh cãi; vì đó là một thực tế đã được thống kê. Có một sự thực không mấy dễ chịu đó là team của bạn phải trở nên giỏi hơn trong việc tránh những thất bại đơn giản để có thể thành công. Trong khi nghe điều này có thể làm bạn nản lòng — vâng, nó thì rất nản lòng — nhưng bạn sẽ vẫn muốn đọc cuốn sách này.

Tại sao ư? Bởi vì một nửa thành công là không được lặp lại những sai lầm mà bạn hoặc người khác đã mắc phải. Quan điểm của cuốn sách này đó là việc phạm sai lầm là tốt. Nhưng nếu bạn đang phạm phải chính những sai lầm kinh điển trước đây, thì bạn đã thất bại ngay trước khi thậm chí bắt đầu. Và nếu bạn không biết điều đó là như thế nào thì bạn đang phạm phải một trong những sai lầm đó ngay lúc này.

Lĩnh vực của chúng ta là một trong số ít lĩnh vực thường xuyên thay đổi, vì vậy cách duy nhất là ôm lấy sự thay đổi đó và thử áp dụng những kỹ thuật phát triển “Rapid” khác biệt. Nhưng điều ngược lại thì không đúng. Chúng ta không thể cho rằng có quá nhiều thay đổi từ năm 1970, dẫn đến tất cả các bài học về phát triển phần mềm trước đây đều trở nên lỗi thời và không thích hợp khi so sánh với những công nghệ mới đang “hot” hiện nay. Điều này thì cũng đề cập đến cùng một câu chuyện: máy tính đã thay đổi; con người thì không.

Ít nhất thì cũng có một vài ý tưởng về cái gì làm việc và cái gì không trước khi bạn bắt đầu — như McConnell đã nói, “hãy đọc hướng dẫn sử dụng trên thùng sơn trước khi sơn“. Chắc chắn là vấn đề này nghe có vẻ hiển nhiên cho tới khi bạn đọc cuốn sách này và nhận ra điều đó rất hiếm khi và thực sự xảy ra trong lĩnh vực của chúng ta.

5. Peopleware : Productive Projects and Teams, 2nd Ed.

Peopleware Productive Projects and Teams

Nếu bạn đã từng nhìn thấy màn trình diễn của một đội bóng toàn ngôi sao nhưng được dẫn dắt bởi một vị huấn luyện viên tồi, thì bạn sẽ đánh giá cao cuốn sách này. Không quan trọng là có bao nhiêu “siêu sao” trong nhóm của bạn, khi không ai trong số họ có thể trao đổi cùng nhau, hoặc đồng ý về bất cứ việc gì. Và không có lập trình viên nào, dù có tài năng đến mấy, có thể làm việc hiệu quả khi luôn luôn bị rào cản bởi những ngắt quãng nhỏ nhặt. Các lập trình viên không đánh giá đúng các kỹ năng về con người của họ, nhưng một điều trớ trêu thay: thành công của dự án của bạn có thể phụ thuộc rất nhiều vào điều đó. Nếu bạn có bất kỳ một khát khao chính đáng để trở thành một “Team Leader” thực thụ thay vì chỉ là cái chức danh hão, thì bạn cần phải đọc cuốn sách này.

Trong khi Peopleware chứa đầy những quan điểm hoàn toàn vững chắc và tuyệt vời, nó cũng ngụ ý về một mức độ kiểm soát nhân viên dựa trên không gian làm việc là hoàn toàn kỳ quặc tại hầu hết các công ty. Nhưng ít nhất bạn cũng sẽ biết khi nào thì môi trường làm việc của mình, hoặc team của mình đang gặp một vấn đề thực sự — và quan trọng hơn là cần phải làm gì để giải quyết nó.

6. The Design of Everyday Things

The Design of Everyday Things

Công việc phát triển phần mềm có thể làm bạn nản lòng đến mức khó tin, bởi vì có quá nhiều thứ có thể trở nên sai sót. Có rất nhiều thứ chúng ta làm là để phòng thủ: cố gắng đoán trước điều gì sẽ trở nên sai trước khi nó xảy ra. Nó là nguyên nhân làm bạn kiệt sức về tinh thần, và thậm chí có thể biểu lộ bản thân theo một số cách khá tiêu cực. Đôi khi tôi mô tả công việc này với những người không chuyên về kỹ thuật như thể tôi đang tạo ra một cái đồng hồ với hàng ngàn chi tiết nhỏ, tất cả chúng có thể hỏng một cách ngẫu nhiên vì những kích thích nhỏ nhất.

7. About Face 3.0: The Essentials of Interaction Design

About Face

Alan Cooper, cha đẻ của ngôn ngữ Visual Basic, và là cha đỡ đầu của usability. Tôi xin nói thành thật rằng: tôi đã đọc cuốn sách này cách đây lâu lắm rồi. Tôi mua cuốn sách này khi nó được xuất bản vào khoảng năm 1995, vì vậy tôi có phiên bản “cũ” 1.0 của cuốn sách. (Nó có bị xem là usability tồi không? khi bạn không dùng những cuốn sách của mình lúc có những phiên bản mới?)

Cuốn sách này, cùng với cuốn GUI Bloopers, có khuynh hướng trở thành những cuốn sách về quy tắc sư phạm trong việc trình bày một GUI nhất quán. Nhưng đây là một trong những chỉ dẫn đầy đủ nhất mà bạn có thể ứng dụng được.

Không giống như cuốn GUI Bloopers, vì nó xuất bản thời trước khi có web, vì vậy không có sự bàn luận về cách trình bày trên web và nó có tác động đến thiết kế GUI như thế nào. Nhưng nó thì vẫn là một cuốn sách hữu ích tuyệt vời; tôi đã sử dụng chương sách nói về mô hình quản lý thông điệp lỗi (error messages) cho một dự án .NET gần đây.

8. The Inmates Are Running the Asylum : Why High Tech Products Drive Us Crazy and How To Restore The Sanity

The Inmates Are Running The Asylum

Đây là cuốn sách đã giới thiệu với thế giới về khái niệm personas (con người): thay vì trước đây chúng ta cứ nghĩ người dùng là trừu tượng, khó mô tả, là một nhóm người không xác định, thì giờ đây với khái niệm personas sẽ hướng dẫn chúng ta nói chuyện về những người dùng xác định, người mà có tên, có cá tính, có nhu cầu và mục tiêu. Liệu người dùng (users) của chúng ta có muốn chức năng print preview không? Bố ai mà biết được? Nhưng nếu Gerry Manheim là kế toán trưởng, và anh ta phải in ra bảng báo cáo chi tiêu hàng tuần như là một phần công việc của mình, thì tốt hơn là bạn nên tin rằng chức năng print preview cần phải có trong phần mềm. Không có gì thần kỳ ở đây cả; luôn phải biết người dùng của bạn là ai và họ thực sự muốn làm gì — và kỹ thuật sử dụng khái niệm personas đúng là một cách rất tuyệt vời.

Cũng có một phân tích khá thú vị ở đây về việc các lập trình viên có khuynh hướng nghĩ rằng bản thân họ có khả năng tạo ra các quyết định về usability nhân danh những người dùng “bình thường”, nhưng trong thực tế thì hoàn toàn ngược lại. Các lập trình viên chính là những người dùng kỳ cục và cực đoan nhất.

Một bài học ẩn chứa phía sau cuốn sách này đó là đôi khi thiết kế của bạn có tốt như thế nào chăng nữa cũng không quan trọng: phần mềm cho máy scannerphần mềm phát triển webđược sử dụng làm ví dụ trong cuốn sách này, cả hai đều thất bại trên thị trường vì những lý do rằng không có gì phải làm với tính usability của chúng cả.

Dù sao thì đây là một cuốn sách tuyệt vời khác của tác giả Cooper, và một sự tiến bộ hợp lý kể từ cuốn About Face đã đề cập phía trên. Trong cuốn About Face, tác giả Cooper coi đối tượng “Perpetual Intermediates” như là độc giả chính, còn ở đây, có một sự xác định rõ ràng hơn và vì vậy dễ phát triển hơn, đó là đối tượng personas.

9. GUI Bloopers: Don’ts and Do’s for Software Developers and Web Designers

GUI Bloopers

Quay trở lại những ngày tươi đẹp của Windows 95 và Apple’s System 7, đã có những quy tắc thực tế về giao diện người dùng GUI. Và đây là một cuốn sách đặc sắc trong việc thiết kế GUI, về tính nhất quán trong các menu, việc căn lề các button và các text trên các cửa sổ dialog. Bạn có thể tranh luận rằng liệu có bao nhiêu người dùng có thể thực sự hiểu về những quy tắc này, nhưng it ra thì họ cũng có thể mong chờ giao diện người dùng của ứng dụng A có cách bố trí rất giống với ứng dụng B.

Một thực tế đó là thế giới GUI cổ điển và thế giới của trình duyệt (browser) đang dần nhập lại với nhau — kết hợp lấy tất cả những ưu điểm tốt nhất của cả hai. Có những loại ứng dụng mà có giao diện giống hệt của browser.

10. Programming Pearls (2nd Edition)

Programming Pearls

Tôi đã hơi lưỡng lự khi liệt kê cuốn Programming Pearls vào danh sách này, bởi vì nó chứa khá nhiều kỹ thuật lập trình ở mức thấp, nhưng có đủ “pearls” (tác giả chơi chữ vì pearl có nghĩa là ngọc trai) của nghề phần mềm trong cuốn sách này để làm cho nó có giá trị đối với thời gian của bất kỳ một lập trình viên nào. Programming Pearls là cuốn sách hay tiếp theo để bạn làm việc bên cạnh như thể đang làm cùng với một lập trình viên tài năng vậy. Nó là một tập hợp của những khôn ngoan của nhiều lập trình viên “cao thủ” đã được chưng cất và cô đọng lại, nhưng khá dễ hiểu.

Tôi sẽ không nói dối bạn: phần lớn các chương trong cuốn sách này bạn có thể lờ đi. Ví dụ, tôi không thể tưởng tượng việc thực thi các thuật toán sorting, heap hoặc hash lại được viết lại trong các chương 11, 13 và 14 tương ứng, vì ngày nay đã có những thư viện tuyệt vời cho những thứ nguyên thủy cơ bản này. Chỉ cần đọc lướt qua cuốn sách, lờ đi các phần code. Chương 8, “Back of the Envelope” thì quan trọng, có thể là phương pháp ước lượng tốt nhất mà tôi đã từng được nhìn thấy. Nó cũng tiến một bước dài về phía trước để giảng giải về những câu hỏi phỏng vấn điên khùng mà các công ty thường sử dụng để làm phiền chúng ta.

11. The Pragmatic Programmer: From Journeyman to Master

The Pragmatic Programmer

Cuốn sách này khiến tôi nhớ về rất nhiều điểm trong cuốn Programming Pearls, nhưng nó thì thực sự tốt hơn, bởi vì nó ít tập trung vào code. Thay vì việc lo lắng về code, các tác giả đã đưa vào tất cả những hướng tiếp cận mà họ đã nhận thấy nó làm việc trong thế giới thực vào trong một cuốn sách này. Không phải tất cả những thứ này đều là về kỹ thuật lập trình. Ví dụ, việc hỏi bản thân rằng “Tại sao tôi lại làm điều này? Liệu làm việc này thậm chí có chút giá trị nào chăng?” thì không phải đang nghĩ ra ngoài cái hộp (thinking outside the box); nó là một điều gì đó bạn nên tổ chức vào trong các hoạt động hàng ngày để giữ cho bản thân mình — và đồng nghiệp của bạn — luôn được sảng khoái. Và chính điều đó đã làm cho Pragmatic Programmer trở thành một cuốn sách tuyệt vời.

Nếu bạn muốn biết thêm một chút về cuốn sách này, thì tôi đã tạo ra một phiên bản HTML một phần mục lục tóm tắt để tham chiếu đến các phần bên trong, nó sẽ cung cấp cho bạn một cái nhìn tổng quan về nội dung cuốn sách.

12. Designing Web Usability : The Practice of Simplicity

Designing Web Usability

Tác giả Jakob Neilsen nổi tiếng vì trang web usability của ông, và nghề nghiệp là một chuyên gia về usability từ những năm 1989 khi mà cuốn sách đầu tiên của ông được xuất bản. Cuốn sáchDesigning Web Usability là một khóa học đầy đủ kiến thức căn bản về web usability, nhưng nó có một chút khác biệt hơn các cuốn sách hướng GUI của tác giả Cooper ở trên.

13. The Visual Display of Quantitative Information

The Visual Display of Quantitative Information

14. Visual Explanations: Images and Quantities, Evidence and Narrative

Visual Explanations

15. Envisioning Information

Envisioning Information

Thông tin thì rất “đẹp”. Và một giao diện người dùng GUI được thiết kế tốt cũng vậy. Bạn không cần phải sở hữu tất cả 3 cuốn sách trong sê-ri này trừ khi bạn là một người hoàn hảo, nhưng 2 cuốn đầu thì rất cần thiết.

16. Mastering Regular Expressions, Second Edition

Regular Expressions

Hệ điều hành UNIX thường nổi tiếng một cách xứng đáng vì độ phức tạp và không thể xâm nhập. Và Regular Expressions cũng nổi tiếng như vậy.

Tôi có thể trở thành một thành viên của câu lạc bộ “Keep It Simple Stupid – giữ cho nó đơn giản nhất đồ ngốc ạ”, nhưng tôi đang làm một ngoại lệ đối với regular expressions. Nếu viết tốt, thì chúng sẽ tiết kiệm cho bạn vô số thời gian trong việc thao tác bằng tay để bắt các trường hợp khác nhau, và tôi cũng hiếm gặp một dự án nào mà chúng lại không có ích ở một nơi nào đó.

Một khi bạn đã nhảy vào thế giới của regular expressions, thì bạn có thể sẽ trở nên mê mẩn với sức mạnh tuyệt vời và tiềm năng mà chúng có.

LINK: https://vinacode.net/2014/09/29/sach-hay-cho-lap-trinh-vien/comment-page-1/#comment-6460

Một số lời khuyên cho các bạn trẻ đang theo đuổi ngành CNTT

  • Hãy chơi thể thao ít nhất 1 tiếng mỗi ngày: bơi – chạy – bóng bàn – bóng đá – võ thuật… Ngồi máy tính nhiều dễ bị các bệnh nghề nghiệp như: trĩ, vô sinh, tim mạch.
  • Hãy sử dụng thời gian một cách hiệu quả. Thêm một giờ tập trung code, bạn sẽ kiếm thêm tối thiểu 3 triệu VNĐ/tháng.
  • Cám dỗ và thú vui thì rất nhiều, mà thời gian thì lại có hạn. Bởi vậy để trở thành một chuyên gia tin học thực sự và không bị lạc hậu thì bạn sẽ phải hy sinh nhiều thứ. Cá nhân mình không bao giờ xem TV, không đi nhậu lai rai, tránh những buổi tiệc tùng… để có thêm thời gian cho công việc chuyên môn.
  • Hãy tích cực viết blog để chia sẻ kinh nghiệm lập trình. Vừa để ghi nhớ lại kinh nghiệm đã trải qua, vừa tạo profile tốt rất cần khi đi xin việc.
  • Copy những quyển ebook tin học hay vào máy tính bảng để tranh thủ đọc. Kiến thức sẽ bán được nếu kiến thức đó đã qua trải nghiệm thực sự. Do đó đọc xong phải lập trình thử luôn.
  • Viết và tham gia một dự án mã nguồn mở trên GitHub hoặc trả lời trên StackOverflow, trao đổi trên Quora.
  • Tích cực tìm kiếm bạn gái: tình yêu và sự lãng mạn là điều rất tốt cho lập trình và các công việc mang tính sáng tạo.

LINK: https://vinacode.net/2015/05/18/viet-blog-chia-se-kinh-nghiem-lap-trinh/

Bạn có thể lập trình đến năm bao nhiêu tuổi?

Bài viết rất hữu ích với các LTV.

 

Tác giả bài viết này đã 40 tuổi, sẽ lập trình đến năm 50. Hiện đã kiếm đủ để hạnh phúc với cuộc sống giản dị. Các bạn đừng quá lo. Cứ học, và lập trình chăm vào. Đoạn sau là hiện thực xã hội Vn. Còn bạn vẫn giỏi và đam mê, ai cấm được bạn nghĩ kiếm tiền từ lập trình.
Email của mình đây nhé: cuong[at]techmaster[dot]vn. Mình là giảng viên dạy môn iOS, Objective-C, Swift, Node.js và Python ở Techmaster.

Ngày hôm nay, đi đến bất kỳ trường đại học nào, trường cao đẳng nào, trường nghề nào, chúng ta cũng thấy có khoa đào tạo tin học.  Chi phí để mở khoa đào tạo tin học trong mắt các nhà quản lý giáo dục hay kinh doanh giáo dục khá rẻ, điều kiện cơ hội cũng thuận lợi:

  • Đầu tư phòng lab máy tính khoảng 12 triệu VND /1 máy. 20 máy tính khoảng 240 triệu VND. Bàn ghế, máy chiếu, bảng, quạt trần, điều hòa thêm khoảng 150 triệu VND. Nhìn chung là không quá cao.
  • Giảng viên có thể thuê ngoài. Giáo trình có thể mua từ Mỹ, Ấn. Thậm chí thuê vài ông lập trình viên quá đát, chán lập trình, thích làm quản lý, thích đứng lớp về dạy là chuẩn nhất. Sinh viên vừa thích nghe thầy kể chuyện, thầy có công ty ngoài, giới thiệu các em đi thực tập xin việc. Lợi cả đôi đường.
  • Đầu ra tuyển dụng lập trình viên tin học trong 20 năm trở lại đây và trong 5 năm kế tiếp luôn cao hơn nhiều số sinh viên CNTT có thể làm được việc luôn.
  • Truyền thông để tuyển sinh, ngành IT là ngành có nhiều thuận lợi nhiều so với ngành cơ khí, cầu đường, hóa chất... vì nghề IT được cho là văn minh, hiện đại ngồi văn phòng mát mẻ, điều hòa, không lấm lem dầu mỡ, hay vất vả nắng, mưa như xây dựng, cầu đường. Tấm gương ngành CNTT thông tin Ấn Độ, hay như các tỷ phủ Bill Gates, Mark Zuckerber hay Steve Jobs, bố mẹ ở thành phố đến nông thôn đều biết hoặc nghe qua.

Phụ huynh lẫn học sinh lựa chọn ngành CNTT ít đắn đo mà không hiểu rằng:

  1. Người chọn nghề, nhưng nghề cũng chọn người.
  2. Một công việc phổ thông đến một nghề kỹ thuật cần phải đào tạo. Từ một nghề để có một sự nghiệp tương đối thành công cần tối thiểu 10 năm lao động cật lực nghiêm túc. Xem bài Tự học lập trình trong 10 năm dịch từ bài gốc của tác giả Peter Novig
  3. Tuổi nghề lập trình viên (loại ngành hẹp trong CNTT có số lượng việc làm chiếm hơn 70%) ở Việt nam rất là thấp trung bình dưới 35 tuổi. Trong khi tuổi về hưu trung bình là 60 tuổi.

 Tuổi nghề lập trình viên ( loại ngành hẹp có số lượng việc làm chiếm hơn 70%) ở Việt nam rất là thấp trung bình dưới 35 tuổi. Trong khi tuổi về hưu trung bình là 60 tuổi.

Các kỹ sư làm việc cho tập đoàn điện tử lớn Hàn Quốc thường có một sức ép rất lớn khi qua tuổi 40. Hoặc phải trở thành nhà quản lý, trưởng nhóm chịu trách nhiệm nhiều hơn, thưởng cao hơn, hoặc phải nhận bồi thường để nghỉ việc. Nghe nói những nhân viên kỳ cựu của chaebol Samsung  xin bị ép nghỉ việc được bồi thường một khoản tiến đủ để mở một quán thịt nướng Samkiepsa. Nhân viên làm cho công ty tư nhân nhỏ lẻ còn tệ hơn. Xem bài này . Nhiều người về hưu sau tuổi 40 đã phải lái xe taxi, làm bảo vệ, hoặc bán hàng ăn bằng xe đẩy. Chính mắt tôi đã chứng kiến cảnh này trong thời gian du học tại Hàn Quốc từ 2004 đến 2007.

Hiện nay hàng năm, ở ba thành phố lớn: Hồ Chí Minh, Hà nội, Đà nẵng, các công ty phần mềm (600 công ty lớn nhỏ) cần tuyển thêm mới khoảng 10,000 - 12,000 lập trình viên (bạn nào có con số chính xác hơn xin cung cấp). Trong 10 năm tới, số lượng lập trình viên, người làm IT ở Việt nam sẽ trở nên một lực lượng đông nhưng không tinh, chịu nhiều rủi ro và sẽ có tình trạng thất nghiệp.

Học lập trình trực tuyến tốt nhất
2013: 156,500 người làm trong ngành phần mềm + nội dung số. 2015 có thể đạt 190,000 người.
Học lập trình trực tuyến ở đâu tốt nhất?
Trang 86, sách trắng CNTT do Bộ thông tin truyền thông phát hành 2014
Chỉ 1/5 trong số sinh

Nếu số lượng lập trình viên chuyển sang làm quản lý quá đông, mô hình tổ chức sẽ trở nên cồng kềnh, nhiều lớp quản lý trung gian, lợi nhuận giảm. Công ty khó khăn khi chuyển hướng sang công nghệ mới. Năm 2010-2014 tôi đã chứng kiến sự chuyển đổi từ mô hình client - server, nền tảng .NET sang di động, điện toán đám mây. Các doanh nghiệp Việt nam (đặc biệt ở Hà Nội) tỏ ra rất chật vật so với những đối thử xừng xỏ như Trung Quốc, Ấn Độ, Đông Âu. Lập trình viên Trung Quốc năng động hơn chúng ta, họ tích cực tham gia đóng góp vào các mã nguồn mở, tạo ra các mã nguồn mở có chất lượng như Cocos2D-X, gói phần mềm cho Node.js, Go-Lang, Docker.... Năm 2014 -2015, khi trào lưu lập trình Freelancer phổ biến, chúng ta lại gặp sự cạnh tranh từ lập trình viên Nga - Ukraina do cuộc chiến ở Ukraina, khủng hoảng kinh tế Nga, thêm cả lập trình viên Campuchia, Philipines, code vừa tốt, vừa chăm, tiếng Anh lại giỏi.

Thực tế dạy và học lập trình ở Việt Nam

  • Mỗi lập trình viên Việt nam chưa hình thành thói quen cập nhật kiến thức liên tục. Tốt nghiệp đại học năm 21 tuổi, tính đến năm 37 tuổi lập trình được 14 năm, 2 năm cuối năng suất giảm gần như về 0. Trong 14 năm, đó, lập trình viên Vn thường chỉ chuyển đổi công nghệ 1 - 2 lần.
  • Bản thân họ và nhiều người định kiến cho rằng, qua tuổi 40, vẫn tiếp tục lập trình là sự nghiệp không thành công.
  • Công ty không có chương trình bồi dưỡng chuyên gia công nghệ. Trên 70% lập trình viên làm cho công ty gia công phần mềm, phần lớn lập trình trên khuôn mẫu, mã nguồn có sẵn. Tỷ lệ chuyển việc khá cao khoảng 3-4 năm/1 công ty, khiến các công ty ngại đầu tư lâu dài vào nhân lực.
  • Khóa CNTT ở các trường đại học công ở Việt nam không có môn nào kiểu như:
    • How to start up: dạy khởi nghiệp để lập trình viên chuyển từ thợ sang người sáng tạo sản phẩm dịch vụ
    • Career path development: phát triển nghề nghiệp hay tối thiểu như đạo đức nghề lập trình. Lập trình viên VN copy, sử dụng mã nguồn một cách bừa bãi, không tôn trọng quy định không tiết lộ (NDA - Non Disclosure Agreement),... là phổ biến. Không có "Đạo" là không có con đường dẫn lối. Không có đường dẫn lối, thì làm sao có thể tiến dài và tiến xa?
    • Môn thiết kế phần mềm có dạy nhưng lạc hậu, thiếu ví dụ cụ thể. Khiến cho sinh viên CNTT ra trường phải học lại lập trình như thợ lập trình mất 2 năm. Còn khả năng kiến trúc thiết kề thì còn tùy vào từng người, từng hoàn cảnh công việc.

Lập trình viên Việt nam sẽ làm gì nếu chỉ lập trình đến năm 37? Làm gì tiếp trong 23 năm tiếp theo?

Đây là một câu hỏi mà tôi đã từng trăn trở với chính tôi khi tôi 35 tuổi (2010). Lúc đó, tôi làm nhân viên của một tập đoàn phần mềm nước ngoài ở Việt nam. Công việc liên quan đến phần mềm nhưng không thực sự phát triển phần mềm, sản phẩm. Tôi bứt rứt khó chịu đến mức 1 năm sau đó đã xin nghỉ để có thể quay lại lập trình. Những người như tôi có thể không còn nhiều. Một khi đã làm cho tập đoàn nước ngoài, cái đích tiếp sẽ là chức vụ cao hơn hoặc chuyển sang một tập đoàn khác. Khi nào đi mỏi chân 5-6 công ty, thì cũng vừa lúc về hưu non (~48-50 tuổi).

Điều gì sẽ xảy ra nếu từ 2020, ở Việt nam hàng năm có khoảng 7,000 đến 8,000 lập trình viên qua tuổi 40 bị đào thải vì không cạnh tranh được với lực lượng lao động trẻ lương thấp, được đào tạo kỹ năng hợp thời hơn? Hoặc do thị trường gia công cho Nhật Bản đi xuống vì lúc này thế vận hội Olympic 2020 tại Nhật đã xong, nhu cầu phát triển phần mềm thay mới chững lại? Internet Of Thing phát triển mạnh, nhưng Việt nam không mạnh về kỹ nghệ điện tử, cơ khí chế tạo, kiểu dáng... Đã có nhiều dịch vụ điện toán đám mây đe dọa đến các sản phẩm, dịch vụ phần mềm trong nước ví dụ như: Uber - GrabTaxi, Skype, Viber, tiếp theo là y tế, giáo dục, tài chính...

Sau 5 năm, năng lực tiếng Anh của lập trình viên Việt nam có thể cạnh tranh với Ấn Độ chưa? Khi tại thời điểm này, người Ấn Độ đã nắm nhiều vị trí chủ chốt trong các tập đoàn phần mềm Mỹ. Kỹ năng nghiên cứu chuyên sâu, tự học của lập trình viên VN có cạnh tranh được với đồng nghiệp Trung Quốc? 5 năm là thời gian quá ngắn khó cải thiện hệ thống giáo dục bảo thủ, lạc hậu tại Việt nam. 

Tham khảo thêm bài viết "Nghề lập trình trước 40 tuổi"

Tham khảo Ấn Độ:

  • Lập trình viên Ấn Độ phải đi sang nhiều nước khác. Tiếng Anh lập trình viên Ấn rất tốt, còn tiếng Anh của lập trình viên VN kém. Họ chịu khó, khả năng thuyết trình, làm việc nhóm tốt, khả năng cò cưa đẩy việc cũng tốt.
  • Chuyển sang làm Freelancer
  • Bỏ nghề, chuyển nghề khác như lái xe taxi, mở hàng ăn, kinh doanh nhỏ....
  • Ấn Độ có ngành dịch vụ BPO, Call Center rất mạnh. Nhân viên IT có thể chuyển sang làm ở BPO, Call Center hoặc liên quan. Còn Việt nam chỉ tập trung khá đơn điều vào gia công phần cứng (công nhân tập đoàn Samsung, Intel, FoxCon, Microsoft), gia công phần mềm (60% đến từ thị trường Nhật Bản).

Đây là một bài viết chưa hoàn chỉnh vì chưa có ý kiến đóng góp từ những lập trình viên và anh em khác trong ngành, tôi tạm thời chưa viết phần kết. Tôi cần thêm phản hồi từ các bạn, những lập trình viên để có thêm thông tin để hoàn thành bài viết này.

Hãy chia sẻ ý kiến của bạn vào Google Form. Tôi sẽ trích dẫn trong bài tới

Học lập trình để kiếm việc làm

LINK: https://techmaster.vn/posts/33549/tuoi-nghe-lap-trinh-vien-o-viet-nam

Lý do yếu kém của các lập trình viên Ấn Độ

Bài viết của tác giả Ấn Độ, nhưng cũng gióng Việt Nam mình.

Lúc nào cũng vậy, tôi thường nghe rằng lập trình viên Ấn Độ có chất lượng rất thấp khi so sánh với những đồng nghiệp tại các quốc gia phương Tây. Các nhóm phát triển tại các nước phương Tây thường chỉ trích các đồng nghiệp đang làm gia công bên kia bán cầu luôn làm chậm tiến độ dự án của họ. Họ nói rằng các đồng nghiệp Ấn Độ không có năng lực về kỹ thuật; viết code rất tồi và không đưa ra được một giải pháp nào để giải quyết vấn đề khi gặp phải v.v…

Tại sao các lập trình viên Ấn Độ lại có đẳng cấp thấp hơn các đồng nghiệp phương Tây?


Theo quan điểm của tôi thì những lời chỉ trích này là có cơ sở. Vâng, chúng ta đang ở đẳng cấp thấp hơn so với những lập trình viên tại các quốc gia phương Tây và đôi khi đó là một điều đáng hổ thẹn. Tôi xin nói thêm rằng đây chỉ là quan điểm của cá nhân tôi, và không phải tất cả các lập trình viên tại Ấn Độ đều có chất lượng thấp. Nó là kết quả của việc chạy theo số lượng và chúng ta đã bỏ qua mặt chất lượng trong giáo dục.

Trong bài viết này, tôi sẽ đưa ra một số lý do giải thích tại sao lập trình viên Ấn Độ bị tụt lại phía sau so với những lập trình viên ở các quốc gia khác.

1. Đa số lập trình viên Ấn Độ là do chuyển từ ngành khác sang

Ở Ấn Độ thì bất kỳ ai cũng có thể trở thành một lập trình viên phần mềm mặc cho bằng cấp của anh (hoặc cô ta) là gì. Ví dụ như tôi, ban đầu là một kỹ sư cơ khí, nhưng khi đang học trong trường đại học thì tôi đã được tuyển dụng vào một công ty phần mềm, và sau đó tôi trở thành một lập trình viên phát triển phần mềm. Giống như tôi, rất nhiều bạn bè khác cũng trở thành lập trình viên phần mềm mà chuyên ngành đào tạo lại là một ngành khác. Hầu hết các sinh viên đại học được tuyển dụng vào các công ty phần mềm mà không biết chút gì về quy trình phát triển phần mềm và kiến thức nền tảng về lập trình.

2. Kiến thức thu được từ nhà trường hầu như không giúp ích được gì

Tôi đã tốt nghiệp từ một trong những trường đại học thuộc loại tốt nhất Ấn Độ, nhưng tôi có thể nói với bạn một điều rằng chất lượng giáo dục tại Ấn Độ thì rất tồi, bất kể là bạn tốt nghiệp từ trường nào. Ở Ấn Độ, quan trọng trong học tập là điểm số chứ không phải là kiến thức thực sự, sinh viên chỉ học vẹt lý thuyết để lấy điểm cao chứ về thực hành thì hầu như không biết gì. Gần đây tôi có phỏng vấn tuyển dụng một anh chàng có gần 6 năm kinh nghiệm, tốt nghiệp từ một trường rất nổi tiếng chuyên nghành Khoa Học Máy Tính với điểm tốt nghiệp rất cao, nhưng thậm chí anh ta không thể viết nổi chương trình tính dãy số Fibonacci.

3. Lập trình viên không chịu cập nhật kiến thức mới

Nếu bạn hỏi một lập trình viên rằng Cuốn sách kỹ thuật lập trình nào bạn đọc gần đây nhất? hoặcBạn thường làm cách nào để cập nhật kiến thức? hầu như bạn sẽ không nhận được câu trả lời. Không ai muốn học thêm hoặc phát triển kiến thức cho bản thân. Thậm chí nhiều lập trình viên chưa bao giờ nghe đến Code Complete.

4. Tất cả mọi người đều muốn trở thành người quản lý

Ở Ấn Độ bạn có thể trở thành trưởng nhóm sau khi có khoảng 5 năm kinh nghiệm làm việc. Một khi đã trở thành trưởng nhóm thì cái đích kế tiếp là trở thành người quản lý và để trở thành người quản lý bạn phải rất giỏi trong việc giao công việc của mình cho người khác làm, dùng những thủ thuật trong quản lý, và điều quan trọng là không làm gì cả. Vì vậy, bạn có thể thấy chúng ta không biết chút gì về lập trình khi chúng ta lạc vào thế giới phát triển phần mềm và hầu như khi có khoảng 5 năm kinh nghiệm thì những người lập trình viên này đều muốn trở thành người quản lý.

5. Không có đóng góp gì cho cộng đồng mã nguồn mở

Tôi không biết có người bạn nào của tôi hoặc bạn của bạn tôi bao gồm cả chính mình đã từng đóng góp chút gì vào cộng đồng mã nguồn mở hay chưa. Chúng ta có thể chỉ sử dụng các dự án mã nguồn mở và khi chúng ta phát hiện được bất kỳ lỗi nào trong dự án đó chúng ta sẽ không bao giờ chịu sửa chúng, nhưng lại lên tiếng chỉ trích những lập trình viên đã viết ra mã nguồn đó.

Có thể có nhiều lý do hơn nhưng tại thời điểm này tôi chỉ nghĩ ra được 5 lý do nói trên. Tôi đang cố làm cho mình trở thành một lập trình viên tốt hơn bằng cách đọc, viết và lắng nghe nhiều hơn. Hãy cho tôi biết những suy nghĩ của bạn về vấn đề này nhé!

LINK: https://vinacode.net/2013/08/07/lap-trinh-vien-an-do/