Cryptology “giải phóng” tư duy bó buộc trong lập trình

1142

Về diễn giả

  • Anh Nguyễn Đạt Thông, hiện đang công tác tại công ty LogiGear Vietnam ở vị trí quản lý công nghệ.
  • Công việc chính là quản lý các công nghệ, các kỹ thuật hoặc các ngôn ngữ lập trình, cũng như tham gia vào các dự án của khách hàng. Tìm hiểu, đánh giá và tư vấn cho khách hàng việc sử dụng công nghệ sao cho phù hợp nhất để đạt được hiệu suất cũng như chất lượng sản phẩm cao nhất.

Vì sao anh quyết định chuyển từ chuyên ngành Toán Tin sang Mật mã học?

Ngày xưa cũng không có nhiều trường để lựa chọn, lúc đó mình học rất khá môn toán và lại thích tin học nên mình quyết định thi vào khoa Toán Tin của trường Đại học Khoa học Tự nhiên TP. HCM. Mình học ở đây 4 năm, điểm đặc biệt ở khoa này đó là mình sẽ được học cân bằng cả hai lĩnh vực vừa Toán học vừa Tin học, nên giúp cân bằng được sở thích và đam mê của mình. Trong quá trình học ở đây mình nhận ra là toán học tốt thì sẽ là nền tảng giúp mình học tin rất nhanh.

Sau đó mình lại có thiên hướng về học tin, mình học về kiến trúc máy tính, về việc lập trình,… dần dần mình nhận thấy bản thân thích hợp với ngành này hơn. Còn việc quyết định theo đuổi Mật mã học là khi mình đang học cao học. Khi bắt đầu học cao hơn, học chuyên sâu về máy tính thì mình lại hiểu hơn về mật mã học, nó khai sáng tư duy mà trước giờ mình vẫn luôn bó buộc. Trước giờ mình cứ nghĩ lập trình là những con số, những số liệu đó mình làm, nhưng khi làm quen với mật mã mình thấy nó không đúng nữa.

Tưởng tượng như lúc trước mình học toán Ơclit trong một không gian nhỏ thì sẽ đúng, nhưng với không gian lớn hơn, ra ngoài vũ trụ thì lại không đúng nữa. Mật mã học cũng như vậy, lập trình những thuật toán nho nhỏ, những số input nho nhỏ thì thấy đúng nhưng khi làm với những số lớn, cực lớn thì nó không chạy được. Khám phá được những điều đó dần dần mình thấy rất thích ngành này và theo đuổi nó, mình cũng hoàn thành luận văn thạc sỹ với chuyên ngành này luôn.

Những kiến thức chuyên ngành Mật mã học có giúp gì cho công việc hiện tại của anh không?

Có rất nhiều nữa là khác đó. Mặc dù khi nói đến mật mã học trong lập trình sẽ thấy trong lúc lập trình, coding hay testing nếu không để ý sẽ không thấy nó nằm ở đâu cả, nhưng thật ra trong tất cả các công việc lập trình của mình, chúng ta đều phải sử dụng tất cả các kiến thức về mật mã học.

Chẳng hạn nếu các bạn cứ sử dụng web, nếu mình không học và không có những kiến thức về mật mã, sẽ không thể hình dung và rất khó hiểu nó là gì. Hay chẳng hạn khi làm về backend, setup một servicate cho web server của mình, nếu không biết mật mã sẽ rất mơ hồ về khái niệm servicate là gìprivatekey là gì, mật mã nằm sâu bên dưới những cái này.

Sau này khi làm việc trong thế giới công nghệ thông tin mình sẽ biết mã hack, và nhiều vấn đề khác, nếu không thể hiểu mục đích của nó sinh ra làm gì. Trong khi đó, việc học và hiểu được mã hóa thông tin sẽ nắm những thứ này rất vững. Hiện tại nếu làm trên web nhiều sẽ thấy có một khái niệm gọi là token.

Có rất nhiều thứ liên quan đến token, trong facebook cũng có hoặc đăng nhập vô google nó cũng setup cho mình một token, sử dụng Cloud Amazon cũng có token. Vậy token từ đâu mà ra? Nếu mình không có kiến thức nền tảng về mật mã thì sẽ rất khó hiểu những chuyện này. Thật sự là sau khi học được nền tảng về mật mã học, mình thấy nó giúp ích rất nhiều cho công việc.

Vì sao anh lại chọn Java và .NET để học thêm sau khi tốt nghiệp?

Mình bắt đầu học chúng vào khoảng cuối những năm 2000. Lúc đó mình mới ra trường khoảng 3 – 4 năm, vẫn đi làm với tư cách là dev bình thường. Sau khi đi làm, bản thân mới nhận ra kiến thức mình học trong trường rất cơ bản và thiếu hụt nhiều nên mình mới quyết định đi học thêm.

Thời điểm đó điện thoại di động chưa phát triển nhiều nên mình không có những khóa học về điện thoại di động nhiều mà chủ yếu là làm web rất nhiều, kiểu như enterprise, các ứng dụng về web và nhiều thứ liên quan. Cũng lúc đó có 2 công nghệ nổi bật là Java và .NET nên mình quyết định học. Học để hiểu được những ứng dụng enterprise nó cần những điều kiện gì, kiến thức và kĩ thuật gì để làm nên nó.

Mình đã học về các công nghệ của Microsoft và Oracle bao gồm cả database, web server và cả lập trình web cho các hệ thống đó và mình thấy nó như nền tảng để phát triển những vấn đề khác. Như khi gặp khách hàng để tương tác, tư vấn về những hệ thống enterprise bạn sẽ tự động hiểu được nó gồm những thành phần gì, cấu trúc như thế nào, kiến trúc ra sao, gồm những cơ sở dữ liệu tập trung hay phân tán. Nhưng mình thấy khi đi làm sẽ học nhanh nhất và tốt nhất.

  8 công cụ miễn phí để bảo mật khi lập trình phần mềm
  Tổng hợp về WannaCry cho người không biết gì

Anh có thể giới thiệu đôi chút về công ty hiện tại anh đang làm việc được không?

LogiGear có xuất phát từ Mỹ, chuyên làm các dịch vụ về kiểm thử, dịch vụ chính của công ty liên quan đến các hoạt động bảo đảm chất lượng phần mềm cho khách hàng. Công ty cung cấp các dịch vụ khác nhau như tư vấn và giúp khách hàng nâng cao năng suất và chất lượng sản phẩm lên bằng cách giúp họ kiểm thử sản phẩm, thiết kế các quy trình làm việc hiệu quả hơn hoặc giúp khách hàng lựa chọn những công nghệ phù hợp để làm việc được hiệu quả nhất.

LogiGear đang là công ty tiên phong trong lĩnh vực kiểm thử ở Việt Nam, sau này cũng đã có thêm nhiều công ty làm về lĩnh vực này. Nhưng cá nhân mình vẫn thấy LogiGear là môi trường rất tốt để đào tạo các ngành nghề trong lĩnh vực kiểm thử. LogiGear có điểm mạnh riêng đó là kiểm thử tự động, công ty tự xây dựng phần mềm kiểm thử tự động dựa trên kỹ thuật, phương pháp đặc trưng của công ty, đặc biệt hiệu quả cho các dự án kiểm thử lớn.

Vì trong kiểm thử tự động có một đặc điểm là nếu không để ý sẽ dễ thất bại, tức là làm tự động thì rất dễ nhưng làm nhiều thì sẽ rất khó, khó hơn hẳn. Ví dụ mình cần tự động 1, 2 test hay 100 test thì rất dễ, hầu như tool nào, công ty nào cũng làm được. Nhưng nếu được giao 1 dự án có 10000 test case, việc tổ chức, cài đặt, chạy thử một thời gian sẽ rất rối, rất phức tạp. Và phương pháp của LogiGear là để dành cho các dự án như vậy.

Công cụ được LogiGear sử dụng là test architect, được phát triển dựa trên nguyên lí của phương pháp này. Hiện tại đây đang là một tool phổ biển trong thị trường test nhưng đặc biệt là chỉ phổ biến cho những doanh nghiệp lớn vì mình hướng đến những dự án “khủng”.

Xem thêm Muốn làm an toàn thông tin tại Việt Nam thì học gì?

Khi chuyển hướng sang automation testing, anh có gặp khó khăn hay thử thách gì không?

Thật ra lúc mới bắt đầu mình cũng khá là bỡ ngỡ. Lúc mới sang LogiGear lần đầu tiên mình nhìn thấy tool chạy tự động mà có cảm giác nó như một ma thuật vậy. Lúc đó mình rất thích việc automate cho máy tính chạy. Mình làm quen với rất nhiều công nghệ, nhiệm vụ ở công ty là cố gắng để nâng cao năng suất làm việc của khách hàng. Khi khách hàng cần test 100 test key một ngày muốn tăng lên thành 1000 test key 1 ngày thì phải tự động hóa nó. Khi tự động mình cần hiểu phần mềm mà khách hàng đang viết rồi mới tìm cách tự động nó được.

Mà những vấn đề khách hàng viết thì muôn hình vạn trạng, rất nhiều công nghệ, rất nhiều kỹ thuật, rất nhiều nền tảng. Có khách hàng thì viết trên Windows, có người viết trên Linus, .NET, Java, sau này còn có khách hàng phát triển ứng dụng trên iOS, trên Android,… Nên khi bắt đầu công việc này mình cảm thấy sẽ có rất nhiều điều mới cần học. Mình tự xác định với bản thân là không cần học sâu vào một công nghệ nào hết mà cần học nhiều, lĩnh vực nào cũng cần học qua, còn khi nào cần mình sẽ học sâu một công nghệ để làm đúng dự án cho khách hàng. Đó cũng là điều đặc biệt nhất của ngành automation.

Anh có thể chia sẻ vài kinh nghiệm thú vị liên quan đến state – of – art tricks được chứ?

Tất nhiên khi làm trong ngành automation sẽ có rất nhiều tricks, mình đã từng làm việc nhiều với các tricks như vậy, trong đó có 2 cái mình vẫn còn nhớ.

Vấn đề thứ nhất liên quan đến iphone. Lúc đầu bên mình bắt đầu với android, nó khá mở nên mình có thể làm nhiều công việc trên đó, cho đến khi iphone ra đời tính bảo mật của nó rất cao. Lúc đó mình làm trên iOS 6, mọi thứ đều đóng kín và tài liệu cũng rất ít, API Apple cung cấp cũng rất hạn chế, mình không được can thiệp vào process, không được can thiệp vào hệ điều hành vì thế nên không thể tự động ứng dụng của họ được.

Mình nhớ lúc đó cả team lật tung internet lên để tìm thông tin, tìm các trang developer, thậm chí là sử dụng tool để dịch ngược lại thư viện của Apple để xem có những API, những hàm nào. Khi đó team phát hiện ra những API ẩn, tức là Apple viết hàm đó nhưng không đưa ra documentation, nó đặc biệt giúp ích cho mình nếu muốn can thiệp vô ứng dụng của họ. Chẳng hạn bây giờ có ai đó phát hiện ra lỗ hổng của Firefox và cài 1 đoạn mã vô đó, mình cũng phát hiện ra những lỗ hổng của iOS 6, cài vào các agent để hỗ trợ cho việc kiểm thử tự động và kết hợp với một số kĩ thuật khác mình đã tự động hóa được nó.

Mình nhớ sự kiện đó như là việc lần đầu tiên công ty mình làm được, tạo được tool để tự động trên iOS 6, nó rất độc đáo và mình cảm thấy hào hứng với việc đó. Tuy nhiên vì là lỗ hổng nên mình tìm và khai thác nó nhưng khi lên đến iOS 7, người ta sẽ dấu hẳn những API đó đi và solution của mình sẽ không thể sử dụng được nữa, mình lại phải mày mò, nghiên cứu tìm một giải pháp khác và cứ phải tiếp tục các công việc như vậy.

Kỷ niệm thứ 2 mình cũng nhớ rất thú vị là mình hỗ trợ khách hàng tự động hóa việc kiểm thử POS. Hệ thống POS thực chất cũng là một hệ thống phần mềm chạy trên máy tính. Giờ họ muốn tăng năng suất, muốn test nhanh hơn thì bắt buộc phải tự động hóa nó. Lúc đó team mình phải tập trung tìm hiểu về Linux, driver trên Linux, ex server và vận dụng rất nhiều kỹ thuật khác để cuối cùng làm được một bộ tự động giúp chạy hệ thống POS đó.

Khi bắt đầu kiểm tra, thay vì có một người phải cầm sản phẩm quét mã code thì bây giờ trên máy tính đã được giả lập luôn việc đó giống như có người đang quét qua thì hệ thống POS sẽ nhận được thông tin vừa có một sản phẩm quét qua. Rồi thay vì một người phải đưa món hàng lên cân cân và coi nó giá bao nhiêu tính tiền thì giờ đây hệ thống cũng tự động làm luôn chuyện đó.

Và thêm nữa khi mình in hóa đơn sẽ cần kiểm tra xem đã đúng sản phẩm chưa, đúng số lượng chưa, vậy mình nghĩ làm sao để những việc này tự động thực hiện. Thế là team mình triển khai việc tự giả lập máy in luôn, nghĩa là hệ thống in ra cái gì mình đều biết hết và có thể kiểm tra những thông tin đó luôn.

Anh có thể chia sẻ thêm về công cụ TestArchitect mà anh đã đề cập khi nãy được chứ?

TestArchitect là một sản phẩm kiểm thử tự động dựa trên phương pháp action page testing – phương pháp đặc trưng của công ty LogiGear. TestArchitect chuyên sử dụng cho các dự án kiểm thử tự động lớn vì khách hàng của công ty cũng hướng đến những công ty có các sản phẩm kiểm thử lớn, số lượng test key cần thực hiện và chạy mỗi ngày rất nhiều, tool cũng dựa trên nguyên lí của phương pháp này.

Tool này đã được phát triển khoảng 11 – 12 năm với rất nhiều công nghệ từ xa xưa cho đến nay. Cứ trên thế giới xuất hiện 1 phương pháp, 1 công nghệ để phát triển phần mềm mới thì tool sẽ tích hợp vào. Từ lúc bắt đầu tool có thể kiểm thử iOS 6 rồi đến 7, 8, 9,… android cũng tương tự. Qua mỗi thế hệ android sẽ có rất nhiều các thay đổi và cần phải thích nghi với điều đó. Hoặc mới đây có thêm React, React Angular JS những công nghệ mới như thế cũng cần làm sao để tool adapt theo để giúp khách hàng test được.

Anh có gặp khó khăn hay thử thách gì trong quá trình xây dựng công cụ đó không?

Thử thách lớn nhất có lẽ là việc mình phải luôn thích ứng với những công nghệ mới. Mỗi khi có công nghệ mới ra đời, mình phải chủ động mày mò, nghiên cứu để làm sao có thể làm chủ công nghệ đó, đồng nghĩa với việc mình dùng những công nghệ đó để điều khiển các phần mềm khác.

Khó khăn ở chỗ khách hàng thì luôn thích những công nghệ mới mà điểm bất lợi là cái gì mới thường các tài liệu liên quan đến nó sẽ rất ít. Do đó, việc quan trọng là phải mày mò, tìm kiếm rất nhiều để nắm được nguyên lí của công nghệ đó cũng như tìm các tricks, các state-of-art để xử lý nó. Đó chính là khó khăn lớn nhất của mình, nhưng tới hiện tại mình và công ty đều đang làm rất tốt chuyện đó, hầu như công nghệ mới nào tool của công ty cũng hỗ trợ rất tốt.

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev