Thứ Hai, 17 tháng 8, 2020

Phỏng vấn công nghiệp số 1: Đặng Hà Thế Hiển và Google Zurich

👆👆👆,

Với series phỏng vấn công nghiệp này, blog muốn đem tới một góc nhìn về văn hoá làm việc ở những công ty khác nhau. Những tác giả hy vọng nâng cao nhận thức của các bạn trẻ về văn hoá làm việc của những công ty khác nhau. Blog sẽ cố gắng kết nối với những bạn quen biết với sự đa dạng về hoàn cảnh để thực hiện phỏng vấn. Những nội dung trong blog này chỉ mang ý kiến chủ quan của cá nhân, không thể hiện quan điểm chính thống của công ty.

    Chào mừng Hiển đã đến blog antechxxx.blogspot.com, và rất hân hạnh được phỏng vấn bạn.

Figure 1: Google, nơi bạn Hiển đang làm việc.

A: Bạn đang làm ở Google, chi nhánh Zurich. Bạn cảm thấy như thế nào về cuộc sống ở thành phố Zurich, Thuỵ Sĩ.
Figure 2: Trung tâm thành phố Zurich, Thuỵ Sĩ với sông Limmat tươi mát.

H: Chào bạn. Mình vừa gia nhập Google Zurich khoảng hơn 1.5 năm nên cũng đang trong giai đoạn tìm hiểu và thích nghi với nơi ở mới. Cho đến nay thì trải nghiệm và cảm nhận của mình về Zurich là khá tốt (so với những chỗ mình đã từng ở và làm việc). Thành phố không quá lớn, cũng không quá nhỏ, gần gũi với thiên nhiên. Zurich hoàn trộn nhiều yếu tố pha lẫn hiện đại và cổ điển, điển hình là kiến trúc và con người, nên có nhiều điều hay để khám phá. Một điều mình đặc biệt thích ở Zurich nói riêng và ở Thụy Sĩ nói chung là có rất nhiều địa điểm tham quan đẹp và dễ đến, dù bạn ở đâu trong Thụy Sĩ. Phương tiện công cộng ở Thụy Sĩ vô cùng tiện lợi. Nếu chán đi trong nước thì mình có thể bắt tàu đến các thành phố khác ở Đức,  Pháp hay Ý vào cuối tuần (Zurich cách Frankfurt 3h tàu, và cách Paris và Milan khoảng 4h tàu).


A: Công việc bây giờ của bạn là gì ở Google? Nếu có thể, bạn có thể cho biết title hiện giờ của bạn.


H: Mình hiện đang là Software Engineer và đang làm trong dự án Google Assistant.


A: Bạn có thể tóm tắt con đường mà bạn đi đến công việc hiện tại ở Google? (Tiểu sử công việc / CV)


H: Mình tốt nghiệp khóa K07, Khoa Học và Kỹ Thuật Máy Tính, đại học Bách Khoa TP.HCM (tốt nghiệp năm 2012). Sau đó mình sang Nauy học thạc sĩ tại Hiof (Østfold University College), một trường nhỏ ở một thành phố nhỏ tên Halden, cách Oslo khoảng 100km về hướng nam. Sau khi tốt nghiệp thạc sĩ năm 2014, mình may mắn được thầy hướng dẫn giới thiệu vào chương trình industrial PhD (50% làm cho trường, 50% làm cho công ty). Công ty mình làm lúc đó là eSmart Systems, một công ty startup nhỏ có trụ sở đối diện trường Hiof. Mình bảo vệ luận văn tiến sĩ vào khoảng tháng 10 năm 2018, và có offer vào Google cũng vào khoảng thời gian đó. Việc mình vào Google cũng xảy ra khá bất ngờ, vì trước khi xong tiến sĩ mình có bàn với thầy hướng dẫn là mình muốn nhận vị trí Assistant Professor tại trường Hiof, vì mình đã phụ trách khá nhiều khóa tại trường và thấy thích việc đi dạy.


Mọi việc chuyển hướng khi một bạn tuyển dụng của Google liên hệ mình vào khoảng cuối tháng 8, hỏi xem mình có muốn phỏng vấn cho vị trí Software Engineer tại Google Zurich không. Mình ban đầu khá bất ngờ và còn nghĩ đó là email rác. Trong trường hợp của mình, toàn bộ quá trình từ buổi phỏng vấn đầu tiên đến khi nhận offer mất khoảng 1.5 tháng. Đầu tiên là một buổi phone screen interview (bạn recruiter hỏi nhanh khoảng 10-15 câu hỏi kỹ thuật căn bản), sau đó là một buổi remote interview (bạn Software Engineer tại Google London hỏi một câu coding interview khoảng 40 phút), và cuối cùng là buổi onsite interview  (5 bài phỏng vấn whiteboard tại Google Zurich). Thường sau khi qua phỏng vấn thì còn có một số buổi team matching để mình gặp team mà mình muốn vào, xem và team có hợp văn hóa với nhau không. Trường hợp của mình thì nhanh hơn, do mình khá ấn tượng với bạn phỏng vấn mình buổi onsite interview đầu tiên. Bạn này làm ở team Google Assistant, nên mình xin vào team đó và được nhận vào luôn.


A: Bạn với tôi đã học ở khoa Khoa Học và Kỹ Thuật Máy Tính, đại học Bách Khoa TP.HCM (HCMUT) thời đại học, sau đó bạn qua POSTECH Hàn Quốc, rồi qua Na Uy học PhD. Bạn có thể cho biết những điều bạn học được từ những nơi bạn đến học?


H: Mình nghĩ kỹ năng quan trọng nhất mình học được tại Bách Khoa là khả năng đọc sách kỹ thuật tiếng Anh. Phần lớn các môn chuyên ngành đều dùng bản gốc của những tựa sách nổi tiếng trong ngành, nên sau này mình không bị bỡ ngỡ bởi các từ vựng chuyên môn cũng như khái niệm quan trọng. Mình cũng mong sau này các môn đại cương quan trọng như toán và xác suất thống kê cũng có lựa chọn cho sinh viên học bằng sách tiếng Anh, vì sau này mình phải học lại gần như hoàn toàn các môn này.


Khoảng thời gian thực tập tại POSTECH thì mình không học gì nhiều, một phần vì khá ngắn, một phần vì mình cũng xác định sang châu Âu học tiếp nên mình cũng không đầu tư nhiều cho dự án. Mình chủ yếu chờ hết ngày để đi ăn đồ nướng Hàn với mấy anh chị và mấy bạn thực tập sinh khác. Mình cũng rất thích thời tiết tại POSTECH vào thời điểm đó (cuối hè đầu thu), nên sau này mình hay nghĩ về POSTECH như một ký ức vui vẻ và yên bình.


Mình ở Na Uy khoảng 6.5 năm, lâu hơn cả thời gian mình ở Sài Gòn. Thứ mình học được nhiều nhất có lẽ là khả năng tự học. Do trường mình theo học thạc sĩ là trường nhỏ, nên cũng  có ít lựa chọn môn học. Thật sự một phần khá lớn kiến thức mình học được trong quá trình đó là nhờ mình tự học trên Coursera. Vào thời điểm đó Coursera còn rất mới nên phần lớn các khóa giảng viên quay video trong quá trình dạy nên mình có cảm giác học chung với các bạn tại Stanford. Mình hoàn thành hơn 12 khóa học trên Coursera trước khi tốt nghiệp thạc sĩ.


A: Bạn có thể cho biết một sản phẩm (product) hay chức năng (feature) mà bạn tâm đắc, hứng thú nhất trong quá trình làm việc ở Google.


H: Trong Google mình chủ yếu đảm nhiệm vai trò Data Engineer và đôi khi làm ML modelling cho team. Mình khá thích công việc này, vì nó phù hợp với sở thích và background của mình. Mình cũng khá thích Google Assistant và tin vào tiềm năng lớn của dự án. Còn feature mình đang làm chính xác là gì thì mình xin không nói, vì nó còn khá mới và chưa công bố chính thức.


A: Các kỹ sư thường ao ước được làm  ở Google, một trong những công ty thành công và có môi trường làm việc tốt trên thế giới. Google có nhiều sản phẩm thay đổi cuộc sống của hàng tỉ người trên thế giới, và công ty tự hào của nước Mỹ. Bạn có cảm thấy tự hào khi làm việc ở Google?


H: Thật lòng thì mình cũng có một chút tự hào khi vừa gia nhập Google. Nhưng Google là một công ty lớn với gần 120.000 nhân viên (chưa kể nhân viên bán thời gian), nên nếu tính ra thì tầm ảnh hưởng của một bạn làm việc tại một startup nhỏ thành công có thể lớn hơn một kỹ sư trung bình tại Google.


A: Bạn cũng đã làm việc qua nhiều kinh nghiệm khác nhau, nghiên cứu trong lab, đi làm công ty nhỏ, rồi tới Google. Bạn cảm thấy điểm nào về văn hoá làm việc ở Google khác với những công ty trước? Bạn có thích văn hoá làm việc của Google?


H: Điểm khác biệt quan trọng nhất mình thấy là khi làm tại Google bạn phải biết hỏi ai vào lúc nào. Gần như tất cả các vấn đề bạn gặp đều có người nào đó trong Google là chuyên gia hoặc đã từng trải qua, và ai cũng rất sẵn lòng giúp bạn, bất kể bạn là ai đang làm dự án nào. Điều này rất ít thấy ở công ty nhỏ hoặc trong lab, khi mà thường bạn phải làm cùng một lúc nhiều công việc, và thường cũng không ai trong công ty có kinh nghiệm để giúp bạn. Ban đầu mình chưa quen với văn hóa này nên thường tự cố giải quyết vấn đề một mình, nên cũng gây cho mình nhiều trở ngại. Nhưng giờ thì mình cũng thích nghi tốt hơn và rất thích văn hóa mở và minh bạch ở công ty. Trong Google, bạn gần như có thể hỏi bất kỳ ai về việc gì liên quan đến công việc, và ai cũng sẵn lòng trả lời.


A: Bạn cũng từng làm việc trong môi trường học thuật (academic). Những sự thích ứng mà bạn gặp phải khi ra làm việc trong môi trường công nghiệp.


H: Trong academic, thường vấn đề lớn nhất mình thường thấy là hay tự tạo ra vấn đề. Trong công nghiệp, thường giải quyết 90% một bài toán bằng một lời giải đơn giản tốt hơn rất nhiều so với cố gắng giải bài toán 100% nhưng mất gấp đôi thời gian để hiện thực và sau 3 tháng thì ngay cả chính bạn cũng không còn đọc hiểu được giải thuật của chính mình.


A: Tôi nghe nói Googler (nhân viên của Google) rất là thông minh. Bạn có sợ hay mất tự tin phải làm việc với những kỹ sư thông minh ở Google? :-)


H: Imposter Syndrome khá phổ biến trong Google. Mình ban đầu cũng hay mất tự tin, đặc biệt là khi phát biểu trong các buổi meeting lớn. Nhưng lâu dần cũng quen, đặc biệt là khi mình đã làm việc với một bài toán trong thời gian đủ lâu thì mình cũng tự tin dần về hiểu biết và cách nhìn của mình về bài toán đó.


A: Những lúc khó khăn trong lúc làm việc ở Google, bạn sẽ tìm đến ai để tìm sự giúp đỡ hay chia sẻ? 


H: Mình thường chơi Dota2 với một số người bạn thân để xả stress. Ở Google Zurich cũng có hội người Việt (khoảng 6-7 người), lâu lâu mọi người cũng hay gặp nhau tâm sự. Nếu là khó khăn trong công việc thì thường mình trao đổi với manager (cũng là engineer) hoặc tìm xem ai làm về vấn đề tương tự để hỏi.


A: Bạn đã có cơ hội tiếp xúc (trực tiếp hay video conference) với những nhân vật nổi tiếng ở Google mà nổi tiếng trong ngành hay thế giới, ví dụ, Larry Page, Sergey Brin, Sundar Pichai, hay bất cứ ai mà bạn thần tượng trong Google? Bạn có kỷ niệm/suy nghĩ gì về họ không? :-)


H: Mình vào Google khi Larry và Sergey đã không còn giữ vị trí quan trọng trong Google, nên mình không có mấy ấn tượng về họ. Sundar thì không phải là một engineer, nên mình cũng không thần tượng Sundar lắm. Thần tượng của mình (và chắc của phần lớn nhân viên Google) là Jeff Dean, kỹ sư level 11 ở một hệ thống phân hạng có level max là 10. Jeff Dean cũng hay thăm Google Zurich nên mình cũng gặp anh ấy được mấy lần ngoài đời, nhưng chưa từng nói chuyện. Kỷ niệm vui nhất là ngay sau buổi Onsite Interview tại Google Zurich, mình bắt tàu đi thẳng sang trường ETH để nghe một bài thuyết trình của Jeff Dean.


A: Mình cũng có đọc vài paper của Jeff Dean 😊. Team của bạn làm bây giờ có bí quyết gì để duy trì sự đổi mới sáng tạo của team?


H: Trong Google, có khái niệm 20% project, tức là mỗi người có thể dùng 20% thời gian của mình làm bất cứ dự án nào mình thích (có thể tự nghĩ ra, hoặc làm cho team khác). Mình cũng đang làm 20% cho một team khác. Văn hóa, cách làm việc, và cách tiếp cận vấn đề của hai team này khác biệt nhau hoàn toàn, nên mình học được khá nhiều thứ từ cả hai team. Nhiều dự án thành công nhất của Google cũng là từ 20% project (như Google Chromecast), nên mình thấy khá thích policy này.


A: Bạn có lời khuyên gì cho người Việt ra nước ngoài (đặc biệt, được đào tạo trong nước) làm việc trong các công ty công nghệ để hòa nhập môi trường làm việc quốc tế. Tất cả văn hoá làm việc của người Việt đều tốt hay cần phải thay đổi điều gì?


H: Mình thấy nói về văn hóa làm việc của người Việt là khá chung chung và là một khái niệm tương đối nguy hiểm, vì ai cũng có cách làm việc riêng để hiệu quả và phù hợp nhất với tính cách của họ. Mình cũng từng làm việc và tiếp xúc với nhiều Việt, và thấy không thể có kết luận gì về khái niệm này. Tương tự, "môi trường làm việc quốc tế" là một khái niệm mơ hồ, vì mỗi công ty đều có văn hóa và cách làm việc khác nhau. Thậm chí trong Google, mỗi team đều có phông văn hóa rất khác biệt. Mình chỉ có 2 điều muốn nói về chủ đề này. Một là đôi khi bạn phải chấp nhận thay đổi cách làm việc để hòa nhập với team của mình, và điều này có thể xảy ra thường xuyên hơn là bạn nghĩ. Hai là theo cảm nhận của mình, một số tổ chức và công ty ở Việt Nam vận hành theo cách cảm tính và thiếu minh bạch. Điều này làm cho một số bạn làm việc tại đây theo thời gian phải phát triển những kỹ năng tương đối tiêu cực và không liên quan đến nghiệp vụ.


A: Khi đọc blog này, nhiều bạn trẻ sẽ ao ước được làm việc ở Google, hay các công ty công nghệ lớn, hay các công ty thành công nói chung. Bạn có lời khuyên gì cho các bạn mới bước chân vào ngành IT ở Việt Nam?


H: Theo mình kỹ năng quan trọng nhất trong ngành IT có lẽ là kỹ năng tự học, vì ngành này thay đổi tương đối nhanh so với những ngành khác. Bạn cố gắng phát triển khả năng tìm kiếm và đọc hiểu tài liệu tiếng Anh, ngay cả khi bạn chỉ có ý định làm việc trong nước. Theo mình thấy, dù bạn có bận như thế nào cho công việc hiện tại thì cũng nên cố gắng đầu tư ít nhất 20% cho việc học một cái gì đó mới mà bạn nghĩ sẽ cần thiết trong tương lai. Cố gắng đầu tư vào kiến thức và nguyên tắc nền tảng, những thứ vẫn sẽ hữu dụng cho bạn 10-20 năm sau.


A: Tôi nghe nói có nhiều người muốn nghỉ hưu ở Google, vì môi trường làm việc tốt và chế độ đãi ngộ tốt. Bạn có định làm điều này không?


H: Tôi cũng chưa biết trước được. Tuy vậy, thời gian làm việc trung bình tại Google của một kỹ sư là khoảng 3.5 năm, nên tôi không nghĩ là “có nhiều người muốn nghỉ hưu tại Google” như bạn nói :)


A: Bạn có chấp nhận giới thiệu vào Google (referral). Tôi ứng tuyển được chứ? :-)


H: Rất sẵn lòng :)


Rất cảm ơn bạn đã dành thời gian cho bài phỏng vấn với blog.


Thứ Hai, 10 tháng 8, 2020

Selenium là công nghệ gì, và Lê Dương đang làm gì...

👆👆👆,

Chào các bạn trẻ, hôm nay, tôi xin giới thiệu Lê Dương, một đồng tác của bài viết này, và những bài viết khác trong tương lai. Lê Dương là ông anh thời học ở NUS. Anh ấy nghiên cứu về Vật lí học (Physics), và bây giờ anh ấy là Princial Machine Learning Researcher ở Cyberlogitec, một công ty Hàn Quốc có trụ sở ở Hà Nội. Anh ấy từng là một người làm thí nghiệm mô phỏng vật lý (kiểu như thí nghiệm của trung tâm CERN, Thuỵ Sỹ). Anh Dương đã từng viết code Fortran trong phòng thí nghiệm, và anh ấy bây giờ chuyển sang làm IT.

Figure 0: Anh Lê Dương (ngoài cùng bên phải) và những người cộng sự cùng lab tại thời làm R&D ở Liege, Bỉ.

Selenium

    Trong bài viết, chúng tôi giới thiệu Selenium, một công nghệ kiểm thử webapp tự động. Công nghệ này giúp bạn kiểm thử các web có hệ thống và tiến tới kiểm thử tự động. Selium là một tập hợp của những công cụ (tool) và thư viện (libary) để hỗ trợ sự tự động hoá của trình duyệt web (web browsers). Sự tự động hoá ở đây được hiểu là sự giả lập trình duyệt, gửi câu lệnh đến trình duyệt web, từ đó mình có thể tự động hoá những phép kiểm thử (test cases) của webapp. Sau đây là một quote từ những nhà phát triển công nghệ Selenium 👀.

"It provides extensions to emulate user interaction with browsers, a distribution server for scaling browser allocation, and the infrastructure for implementations of the W3C WebDriver specification that lets you write interchangeable code for all major web browsers."

Cốt lỗi của công nghệ Selenium là webdriver, một tài liệu nhằm chuẩn hoá quá trình phát triển webdriver.

1. Ba thành phần chính của Selenium
  • WebDriver: dùng browser automation APIs được phát triển bởi các trình duyệt Chrome, Firefox,... để điều khiển các trình duyệt và chạy các phép kiểm thử. Selenium webdriver được khuyên dùng bởi tổ chức W3C.
  • IDE: là công cụ được phát triển bởi Selenium để viết và chạy Selenese script. Nó được phát triển là một extension của Chrome and Firefox. Ngoài ra, nó còn được sử dụng để record những hành động của người dùng trên một trang web.
Figure 2: Công cụ tạo test case trong hệ thống sinh thái Selenium.
  • Grid: Selenium grid là một công cụ cho phép bạn chạy các phép kiểm thử (test cases) trên nhiều máy tính khác nhau với kết hợp các loại trình duyệt và hệ điều hành khác nhau.

2. Ví dụ

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located

#This example requires Selenium WebDriver 3.13 or newer
with webdriver.Firefox() as driver:
    wait = WebDriverWait(driver, 10)
    driver.get("https://google.com/ncr")
    driver.find_element(By.NAME, "q").send_keys("cheese" + Keys.RETURN)
    first_result = wait.until(presence_of_element_located(By.CSS_SELECTOR, "h3>div"))
    print(first_result.get_attribute("textContent"))

Algorithm 1: Đoạn code mẫu để dùng Selenium từ Python Selenium client API.

Giải thuật 1 đưa ra  một ví dụ về việc dùng Python Selenium Client API để khởi tạo trình duyệt Firefox, gửi một search request tới google.com với cụm từ "cheese", sau đó chờ google service trả về kết quả, in ra kết quả.

3. Ứng dụng thực tế

Figure 3: WebDriver và hệ thống sinh thái Selenium.
Các nhà phát triển có dùng Selenium để tạo ra các phép thử cho sản phẩm web của họ. Ngoài ra, họ còn dùng nó để ghi những tương tác giữa người dùng và các trình duyệt, để phân tích dữ liệu người dùng tương tác, để thiết kế UI/UX tốt hơn.
Nếu các bạn có thời gian hãy đọc W3C WebDriver specification.

Khách hàng

Qua bài viết này, chúng tôi cũng muốn giới thiệu với các bạn quy trình hoạt động tư vấn của nhóm chúng tôi như thế nào. Nhóm chúng tôi gồm những người có nhiều kinh nghiệm khác nhau nên sẽ có kiến thức, kinh nghiệm bao quát hơn. Ví dụ, anh Lê Dương có kinh nghiệm về physics sẽ giúp nhóm có kinh nghiệm hơn trong vấn đề tính toán khoa học (scientific computing), học máy (machine learning), tôi thì chuyên về mảng cloud, AI, data science. Nhưng quan trọng nhất, chúng tôi phải xác định hiểu được vấn đề của khách hàng đặt ra trước khi suy nghĩ giải pháp cho vấn đề. Thấu hiểu khách hàng là phương châm trên hết của nhóm chúng tôi. Đồng thời, chúng tôi cũng kết hợp những am hiểu công nghệ và am hiểu văn hoá địa phương để đưa ra những giải pháp cụ thể và phù hợp với khách hàng.

    Ví dụ, khi chúng tôi nhận được yêu cầu về nghiên cứu công nghệ Selenium. Chúng tôi đã đọc tài liệu về Selenium (wiki, documentation, lịch sử) kết hợp với kinh nghiệm kỹ thuật, và yêu cầu thực tế từ anh Lê Dương.

Các bạn fan hãy bình luận bên dưới, nhất là các fan ở Hà Nội.👇👇👇

🐘🐘🐘

Thứ Hai, 3 tháng 8, 2020

HOW-TO: Studying and passing Microsoft Azure certification AI-100 and DP-100 in 3 days!!!

👆👆👆,

I registered and passed AI-100 and DP-100 last week. I registered on last Monday and passed the AI-100 on 29-July-2020 and DP-100 on 30-July-2020 ✌. So, I registered, reviewed materials, and took the exam and passed it in 3 days. It is amazing!!! Hehehe, that maybe just my clickbait. Let's celebrate it first, no matter what!!!
Figure 1: My Microsoft certifications from the Microsoft Certification Dashboard portal.

    Let me tell you what the amazing things were about the exam. I did not know what to expect before the exam happened. I used to the exam format such as going to the hall, and write on the papers. Interestingly, I was taking the last exams 7-8 years ago. You registered the exams online, did the exams on a computer software of PEARSON VUE. Because of the COVID-19 situation, I could register the DP-100 exam at a test center in the city center, which is near my place, and I could only register the AI-100 exam at a quite far-away region. I found taking the exam in the far-away test center is more interesting because their measures for COVID-19 is less stringent. I must wear a mask,  and further I need to wear a pair of gloves in the test center in city area. I think a pair of gloves is redundant and reducing their profits during the pandemic 😀. You can wash your hands of viruses with soap, and all your viruses would be washed away, and the situation in Singapore is not that bad. By the way, their gloves were very nice 🧤!!! If you are know how to use a computer software, then you don't need to wary about the test software. After you clicked the button "Finished", your scores would come out immediately 😀. I never have experienced a kind of tests like that, from admitting to university, tests in schools..., and I need to wait at least a few days or months to know whether I pass or fail. This is very amusing to me.

    That is how I passed AI-100 Designing and Implementing an Azure AI Solution with the score of 717, and DP-100 Designing and Implementing a Data Science Solution on Azure with the score of 816. By the way, you need at least 700 the pass the certification.

Now coming to the main story...

Reviewing for two exams

Before the exam, I don't know how to review for the exams, because I never takes any cloud platform or technology exams. I did some searches online and read around some documents in Microsoft Learn websites. Microsoft did a good job to build the learning resources for their technologies and also for preparing for the certification exams. My company also hires an instructor to teach us the two modules, and he also gave an sample exam paper. But I found this exam paper is not really relevant, and their answers are controversial.
    Let's stick with Microsoft (MS) resources for training yourself and preparing for the exam. If your company has an instructor for you, that is great! Learning with interactions would be easier than learning on your owns. First, I would remind you that MS has a portal of anything can be certified, from there, you can navigate into your wanted certification and its learning resources.

DP-100:

The learning path is here. There is a github repo accompanying with the Online-Free course: https://github.com/MicrosoftLearning/DP100. The first module focuses on developing machine learning pipelines with Azure Machine Learning designer with no codes. The second modules teaches what and how to use Azure Machine Learning SDK (Python) to design machine learning pipelines. If a instructor were to teach you, he also cover the contents similar two modules and the github pipeline.

Figure 2: Learning path for DP-100 including two modules.

Let's look at what it is covered in the second module learning Azure Machine Learning SDK
  • Introduction to Azure Machine Learning
  • Train a machine learning model with Azure Machine Learning
  • Working with Data in Azure Machine Learning
  • Working with Compute Contexts in Azure Machine Learning
  • Orchestrating machine learning with pipelines
  • Deploying machine learning models with Azure Machine Learning
  • Deploy batch inference pipelines with Azure Machine Learning
  • Tune hyperparameters with Azure Machine Learning
  • Automate machine learning model selection with Azure Machine Learning
  • Explain machine learning models with Azure Machine Learning
  • Monitor models with Azure Machine Learning
  • Monitor data drift with Azure Machine Learning
Please remember "practice makes it perfect"! There are many questions regarding reading a segment of Python codes, or filling the blank with codes. There is NDA (Non-disclosure agreement) that I signed with MS, hence, I cannot disclose anything further. 

Practice! Practice! Practice! You can register a new Azure account with an email account with some free credits (I remembered around 300$). With that amount, you can practice your skills. When practicing, let focus on setting up an Azure Machine Learning workspace, running experiments and training models, optimizing and managing models, deploying and consuming models. They are as usual as we are doing in jobs as data scientists.

AI-100:
For AI-100, we can follow the same study guides as DP-100. Remembering MS is a nice guy 😆, wants to validate your skills only, and practice makes it perfect.
Figure 3: Learning path for AI-100 including four modules
I found the following github very helpful for reviewing materials after practicing: https://github.com/meet-bhagdev/ai-100

To summarize, we should follow the learning path recommended by MS and practice the lab sessions provided by MS.

P/S: This post is dedicated to my fellow HannLam Woo.
🐘🐘🐘

Thứ Bảy, 1 tháng 8, 2020

Azure! Azure! Azure! chứng chỉ AI-100, DP-100 là gì?

☝☝☝,
Hôm nay, tôi có một tin vui muốn thông báo đến các bạn độc giả là tôi đã được chứng nhận bởi Microsoft (MS) về một kỹ năng. Chắc hẳn, trong một giai đoạn nào đó, tôi cũng như các bạn đã xài lậu hệ điều hành Windows của Microsoft 💥. Thời lúc mới vào đại học, năm 2007, đa số mọi người điều xài Win lậu, vì lúc đó khái niệm bản quyền ở Việt Nam là hơi xa lạ, và vì còn nghèo. Lúc đó, mọi người tìm cách crack Win để xài, hehe. Bây giờ thì tình hình có vẻ khá hơn, vì bây giờ, bạn mua một chiếc máy tính, laptop thì các bạn phải bắt buộc phải mua bản quyền cho Windows hoặc MacOs.

1. Vậy chứng chỉ là gì?

Trở lại chủ đề chính, hình 1 phía dưới là một phần của chứng chỉ (certification) do Microsoft cấp cho tôi tuần này, (được lưu trữ ở Microsoft Certification Dashboard). Chứng chỉ là một chứng nhận mà Microsoft cấp cho bạn nếu bạn vượt qua kỳ thi do Microsòft uỷ quyền cho một công ty chuyên về thi tổ chức (i.e., Pearson VUE). Hai chứng chỉ của tui có thời gian 2 năm đến 29-07-2022, và tôi đã bỏ tên đi vì sự riêng tư.

Câu chuyện mà tôi đi thi để lấy chứng chỉ (Microsoft certification) cũng là do liên quan đến dịch COVID-19. Vì dịch COVID-19, mà công ty của tôi phải làm việc ở nhà, và nhiều người ở Singapore mất việc làm. Công ty tôi cũng hưởng ứng chủ trương của chính phủ Singapore kêu gọi nâng cấp kỹ năng (up-skill) của người làm việc trong thời kì dịch bệnh, để sau khi kinh tế khôi phục, thì mọi người có thể tìm được việc mới. Mà quan trọng hơn, Microsoft có đầu tư trong công ty tôi, và công ty tôi cũng sử dụng nền tảng điện toán đám mây Azure của Microsoft, nên công ty có tổ chức lớp học về những công nghệ Microsoft. Và thế, tôi đăng ký học và thi đậu 2 kỳ thi liên quan đến công việc mà tôi đang làm, 
AI-100 Designing and Implementing an Azure AI solution DP-100 Désigning and Implementing a Data Science Solution on Azure 💪. Hehe!!!

    Kỳ thi diễn ra trên máy tính, và tôi phải đến một trung tâm để thi. Sau khi bạn hoàn thành bài thi trên máy tính, thì bạn sẽ biết kết quả liền. Ở Việt Nam, các bạn có thể thi ở trung tâm Trainocate, địa chỉ trên website của họ. Tôi có kinh nghiệm trong lĩnh vực này và không có nhiều thời gian nên tôi quyết định đăng ký và thi trong tuần này. Tôi đăng ký vào thứ 2, và thi vào ngày thứ 4 và thứ 5. May mắn thay, tôi đã đậu kỳ thi AI-100 với số điểm 717 và DP-100 với số điểm 816 (với 700 điểm, bạn sẽ đậu). Yeah!!!💫💫💫

    Nói một cách vắn tắt, AI-100 là chứng chỉ về những công nghệ liên quan đến trí tuệ nhân tạo (Artificial Intelligence), và DP-100 tập trung vào những công nghệ về học máy, khoa học dữ liệu (machine learning, data science) của Azure. Tôi sẽ viết một blog khác về học những chứng chỉ này như thế nào.

Figure 1: Chứng chỉ tin học đầu tiên của đời tôi.

2. Vai trò của chứng chỉ

Lúc đầu, tôi cảm thấy rất vui vì những cái huy hiệu đẹp phía dưới. Tôi có thể làm gì cho chứng chỉ này 😆? Theo như người thầy dạy tôi 2 môn này, posting những chứng chỉ này lên Linkedin, và viết trong CV thì có thể giúp chúng ta có cơ hội được liên hệ với những công việc liên quan đến Azure cloud. Cũng theo như ông ấy, sau khi vượt qua kỳ thi này, chúng ta có thể được gọi là MSP, Microsoft professionals (gọi như, những người hành nghề công nghệ Microsoft). Những chứng chỉ này giống như bằng tin học hoặc tiếng Anh A, B, C hồi xưa, nhưng ở lĩnh vực chuyên môn sâu hơn.
    Hơn thế nữa, với việc đạt được chứng chỉ này, tôi có thể tiến hành những thủ tục tiếp theo để trở thành một Microsoft Certified Trainer (MCT, đại khái, người đào tạo về công nghệ Microsoft). Cũng là một lựa chọn cho công việc sắp tới của tôi. Những kiến thức trong 2 chương trình này, làm cho tôi có nhiều lựa chọn trong việc sử dụng công nghệ trong công ty: tự hiện thực, open-source, Azure, AWS, GCP.
      Bàn một chút về chứng chỉ của MS, MS Azure có 3 loại chứng chỉ: fundamental (1 sao), associate (2 sao), expert (3 sao). Các bạn cũng thấy, chứng chỉ của mình thuộc loại associate có 2 sao. Do lĩnh vực data science và AI tương đối mới, nên hiện giờ, chứng chỉ cao nhất là associate, chắc là sau này sẽ có trình độ expert nếu công nghệ này được ứng dụng và phát triển rộng rãi trong tương lai. Vì vậy, tuỳ theo công việc hiện tại bạn đang làm và sở thích, bạn có thể chọn chứng chỉ cho phù hợp (i.e, toàn bộ danh sách chứng chỉ của Azure).👈
Figure 2: Huy hiệu (badge) của chứng chỉ AI-100 được cấp từ Microsoft.

Figure 3: Huy hiệu (badge) của chứng chỉ DP-100 được cấp từ Microsoft.

Bài liên quan:

P/S: Các bạn có thể sử dụng hệ điều hành open-source như Ubuntu nếu các bạn không chơi game nhiều.🐘🐘🐘
Bình luận 👇👇👇

Thứ Sáu, 31 tháng 7, 2020

3 đặc trưng của thông tin và tư vấn tổng quan về ngành IT

Bài viết này chủ yếu dành cho các bạn học sinh phổ thông (cấp 2, cấp 3), nhưng các bạn học đại học vẫn có thể đọc. Bài này mình bàn về khái niệm của <<thông tin>> và ngành IT (công nghệ thông tin), vì kỳ thi tốt nghiệp phổ thông 2020 (trước kia là kỳ thi đại học) đã tới gần.

1. Ba đặc trưng của thông tin

Những đặc trưng này, tác giả tự đúc kết sau khi dành thời gian 4.5 năm học về kỹ thuật máy tính (computer engineering, or CE) ở đại học, một thời gian nghiên cứu PhD, và đi làm 3 công ty từ nhỏ đến lớn (i.e, Softfoundry, AIQ, Grab,...). Tổng cộng thời gian, tác giả tiếp xúc/làm việc nghiêm túc với máy tính 13 năm từ 2007 tới nay. Trước đó, thì chỉ chơi một ít game thời học cấp 3. Đi cùng những đặc tính này, mình sẽ tóm lượt những công việc liên quan tới những đặc trưng này.

Nhanh (fast): Đây là đặc tính đầu tiên và quan trọng nhất của thông tin số. Thông tin số là thông tin được mã hoá trong máy tính. Máy tính bây giờ có thể xử lí một câu lệnh trong khoảng 1ns (1 giây có 10^9 ~ 1 tỷ nano giây). Bạn nói một câu nói ngắn thì khoảng 5s, và bạn có thể tưởng tượng trong khoản thời gian ấy, máy tính có thể thực hiện 5 tỷ câu lệnh rùi. Rất có ít thứ trên thế giới có thể làm điều kỳ diệu này. Nhiều câu lệnh sẽ gộp thành những tác vụ (operation) có ích với con người như truyền, biến đổi, trình diễn, gây chú ý thông tin. Chính sự nhanh của thông tin đã làm hiệu suất làm việc của con người tăng lên.
Figure 1: Máy tính Apple Macintosh Classic II, một trong những máy tính cá nhân đầu tiên.


Đa dạng (big): Máy tính xử lí nhanh và có dung lượng lớn, dẫn đến con người dùng máy tính để lưu trữ một lượng thông tin khổng lồ. Các loại thông tin khác nhau như số, ngôn ngữ, chữ viết, văn bản, bài văn, thư từ, báo chí, âm thanh, hình ảnh, video, thông tin tài chính, địa lý,  giải trí, trò chơi (gaming)... Ngành khoa học máy tính có một chuyên ngành xử lí big data khá phổ biến.
Figure 2: dữ liệu lớn và đống hỗn độn của nó 😀


Ảo (virtual): Thông tin thường thì không sờ, nắm, ngửi được, mà bạn chỉ có thể nhìn, đọc, nghe nó. Bazinga!!! Nhưng có ngoại lệ, bạn có thể in thông tin (một bài báo vnexpress), ..., và ngửi nó, hi hí!!! Các bạn học C++ cũng biết khái niệm virtual function, một hàm (function) không có hình dạng/chức năng/hiện thực (còn gọi là implementation) cụ thể mà chỉ có một giao diện (interface), có thể được dùng ở nhiều nơi. Tương tự, thông tin cũng ảo và đa hình được dùng/biến đổi tuỳ thuộc vào nhu cầu của con người cho mục đích cả xấu lẫn tốt. Nhu cầu của con người đối với thông tin sẽ tạo ra nhiều việc làm và nhiều ngành công nghệ nhỏ trong ngành IT. Ví dụ, chúng ta muốn phát triển phần mềm (software) có nhiều lĩnh vực khác nhau (tài chính, báo chí, chính phủ, dầu mỏ, quản lí địa lí (GIS),...) làm cho công việc kỹ sư phần mềm (software engineer) rất phong phú. Chúng ta muốn phát triển phần mềm cho các loại thiết bị khác (máy tính, macOS, Windows, điện thoại, iOs, Android, Sámsung, Apple, Huawei phone, ...). Chúng ta muốn thông tin an toàn hơn, sản sinh lớp công việc về kỹ sư an toàn thông tin (security engineer), kỹ sư mạng máy tính (network engineer). Chúng ta muốn thông tin trở nên thông minh hơn, tạo nên lớp công việc về phân tích dữ liệu, khoa học dữ liệu (data analytics, data analysts, data scientist). Rồi có công việc quản lí chuỗi thông tin trong một chuỗi kinh doanh/sản xuất, ví dụ như quản lí chương trình kỹ thuật (Technical Program Manager), quản lí sản phẩm (Product Manager). Vì nhu cầu dồi dào, nên cũng có nhu cầu về tập huấn/giảng dạy cho nhân viên công ty những công nghệ IT phổ biến, chẳng hạn, trong cloud computing, có nhiều chương trình training về AWS (Amazon), Azure (Microsoft), GCP (Google), và có những công việc loại giảng dạy này. Vì chữ ảo này, trong kinh doanh, cũng có nhiều công ty, ngành công nghiêp cố gắng kết nối giữa ảo (virtual) & thực (reality), ví dụ, gọi dịch vụ xe, thức ăn qua điện thoại thông minh (ride-hailing, food delivery), in 3D (3D-printing), thương mại điện tử (e-commerce), Internet-of-Things (IoT).

Figure 3: Funny cat with virtual reality glasses.

2. Những câu hỏi thường gặp về ngành IT

Trong phần này, tác giả chủ yếu làm sáng tỏ một vài điều bí ẩn thường được hỏi về ngành IT.
  • Có phải là tác giả khuyên người đọc nên thi IT?
Dĩ nhiên là không. Với kinh nghiệm, mình đã từng thấy nhiều bạn học xong IT đi làm ngành khác, hoặc học những ngành khác chuyển sang làm IT, cũng có nhiều bạn nhìn thấy codes là bỏ chạy á 😂. Tôi chỉ cung cấp cho các bạn những kinh nghiệm trong ngành mà ít người bàn tới.
  • Học IT luôn vất vả vì phải học liên tục, luôn cập nhật kiến thức?
Tôi luôn gặp câu hỏi này từ những người phụ huynh khi lựa chọn nghề nghiệp. Ba tôi, một người nông dân, không bao giờ tiếp xúc với công nghệ thông tin (CNTT), vẫn biết về điều này. Chắc do những người có con học về CNTT nói chuyện và kể lại. Rồi, một hôm, tui đi một hội thảo (workshop) bên xứ Singapore này, có một bà mẹ cũng hỏi, nếu con tôi học và thành thạo một ngôn ngữ (C++) thì liệu nó có được một nghề nghiệp ổn định trong tương lai. Với kinh nghiêm trong ngành, tôi thấy một phần nào đúng trong những nhận xét này. Tuy nhiên, chúng ta nghĩ theo điều này ở một khía cạnh tích cực. Chính việc đổi mới liên tục của công nghệ sẽ tạo ra công việc. Nếu các bạn có kiến thức cơ bản của ngành thì việc tiếp thu kiến thức mới sẽ dễ hơn. Những bạn thích công việc nhẹ nhàng, ít thay đổi thì IT sẽ khó đáp ứng bạn. Và tất cả các công việc theo nghĩa rộng nhất là tạm thời.
  • Học IT "hái" ra tiền?
Tôi cũng nhận được lời nhận xét này. So với mặt bằng chung thu nhập ở VN bây giờ, thì cũng có thể đúng là ngành IT có mức lương cơ bản tốt hơn mức trung bình, báo cáo ở đây (link). IT trả lương tốt cho những người có kinh nghiệm. Nhưng phổ lương của IT khá rộng tuỳ thuộc vào năng lực và kinh nghiệm. Nhưng làm việc trong ngành IT, bạn phải thường xuyên làm việc quá giờ (over-time).
  • Con gái có học được IT?
Theo kinh nghiệm của tôi, IT là ngành công nghiệp bao gồm nhất (inclusive) nhất. IT là một ngành trong khối STEM (science, technology, engineering, mathematic) mà con gái có thể dễ dàng hoà nhập. Vì sự đa dạng về công việc của IT, có nhiều vị trí ít yêu cầu về kỹ năng kỹ thuật như quản lí sản phẩm (product manager), quản lí dự án (program manager), quản lý tài khoản (account manager), làm về nhân sự (technical recruiter), thiết kế đồ hoạ (designer), kiểm thử (tester), bán hàng. Hơn thế nữa, nhiều bạn nữ có kỹ năng làm kỹ thuật tốt.
  • Những kỹ năng gì quan trọng để học ngành IT?
Kỹ năng giải quyết vấn đề và tiếng Anh. Tiếng Anh là quan trọng, vì rất nhiều tài liệu quan trọng, hệ thống kiến thức được phổ biến bằng tiếng Anh.  Một phần vì những phát minh đầu tiên liên quan đến máy tính đến từ Mỹ, một phần vì tiếng Anh là ngôn ngữ phổ biến của khoa học. Nhưng quan trọng nhất vẫn là kỹ năng giải quyết vấn đề.
  • Toán học có quan trọng với ngành IT?
Rất nhiều giải thuật trong khoa học máy tính được phát minh tự trên những định lý, nghiên cứu của các nhà toán học, ví dụ, như đại số boolean, định lý số lớn trong học máy... 
  • Liệu ngành IT còn tồn tại trong 20 năm tới?
Chắc chắn là vậy. Tất nhiên, sẽ có nhiều tiến bộ trong ngành nữa, nhiều công cụ nâng cao hơn, ứng dụng sâu rộng hơn. Giống như ngành IT bây giờ khác rất nhiều so với 40 năm trước.
  • Học xong thì làm việc ở đâu?
Bây giờ có rất nhiều công ty có việc làm IT ở Việt Nam. Phổ biến nhất về phần mềm là FPT Software, VNG, TMA, CMC, KMS, Global Cybersoft,... Những công ty Internet ở Việt Nam như Tiki,...Những công ty viễn thông như Viettel, VNPT, Vinaphone cũng cần nhân viên để xây dựng và vận hành hệ thống công nghệ của họ. Ngân hàng cũng có hệ thống IT riêng như Vietcom bank, Techcom bank... Những công ty đa quốc gia cũng có mặt ở VN như Grab, Shopee, Harvey Nash, Bosch, KPMG... Những công ty phần cứng đa quốc gia như AMD, Renesas Electronics, Samsung, nghe đồn có Apple... Và cả ngàn công ty startup, SME khác như GiaoHangNhanh,...
  • Những ngành học có liên quan đến IT?
Những ngành chính thống như khoa học máy tính (computer science), kỹ thuật máy tính (computer engineering). Có những ngành mà tôi đi làm vẫn thấy, sau khi tốt nghiệp, họ vẫn làm kỹ sư phần mềm/phần cứng tốt như điện tử (electronics), viễn thông (telecomunication), toán/thống kê (mathematics)...


Chúc các bạn có sự lựa chọn hợp lý và một kỳ thi tốt! Nếu các bạn có câu hỏi, xin hãy gửi bình luận phía dưới (phần comment) 👇👇👇.
🐘🐘🐘

Thứ Bảy, 9 tháng 2, 2019

PL 101: Python numpy assignment operation is very amusing.

Hi all,
In this post, I just found that Python numpy is really an amusing language in the assignment operation and the mutable property of strings and tuples. I will continuously update this page to reflect my surprise on the features of Python numpy package.

First, the assignment operation is not a deep copy operation. It means that it just copy the pointer of contents to a new variable name. For example,
In [1]: import numpy as np
In [2]: a = np.zeros((2,3))
In [3]: a
Out[3]:
array([[0., 0., 0.],
[0., 0., 0.]])
In [4]: b = a
In [5]: b[0][0]= 1
In [6]: b
Out[6]:
array([[1., 0., 0.],
[0., 0., 0.]])
In [7]: a
Out[7]:
array([[1., 0., 0.],
[0., 0., 0.]])

You can see that modifying matrix `b` will cause matrix `a` modified.

Happy new year 2019, the year of Pig! Happy Python.

Thứ Hai, 5 tháng 2, 2018

C++ Algorithm 101: get index of sort algorithm

Hi,
Do you wonder to ask how to get index of a sorted array in C++. The answer is not straightforward, but tangible with C++11 lambda. Keep it in your C++ toolbox, you might need it quite often. I hope people will include some ways to do it easily in C++ next version.

template <typename T>
vector<int> sort_indexes(const vector<T> &v) {

  // initialize original index locations
  vector<int> idx(v.size());
  iota(idx.begin(), idx.end(), 0);

  // sort indexes based on comparing values in v
  sort(idx.begin(), idx.end(),
       [&v](size_t i1, size_t i2) {return v[i1] < v[i2];});

  return idx;
}
See you in the next post. Happy 2018 with productivity.