Dự án này cần công nghệ nào đặc biệt? ngôn ngữ lập trình, framework, db? .. đây là câu hỏi mà một lập trình viên phải trả lời hàng ngày.
Công nghệ là gì?
Tác động của công nghệ đối với cuộc sống cá nhân và công việc của chúng ta là liên tục và ngày càng lớn. Hiểu cách con người định hình công nghệ và sử dụng công nghệ là điều quan trọng không chỉ đối với các nhà nghiên cứu, người phát triển, người triển khai công nghệ mà còn đối với tất cả những cá nhân và tổ chức đang sử dụng công nghệ cho cuộc sống và công việc.
Công nghệ không phải là một từ trung lập. Những người khác nhau sẽ cho nó ý nghĩa khác nhau tùy thuộc vào quan điểm và bối cảnh của họ. Nếu bạn sống ở một nước quá lạnh, bạn không cần điều hòa hay tủ lạnh để bảo quản thực phẩm. Việc bạn sử dụng dây và gậy là một công nghệ mặc dù nó được phát minh từ xa xưa. Những kỹ thuật, kỹ năng, phương pháp, quy trình được bạn biết đến đều là công nghệ.
Bản thân công nghệ được hiểu như là cách tổ chức phối hợp con người với máy móc nhằm giải quyết các vấn đề(cho con người) một cách bền vững. Có ba khía cạnh quan trọng trong định nghĩa này:
- Nó giải quyết VẤN ĐỀ của con người. Nó không đơn thuần vận dụng các quy luật của tự nhiên, nó là thành quả khoa học với mục đích cụ thể. Việc phát minh ra kính hiển vi được thúc đẩy bởi nhu cầu khám phá thế giới, xử lý vấn đề không về tầm nhìn tự nhiên của chúng ta. Giải pháp công nghệ cho một vấn đề đã tồn tại lâu nay cho phép chúng ta hiểu thêm về hoạt động của thế giới, từ đó dẫn đến như cầu phát triển nhiều công nghệ hơn.
- Nó có NHIỀU GIÁ TRỊ và sử dụng nhiều loại kiến thức khoa học. IPod là một ví dụ cho thấy việc kết hợp thiết bị vật lý, thiết kế sáng tạo, âm nhạc tạo ra một thiết bị phụ kiện mang tính biểu tượng.
- Nó là PHƯƠNG PHÁP làm có tổ chức. Nó là tổ hợp các tương tác giữa con người, quy trình sản xuất, sản phẩm (máy móc, thiết bị, công cụ, ..) và hệ thống tạo ra chúng.. Nhiều người thích uống cà phê, thường vào quán cà phê. Cà phê đó có thể đến từ những cây đã được lai tạo đặc biệt để tăng năng suất, với phân bón và thuốc trừ sâu được sản xuất ở một nơi khác. Hạt cà phê sau khi thu hoạch sẽ được đóng gói và vận chuyển khắp thế giới, được chế biến rồi phân phối đến các cửa hàng, sau đó tạo ra tách cà phê trong một cốc nhựa, đưa đến tay người dùng.
Công nghệ như phép thuật vậy. Lịch sử trung cổ nói về phép thuật, người ta mơ đến việc con người có thể bay và tiến tới các vì sao, liên lạc với nhau từ khoảng cách ngàn dặm. Thế kỷ 21, những giấc mơ đã trở thành sự thật và những giấc mơ khác tiếp tục xuất hiện. Công nghệ vẫn chưa thể thay đổi được các giới hạn vật lý như giúp máy bay bay với tốc độ âm thanh ở gần mực nước biển hay giúp tạo ra các chip chạy nhanh hơn giới hạn định luật Moore,.. Công nghệ vẫn chưa thể giúp con người xác định được sự tử tế hay trung thực. Vấn đề của con người chưa được xử lý là tiền đề để công nghệ được phát triển tiếp.
Vấn đề là gì?
Trong thực tế, vấn đề được nhận thức với 3 thuộc tính:
- Tính phổ quát(universal): vấn đề xuất hiện ở nhiều địa điểm khác nhau, trong môi trường văn hóa khác nhau, .. Nếu vấn đề không phổ biến, hoặc giới hạn trong phạm vi địa lý, công nghệ được phát minh chỉ là giải pháp đặc trưng mang tính vùng miền, giải pháp xử lý nó có thể không hoàn thiện để xử lý được vấn đề khi nó phát sinh ở nơi khác.
- Tái lập(reproducible): vấn đề xuất hiện lặp lại theo thời gian.. Nếu vấn đề không lặp lại thì nó có thể bị bỏ qua hoặc được xử lý tạm thời hay không cần xử lý triệt để. Như vậy, nếu vấn đề không lặp lại thì công nghệ đối ứng với nó có thể bị lạc hậu hoặc bị lãng quên nhanh chóng sau khi hoàn thành xử lý mệnh lịch sử của nó.
- Khái quát được(generalizable): vấn đề được nhận thức như một bài toán con của 1 phát sinh khách quan(tuân theo quy luật tất yếu của tự nhiên hoặc xã hội). Nếu vấn đề chỉ là 1 tình huống cá biệt, chỉ xuất hiện với điều kiện đặc biệt thì công nghệ xử lý nó chỉ có giá trị trong ngách hẹp, công nghệ đó khó có cơ hội được nâng cấp để có thể sẳn sàng đáp ứng cho những biến thể của vấn đề.
Vấn đề phải được xem xét trong bối cảnh(địa điểm, thời điểm), có phạm vi và thời hạn ảnh hưởng. Nó là lý do công nghệ được áp dụng để xử lý nó cũng có những thuộc tính tương tự như bối cảnh áp dụng và giá trị thể hiện trong bối cảnh đó.
Giới hạn của công nghệ và lựa chọn của bạn
Xem xét công nghệ trong bối cảnh của vấn đề, công nghệ thể hiện giá trị và những giới hạn của nó. Việc hiểu rõ giới hạn của công nghệ không phủ định lựa chọn nó để giải quyết vấn đề, nhưng nó là đảm bảo cho bạn sẳn sàng với những rũi ro phát sinh trong quá trình sử dụng nó.
Là 1 SA, câu chuyện hàng ngày của bạn là:
định nghĩa vấn đề => khảo sát sản phẩm tương tự đã làm => tập hợp các danh sách công nghệ phù hợp => đánh giá sự sẳn có của nguồn lực => quyết định lựa chọn giải pháp => thử nghiệm(demo) => triển khai diện rộng.
Việc đánh giá một công nghệ phù hợp chưa từng là đơn giản. Sản phẩm luôn thay đổi và có tính cá biệt, tập hợp các công nghệ dự định tích hợp trong cùng sản phẩm làm cho quy trình đánh giá công nghệ trở nên phức tạp.
Chúng ta hãy xem xét việc đánh giá công nghệ cho bài toán tìm tiếm. Trong một bối cảnh xây dựng một chức năng tìm kiếm toàn văn, người ta thường đề xuất sử dụng giải pháp Elasticsearch. Dĩ nhiên Elasticsearch là một công nghệ được xây dựng để giải quyết vấn đề tìm kiếm toàn văn, một vấn đề có đủ các yếu tố: phổ quát, tái lập và khái quát(thuộc bài toán tìm kiếm thông tin). Dĩ nhiên Elasticsearch đã trở thành giải pháp hiệu quả và tốt nhất cho một số trường hợp phổ biến, đã được cộng đồng phát triển đề cử, chúng ta tự tin áp dụng giải pháp cho dự án. Tuy nhiên, sản phẩm luôn thay đổi nhanh chóng, nó cá biệt hơn, có thể phải phục vụ người dùng trên nhiều khu vực địa lý với nhiều ngôn ngữ khác nhau, sản phẩm có thể phải tìm kiếm đối với dữ liệu dạng chuổi ký tự ngắn(như mã sản phẩm), Elasticsearch sẽ không còn phù hợp. Chúng ta có thể lựa chọn vẫn áp dụng Elasticsearch cho đến khi nó thực sự không còn phù hợp với sản phẩm và tiếp sau đó sử dụng thêm công nghệ hoặc chuyển đổi công nghệ tìm kiếm với với bộ máy tìm kiếm khác. Điều đó lại là một câu chuyện khác.
Với vai trò SA, bạn vẫn phải đưa ra quyết định lựa chọn công nghệ cho vấn đề của dự án, giảm thiểu rũi ro tới mức tối thiểu. Bạn phải đánh giá được giới hạn của công nghệ mà bạn định áp dụng, bạn có thể chọn lựa một công nghệ đã chín muồi thay vì một công nghệ non trẻ với vô vàn tính năng tiên tiến được quảng cáo hào nhoáng. Việc áp dụng một công nghệ mới mang lại cơ hội cho sản phẩm nhưng nó cũng bao gồm rũi ro mà bạn không lường trước được. Trong trường hợp bạn bắt buộc cần phải lựa chọn công nghệ để giúp sản phẩm có những chức năng vượt trội so với đối thủ. Một số bước cần được thực hiện:
- Phải hiểu rõ bối cảnh của công nghệ, bài toán mà công nghệ này ra đời đối ứng
- Tham khảo ý kiến từ các nguồn tin cậy như: thoughtworks radar, gartner report, reddit, quora, discord, .. và KOL công nghệ(twitter) là đề xuất mà tôi khuyên bạn nên tiếp cận.
- Thực hiện kiểm tra độ phổ biến của công nghệ từ các nguồn như github, gitlab, .. trends google để hoàn thiện nhận thức về công nghệ bạn định lựa chọn: Đã hình thành cộng đồng về công nghệ đó chưa? bạn có dễ dàng tuyển dụng được chuyên gia để triển khai công nghệ đó chưa? ..
- Tham khảo chuyên gia công nghệ trong công ty, những đồng nghiệp cũng không thể bỏ qua, bởi đó chính là đồng đội chống lưng với bạn khi dự án sảy ra khủng hoảng.
Quá trình nhiêu khê vẫn chưa hết, sản phẩm của bạn vốn là 1 tập các công nghệ được áp dụng. Bài toán bạn triển khai là đặc thù, bạn sẽ thay đổi sản phẩm trở nên cá biệt cho phù hợp với người dùng, ngược lại việc đó cũng dẫn dắt người dùng tiến hóa trải nghiệm và có nhiều yêu cầu hơn, cần nhiều công nghệ hơn. Một số khía cạnh cần được xem xét:
- Lĩnh vực nghiệp vụ(business domain) khác nhau thì một số điểm(vị trí) trong thiết kế(kiến trúc) cần chú trọng(weight) là khác nhau.
- Các yếu tố đầu vào(environment, cost, sevice level agreement, ..) sẽ gây tác động/hậu quả khác nhau tới giải pháp công nghệ bạn định lựa chọn.
- Vấn đề nguồn lực(time/effort/cost/gains) cũng phải được xem xét kỹ lưỡng.
Một ma trận(matrix) quyết định có thể phải hình thành với trọng số(weight) ứng với mỗi điểm, mỗi khía cạnh. Kết thúc của quá trình dựng ma trận có thể là bản quyết định go, no-go với công nghệ nào đó mà bạn đã dự kiến từ đầu, bạn có thể phải điều chỉnh lựa chọn của mình.
Công nghệ có xu hướng được hoàn thiện liên tục để giải quyết được nhiều vấn đề một cách tốt nhất. MSSQL và Oracle bổ xung in-memory table để nó có thêm khả năng truy cập nhanh của một cơ sở dữ liệu NO-SQL nhưng chức năng chính của những công nghệ này vẫn là cơ sở dữ liệu quan hệ. Vấn đề của con người vẫn tiếp tục phát sinh, tiếp tục thay đổi thậm chí là biến đổi bản chất. Công nghệ cũng tiếp tục hoàn thiện, tiếp tục bị thoái hóa và bị thay thế. Phương pháp lựa chọn công nghệ vẫn vậy, hãy lựa chọn công nghệ phù hợp nhất.cho dự án của bạn.