Con đường của một lập trình viên – phần 3


Trong bài viết trước tôi đã trình bày về nấc thang lãnh đạo – một nấc thang rất quan trọng đánh dấu sự trưởng thành trong sự nghiệp lập trình viên của bạn. Bài viết này, tôi sẽ viết về vai trò của kiến trúc sư phần mềm – một vị trí/vai trò mà rất nhiều bạn lập trình viên mong muốn đạt đến.


Vị trí kiến trúc sư phần mềm – trong quan điểm của tôi chỉ là bước chân đầu tiên để đưa bạn lên những vị trí cao hơn mang tầm chiến lược của tổ chức như: giám đốc kĩ thuật, CTO và các loại XXO mà bạn thường thấy trên các kệ rượu trên thị trường Smile.


ruoucamus-xo-elegance.jpg


Với những ai đã từng trải qua vị trí này – thì trong bài này tôi muốn trình bày một vài quan điểm riêng mà tôi nghĩ rằng có thể gây tranh cãi. Với một số bạn hiện tại đang chuẩn bị hoặc đang bước một chân lên nấc thang này, tôi hy vọng được chia sẻ một vài trải nghiệm của riêng tôi. Có thể đúng, có thể sai. Tuy nhiên, tôi vẫn hy vọng nó có ích.


Kiến trúc sư phần mềm – anh là ai?


Ở rất nhiều tổ chức, người ta đặt ra rất nhiều vị trí có tên gắn với chữ ‘kiến trúc sư’, ví dụ: Technical Architect (kiến trúc sư kĩ thuật), Solution Architect (kiến trúc sư giải pháp) … và khá nhiều cải biên khác về cái tên như: Technical Expert (chuyên gia kĩ thuật), Guru ….


software_architect


Suy cho cùng, trong quan điểm của tôi: những cách phân chia ở trên chỉ là một cách để phân cấp về mặt level và benefit trong tổ chức mà thôi. Vai trò chung của tất cả những anh được gắn với chữ kiến trúc sư ở trên giống hệt như nhau. Họ là những người giúp định hình và xây dựng nên bộ khung của một hệ thống phần mềm.


Bộ khung này không nên chỉ được hiểu là những thành phần kĩ thuật xây dựng nên nó, mà còn bao gồm những thành tố kể cả con người, quy trình, giải pháp để tạo ra một hệ thống ‘tốt’.


Hệ thống cũng không chỉ dừng lại ở mức một sản phẩm, một dự án mà cũng nên hiểu rộng hơn là cả một tổ chức và văn hoá của những con người trong tổ chức đó.


Thực tế và chi tiết hơn nữa đi, cuối cùng anh làm gì?


duties-of-software-architect.png


Trong những công ty mà tôi từng trải nghiệm – thì thông thường một anh kiến trúc sư phần mềm sẽ làm những công việc sau đây:


Tham gia các hoạt động pre-sale: kiến trúc sư phần mềm đóng vai trò quan trọng trong giai đoạn pre-sale khi lấy hợp đồng. Họ tham gia viết proposal, xây dựng PoC (Proof Of Concept – một loại demo để thể hiện khả năng hiện thực được của hệ thống), lên sườn những giải pháp tổng thể sẽ sử dụng trong hệ thống – từ kĩ thuật đến hạ tầng.


Hỗ trợ dự án: khi một dự án bắt đầu, kiến trúc sư phần mềm là người giúp truyền đạt những giải pháp từ giai đoạn pre-sale đến cho team. Anh ta cũng là người hỗ trợ nhóm trong các giải pháp, quy trình, ràng buộc về hệ thống để đáp ứng được nhu cầu của khách hàng. Nếu dự án quan trọng, kiến trúc sư phần mềm sẽ tham gia như một thành viên của nhóm phát triển – định hướng và dẫn dắt nhóm về mặt giải pháp.


Vai trò đào tạo trong tổ chức: là người dẫn dắt về kĩ thuật, kiến trúc sư phần mềm là người giúp tham gia định hướng và đào tạo các bạn lập trình viên để đáp ứng nhu cầu của tổ chức về nền tảng và những kĩ thuật mũi nhọn.


Vai trò định hướng kĩ thuật: kiến trúc sư phần mềm cũng là những người tham gia đóng góp vào các hoạt động nghiên cứu và định hướng công nghệ cần đầu tư để đón đầu nhu cầu bán hàng và sản xuất.


Tất nhiên, tuỳ theo đặc thù mỗi công ty hoặc từng giai đoạn: trọng số ưu tiên và vai trò của kiến trúc sư phần mềm sẽ được phân bổ vào các nhóm hoạt động trên nhiều hay ít. Tuy nhiên, đây là những vai trò và công việc chính mà một kiến trúc sư phần mềm thường tham gia.


Những kĩ năng cần có của một kiến trúc sư phần mềm


Tư duy và góc nhìn kinh tế


Là một kiến trúc sư phần mềm – bạn là người đưa ra những giải pháp cấu thành nên hệ thống. Trên thực tế, giải pháp tốt không phải là giải pháp hoàn hảo mà là giải pháp phù hợp. Phải hiểu thật sự khách hàng muốn gì. Đâu là giá trị thực sự mình cần cung cấp cho họ. Trên hết, hãy đặt mình vào vị trí của họ để chi từng đồng cho dự án, bạn sẽ hiểu mình cần chọn giải pháp nào.


Tôi từng làm việc với rất nhiều những khách hàng tham vọng. Họ đặt ra rất nhiều tính năng và nhu cầu cho một hệ thống được dự liệu là sẽ vận hành với cả triệu người dùng, phải đáp ứng vài ngàn truy cập đồng thời. Đó là một tâm lý phổ biến và là bản chất tự nhiên của một khách hàng. Họ luôn muốn mỗi đồng tiền chi ra phải xứng đáng và có giá trị lâu dài.


Điều mà một kiến trúc sư phần mềm cần phải giải quyết đó là: tư vấn khách hàng để giúp họ nhìn ra chi phí phát sinh và cách thức đầu tư cho phần mềm hiệu quả. Phải hiểu rõ khách hàng có khả năng chi trả bao nhiêu và giải pháp tối ưu với quỹ tiền tương ứng. Đừng từ chối họ mà hãy cho họ những lựa chọn khác nhau về kinh phí. Đó mới là giải pháp khôn ngoan và khéo léo.


Hiểu về nguyên lý giá trị


Tôi đề cập vài lần trong những bài viết trước về việc làm đúng việc ở đúng thời điểm để đem lại giá trị đúng lúc. Nếu bạn đọc câu này thấy nhức đầu, thì chỉ cần nhớ 3 chữ: JIT – Just In Time. Điều này có nghĩa là gì?


JIT là một nguyên lý được áp dụng trong dây chuyền sản xuất của Toyota. Tư duy chính là loại bỏ các giá trị, hoạt động dư thừa – sản xuất vừa đủ để đáp ứng nhu cầu. Nếu bạn có thời gian và thích đọc sách thì có thể đọc quyển: Toyota Production System để hiểu chi tiết hơn. Quyển này có bán ở Việt Nam – tựa là Phương pháp sản xuất Toyota.


Nếu bạn thực sự hiểu rõ nguyên lý này, bạn sẽ biết khi nào cần tập trung làm gì, định hướng cách thức vận hành của nhóm sản xuất như thế nào một cách hiệu quả nhất. Những practices về lean startup hay các phương pháp luận về sản xuất tinh gọn, agile cũng áp dụng cùng một tinh thần chung như vậy cho những practices trong thực tế.


Khả năng quyết định, xử lý tình huống khi thông tin còn chưa rõ ràng


Là một kiến trúc sư phần mềm, bạn sẽ được đặt vào rất nhiều tình huống cần xử lý khi thông tin còn chưa rõ ràng mà bạn vẫn phải ra quyết định. Có thể đó là những buổi nói chuyện với khách hàng cần quyết định nhanh về budget, những tranh luận trong các dự án hợp tác nhiều bên, những câu hỏi cần trả lời nhanh trong những buổi presentation …


software-architect-tshirt.jpg


Bạn cần phải trang bị cho mình khả năng xử lý thông tin nhanh, lập luận sắc bén và đôi lúc … là sự dũng cảm để đưa ra phán đoán. Có những tình huống chỉ cần bạn ú ớ vài phút, bạn có thể mất những dự án giá trị lớn vì khách hàng không thấy bạn tự tin.


Tôi học rất nhiều từ anh Martin (CTO) khi tôi còn làm ở Pyramid Consulting. Trong những buổi nói chuyện với khách hàng và các partner, bằng lý luận sắc bén, phản ứng nhanh và khả năng tranh luận – anh luôn mang lại những yếu tố có lợi cho công ty.


Cách đây vài năm – trong một buổi meeting với khách hàng cùng anh, họ hỏi tôi một câu mà lúc đó thực sự tôi cũng không biết phải trả lời như thế nào. Tôi bảo rằng cần phải check lại với team xem giải pháp đó có khả thi hay không. Xong buổi họp, Martin bảo tôi ngồi lại và chỉ nói đúng một câu: là một kiến trúc sư phần mềm, em không được thể hiện thái độ không chắc chắn hoặc thiếu tự tin trong bất kì tình huống nào.


Câu nói đó làm tôi suy nghĩ rất nhiều và thay đổi hoàn toàn cách mình hành xử với bất kì những tình huống đột ngột nào phát sinh về sau, dù ở đâu hay bất kì tình huống nào. Sau này tôi hay nói đùa với anh em: phải tập bản lĩnh để cho dù trời sập cũng không chớp mắt thì mới thành chính nhân quân tử. Thực ra, ai cũng có những nỗi sợ: sợ trách nhiệm, sợ thể hiện cái mình không biết, sợ người khác đánh giá …. Tuy nhiên, vượt qua nỗi sợ của bản thân  mới là cách làm cho mình tiến bộ.


Những điều tôi nói ở trên không phải là tôi xúi bạn làm thầy phán, nói đại. Điều tôi muốn bạn trang bị là khả năng ứng phó tình huống – và sự tự tin tuyệt đối khi cần ra quyết định. Đó là một kĩ năng cần luyện tập và trải nghiệm lâu dài. Trang bị nó như thế nào thì tôi xin trình bày ở một bài viết khác.


Kĩ năng mềm


Tôi không nói dong dài về kĩ năng mềm cần có của một kiến trúc sư phần mềm. Chỉ muốn giới thiệu cho bạn một quyển sách mà tôi nghĩ là khá thú vị cho những bạn đang muốn trải nghiệm vị trí này. Nó sẽ làm thay đổi khá nhiều góc nhìn của bạn – đặc biệt là các bạn lập trình viên. Quyển này tên là: 12 Essential Skills for Software Architects (12 kĩ năng cần thiết của kiến trúc sư phần mềm). Tiếc là quyển này chưa có bản dịch tiếng Việt. Tuy nhiên, nó thực sự đáng đọc và để bạn chiêm nghiệm lại những điều mình cần trang bị.


12-essential-skills-for-software-architects.jpg


Bạn sẽ tìm thấy ở quyển sách này từ lý do bạn không được tăng lương đến thấp thoáng đâu đó một hình bóng của mình (trước đây hoặc hiện tại).  Tin tôi đi. Đọc thú vị đấy.


Vài câu hỏi bâng quơ


Công ty em không có vị trí kiến trúc sư phần mềm, biết bao giờ em mới có cơ hội để lên vị trí này ạ?


Sau này tôi có một quan điểm khác về vai trò của kiến trúc sư phần mềm. Nếu một nhóm thực sự giỏi và có tính tiến hoá thì mỗi lập trình viên là một kiến trúc sư phần mềm. Đừng nghĩ quá xa xôi về những thiết kế, hình ảnh dày cộp và hoành tráng để trong các proposal bán cho khách hàng. Mỗi dòng code bạn viết ra, mỗi thiết kế bạn đưa ra là một giải pháp. Nếu thật sự suy nghĩ về nó thật nghiêm túc từ các yếu tố giải pháp, bảo mật, tối ưu hoá … thì đó đã là một vấn đề kiến trúc. Một ngôi nhà được xây dựng từ những viên gạch – nhà có chắc hay không là do gạch được nung chín và đặt vào đúng vị trí. Hơn thế nữa, tôi tin rằng cách làm cho bạn leo nhanh là nên xây cho mình nền tảng từ chính những công việc mình đang làm hàng ngày.


Điều thứ hai, vị trí trong một tổ chức hay con đường thăng tiến la do chính bạn quyết định. Nếu bạn đủ bản lĩnh, bạn sẽ tìm ra được con đường và vị trí mình mong muốn mà không phụ thuộc nhiều vào môi trường. Điều quan trọng hơn bạn cần phải làm là phải đam mê và đặt mục tiêu cho nấc thang kế tiếp trên con đường đến vị trí này.


Mất bao lâu để một người từ khi bước chân vào nghề để đạt được vị trí này?


Theo kinh nghiệm của tôi, để vững bước khi là một kiến trúc sư phần mềm thật sự – bạn cần phải trải qua nghiêm túc vai trò lãnh đạo (leader) trong các dự án hoặc một nhóm kĩ thuật. Để một người thật sự chín chắn để trở thành một leader giỏi thì cần ít nhất là 2-3 năm tham gia với vai trò này. Trừ khi bạn thật sự xuất sắc – thì trung bình để lên vị trí kiến trúc sư phần mềm, bạn cần ít nhất 7 năm lăn lộn với nghề.


Ở nước ngoài, các vị trí này đòi hỏi bề dày kinh nghiệm và sự từng trải, nên có người đi làm đến 10 – 15 năm mới lên vị trí kiến trúc sư cũng là chuyện bình thường. Thậm chí có người làm lập trình viên đến 50 – 6o tuổi. Đơn giản là vì họ đam mê với công việc. Đối với họ vị trí chỉ là một tên gọi. Chưa chắc lý luận của mình về giải pháp kĩ thuật có thể hơn một lão lập trình viên 50 tuổi.


Lời kết cho loạt bài “Con đường của một lập trình viên”


Đây xem như là bài kết thúc trong chuỗi bài về con đường của một lập trình viên. Cách tôi trình bày các nấc thang nghề nghiệp là một lát cắt phẳng cho bạn dễ hình dung:



Mỗi nấc thang có những yêu cầu riêng. Bạn không nhất thiết phải đi qua từng nấc thang. Tuy nhiên, có 3 bậc thang rất quan trọng mà bạn sẽ cần đầu tư rất nhiều thời gian để phá vỡ những giới hạn của bản thân mình và đạt được, đó là: Lập trình viên, Lãnh đạo và Kiến trúc sư phần mềm. Đó là những cột mốc để trang bị hành trình cho bạn vững chắc hơn trên con đường của một lập trình viên.


Tôi hy vọng rằng loạt bài viết này của tôi sẽ giúp bạn nhìn lại con đường mình đang đi và cho bạn vài giá trị tham khảo. Tuy nhiên, tôi hiểu rằng: không ai hiểu rõ mình bằng chính mình. Bạn có thể xem đây là một góc nhìn tôi đưa ra để so sánh và nhìn lại mình đang ở đâu, cần trang bị gì cho bước tiếp theo. Quan trọng nhất vẫn là chính bản thân bạn.


Review lại những vấn đề tôi đã trình bày trong loạt bài của dự án Veagle


Nếu bạn đọc kĩ về các bài viết trong chủ đề này, bạn sẽ thấy tôi cố tình trình bày từng quan điểm theo trình tự:


  • Đạo lập trình: trình bày quan điểm về đạo đức nghề nghiệp và là kim chỉ nam trong những hành xử cua một lập trình viên. Vì quan điểm của tôi đơn giản là: sống không có đạo, thì dễ lạc lối. Rất nhiều bạn thường không để ý hoặc bỏ qua bài viết này. Tôi nghĩ nó khá quan trọng.
  • Con đường của một lập trình viên: là loạt bài tôi chia sẻ những trải nghiệm và những nấc thang định hướng trong nghề nghiệp.
  • Những bài viết sau tôi sẽ đi sâu vào chi tiết những điều quan trọng trong chính công việc và cuộc sống mà tôi nghĩ rằng sẽ dẫn dắt bạn thay đổi.

Trân trọng.


PS: nếu bạn thấy bài viết này thú vị, hãy đừng ngại ngần chia sẻ nó. Nếu bạn thấy có những quan điểm cần bổ sung, đừng ngại ngần comment. Chúc bạn vui và tìm thấy những điều thú vị trong cuộc sống và con đường nghề nghiệp của mình đang đi.