Khi develop website chắc hẳng chúng ta cần sự hỗ trợ của một số plugin để tăng tốc develop cũng như kiểm thử lại chất lượng sản phẩm! Sau đây mình sẽ giới thiệu một số extension trên Chrome cho web developer mình hay sử dụng và thấy chúng khá hiệu quả trong việc hỗ trợ công việc của mình.
Page Analytics (by Google)
Tool analytics được cung cấp bởi Google cho phép bạn dễ dàng xem việc phân tích tracffic website mà bạn đang quản lý. Download
PageSpeed Insights Checker for Mobile
Tool check speed load trên các thiết bị mobile. Bạn sẽ dễ dàng check tốc độ load của các trang web hiện tại với 1 cú click. Download
User-Agent Switcher for Chrome
Tool này sẽ giúp bạn dễ dàng chuyển user-agent bạn muốn trên website để dễ check giao diện, xử lý,… Download
Performance-Analyser
Sau khi cài tool, tool sẽ tự động đo performance khi bạn load website nên khi nào cần xem chỉ cần click để xem không phải load lại trang và nó không ảnh hưởng tốc độ tải website. Download
HTTP/2 and SPDY indicator
Nếu bạn cần test protocol thì không thể thiếu tool này nó sẽ phân tích cho bạn về http1.1, http2,… Download
Lighthouse
Nếu bạn cần 1 bản report chi tiết về hiệu suất về website thì không thể thiếu tool này. Nó được cung cấp bởi Google, thường dùng để check Progressive Web App,…. Download
Page load time
Tool này sẽ cung cấp tóm gọn thời gian load của website để bạn biết nên cải thiện những phần nào! Download
Image Analyzer
Tool này sẽ giúp bạn xem thông tin về size, dung lượng, exif… của từng tấm hình hoặc tất cả hình trên website. Download
Full Page Screen Capture
Tool này sẽ chụp hình toàn bộ website từ đầu đến đích trong 10 giây. Download
SimilarWeb – Traffic Rank
Tool này sẽ cho bạn biết thông tin về traffic rank hiện tại của website, nguồn truy cập,… Download
Về mặt kỹ thuật, hoạt động QA không chỉ tập trung vào việc xác định lỗi (defect identification – tìm thấy sau khi lỗi xảy ra – đơn giản là kiểm thử – Testing hay quản lý chất lượng Quality Control – QA), mà còn bao gồm cả việc ngăn ngừa lỗi (đảm bảo lỗi không thể xảy ra ngay từ đầu hoặc lỗi được phát hiện và chỉnh sửa trước khi xảy ra trên sản phẩm phần mềm).
Một phương trình tương đương có thể viết như sau:
QA = QC (xác định lỗi) + Ngăn ngừa lỗi
Mặc dù có vẻ đơn giản, nhưng khó để xác định được bằng cách nào hay các công việc cần tiến hành để ngăn ngửa lỗi chính xác là gì.
Và một sự thật là, tìm thấy lỗi trong khi thực thi kiểm thử hay sau khi đưa sản phẩm ra thị trường thì tốn kém hơn tìm và chỉnh sửa trước đó; thêm vào là khả năng mất lòng tin của khách hàng. Do đó, ngăn ngửa lỗi càng sớm sẽ càng tốt. Bên cạnh đó, ngăn ngừa lỗi cũng giúp cho công ty được chứng nhận CMMI với thứ hạng cao.
Ngăn ngừa lỗi
Ngăn ngừa lỗi là một bước hay một hoạt động quan trọng trong quá trình phát triển phần mềm, và có thể được chỉ rõ ở lượt đồ dưới đây, chiếm một phần trong các nhiệm vụ kiểm thử của nhóm kiểm thử.
Về cơ bản, việc ngăn ngừa lỗi cho những kỹ sư kiểm thử trong từng giai đoạn sẽ là:
Đánh giá các yêu cầu chức năng – Requirement Specification Review:
Sau khi hiểu rõ các yêu cầu của khách hàng, kỹ sư kiểm thử cần liệt kê một bản ý chính của yêu cầu cho bản thân.
Một bản đánh giá chung là quan trọng ở bước này – đầu tiên, đánh giá nên được làm chung với cả nhóm, sau đó là đánh giá chung với bên ngoài nhóm (bởi nhóm phát triển – dev hay nhóm phân tích chức năng – BA hay khách hàng) để đảm bảo toàn bộ quan điểm, ý kiến, mối quan ngại đều được thống nhất.
Đánh giá thiết kế
Giai đoạn Thiết kế có thể xem như là một giai đoạn phân loại chiến lược và kiểm tra đầu-cuối sẽ đảm bảo nhóm QA hiểu rõ ưu khuyết điểm của từng chiến lược.
Cách đánh giá này sẽ giúp tìm ra bất kỳ vấn đề tương ứng với từng chiến lược và chỉnh sửa, thay đổi nó trước khi tiến đến giai đoạn kế tiếp. Nó có thể được xem như việc nghiên cứu tính khả thi của chiến lược.
Đánh giá mã nguồn
Không có nhiều việc cho kỹ sư kiểm thử ở giai đoạn này, nhưng việc đánh giá cũng nên có ở đây. Kỹ sư phát triển kiểm tra các mã, kiểm tra đầu-cuối và đánh giá trước khi tiến hành kiểm thử đơn vị, kiểm thử tích hợp ứng dụng.
Phương pháp và kỹ thuật ngăn ngửa lỗi
Một vài phương pháp truyền thống và phổ thông được dùng từ lâu cho việc ngăn ngừa lỗi được liệt kê:
Đánh giá và kiểm tra: Phương pháp này bao gồm việc đánh giá bởi từng thành viên trong nhóm (tự-đánh-giá), đánh giá nhóm và kiểm tra trên toàn bộ tài liệu, sản phẩm.
Kiểm tra đầu-cuối (Walkthrough): Phương pháp này có thể gần giống với Đánh giá, nhưng nó thiên về việc so sánh hệ thống từ khi là nguyên mẫu (prototype), khi mà ý tưởng mới hình thành, so với mức độ chính xác của hệ thống.
Tài liệu hóa lỗi: Phương pháp này cung cấp những thông tin quan trọng và các thông số mà có thể dùng để hỗ trợ việc phân tích lỗi.
Phân tích nguyên nhân (Root cause analysis): Phân tích nguyên nhân bao gồm hai cách tiếp cận chính:
Phân tích Pareto là một kỹ thuật chuẩn và đơn giản giúp đánh giá mức độ của các giải pháp với các tác động tối ưu. Nó cho rằng 80% vấn đề đến từ 20% nguyên nhân.
Do đó, một khi vấn để được xác định và phân loại theo tần suất và một phân tích dựa vào thống kê chi tiết sẽ chỉ ra 20% lượng nguyên nhân gây ra 80% vấn đề. Bằng cách đơn giản là tập trung và loại bỏ vào 20% nguyên nhân, kết quả sẽ được đảm bảo trong khi tối ưu số lượng công việc.
Phân tích xương cá
Hay cũng được gọi là phân tích Ishikawa, là một kỹ thuật phân tích nguyên nhân một cách trực quan. Không dùng đến kỹ thuật thống kê tham gia vào quá trình phân tích mà dựa vào phân tích (brainstorming) của cả nhóm. Lược đồ dưới đây mô tả chi tiết kỹ thuật này:
Vấn đề sẽ được viết ở ngoài cùng bên phải, và một đường thẳng nối từ đó ra, liệt kê từng nguyên nhân gây ra vấn đề. Nhánh nào có nhiều nhánh con/nguyên nhân là vấn đề nghiêm trọng nhất và sẽ được tập trung để loại bỏ. Kỹ thuật này đôi khi còn được coi là kỹ thuật phân tích nguyên nhân và kết quả.
Thứ hạng TMM và kiểm soát lỗi bởi tổ chức kiểm thử
TTM (Testing Maturity Model -Mô hình phát triển kiểm thử) được phát triển từ CMM (Capability Maturity Model – mô hình phát triển khả năng)
Ngăn ngửa lỗi cần đến sự tham gia và đóng góp của nhiều thành viên ở từng giai đoạn khác nhau, đó cũng là lý do để nó là một yếu tố nổi bật trong đánh giá TMM thứ hạng 5; Nếu một lỗi xuất hiện thường xuyên trong bất kỳ một bài kiểm thử hay chức năng, tổ chức kiểm thử có thể lập môt nhóm thành viên để phân tích lỗi và phát triển một kế hoạch với các hành động để giải quyết vấn đề/lỗi đó.
Vài lợi ích của việc ngăn ngửa lỗi:
Thành viên trong nhóm sẽ có động lực và tỉnh táo để làm việc
Sự hài lòng của khách hàng
Tăng độ tin cậy, khả năng quản lý và tính dự báo
Tăng cường khả năng cải tiến quá trình
Trách nhiệm và vai trò nhóm trong ngăn ngừa lỗi
Có ba nhóm chính tham gia vào quá trình ngăn ngửa lỗi
Quản lý
Để đảm bảo cho sự thành công của viện ngăn ngừa lỗi không thể thiếu sự hỗ trợ mạnh mẽ từ ban quản lý
Sự hỗ trợ có thể la nhân sự, tài nguyên, đào tạo và công cụ dành cho việc tiến hành kế hoạch một cách thuận lợi
Có chính sách thích hợp và thay đổi văn hóa nếu cần thiết
Thúc đẩy các cuộc thảo luận, phân bổ các danh sách lỗi và những thay đổi trong quá trình làm việc
Kỷ sư kiểm thử
Bảo trì cơ sở sữ liệu về lỗi, đảm bảo tính chính xác của dữ liệu
Thông tin và dữ liệu về lỗi phải được cập nhật liên tục theo thời gian thực
Lên kế hoạch triển khai những thay đổi nếu có từ ban quản lý
Khách hàng
Vai trò của khách hàng khá nhỏ và hạn chế nhưng sự quan tâm đối với chất lượng của họ là rất quan trọng
Kết luận
Ngăn ngừa lỗi đóng một vai trò chủ yếu và quan trọng trong chu trình phát triển phần mềm. Nó giúp việc quản lý chất lượng của sản phẩm phần mềm với cách thức “sớm nhất và rẻ nhất” với các phương pháp và kỹ thuật được bàn ở trên.
Nó đảm bảo các vấn đề sẽ được giải quyết sớm mà không để xảy ra trên ứng dụng. Nó đánh giá việc tìm ra nguyên nhân chính là việc căn bản nhất trong quá trình xác định và giải quyết vấn đề.
Duy trì chất lượng của phần mềm là nhiệm vụ của nhóm quản lý và toàn bộ nhóm kiểm thử, bao gồm cả trưởng nhóm, khách hàng và từng thành viên trong nhóm.
Bài viết được sự cho phép của tác giả Tô Thị Vân Anh
Lại một tuần nữa trôi qua mà không đăng thêm bài viết mới nào mặc dù các ý tưởng thì nhiều, chỉ có lười ngồi viết thôi, mà cũng trăn trở làm sao mà câu từ nó phải thật chau chuốt hấp dẫn cho các bạn đọc. 😀 Mấy ngày liền quyết tâm đi sớm để tranh thủ gõ gõ tí mà lên đến nơi nhìn thấy quyển sách lại ngồi đọc chút đã, một chút mà nhoáng cái đã nghe thấy chuông bắt đầu giờ làm việc. Thế là lại bỏ dở cái ý định gõ gõ…
Không lan man liên thiên nữa, như tiêu đề bài viết, hôm nay chúng ta sẽ cùng nhau đi tìm lời giải cho bài toán liên quan đến table trong HTML – nôm na là làm việc với bảng HTML với Selenium. Làm việc với bảng HTML quả thực không phải là hiếm, chúng ta có thể đọc dữ liệu, thông tin từ bảng hay thao tác trên bảng đó. Vậy với Selenium ta sẽ làm như thế nào? Hôm nay mình sẽ giúp các bạn (cũng là tự giúp mình) làm rõ vấn đề này =)) [[[Cứ như phóng viên điều tra của vtv đến nơi :v ]]]
Đề bài sẽ là đọc dữ liệu trong bảng HTML có kiểu như hình phía dưới:
Thì dạng HTML của bảng nó sẽ kiểu như này:
Bây giờ để đọc giá trị của một ô bất kỳ trong bảng này thì ta chỉ có cách duy nhất đó là dựa vào x-path tuyệt đối của đối tượng muốn lấy. Ví dụ muốn lấy ra ô có country là Canada thì đường dẫn x-path thì sẽ là#customers > tbody > tr:nth-child(6) > td:nth-child(3) như này:
//*[@id=”customers”]/tbody/tr[6]/td[3]
Ngoài x-path ta có thể lấy theo CSS Selector tuyệt đối của đối tượng đó như thế này:
#customers tbody tr:nth-child(6) td:nth-child(3)
Bằng cách nào thì cũng phải sử dụng đến đường dẫn tuyệt đối của đối tượng muốn lấy. Ở ví dụ trên của mình ví dụ thì là trường hợp khá là đơn giản, chứ ở ứng dụng nào đó nó có nhiều bảng, nhiều vùng, trong bảng lại nhiều dòng thì đúng là đoạn x-path không bao giờ có chuyện đẹp như trên kia đâu.
Nhưng nếu chỉ có thế thì cũng là đơn giản thôi mà đúng không chỉ cần Chuột phải vào HTML của đối tượng muốn lấy, chọn Copy X-path, nếu muốn lấy CSS Selector thì chọn theo CSS Selector là xong:
Chúng ta sẽ nghĩ đến trường hợp phức tạp hơn một chút, đó là chúng ta cũng vẫn muốn lấy ô có giá trị là Canada thế nhưng vị trí của ô có Canada này thì nó không cố định, tức là tại thời điểm này thì ô Canada nó ở dòng thứ 6 của bảng, thế nhưng ở thời điểm khác thì nó lại bị đẩy xuống dòng thứ 8, thứ 9 hay thứ 10… thì ta sẽ không thể sử dụng cách trên kia được. Đây chính là trường hợp dữ liệu trong bảng không cố định, vậy thì ta sẽ phải làm thế nào để lấy được chính xác ô Canada đây?
Ơ quá đơn giản luôn, đi tìm trong bảng, ô nào có giá trị là Canada thì lấy ra. :)))). Mình đã gặp một bài toán tương tự như thế này. Mình mô tả qua đại khái như sau, mình có một bảng dữ liệu là một danh sách các items bao gồm tên item, mô tả, người sửa, và ngày thêm, ngày sửa. Mình cần tìm ra item nào có ngày sửa là ngày hiện tại thì lấy ra tên của item đó. Bài toán này chính là mục đích của bài viết hôm nay của mình. 😀
Cũng giống như ví dụ trên lấy ra được ô Canada thì ta sẽ suy tìm ra được thông tin hai cột bên cạnh liên quan đến Canada đó là Company: Laughing Bacchus Winecellars và Contact: Yoshi Tannamuri. Trong bảng cũng có thể có thêm dữ liệu trùng, khi này ta sẽ có 1 danh sách thôi :)) Cơ bản là tùy theo mục đích để làm gì thì ta sẽ có được thông tin tương ứng nếu như nắm được những cách, ý tưởng làm việc với bảng.
Để cho đơn giản dễ hiểu thì chúng ta sẽ đổi đề bài một chút là bây giờ sẽ lấy ra giá trị của các ô của mỗi dòng trong bảng nhé.
Sau đó là xác định xem bảng này có bao nhiêu dòng, vì số dòng có thể tăng lên sau mỗi lần thêm dữ liệu cho nó, nên ta sẽ tập trung vào đoạn này. Số dòng thì ta sẽ dựa vào số lượng cặp thẻ <tr> trong bảng table:
List < WebElement > rows_table = table.findElements(By.tagName("tr"));
int rows_count = rows_table.size();
Có được số dòng rồi thì bây giờ chỉ cần sử dụng vòng for cho số dòng đó, để lại lấy ra vị trí số cột của dòng đó, rồi lấy ra giá trị của ô tương ứng với dòng và cột đó. Bây giờ phải đếm được số cột trong dòng đã – đoạn này phải nằm trong vòng for của dòng rồi nhé:
for (int row = 0; row < rows_count; row++) {
List < WebElement > Columns_row = rows_table.get(row).
findElements(By.tagName("td"));
int columns_count = Columns_row.size();
OKE, vậy là ổn rồi đó, có thông tin dòng, thông tin cột rồi thì việc lấy ra được giá trị của nó ở các ô thì đơn giản hơn rồi, tiếp theo trong vòng for của dòng thì sẽ cần phải dùng vòng for cho cột nhé, vì chúng ta có nhiều cột trong 1 dòng mà:
for (int column = 0; column < columns_count; column++) {
String cell_text = Columns_row.get(column).getText();
System.out.println(" Giá trị của dòng " + row + " Cột " + column + " là " + cell_text);
Ghép trọng vẹn đoạn sử dụng vòng for này thì sẽ là như này:
for (int row = 0; row < rows_count; row++) {
List < WebElement > Columns_row = rows_table.get(row).
findElements(By.tagName("td"));
int columns_count = Columns_row.size();
for (int column = 0; column < columns_count; column++) {
String cell_text = Columns_row.get(column).getText();
System.out.println(" Giá trị của dòng " + row + " Cột " + column + " là " + cell_text);
}
}
Vậy là xong rồi. Cơ bản các bước chỉ có như vậy thôi, tùy theo yêu cầu bài toán cụ thể mà chúng ta có thể tùy biến để lấy dữ liệu hay có những xử lý phù hợp hơn. Định giải thích cách làm của mình đối với bài toán thực tế trên kia mình đã làm cơ nhưng mà thôi chắc là để bài sau! 😀
Bài này hơi dài mà không biết các bạn có nắm được ý tưởng của nó hay không =)) nhưng mà chắc là ok thôi. Có vấn đề gì các bạn có thể thoải mái chia sẻ bằng cách để lại phía dưới hoặc email cho mình nhé!
Các bạn có thể tham khảo thêm bài viết về cách xử lý bảng với selenium theo các đường dẫn phía dưới này nha:
Bài viết được sự cho phép của BBT Tạp chí Lập trình
Trong bài trước chúng ta đã biết cách để cài đặt một ứng dụng đầu tiên với Reactjs. Tiếp tục bài hôm nay, mình sẽ hướng dẫn về Component trong react và cách quản lý chúng.
Component là block xây dựng nên mọi ứng dụng React. Component có thể được sử dụng riêng hoặc kết hợp với các component khác để có một component lớn hơn.
Điều quan trọng là các component này là động: chúng cung cấp một template, sẽ được điền vào bằng dữ liệu biến. Mục đích chính của một component React là tạo ra một số JSX từ template này, sẽ biên dịch sang HTML và hiển thị trên DOM.
STATELESS EXAMPLE
Chúng ta tiếp tục sử dụng lại App.js, thêm vào 2 components đó là Header và Content, App sẽ chứa 2 component mới thêm vào.
Chúng ta sẽ thử với một ví dụ khó hơn, ở đây sẽ có một khái niệm là “state”, có thể các bạn chưa biết nhưng để đó đã mình sẽ học ở bài sau, bây giờ hiểu về component đã nhé.
State sẽ là 1 mảng object, chúng ta thay content trong Content Component bằng ListStudent Component.
Hàm map giống như for-loop js, nếu viết bằng for thì sẽ như thế này:
for (let i = 0; i < this.state.data.length; i++) {
<ListStudent key = {i}
data = {this.state.data[i]} />
}
key={i} giúp React update lại element 1 cách chính xác với key đó thay vì render lại toàn bộ list, khi ta thay đổi 1 thành phần nào đó trong state, việc này rất hiệu quả nếu chúng ta có viết các ứng dụng lớn nhiều elements sau này.
Hôm nay đến đây nhé, các bạn nhớ luyện tập và chờ đợi bài sau nha!
Kỹ năng đầu tiên mà dân IT cần phải có đó chính là phát triển thuật toán. Với việc bộ lọc thư rác, các ứng dụng teamwork và phát hiện lừa đảo ngày càng trở nên phức tạp, tinh vi, các doanh nghiệp ngày càng cấn đến những nhân viên IT có thể thiết kế và phát triển thuật toán hoặc kỹ xảo để nâng cao hiệu suất cho máy tính.
Những kỹ năng như đào xới, tìm kiếm dữ liệu, lập mô hình số liệu thống kê… ngày càng được coi trọng. Bạn có thể học kỹ năng này thông qua kinh nghiệm làm việc thực tế hoặc ở trường lớp. Chỉ cần bạn nắm vững kỹ năng này trong tay, các doanh nghiệp sẽ “giật” bạn về nhanh như chưa bao giờ được nhanh vậy.
Lý do bạn nên phát triển thuật toán là bởi vì: “Ngày càng có nhiều ứng dụng với quy mô dữ liệu khổng lồ. Cách thức tổ chức, sắp xếp và trình bày dữ liệu có một vai trò cực kỳ quan trọng“.
2. Mạng không dây
Các công nghệ mạng không dây như Wi-Fi, WiMax và Bluetooth ngày càng trở nên phổ biến. Hệ quả là doanh nghiệp nào cũng muốn lôi về một “bậc thầy” không dây, chính là nhân viên IT – người am hiểu sâu sắc từng công nghệ một, những nguy cơ bảo mật tiềm ẩn, cách phối hợp các công nghệ với nhau sao cho tối ưu nhất…
Tất nhiên, chưa có ai được tuyển về chỉ vì anh ta là một kỹ thuật viên không dây. Tuy nhiên, trước hết anh ta phải là một nhà quản trị mạng tốt, trước khi có kiến thức chuyên sâu về mạng không dây mà thôi.
3. Giao diện người dùng
Một lĩnh vực khác cũng đang thu hút nhu cầu rất cao là thiết kế giao diện người dùng. “Nhà kỹ sư phần mềm không thể ném vào mặt người dùng một đống những thứ lem nhem, lổn nhổn được“, ông Ebner nói.
Nhờ vào những hãng như Apple, người dùng ngày càng được tiếp cận với những sản phẩm được thiết kế rất hợp lý và thân thiện. Vì thế, doanh nghiệp có quyền đòi hỏi tất cả những phần mềm mà họ sử dụng đều phải có một giao diện rõ ràng và dễ dùng.
4. Di động hóa các ứng dụng
Cuộc đua cung cấp nội dung cho thiết bị di động đang bước vào hồi nước sôi lửa bỏng, thậm chí “hoang dại và điên cuồng” giống như cơn sốt Internet hồi những năm 90 vậy, ông Sean Ebner, Phó chủ tịch hãng Tuyển dụng Spherion Pacific cho biết.
Thêm vào đó, những thiết bị như BlackBerry, Treo đã trở thành công cụ làm việc quan trọng, không thiểu thiếu của nhiều người. Hơn bao giờ hết, các doanh nghiệp cần có một nhân viên kỹ thuật với kiến thức chuyên sâu về di động hóa. “Họ cần có người đưa các ứng dụng lên trên thiết bị di động“, Ebner dự đoán.
5. Quản lý dự án
Trong các chiến dịch săn đầu người của doanh nghiệp, trưởng nhóm dự án bao giờ cũng là vị trí được lùng sục nhiều nhất. “Nhà tuyển dụng muốn có một người thật sư am hiểu về vòng đời của dự án, thật sự điều hành và vận hành được dự án, có thể dẫn dắt tất cả những thành viên còn lại“, ông Grant Gorden, Giám đốc quản lý của Overland Park nhận định.
Một năm trước, ứng cử vào vị trí Trưởng nhóm dự án rất dễ. Nhưng giờ đây, những cuộc phỏng vấn trở nên xương xẩu hơn rất nhiều. Các ứng viên thích hợp ngày càng ít, nhưng một khi đã đủ tiêu chuẩn, họ có thể thoải mái lựa chọn mức lương và chế độ làm việc của mình.
6. Lập trình nguồn mở
Số lượng doanh nghiệp có hứng thú với các tài năng nguồn mở ngày một nhiều, cả trên phương diện hệ điều hành lẫn ứng dụng. Những người có kinh nghiệm lập trình với Linux, Apache, MySQL và PHP sẽ thấy mình được các hãng săn đón đến thế nào.
7. Bảo mật nhúng
Ngày nay, dễ dàng nhận thấy bất cứ vị trí tuyển dụng nào, trong phần mô tả công việc, cũng nhắc đến hai từ bảo mật.
Doanh nghiệp muốn tìm một người có khả năng thiết lập nên những môi trường đảm bảo an ninh, dù cho đó là máy chủ email hay phát triển phần mềm. Bảo mật đã trở thành một phần không thể tách rời của công việc.
Rõ ràng là tư duy của doanh nghiệp đã thay đổi. Bảo mật không còn là chuyện của riêng một ai đó, mà nó đã được tích hợp vào hoạt động thường ngày của hãng. Tất nhiên, sẽ vẫn cần có chuyên gia riêng về bảo mật, nhưng một nhân viên IT bây giờ cũng phải nắm được các quy chuẩn tối thiểu về bảo mật thông tin.
8. Kỹ năng chung về mạng
Dù là bạn làm việc trong lĩnh vực nào của IT đi chăng nữa, bạn cũng không thể thoát khỏi mạng. Các kỹ sư phần mềm cũng phải có khái niệm cơ bản về mạng thì mới viết được những phần mềm tương thích tốt với Internet hay mạng nội bộ, Ethernet, sợi quang và TCP/IP.
“Họ cần hiểu rõ ứng dụng của mình sẽ hoạt động trong môi trường mạng như thế nào. Họ cần tận dụng được ưu thế của mạng trong thiết kế của mình“.
9. Mạng hội tụ
Cùng với việc VoIP ngày càng được nhiều doanh nghiệp ứng dụng, nhà quản trị mạng cần nắm được tất cả các loại mạng khác nhau như LAN, WAN, điện thoại, Internet… cũng như cách chúng hội tụ với nhau.
“Khi xảy ra sự cố, không ông sếp nào lại muốn nhà quản trị mạng đổ lỗi cho đường dây điện thoại, trong khi nhân viên điện thoại lại hất hàm “Đi mà hỏi ông mạng ấy“. Nói tóm lại, doanh nghiệp cần có một người làm trong lĩnh vực điện thoại nhưng am hiểu về mạng IT hoặc ngược lại, quản trị mạng nhưng am hiểu về mạng điện thoại.
10. Tích hợp công nghệ ngôi nhà số
“Mái ấm” của mỗi người đang dần biến thành thiên đường của công nghệ cao. Thị trường nghe – nhìn gia đình được dự đoán sẽ tăng trưởng chóng mặt trong thời gian tới, cùng với bảo mật gia đình và hệ thống chiếu sáng tự động hóa. Vấn đề là ai sẽ lắp đặt những hệ thống này đây, và ai sẽ sửa chúng khi có trục trặc xảy ra.
“Đây sẽ là lĩnh vực tuyển dụng cực nóng trong những tháng tới“, ông Grant Gorden cho biết.
Đây là một trong những bài viết khá hay của một anh bên chienluocsong.com. Mình đã học được khá nhiều điều về kinh nghiệm sống từ blog của anh. Xin trích dẫn một số ý chính.
Những thế hệ 7x, 8x hẳn không thể không biết bài hát này, đó là bài hát của ban nhạc ABBA. Tôi đã mở hết các lá bài nhưng vẫn là người thua cuộc, cô ý đã thắng và cô ý đã có tất cả, người thua cuộc thì nhỏ bé bên người chiến thắng. Lời bài hát như văng vẳng bên tai ta, thật phù hợp với những ai đang thất tình.
Chắc hẳn bạn là nghe câu “Thắng làm vua, Thua làm giặc”. Thắng vừa có tiếng mà lại vừa có miếng. Và cái gì quyết định ranh giới giữa thắng và thua? Trong chiến tranh đôi khi đó chỉ là một cá nhân đơn lẻ, có thể là một sự kiện nhỏ nào đó. Nếu không phải là Tướng Giáp thì cuộc chiến tranh Việt Nam có thể dài hơn hoặc cũng có thể là ngắn hơn, thậm chí có thể ảnh hưởng tới cả sự tồn tại của bạn. Các cuộc chiến tranh thế giới hay vụ thanh tra ở Bộ Thương Mại đều bắt nguồn những từ một sự kiện nhỏ (tất nhiên đôi khi nó chỉ là cái cớ).
Cá nhân ta cũng vậy, quyết định giữa thắng và thua của chúng ta cũng chỉ từ một yếu tố nhất định nào đó. Yếu tố đó có thể là quan trọng với công việc này nhưng không quan trọng với công việc khác, có thể quan trọng với tổ chức này nhưng lại không quan trọng với tổ chức khác. Nhiệm vụ của ta là căng mắt ra mà phát hiện và tận dụng những cơ hội cho dù đó là nhỏ nhất.
Một nguyên lý mà tôi đã nhắc tới trong các entry về Hoàn thiện bản thân đó là người ta chỉ nhớ tới người về nhất. Trong thể thao bắn súng, tôi và bạn chỉ biết tới Hoàng Xuân Vinh, cũng chỉ biết tới video Hoàng Xuân Vinh bắn phát cuối cùng. Bạn có nhớ tới ai đó cùng đoàn với Hoàng Xuân Vinh không? hoặc bạn có nhớ tới một đoạn bắn súng nào khác không?
Bạn có nhớ ai lên mặt trăng cùng Amstrong? Những phụ tá cùng Bill Gates thành lập lên đế chế Microsoft? Trong toàn bộ sự thành đạt của Steve Jobs, bạn có nhớ tới một cái tên nào khác không? Trong cả quãng đời của bạn đã trải qua, có phải bạn nhớ toàn bộ các sự kiện hay chỉ nhớ tới một số sự kiện nhất định nào đó? Con người của bạn được kể bởi những sự kiện rời rạc mà không mang tính liên tục vì bạn chẳng thể nhớ hết được.
Người ta chỉ nhớ tới người thứ nhất, người thứ hai về sau không ai còn nhớ nữa. Ta chỉ nhớ các sự kiện ấn tượng, các sự kiện lặp đi lặp lại hàng ngày ta không nhớ được, không thể nhớ được là buổi sáng cách đây 1 tuần mình ăn gì vì sáng nào chẳng ăn.
Và người thứ nhất cũng là hưởng lợi nhất.
Sếp sẽ giao cơ hội cho những người mà anh ta cho rằng là giỏi nhất nhằm tăng cơ hội thành công của một dự án. Khách hàng sẽ giao cho người bán hàng, công ty giỏi nhất để lợi nhất.
Tóm lại không cần biết khoảng cách giữa thằng nhất và thằng nhì bao nhiêu, thắng nhất là thằng có tất cả.
Nếu là một nhân viên bình thường hãy cố gắng là thằng giỏi nhất trong nhóm.
Nếu đã là người giỏi nhất trong nhóm hãy là người giỏi nhất trong phòng.
Nếu đã là người giỏi nhất trong phòng thì hãy là người giỏi nhất trong công ty.
Nếu đã là người giỏi nhất trong công ty hãy là người giỏi nhất trong nghề nghiệp đó.
VÒNG TRÒN CỦA THẰNG NHẤT
Thằng nhất thường được cung cấp các nguồn lực tốt nhất. Họ được cung cấp những người chơi cùng tốt nhất (giống như đội bóng), họ được cung cấp phương tiện tốt nhất, họ không bị giao những việc lặt vặt (vì lặt vặt hãy để người yếu hơn), họ được cung cấp cơ hội tốt nhất.
Ví dụ:
Một người sửa điều hòa giỏi sẽ ngày càng nhiều khách hàng hơn.
Một người giải quyết vấn đề giỏi trong một ngành nghề sẽ ngày càng được cất nhắc cao hơn (nơi anh ta sẽ tạo ra nhiều giá trị hơn)
Bài viết được sự cho phép của BBT Tạp chí Lập trình
Giả sử như bạn cần mua một chiếc máy tính, nhưng bạn vẫn chưa quyết định được nên sử dụng máy tính của hãng nào. Ngoài kia bao la bạt ngàn những thương hiệu chất lượng cao như Apple, Lenovo, Asus, HP… Như vậy để có thể chọn được chiếc máy tính ưng ý, bạn sẽ có 2 cách sau:
– Đến showroom của từng hãng, rồi tham khảo từng máy. Bạn đi hết showroom của hãng này tới showroom của hãng khác để xem, rồi nhớ thông tin trong đầu để so sánh chiếc này hợp hơn, chiếc kia rẻ hơn …
– Bạn đến một cửa hàng bày bán tất cả các loại laptop của tất cả các hãng, rồi bạn hỏi tư vấn là với số tiền này, bạn có thể chọn được laptop loại nào. Hay bạn đang muốn xem thử máy của hãng A, bạn nhờ tư vấn viên mang ra giúp bạn một chiếc. Rồi bạn băn khoăn một chiếc của hãng B, bạn lại nhờ tư vấn viên mang ra một chiếc khác.
Rõ ràng là cách thứ hai tiết kiệm thời gian và công sức cho bạn rất nhiều. Đây chính là cách mà mẫu thiết kế Factory hoạt động.
Mẫu thiết kế factory là gì?
Factory pattern là một mẫu thiết kế thuộc nhóm Khởi tạo. Pattern này sử dụng một interface hay một abstract class mà tất cả các lớp chúng ta cần khởi tạo đối tượng sẽ kế thừa. Factory sẽ định nghĩa việc khởi tạo đối tượng, nhưng đối tượng nào sẽ được tạo thì phụ thuộc vào các lớp con. Do vậy, pattern này còn được gọi với cái tên Virtual Constructor (phương thức khởi tạo ảo).
Factory pattern mang lại những tác dụng:
– Tạo ra một cách khởi tạo object mới
– Che giấu quá trình xử lý logic của phương thức khởi tạo
– Giảm sự phụ thuộc, dễ dàng mở rộng trong trường hợp chưa biết chắc số lượng đối tượng là đã đủ hay chưa. Trong trường hợp chúng ta có thêm lớp con kế thừa Factory, việc gọi đến virtual constructor vẫn không hề thay đổi.
– Giảm khả năng gây lỗi compile, trong trường hợp chúng ta cần tạo một đối tượng mà quên khai báo lớp, chúng ta cũng có thể xử lý lỗi trong Factory và khai báo lớp cho chúng sau.
Cấu trúc của Factory pattern
Xét theo ví dụ ở đầu bài viết, Factory pattern sẽ có cấu trúc dạng như sau:
Các lớp con Lenovo, Asus, HP đều override lại phương thức getSpec từ interface Computer. Phương thức viewComputer() của client sẽ gọi tới phương thức viewComputer của lớp ComputerFactory và truyền vào đó một tham số computerBrand, chính là tên của máy tính mà client muốn xem thêm, để tạo một đối tượng tương ứng. Đối tượng này sẽ được sử dụng để chạy phương thức view mà lớp con đã override lại.
Factory pattern trong Java
Trong ví dụ trên, nếu chúng ta làm theo cách 1, mã nguồn sẽ có dạng như sau:
```
public class Client {
public void viewComputer() {
public void ViewLenovo() {
Lenovo lenovoComputer = new Lenovo();
System.out.println(lenovoComputer.getSpec());
}
public void ViewAsus() {
Asus asusComputer = new Asus();
System.out.println(asusComputer.getSpec());
}
public void ViewHP() {
HP hpComputer = new HP();
System.out.println(hpComputer.getSpec());
}
}
}
```
Như vậy, client sẽ phải gọi đến từng constructor cụ thể của từng lớp để tạo được đối tượng mong muốn.
Vậy khi áp dụng Factory pattern, mã nguồn sẽ thế nào?
Bước 1: Xây dựng lớp factory:
```
public class ComputerFactory {
public void viewComputer(String computerBrand) {
Computer computer;
switch (computerBrand) {
case "Lenovo":
computer = new Lenovo();
break;
case "Asus":
computer = new Asus();
break;
case "HP":
computer = new HP();
break;
default:
System.out.println("Computer brand not found");
break;
}
if (computer != null) {
System.out.println(computer.getSpec());
}
}
}
```
Bước 2: Từ lớp client, chúng ta gửi chỉ thị đến Factory:
```
public class Client {
public void viewComputer() {
ComputerFactory computerFactory = new ComputerFactory();
computerFactory.viewComputer("Lenovo");
computerFactory.viewComputer("HP");
computerFactory.viewComputer("Asus");
computerFactory.viewComputer("Dell");
}
}
```
Như vậy, việc khởi tạo các đối tượng thuộc từng lớp kế thừa interface Computer đã bị ẩn đi đối với client. Mặt khác, khi chúng ta thêm mới lớp kế thừa Computer, chỉ có virtual constructor trong Factory cần cập nhật, thay vì phải thay đổi trên cả lớp Client.
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
Trong Java, chúng ta có 2 cách để khởi tạo và chạy một thread, đó là sử dụng class Thread hoặc là interface Runnable. Cụ thể như thế nào, trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về chúng các bạn nhé!
Các bạn có thể dễ dàng tạo mới một thread bằng cách extend class của các bạn từ class Thread rồi sau đó override phương thức run() của class Thread này. Code bên trong run() method sẽ là tác vụ mà chúng ta cần execute trong thread mới.
Ví dụ mình muốn tạo mới một thread để tính tổng của 2 số bằng cách extend class Thread thì mình sẽ tạo mới một class extend class Thread và override lại phương thức run() như sau:
package com.huongdanjava.javaexample;
public class Calculator extends Thread {
@Override
public void run() {
int a = 2;
int b = 7;
int sum = a + b;
System.out.println(sum);
}
}
Để chạy thread trong trường hợp này, chúng ta sẽ tạo mới instance của class Calculator và gọi phương thức start() của đối tượng này để chạy các bạn nhé. Ví dụ:
package com.huongdanjava.javaexample;
public class Example {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.start();
}
}
Kết quả:
Các bạn có thể thấy rõ việc code của chúng ta được execute trong main thread hay là một thread khác bằng cách add thêm một số dòng code như sau:
package com.huongdanjava.javaexample;
public class Calculator extends Thread {
@Override
public void run() {
System.out.println("Calculator : " + Thread.currentThread().getName());
int a = 2;
int b = 7;
int sum = a + b;
System.out.println(sum);
}
}
package com.huongdanjava.javaexample;
public class Example {
public static void main(String[] args) {
System.out.println("Main : " + Thread.currentThread().getName());
Calculator calculator = new Calculator();
calculator.start();
}
}
Kết quả:
Nếu các bạn để ý thì sẽ có thắc mắc là nếu chúng ta gọi phương thức run() thay vì phương thức start() của class Calculator thì có sự khác biệt gì? Câu trả lời là nếu các bạn gọi phương thức run() thì code bên trong nó sẽ được execute trong cùng thread của chương trình thay vì một thread mới.
Ví dụ nếu bây giờ mình đổi qua gọi phương thức run() trong hàm main của ứng dụng:
package com.huongdanjava.javaexample;
public class Example {
public static void main(String[] args) {
System.out.println("Main : " + Thread.currentThread().getName());
Calculator calculator = new Calculator();
calculator.run();
}
}
các bạn sẽ thấy kết quả như sau:
Interface Runnable
Với interface Runnable thì class của các bạn cần implement interface này và hiện thực phương thức run() được định nghĩa trong nó.
Trong ví dụ trên, thay vì extend từ class Thread mình có thể implement interface Runnable như sau:
package com.huongdanjava.javaexample;
public class Calculator implements Runnable {
public void run() {
System.out.println("Calculator : " + Thread.currentThread().getName());
int a = 2;
int b = 7;
int sum = a + b;
System.out.println(sum);
}
}
Để tạo mới thread và chạy ứng dụng của chúng ta trong trường hợp này, các bạn cần tạo mới class Thread với tham số là class implement interface Runnable của chúng ta. Ví dụ như sau:
package com.huongdanjava.javaexample;
public class Example {
public static void main(String[] args) {
System.out.println("Main : " + Thread.currentThread().getName());
Thread thread = new Thread(new Calculator());
thread.start();
}
}
Kết quả cũng như vậy:
Tổng kết
Việc sử dụng extend class Thread hay implement interface Runnable là tuỳ vào nhu cầu của các bạn nhưng mình prefer việc implement interfacve Runnable hơn vì trong Java, chúng ta có thể implement nhiều interface khác nhau nhưng chỉ có thể extend từ một class nào đó.
Data Harvest Loop - Vòng lặp thu thập dữ liệu hoạt động như thế nào?
Vấn đề khi thu thập dữ liệu cho AI
Một trong những khó khăn của các doanh nghiệp startup về lĩnh vực AI là làm thế nào có thể thu thập được những dữ liệu chất lượng để huấn luyện và đào tạo ra các mô hình AI.
Bản thân mình trong quá trình làm việc tại Cinnamon AI những năm vừa qua với hơn 50 – 60 đối tác thì những đối tác lớn nhất cũng chỉ có thể cung cấp được từ 5000 – 30000 ảnh cho một dự án. Số lượng ảnh này thật sự vẫn còn rất khiêm tốn để xây dựng một mô hình có thể giải quyết được các vấn đề cho khách hàng.
Thu thập và huấn luyện data giúp ích rất nhiều cho quá trình đào tạo AI
Đối tác của Cinnamon AI đều là những tập đoàn công nghệ rất lớn, có doanh thu mỗi năm lên đến hàng nghìn tỷ đô như Toshiba, Toyota, Suntory,… Tuy nhiên, kể cả là những tập đoàn lớn như thế này thì việc họ chia sẻ dữ liệu cho những đơn vị cung cấp giải pháp như Cinnamon AI cũng rất hạn chế.
Có nhiều yếu tố ảnh hưởng đến điều này: Thứ nhất đây là vấn đề liên quan đến tính bảo mật dữ liệu. Thứ hai, không phải công ty cung cấp giải pháp nào cũng sẵn sàng đầu tư một lượng lớn nhân sự để xử lý những dữ liệu này cho các đối tác như Cinnamon AI. Vậy Data Harvest Loop giải quyết những vấn đề này như thế nào? Giải pháp sẽ được trình bày trong bài chia sẻ này.
Tại sao cần sử dụng đến Data Harvest Loop?
Những đơn vị cung cấp về giải pháp hoặc sản phẩm như Cinnamon AI, nếu việc thiết kế sản phẩm dựa vào các dữ liệu đã có sẵn mà khách hàng cung cấp thì sẽ phải đối diện với những vấn đề gì? Có 2 vấn đề lớn mà chúng ta sẽ gặp phải:
Thứ nhất, khi làm việc ở một đơn vị thiết kế về giải pháp hoặc sản phẩm AI, mọi người sẽ thật sự hiểu rằng: sự kết hợp giữa trải nghiệm người dùng thay đổi về chu trình vận hành như thế nào phải kết hợp với độ chính xác của AI mới có thể tăng độ chính xác này lên đến mức có thể sử dụng được.
Tuy nhiên nếu chúng ta không thuyết phục được khách hàng rằng khách hàng nên thay đổi quy trình vận hành mà chỉ tập trung vào việc làm thế nào để xử lý dữ liệu và mang lại độ chính xác tốt hơn của phần mềm AI, thì khả năng và giải pháp AI đó có thể giải quyết được bài toán của người dùng tốt hơn con người sẽ thấp hơn.
Thứ hai, đối với các công ty cung cấp giải pháp, nếu chúng ta liên tục làm việc với những khách hàng mới và phải huấn luyện lại mô hình AI dựa trên dữ liệu mới của khách hàng thì về mặt công nghệ lõi, công ty sẽ rất khó có khả năng mở rộng hơn nữa nếu không gia tăng quy mô nhân sự. Trong khi đó nhân sự AI lại là một vấn đề khó khăn của thị trường, vậy nên dựa vào dữ liệu có sẵn của doanh nghiệp có thể sẽ không phải là hướng đi có lợi trong dài hạn.
Vậy nên thay vì tìm cách tận dụng tối đa dữ liệu đang có, chúng ta nên cùng với khách hàng xây dựng một quy trình vận hành và giải pháp phần mềm, để làm thế nào bản thân khách hàng cùng với đơn vị cung cấp giải pháp có thể liên tục thu thập dữ liệu một cách bền vững, không chỉ cho hiện tại mà còn cho rất nhiều hoạt động vận hành sau này.
Data Harvest Loop là gì?
Để giải thích vấn đề này mình sẽ phân tích dựa trên các trường hợp thực tế.
Giải pháp hỗ trợ lái xe an toàn Mobileye
Mobileye là công ty chuyên về thiết kế giải pháp để hỗ trợ cảnh báo tài xế có được trải nghiệm lái xe an toàn hơn. Vậy vòng lặp của Mobileye cho việc thu thập dữ liệu diễn ra như thế nào?
Thông thường Mobileye sẽ sử dụng AI để đưa ra cảnh báo về khả năng xảy ra tai nạn cho tài xế. Người tài xế sẽ có rất nhiều dạng phản hồi lại cảnh báo của AI, thông qua việc tương tác với xe ô tô như giảm tốc độ, bẻ lái,… Nếu cảm thấy không đúng, họ có thể lờ đi hoặc không có phản ứng gì, còn nếu đúng thì họ sẽ có nhiều lựa chọn như tinh chỉnh vô lăng như thế nào, chân ga ra sao và những cách xử lý với chiếc xe khác nhau. Lúc này, AI sẽ tiếp tục thu thập lại những phản ứng này của người dùng.
Nhờ sự cảnh báo từ các giải pháp của Mobileye nên tỉ lệ xảy ra tai nạn sẽ giảm thiểu và mang lại trải nghiệm lái xe an toàn hơn cho người dùng cuối. Khi đã có được sự an toàn hơn cho người dùng và các công ty thì họ sẽ sử dụng giải pháp của Mobileye nhiều hơn.
Vậy vòng lặp này sẽ được thu thập như thế nào?
Khi người dùng cuối có trải nghiệm tốt hơn, lúc họ sử dụng giải pháp phần mềm của Mobileye kết hợp với camera hành trình thì Mobileye thu thập được một loại dữ liệu vô cùng quan trọng là hình ảnh môi trường xung quanh của chiếc xe đó khi dữ liệu cảnh báo được đưa ra. Ảnh dữ liệu về đường phố này sẽ tiếp tục được sử dụng cùng với những dữ liệu cảnh báo của phần mềm Mobileye đưa ra và cách tài xế phản hồi lại với những cảnh báo đó.
Toàn bộ những dữ liệu này sẽ được đưa vào môi trường AI để huấn luyện và khi môi trường AI được huấn luyện tốt hơn, nó sẽ đưa ra được các cảnh báo có mức độ chính xác cao hơn.
Khi cảnh báo chính xác hơn được đưa ra, người dùng tiếp tục phản hồi lại những cảnh báo này, rằng nó đúng hay sai. Vòng lặp như vậy sẽ liên tục diễn ra, lặp đi lặp lại gọi là vòng lặp thu thập dữ liệu.
Trong một ứng dụng không chỉ đơn thuần có một vòng lặp dữ liệu mà có thể có nhiều vòng lặp dữ liệu.
Như với trường hợp của Mobileye, ngoài dữ liệu về đường phố xung quanh khi cảnh báo được đưa ra, họ đồng thời cũng thu thập dữ liệu về vị trí của chiếc xe đó (1) và có thể kết hợp với tần suất xuất hiện tai nạn trên tuyến đường đó (2) và phản ứng của tài xế (3). Kết hợp tất cả những yếu tố này để đưa vào mô hình học của AI và giúp cho AI đưa ra mức độ cảnh báo chính xác hơn.
Càng nhiều vòng lặp dữ liệu được tạo ra nhờ liên kết các dữ liệu liên quan với nhau thì AI càng có cơ hội đưa ra những dự báo mang tính chính xác hơn.
Vòng lặp dữ liệu giúp tăng độ chính xác cho mô hình AI
Giải pháp phát triển trò chơi của Game of Whales
Game of Whales cung cấp một công cụ dành cho các nhà phát triển game. Các nhà phát triển game thường kiếm tiền dựa vào việc bán quảng cáo hoặc bán các tính năng trong game. Nhưng cách xuất hiện của những quảng cáo này như thế nào để tối ưu hóa được lợi nhuận sẽ là một bài toán rất đau đầu với nhiều nhà phát triển game.
Game of Whales cung cấp các giải pháp mà ở đó họ có thể sử dụng dữ liệu thu thập được từ AI testing hoặc từ cách mà người dùng cuối phản hồi lại với một quảng cáo (như việc người dùng cuối nhấp vào app, sử dụng app hay xem hết một video trên app chẳng hạn).
Thông qua việc thu thập dữ liệu người dùng với những quảng cáo này, Game of Whales sẽ đưa ra các chiến lược xem làm thế nào có thể tối ưu hóa doanh thu từ một người chơi hoặc giảm thiểu khả năng người chơi thoát ứng dụng vì trải nghiệm người dùng quá tệ do có quá nhiều quảng cáo.
Vậy trong ví dụ về Game of Whales này, một vòng lặp sẽ được thiết kế như thế nào?
Tính năng đầu tiên liên quan đến việc đưa ra dự đoán về cách một quảng cáo sẽ xuất hiện ra sao, tần suất như thế nào và khi nào thì nên được xuất hiện.
Khi quảng cáo được đưa ra, người chơi sẽ phản hồi lại quảng cáo đó. Game of Whales tiến hành thu thập những phản hồi này của người dùng cuối để liên tục tối ưu và đưa ra chiến lược quảng cáo hiệu quả hơn. Đồng thời, khi người dùng cuối nhận thấy hiển thị quảng cáo tốt hơn thì trải nghiệm người dùng sẽ được nâng cao và bản thân công ty cũng tối ưu doanh thu tốt hơn.
Khi người dùng cuối có được càng nhiều trải nghiệm tốt thì việc họ sử dụng lại app cũng sẽ nhiều hơn hoặc mức độ gắn kết của người dùng với ứng dụng cũng trở nên tốt hơn. Từ đó, dữ liệu Game of Whales thu thập được càng nhiều và họ lại tái sử dụng dữ liệu này càng nhiều để huấn luyện lại mô hình AI, đưa ra chiến lược hiển thị quảng cáo tối ưu hơn.
Mô hình Data Harvest Loop của Cinnamon AI
Concept này gồm những cấu phần nào?
Cấu phần đầu tiên liên quan đến tính năng của phần mềm AI này là như thế nào. Tính năng AI có 3 loại:
Kỹ năng nhận dạng
Kỹ năng dự đoán
Kỹ năng gợi ý
Thông thường, tính năng AI ban đầu sẽ không đạt được độ chính xác cao nên chúng ta cần đến cấu phần thứ hai là Expert-AI collaboration design. Đây là cách thiết kế trải nghiệm người dùng và quy trình vận hành để chuyên gia là con người sẽ tương tác được với máy và máy thu thập dữ liệu phản hồi từ người dùng.
Nhờ sự hỗ trợ này của con người mà ứng dụng mang đến cấu hình thứ ba là Business End-value (giá trị đối với doanh nghiệp). Thông thường đơn vị ứng dụng giải pháp, sản phẩm sẽ nằm ở 1 trong 5 loại giá trị cơ bản nhất:
Giảm thiểu chi phí
Gia tăng doanh thu
Hạn chế được các rủi ro
Trải nghiệm người dùng tốt hơn
Thúc đẩy quá trình nghiên cứu và phát triển sản phẩm thành dịch vụ mới
Khi có được các giá trị với người dùng cuối này rồi thì trải nghiệm người dùng, về cơ bản, sẽ trở nên tốt hơn và quan trọng hơn đó là sự gắn kết của người dùng với sản phẩm sẽ trở nên lâu bền hơn. Nhờ đó, chúng ta sẽ thu thập được nhiều dữ liệu quan trọng liên quan đến trải nghiệm người dùng và tái sử dụng dữ liệu này để đưa ra tính năng AI chính xác hơn sau này.
Giải pháp AI cần đáp ứng được những giá trị cơ bản
Nguyên nhân của việc cần thay đổi concept
Hiện tại đang có 2 chiến lược chính mà Cinnamon AI theo đuổi.
Thứ nhất là Innovation Sales.
Đây là một phương thức bán hàng cho phép Cinnamon AI giữ quyền kiểm soát lớn hơn trong việc quyết định các tính năng nào nên được xây dựng trong giải pháp cho khách hàng doanh nghiệp.
Thứ hai là Expert-in-the-Loop. Đây là cách thiết kế AI và con người cùng làm việc với nhau để làm sao có thể mang lại giá trị cho người dùng cuối tốt hơn.
Innovation Sales là gì? Để phân tích khái niệm này, mình sẽ giới thiệu về một quá trình bán hàng hằng ngày tại Cinnamon AI.
Sau khi đã có những cuộc trao đổi với khách hàng thì Cinnamon AI sẽ tiến hành phân tích quy trình vận hành của họ. Từ quy trình hàng ngày đó, chúng tôi có thể phân tích được những tác vụ lặp đi lặp lại xem nên sử dụng hay cắt bỏ. Nhờ đó sẽ quy hoạch được phạm vi dữ liệu mà mình cần phải xử lý.
Từ phạm vi dữ liệu đó, chúng tôi sẽ tinh chỉnh lại, huấn luyện lại các mô hình AI để có thể đáp ứng được vấn đề mà khách hàng yêu cầu. Đây là cách truyền thống trong việc thiết kế ra một sản phẩm AI.
Tuy nhiên nếu chúng ta đi theo hướng tiếp cận này thì sẽ gây ra 3 vấn đề lớn:
Thứ nhất, nếu chỉ tập trung phân tích quy trình vận hành hiện tại của khách hàng thì:
Việc tối ưu quy trình đơn lẻ trong một chu trình rộng lớn có thể không mang lại hiệu quả kinh tế cho đối tác của chúng ta.
Sẽ có rất nhiều quy trình vận hành mà thật ra nó hoàn toàn có thể thay đổi hay không cần thiết ở thời điểm hiện tại mà chúng ta vẫn áp dụng AI vào nên không đạt được hiệu quả.
Thứ hai là khi thiết kế một giải pháp AI, ta cần kết hợp giữa 3 việc để có thể mang lại độ chính xác cao hơn cho các mô hình AI, gồm:
Tinh chỉnh chu trình vận hành
Xác định dữ liệu
Cải thiện công nghệ
Tuy nhiên, nếu phân tích quy trình vận hành theo cách truyền thống thì khách hàng sẽ kỳ vọng rất cao vào độ chính xác ở thời điểm hiện tại của các mô hình AI. Trong khi điều này về mặt công nghệ sẽ rất khó đạt được.
Thứ ba là đối với khách hàng mới, chúng ta sẽ có một lượng dữ liệu mới cần xử lý.
Do đó, chúng ta bắt buộc phải tinh chỉnh lại mô hình AI mà mình đã có sẵn. Điều này dẫn đến việc những cải tiến về mặt công nghệ mà chúng ta có được từ những khách hàng cũ, nhưng chưa chắc đã có thể tái ứng dụng lại với những khách hàng mới, khiến cho công ty rất khó tiếp tục mở rộng nếu không liên tục mở rộng nhân sự.
Concept được xây dựng và phát triển lại như thế nào?
Ở bước đầu tiên, thay vì phân tích về quy trình vận hành hàng ngày thì Cinnamon AI tập trung vào việc hiểu rất sâu và xác định được chiến lược cạnh tranh dài hạn của doanh nghiệp (1), đồng thời xác định được giá trị cuối mà doanh nghiệp muốn hướng tới (2). Hai giá trị này phải tương đương với nhau.
Khi đã hiểu rõ được định hướng phát triển về mặt lâu dài của doanh nghiệp, thì công ty cùng với khách hàng sẽ tìm được trải nghiệm người dùng nào là tối quan trọng mà khách hàng cần có để thêm nhiều người dùng cuối hơn.
Sau khi đã phân tích và đánh giá được đâu là trải nghiệm người dùng quan trọng hơn thì sẽ xác định được data flow. Tức là những loại dữ liệu nào là tối quan trọng mà chúng ta cần thu thập để có được những nhận định hoặc dự đoán tốt hơn trong tương lai.
Dựa vào các dữ liệu quan trọng này, Cinnamon AI mới thiết kế cách mà con người và máy làm việc với nhau ra sao để có thể liên tục thu thập được những loại dữ liệu như thế này.
Bước quan trọng và khác biệt nhất giữa cách bán hàng truyền thống và cách làm mới mà hiện tại Cinnamon AI đang áp dụng đó là ngay từ đầu, thay vì phân tích chu trình vận hành của khách hàng thì chúng ta cần tìm ra, đâu là giá trị khách hàng muốn hướng tới và đâu là lợi thế cạnh tranh lâu dài mà khách hàng muốn tạo dựng.
Nếu chúng ta có thể thuyết phục được khách hàng với những giá trị này hoặc nhiều hơn, khi chúng ta tích lũy được nhiều giá trị cuối thì những giá trị này sẽ chuyển đổi thành những giá trị lâu dài và việc chúng ta cần làm là bán được sản phẩm cho khách hàng.
Ngay từ đầu, thay vì phân tích chu trình vận hành của khách hàng thì chúng ta cần tìm ra đâu là giá trị khách hàng muốn hướng tới và đâu là lợi thế cạnh tranh lâu dài mà khách hàng muốn tạo dựng
Lấy ví dụ về việc giảm thiểu chi phí. Khi giảm thiểu chi phí đến mức nhất định thì có thể cân nhắc đó là sự sáng tạo đột phá trên thị trường.
Lấy ví dụ với một luật sư danh tiếng, thường chi phí để một cá nhân chi trả cho luật sư giải quyết trường hợp của mình là không hề nhỏ và không phải ai cũng đủ khả năng chi trả cũng như tiếp cận dịch vụ luật sư. Thế nhưng nếu chúng ta có thể sử dụng AI như công cụ hỗ trợ cho một người luật sư thì kết quả sẽ khác hẳn. Thay vì phục vụ 3 đến 5 khách hàng mỗi ngày, giờ đây họ có thể phục vụ đến 20, 30 khách hàng mỗi ngày. Rõ ràng khi năng suất lao động tăng lên như vậy thì chi phí sẽ giảm xuống.
Chúng ta hoàn toàn có thể tạo ra những microproduct.
Chẳng hạn như mọi người có thể lên những ứng dụng này đặt câu hỏi cho các luật sư và nhận được phản hồi từ họ. Đây rõ ràng là sản phẩm hoàn toàn mới và mang tính cạnh tranh cao trên thị trường, rộng mở hơn và rất khó bị sao chép bởi đối thủ. Đó là một trong những ví dụ rất điển hình khi chúng ta đẩy mạnh giá trị về cắt giảm chi phí đến một mức độ nhất định và sẽ tạo ra một microproduct, một sản phẩm mới rộng rãi hơn trên thị trường.
Thứ hai là phải thiết kế được quy trình để con người / chuyên gia tương tác được, phản hồi được với máy và máy cũng phải thu thập được những phản hồi như thế này.
Điều này rất quan trọng, vì khi ứng dụng công nghệ để giải quyết bất kỳ vấn đề thì thông thường chúng ta kỳ vọng rằng giải pháp đó sẽ đạt được hiệu quả 100% (dĩ nhiên vẫn có những trường hợp cho phép các công ty AI làm việc không cần độ chính xác tuyệt đối là 100%). Tuy nhiên nếu chúng ta chỉ dựa vào những tác vụ đó thì ứng dụng của AI sẽ rất hạn chế.
Vậy làm thế nào để đạt được độ chính xác 100% trong khi AI chỉ có thể đạt độ chính xác từ 60 – 80%? Hơn nữa, dù một công ty AI có thể đưa ra giải pháp đạt được độ chính xác đến 95% thì chưa chắc nó có thể ứng dụng được trong doanh nghiệp đó?
Đây chính là cơ hội để chúng ta thiết kế nên sản phẩm người và máy có thể cùng làm việc với nhau.
Tại Cinnamon AI, chúng tôi tập trung vào 3 mô hình chính:
Một là Human Inspection Model – con người sẽ là cấu phần kiểm tra và chỉnh sửa lại kết quả dự đoán của AI.
Thứ hai là Human Backup Model – con người sẽ đứng phía sau và sẵn sàng hỗ trợ cho AI trong trường hợp có sai sót.
Một ví dụ điển hình của mô hình này là chatbot – ứng dụng trò chuyện với khách hàng. Nếu trường hợp chatbot bắt đầu trả lời sai quá nhiều và khiến khách hàng khó chịu thì tổng đài viên sẽ thay thế trả lời cuộc trò chuyện đó. Đối với khách hàng cuối có thể họ không nhận ra được sự thay đổi giữa người hay AI đang trả lời nhưng về cơ bản, trải nghiệm của người dùng cuối sẽ an toàn hơn nếu chỉ để cho AI nói chuyện một mình với khách.
Mô hình số ba là Surveillance Model cũng là một trong những loại mô hình khó đạt được nhất.
Đây là mô hình giám sát mà ở đó chúng ta có thể phát triển những phần mềm giám sát ngược lại AI để quan sát xem AI có khẳng định được độ chính xác với câu trả lời mà chúng đưa ra hay không. Nếu phát triển mô hình này hiệu quả thì con người chỉ cần tập trung vào chỉnh sửa, kiểm tra lại những dự đoán của AI mà ở đó AI không tin rằng nó đúng. Nhờ vậy nên có thể gia tăng năng suất lao động của con người lên rất nhiều lần.
Bài viết được trích dẫn từ phần trình bày của anh Nghiêm Xuân Bách tại sự kiện Vietnam Web Summit 2020 LIVE do TopDev tổ chức
Flexbox hứa hẹn sẽ giải cứu chúng ta khỏi những rắc rối đến từ CSS thuần (như tính năng vertical alignment chẳng hạn). Tuy nhiên, để thuần thục model mới này là 1 thách thức không hề dễ dàng.
Hy vọng, các hình ảnh minh họa dưới đây sẽ giúp bạn hiểu rõ cách hoạt động của Flexbox, từ đó sử dụng Flexbox để build các layout tốt hơn.
Nguyên tắc cơ bản của Flexbox là tạo các layouts linh hoạt và trực quan. Để thực hiện được điều này, Flexbox sẽ để các containers tự quyết định cách phân bố đều “đứa con” của chính containers – bao gồm kích thước và khoảng cách giữa các containers.
Về nguyên tắc nghe thì khá hay nhưng hãy xem trên thực tế ra sao nhé! Chúng tôi đi sâu phân tích 5 properties Flexbox phổ biến nhất: chức năng của chúng, cách bạn sử dụng các properties và kết quả thu được là gì.
Property #1: Display: Flex
Đây là ví dụ webpage của chúng tôi:
Bạn có 4 thẻ với 4 màu và 4 kích thước khác nhau nằm trong 1 thẻ container xám. Hiện tại, mỗi thẻ được mặc định display: block. Mỗi square chiếm đầy bề rộng line của mình.
Để khởi động với Flexbox, bạn cần biến container thành 1 flex container. Rất đơn giản!
#container {
display: flex;
}
Không có nhiều thay đổi – các thẻ của bạn đã được hiển thị theo hàng. Nhưng đằng sau đó, bạn đã hoàn thành 1 công việc cực kì “quyền lực”. Bạn đã cho các ô vuông của mình 1 thứ gọi là flex context.
Bây giờ, bạn có thể bắt đầu định vị chúng trong context đó – công việc bớt khó nhằn hơn nhiều so với CSS truyền thống.
Property #2: Flex Direction
Một Flexbox container có 2 trục: 1 trục chính và 1 trục chéo được thiết kế mặc định như sau:
Theo mặc định, các items được sắp xếp dọc trục chính, từ trái qua phải. Đây là lý do các squares của bạn được mặc định thẳng hàng khi bạn áp dụng display: flex.
Có 1 sự khác biệt rất rõ ở đây: thay vì trên trục chính, flex-direction: column lại không căn chỉnh các squares trên trục chéo, khiến cho bản thân trục chính sẽ chuyển từ chiều ngang sang chiều dọc.
Vài phương án cho flex-direction khác chính là: row-reverse và column-reverse.
Property #3: Justify Content
Justify-content quản lý cách bạn căn chỉnh các items trên trục chính.
Không gian trống xung quanh và không gian trống ở giữa là ít trực quan nhất. Không gian trống ở giữa sẽ đem đến khoảng trống bằng nhau giữa mỗi square, nhưng giữa square với container thì không.
Khoảng trống xung quanh sẽ sắp xếp khoảng trống bằng nhau ở 1 trong 2 phía của square – đồng nghĩa là khoảng trống giữa các squares ngoài cùng nhất và container chỉ còn lại 1 nửa so với khoảng trống giữa 2 squares (mỗi square lại đóng góp lượng bản lề bằng nhau không trùng lắp, nhờ đó mà tăng gấp đôi khoảng trống)
Lưu ý cuối cùng: justify-content hoạt động song song với trục chính và flex-direction sẽ chuyển đổi trục chính.
Property #4: Align Items
Nếu justify-content chạy trên trục chính thì align-items áp dụng cho trục chéo.
Hãy reset flex-direction lại thành hàng row, nhờ đó các trục của chúng ta sẽ trông giống như hình trên.
Sau đây là 5 lên align-items.
flex-start
flex-end
center
stretch
baseline
Ba lệnh đầu tiên tương tự như justify-content, nên không có gì quá “vi diệu” ở đây.
Tuy nhiên, 2 lệnh ở dưới lại có chút khác biệt.
Bạn có stretch, nhờ đó items có thể chiếm toàn bộ trục chéo và baseline – trong baseline phần cuối của các paragraph tags sẽ được căn chỉnh.
(Lưu ý rằng với align-items: stretch, tôi phải set chiều cao của các squares ở chế độ auto. Trái lại, property height sẽ ghi đè lên stretch)
Với baseline, nếu bỏ các paragraph tags đi, baseline sẽ căn chỉnh bottom của các squares như sau:
Để chứng mình trục chính và trục chéo tốt hơn, hãy combine justify-content và align-items, và chứng kiến sự khác biệt của centering khi hoạt động trong 2 lệnh flex-direction.
Với hàng, các squares được set dọc theo trục chính nằm ngang. Với column, các square sẽ nằm theo trục chính dọc.
Dù các squares được đặt trung tâm theo chiều dọc và chiều ngang trong cả 2 trường hợp nhưng cả 2 trường hợp đều không thể hoán đổi!
Property #5: Align Self
Align-self cho phép bạn vận dụng alignment thủ công của 1 yếu tố cụ thể.
Về cơ bản, align-self ghi đè align-items cho 1 square. Dù được thiết lập auto nhưng tất cả các properties đều như nhau, trong đó align-self sẽ follow align-items của container.
#container {
align-items: flex-start;
}
.square#one {
align-self: center;
}
// Only this square will be centered.
Đây là kết quả hiển thị. Bạn sẽ áp dụng align-self vào 2 squares và phần còn lại thì áp dụng align-items: center và flex-direction: row.
Kết luận
Dù chúng ta mới chỉ tìm hiểu sơ về Flexbox nhưng những lệnh này là đủ để bạn giải quyết các alignments cơ bản nhất – và căn chỉnh dọc nội dung chính của bạn.
Nhiều vị trí nhân sự được quan tâm và dường như nhiều người đã biết làm nhân sự là làm gì. Tuy nhiên, các vị trí cao hơn như HR Manager có gì đặc biệt? HR Manager là gì? Công việc và những năng lực nào cần rèn luyện để trở thành một HR Manager giỏi? Cùng TopDev tìm hiểu bài viết sau đây!
HR Manager là gì?
Trưởng phòng Nhân sự (hay HR Manager) được biết đến là người đứng đầu bộ phận nhân sự. Họ trực tiếp chịu trách nhiệm phát triển, quản lý và triển khai các chiến lược nhân sự phù hợp với chiến lược kinh doanh tổng thể, giúp giải quyết các yêu cầu, khiếu nại hoặc các vấn đề khác liên quan tới bộ phận Nhân sự.
HR Manager là gì
Vậy HR Manager cụ thể sẽ làm gì?
Dưới đây là mô ta về những nhiệm vụ mà một HR Manager có thể chịu trách nhiệm thực hiện.
– Xây dựng kế hoạch và thực hiện chiến lược nhân sự phù hợp với chiến lược kinh doanh tổng thể theo từng giai đoạn phát triển của công ty.
– Thiết lập, theo dõi và quản lý quy trình truyển dụng, giám sát tuyển chọn và sàng lọc các ứng viên.
– Đánh giá nhu cầu và chất lượng đào tạo; nhằm triển khai việc thực hiện các giải pháp mới đối với khung đào tạo chất lượng chuyên môn cho nhân viên.
– Vạch ra chiến lược cụ thể; hỗ trợ nhu cầu phát triển doanh nghiệp, các vấn đề về sự đồng hành và giữ chân.
– Phân tích theo dõi để xây dựng hệ thống đánh giá chất lượng; khung khen thưởng cho nhân viên.
– Hoàn thiện và phát triển văn hóa doanh nghiệp.
– Rà soát, kiểm tra những thông tin về số liệu có liên quan đến các báo cáo
– Đảm bảo tuân thủ pháp luật trong hoạt động quản trị nguồn nhân lực.
Mỗi vị trí ngành nghề đều có những hệ KPI riêng phù hợp với năng lực của mỗi người. Cùng TopDev điểm qua đâu là những hệ KPI chủ yếu mà một HR Manager cần phải theo dõi và bám sát.
Tổng số lượng CV theo từng đợt tuyển dụng định kỳ (có thể có đợt bổ sung)
Tỷ lệ ứng viên đạt yêu cầu theo JD nhà tuyển dụng
Chỉ số hiệu quả quảng cáo tuyển dụng (chiếm phần trăm khá nhiều)
Tổng thời gian trung bình để tuyển các ứng viên
% ứng viên/phí tuyển dụng
Hệ chỉ số về hiệu quả tuyển dụng
HR Manager cần những yếu cầu nào về công việc? Đâu là những năng lực liên quan?
HR Manager là gì
Yêu câu công việc
Là người có kinh nghiệm từ 2 năm trở lên từng làm vị trí trưởng phòng Nhân sự hoặc tương đương.
Có khả năng làm việc với con người, hiểu và nắm bắt xu hướng phát triển về tâm lý, hành vi con người là một lợi thế.
Kỹ năng lắng nghe, thấu hiểu, đàm phán, thuyết phục, phân tích phải xuất sắc.
Có kỹ năng truyền tải thông điệp, truyền cảm hứng tốt.
Khả năng Teamwork lẫn khả năng làm việc độc lập đều tốt.
Có những am hiểu chuyên sâu về luật lao động, quyền lợi nhân sự, tính chất ngành nghề và những kinh nghiệm thực tế áp dụng cho quản trị nhân sự tốt.
Tìm hiểu về các năng lực có liên quan
Có những am hiểu từ cơ bản đến nâng cao về chuyên môn nghiệp vụ
– Trình độ giao tiệp ngôn ngữ tốt
– Ngoại ngữ – tiếng Anh có thể ổn hoặc nâng cao ở cả 4 kỹ năng
– Ngoại ngữ khác là một lợi thế (Trung, Hàn, Nhật,…)
– Kỹ năng giao tiếp
– Tư duy chiến lược
– Kỹ năng quản trị phân tích – giải quyết vấn đề, đưa ra quyết định
– Thái độ và lối tư duy cầu tiền
– Luôn tỉ mỉ và cẩn trọng tước mọi quy trình thực hiện công việc.
Hãy mô tả về cách thức bạn tìm kiếm các ứng viên. Làm cách nào để tiếp cận các ứng viên đó (trên social media và các phương thức khác)
Bạn có thể mô tả thử một quy trình tuyển dụng cho nhân viên mới đúng chuẩn cho doanh nghiệp?
Theo bạn, một chiến dịch đào tạo nhân sự tốt cho tổ chức sẽ bao gồm hững yếu tố nào?
Chính sách đầu tiên bạn muốn áp dụng/thay đổi tại công ty chúng tôi trong ngày đầu tiên bạn làm việc là gì? Bạn có những ưu tiên nào đặt ra trong chu trình thiết lập và hoàn thiện các chính sách về nhân sự.
Cách hiểu của bạn về văn hóa danh nghiệp là như thế nào? Bạn có những cách thức nào để giúp cho văn hóa doanh nghiệp trở nên phát triển hơn?
Là một HR Manager, bạn có giải pháp nào giúp giải quyết những mâu thuẫn giữa nhân viên và quản lý?
Đâu là những cách thức hữu hiệu giúp gia tăng sự hài lòng đối với nhân viên của bạn? Bạn sẽ dùng phương pháp nào để thực hiện điều đó.
Tuyển Dụng Nhân Tài IT Cùng TopDev Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products
Có cần bằng cấp về khoa học máy tính để được làm việc trong lĩnh vực công nghệ?
Tác giả: Dave Gray
Nếu muốn tìm hiểu và gia nhập lĩnh vực công nghệ thông tin, có lẽ không ít người trong số chúng ta đã nghe đến việc cần phải có chứng chỉ hay bằng cấp liên quan đến lĩnh vực này, trong số đó có những loại bằng liên quan đến ngành khoa học máy tính.
Tuy nhiên, có thật sự như vậy không?
1. Những điều bạn cần biết nếu đang xem xét học thêm một tấm bằng
Bạn nên tập trung vào những gì bạn thật sự muốn làm. Lên một kế hoạch cụ thể và biến nó thành hành động để đạt được loại bằng cấp mà mình mong muốn.
Nếu bạn không tập trung vào những gì bạn muốn làm, bạn có thể lãng phí tiền bạc và thời gian (điều này thậm chí còn có giá trị hơn) để tham gia các lớp học mà bạn không hứng thú và tốn rất nhiều tiền bạc. Hãy xác định xem bạn thật sự muốn làm gì?
Tôi học đại học ngay sau khi tốt nghiệp trung học vì bố mẹ tôi nhất quyết không đồng ý cho tôi theo đuổi con đường riêng của mình. Tôi đã kết thúc việc thay đổi chuyên ngành nhiều lần trong 4 năm rưỡi vì tôi thật sự không tìm thấy được đam mê trong chúng. Tôi muốn trở thành một nhạc sĩ trên con đường tương lai với một ban nhạc chứ không phải là một sinh viên. Cha mẹ tôi cần để cho tôi tìm thấy chính mình, tôi nghĩ vậy.
Tương tự như vậy, tôi nghĩ học đại học để khám phá bản thân và sở thích của bạn thông qua thử và sai là không hợp lý đối với hầu hết mọi người. Hỏi những người bạn biết những người đã hoàn thành một chương trình xem họ có tập trung hoặc thay đổi chuyên ngành một hoặc nhiều lần hay không. Hỏi họ xem họ sẽ làm gì khác bây giờ.
Trước sự thất vọng của cha mẹ, tôi bỏ học đại học và trở thành một nhạc sĩ toàn thời gian. Trong vòng 3 tháng, tôi biết mình muốn đi học lại. Nhưng lần này thật sự khác với những lần trước đó. Vì đây là quyết định của tôi. Điểm của tôi được cải thiện. Bây giờ tôi đã có mong muốn học hỏi.
Nếu bạn tập trung và biết mình muốn trở thành một web developer hoặc một kỹ sư phần mềm, thì nền giáo dục truyền thống có thể vẫn không phù hợp với bạn.
Bạn đã học cách tập trung và rèn luyện tính kỷ luật như thế nào?
Một nền giáo dục truyền thống cung cấp một lộ trình học tập cho bạn cũng như một lịch trình nghiêm ngặt. Một số học sinh cần có trách nhiệm giải trình này để luôn đi đúng hướng. Một số cũng phải vật lộn với việc học từ xa hơn những người khác. Nó thực sự là về việc xác định những gì giúp bạn học và thành công khi còn là một sinh viên.
Bằng cấp sẽ mở ra một số cánh cửa và giúp bạn được cân nhắc cho một số vị trí? Đúng!
Nhưng có bắt buộc phải có bằng cấp để làm việc trong lĩnh vực công nghệ thông tin không? Không!
4. Những điều cần biết nếu bạn đang có ý định nhảy việc sang vị trí mới
Tôi không học chuyên ngành khoa học máy tính. Ngành nghề này không tồn tại khi tôi học. Tôi đã học được các kỹ năng cần thiết cho công việc thông qua việc tự học.
Tôi đủ điều kiện để giảng dạy các khóa học đại học do có kinh nghiệm đáng kể trong lĩnh vực này và có bằng cấp cao hơn. Tôi đã tiếp tục học hỏi qua mỗi ngày, mỗi năm. Bây giờ tôi đang tiếp tục kế hoạch học tập để lấy bằng Tiến sĩ về Hệ thống Thông tin, đây cũng là điều mà tôi muốn chia sẻ với bạn:
Muốn thành công, bạn phải là một người học hỏi suốt đời. Những ngày duy trì một công việc cho toàn bộ sự nghiệp của bạn hầu như không còn nữa. Các nhà phát triển không ngừng học hỏi các kỹ năng mới, đặc biệt là về khoa học máy tính và phát triển web, để bắt kịp với tốc độ của ngành.
Đây là những điều tôi vẫn đánh giá cao nhất với tư cách là người hướng dẫn. Tôi đã kết bạn với những đồng nghiệp từ hai phía khác nhau của thế giới. Tôi đã dạy các sinh viên từ khắp nơi trên thế giới đã tự lập nghiệp. Bây giờ tôi cũng coi trọng tình bạn và mối quan hệ của họ.
Thoát ra khỏi vùng an toàn của bạn và không ngừng phát triển mạng lưới của bạn. Vậy bạn nên làm gì?
Điều này hoàn toàn tùy thuộc vào bạn! Nếu bạn có tập trung, kỷ luật và mong muốn trở thành một kỹ sư phần mềm hoặc nhà phát triển, bạn sẽ thành công cho dù bạn chọn con đường nào.
Hi vọng rằng bạn sẽ gặp được những điều tốt nhất trong lựa chọn của mình!
Nhiều khả năng, thước đo chính xác nhất cho sự tiến bộ của Machine Learningtại Apple đến từ cộng cuộc mua lại AI quan trọng nhất từ trước đến nay, Siri. Nguồn gốc của Siri chính là chương trình DARPA tham vọng liên quan đến các trợ lý thông minh.
Sau đó, 1 số scientists đã thành lập công ty riêng, sử dụng chương trình DARPA để phát triển thành ứng dụng. Steve Jobs đã tự mình thuyết phục những người sáng lập bán DARPA lại cho Apple vào năm 2010 và trực tiếp đưa Siri vào hệ thống điều hành. Sau đó, màn ra mắt của Siri chính là điểm nhấn trong sự kiện công bố iPhone 4S (10/2011).
Giờ đây, cách thức hoạt động của Siri đã tiên tiến đến nỗi users không cần phải kích hoạt nó bằng nút home hay thậm chí không cần nói “Hey, Siri” (1 tính năng tận dụng công nghệ Machine Learning, giúp iPhone nghe ngóng được thông tin mà không hao tốn pin). Trí thông minh của Siri đã được tích hợp vào Apple Brain và tự hoạt động dù users không trực tiếp mở lời ra lệnh.
Eddy Cute chỉ ra 4 yếu tố cốt lõi của Siri chính là: nhận diện giọng nói (để hiểu được thời điểm nào bạn nói chuyện với Siri), khả năng hiểu ngôn ngữ tự nhiên (để nắm bắt những gì bạn đang nói), execution (để thực hiện truy vấn hoặc request) và phản hồi (để trả lời lại với bạn). “Machine Learning có sức ảnh hưởng đáng kể đến tất cả các yếu tố đó” – Eddy Cue nói.
Tom Gruber – người đến với Apple thông qua thương vụ xác nhập trên (các đồng sáng lập cùng thời với Gruber rời đi sau năm 2011) cho rằng thậm chí trước khi Apple áp dụng neural nets vào Siri thì quy mô user base của Apple đã cung cấp nguồn dữ liệu dùng để “huấn luyện” các nets về sau.
“Steve Jobs nói rằng tôi đang có 1 bước ngoặt lớn, từ 1 người đi đầu, 1 ứng dụng đến với hàng trăm triệu users mà không hề sở hữu 1 chương trình beta nào. Cứ thế, bạn đột nhiên sở hữu rất nhiều users. Users sẽ nói với bạn cách mọi người bàn tán về những gì phù hợp với ứng dụng của bạn. Đây chính là bước phát triển đầu tiên. Và sau đó, neural networks đã xuất hiện”
Quá trình chuyển đổi sang neural net xử lý nhận diện giọng nói của Siri được thực hiện khi rất nhiều chuyên gia AI gia nhập Apple, trong đó có Alex Acero. Acero đã bắt đầu sự nghiệp với nhận diện giọng nói tại Apple trong những năm đầu 90 và sau đó dành nhiều năm làm việc tại Microsoft Research.
“Tôi rất yêu thích công việc đó và đã xuất bản nhiều bài viết. Nhưng khi Siri ra đời, tôi nhận ra: Đây là cơ hội để biến các deep neural networks thành hiện thực, không phải là thứ hàng trăm người sẽ đọc, mà là thứ được hàng triệu người sử dụng”. Nói cách khác, Alex Acero là 1 kiểu scientist mà Apple đang tìm kiếm – tối ưu hóa sản phẩm hơn là tập trung vào publishing.
Khi Acero đến “nhà táo” cách đây 3 năm, Apple vẫn đang cấp giấy phép cho hầu hết công nghệ giọng nói cho Siri từ bên thứ 3. Federighi bảo đây là 1 pattern mà Apple nghiên cứu liên tục.
“Khi 1 lĩnh vực công nghệ có đóng góp quan trọng cho sản phẩm trong thời gian dài, chúng tôi sẽ xây dựng đội ngũ in-house để truyền tải được kinh nghiệm mà user muốn. Để tạo ra 1 sản phẩm tuyệt vời, chúng tôi muốn sở hữu và đổi mới công nghệ đó hơn nữa bằng nguồn lực nội bộ. Speech là 1 ví dụ ngoại lệ khi chúng tôi áp dụng các tài nguyên bên ngoài có sẵn, nhờ đó đạt được hiệu quả tốt ngay từ đầu”
Từ đây, team bắt đầu huấn luyện neural net để thay thế nguyên bản của Siri. “Chúng tôi có GPU (graphics processing unit microprocessor – 1 bộ vi xử lý chuyên dụng nhận nhiệm vụ tăng tốc, xử lý đồ họa cho bộ vi xử lý trung tâm CPU) lớn nhất và tệ nhất… Và rất nhiều dữ liệu”. Lần ra mắt của Siri vào 7/2014 đã cho thấy tất cả hoạt động đó không hề vô ích.
“Tỷ lệ mắc lỗi của Siri giảm… Hầu hết là nhờ deep learning và cách chúng tôi tối ưu deep learning – không chỉ nhờ chính thuật toán mà còn nhờ context của toàn bộ sản phẩm end-to-end”
Nói về “end-to-end”, Apple không phải là công ty đầu tiên sử dụng DNNs trong nhận diện giọng nói. Nhưng bằng cách kiểm soát toàn bộ hệ thống delivery, Apple lại có lợi thế riêng. Vì Apple tự tạo chips riêng nên Acero có thể làm việc trực tiếp với đội ngũ thiết kế silicon và các kĩ sư viết firmware cho các thiết bị để tối ưu hiệu suất của neural net. Nhu cầu của Siri team thậm chí còn ảnh hưởng đến thiết kế của iPhone.
“Không chỉ là silicon” – Federighi chia sẻ – “Đó chính số lượng những microphones chúng tôi đặt trong thiết bị, là nơi chúng tôi đặt microphones. Cách chúng tôi điều chỉnh hardware, những mics đó và software stack xử lý audio. Chúng trở thành những mảnh ghép gắn kết với nhau – 1 lợi thế không tưởng so với các doanh nghiệp phải xây dựng 1 vài phần mềm nào đó, và chỉ biết ngồi xem chuyện sẽ xảy đến”.
Một khía cạnh khác: Khi 1 Apple neural net hoạt động trong 1 sản phẩm, nó có thể trở thành 1 công nghệ cốt lõi sử dụng cho những mục đích khác. Vì thế, khi Machine Learning hỗ trợ Siri thấu hiểu user, Machine Learning đã trở thành công cụ dùng để xử lý chính tả thay thế cho typing. Hệ quả là, users nhận ra thông điệp và emails của họ trở nên mạch lạc hơn nếu họ không sử dụng bàn phím mềm; dần dần, users sẽ nhấn vào microphone key và nói chuyện nhiều hơn.
Yếu tố thứ 2 của Siri mà Eddy Cue đề cập chính là khả năng hiểu được ngôn ngữ tự nhiên (natural language understanding). Siri bắt đầu sử dụng Machine Learning để hiểu được nguyện vọng của người dùng kể từ tháng 11/2014 và ra mắt 1 phiên bản học sâu hơn 1 năm sau đó.
Thời điểm Siri sở hữu tính năng nhận diện giọng nói thì Machine Learning đã có kinh nghiệm trong việc phiên dịch các dòng lệnh linh hoạt hơn. Eddy lấy iPhone của mình ra, kích hoạt Siri làm ví dụ. “Thông qu ứng dụng Square Cash, gửi đến Jane 20 dollars”. Màn hình lúc này sẽ phản ánh toàn bộ request của Cue. Eddy Cue thử 1 lần nữa, nhưng thay đổi ngôn từ 1 chút. “Bắn 20 bucks đến vợ của tôi”. Kết quả vẫn tương tự.
Nếu không có các tiến bộ về Siri, Apple sẽ không thể liên tục ra mắt Apple TV – thiết bị nổi bật với tính năng quản lý giọng nói tân tiến. Tuy các phiên bản trước đây của Siri yêu cầu bạn nói 1 cách hạn chế thì phiên bản supercharged-nhờ-deep-learning không chỉ mang đến những lựa chọn chuyên biệt từ rất nhiều catalog về movies và bài hát, mà còn giải quyết các concepts như: Hãy cho tôi 1 bộ phim kinh dị có Tom Hanks (Nếu Siri thật sự thông minh, nó sẽ trả về kết quả The Da Vinci Code). “Trước khi có công nghệ supercharged-nhờ-deep-learning, bạn sẽ không thể cung cấp được tính năng này” – Federighi đề cập.
Với iOS 10, được ra mắt vào mùa thu năm nay, giọng nói của Siri đã trở thành yếu tố cuối cùng trong 4 yếu tổ được chuyển đổi bởi machine learning. Về bản chất, dấu ấn của Siri đến từ database gồm các bản ghi âm thu thập được tại voice center; mỗi câu nói là sự chắp vá từ các bản ghi âm này. Theo Gruber, Machine Learning khiến mọi thứ trở nên mượt mà hơn và giúp âm thanh Siri giống người thực hơn.
Acero đã thực hiện 1 phiên bản demo đâu tiên tương tự giọng của Siri với các yếu tố robot quen thuộc. Phiên bản này sẽ hỏi bạn bằng 1 chất giọng quyến rũ lưu loát: “Hi, tôi có thể làm được gì cho bạn?”. Điểm khác biệt ở đây là gì? Chính deep learning!
Mặc dù chỉ là 1 chi tiết nhỏ, nhưng khi sở hữu 1 giọng nói tự nhiên hơn, Siri có thể đem đến những khác biệt lớn. “Mọi người sẽ thấy tin tưởng hơn nếu giọng nói có chất lượng cao hơn. Giọng nói càng thu hút người dùng thì càng khiến users sử dụng nhiều, góp phần tăng hiệu ứng hồi lại (return effect)”
Việc sử dụng Siri cũng như thực hiện những cải tiến trên Machine Learning của Apple càng có nhiều ý nghĩa hơn khi cuối cùng, Apple cũng mở Siri cho lập trình viên. Tuy nhiên với các chuyên gia thì quy trình này vẫn xảy ra quá muộn vì số lượng đối tác Siri bên thứ 3 mà Apple sở hữu chỉ dừng lại vài chục, trong khi Alexa của Amazon đã có hơn 1000 “kỹ năng” được cung cấp bởi các lập trình viên bên ngoài.
Apple lại cho rằng điều này không kéo dài vì users của Amazon phải sử dụng ngôn ngữ riêng để tiếp cận các kĩ năng đó. Theo Apple, Siri sẽ tích hợp những thứ như SquareCash hoặc Uber 1 cách tự nhiên hơn (1 đối thủ khác, Viv - được 1 vị đồng sáng lập Siri tạo nên – cũng hứa hẹn quy trình tích hợp chặt chẽ dù chưa công bố ngày ra mắt cụ thể)
Cùng lúc đó, Apple cũng thông báo rằng những cải tiến của Siri đang dần tạo ra sự khác biệt nhờ vào những tính năng mới hoặc thu được các kết quả tốt hơn từ những truy vấn quen thuộc. “Số lượng requests vẫn đang tăng và tăng. Tôi nghĩ Apple đang thực hiện tốt hơn công việc truyền thông tất cả những gì chúng tôi làm. Ví dụ, tôi thích thể thao và bạn có thể hỏi Siri ai là người mà nó nghĩ sẽ chiến thắng trận bóng, nó sẽ trả lại cho bạn 1 đáp án. Tôi còn không biết là Apple có thể làm được điều đó nữa cơ!” – Eddy Cue chia sẻ.
Có thể vấn đề lớn nhất khi Apple chấp nhận Machine Learning chính là cách để đạt được thành công dù vẫn cam kết những nguyên tắc bảo mật người dùng. Apple đã mã hóa thông tin users để không ai, kể cả các luật sư của Apple có thể đọc được (kể cả FBI dù có lệnh khám xét từ tòa án). Apple cũng không hề thu thập thông tin người dùng nhằm mục đích quảng cáo.
Tất nhiên đứng từ góc độ người dùng thì rất đáng khen ngợi nhưng sự nghiêm túc quá mức của Apple với vấn đề bảo mật này vẫn chưa mang lại hiệu quả trong việc lôi kéo các tài năng AI về với công ty. “Tất cả những gì mà các chuyên gia Machine Learning mong muốn đó chính là dữ liệu” – 1 nhân viên cũ của Apple, hiện đang làm cho công ty về AI cho biết – “Nhưng vì lập trường bảo mật mà Apple thường âm thầm làm mọi thứ. Bạn có thể sẽ tự hỏi liệu đó có phải là điều đúng đắn nhưng cũng chính điều đó khiến Apple trở nên nổi tiếng vì đã không trở thành những kẻ chạy đua theo công nghệ AI”
Quan điểm này bị các nhà điều hành của Apple tranh cãi rất nhiều vì họ cho rằng: vẫn có thể lấy được tất cả các dữ liệu và tận dụng mạnh mẽ công cụ Machine Learning mà không cần phải giữ thông tin cá nhân của users trên cloud, thậm chí cũng không cần lưu lại hành vì của user để huấn luyện cho neural nets
Thứ nhất, chính là việc xử lý thông tin cá nhân trong các hệ thống dựa trên Machine Learning. Khi thông tin chi tiết về 1 user được lượm lặt qua hệ thống xử lý neural-net, chuyện gì sẽ xảy ra với thông tin đó? Thứ hai, việc thu thập thông tin đòi hỏi phải huấn luyện các neural-nets nhận diện hành vi. Nhưng làm thế nào để làm được điều đó mà không thu thập thông tin cá nhân của users?
Apple đã có câu trả lời cho cả 2 vấn đề. “Một số người nhận thức được chúng tôi không thể thực hiện những điều này với AI vì chúng tôi không có data. Nhưng chúng tôi đã tìm ra cách để lấy dữ liệu mà chúng tôi cần nhưng vẫn giữ được tính bảo mật. Đó chính là điểm mấu chốt”
Apple đã giải quyết vấn đề đầu tiên – bảo vệ sở thích và thông tin cá nhân mà neural nets đã nhận diện được – bằng cách tận dụng khả năng quản lý cả phần mềm và phần cứng độc quyền. Nói 1 cách đơn giản, đó chính là Apple Brain. “Chúng ta giữ lại 1 vài thông tin nhạy cảm nhất khi Machine Learning quét qua toàn bộ thiết bị” – Federighi nói.
Ví dụ, Federighi dẫn chứng các suggestions ứng dụng, icons xuất hiện khi bạn quét sang phải cũng chính những ứng dụng mà bạn định sẽ mở ra tiếp theo. Các dự đoán như thế được hình thành dựa trên rất nhiều yếu tố và rất nhiều trong số chúng liên quan đến hành vi của riêng người dùng. Theo Federighi, 90% thời gian con người dùng để tìm những gì họ muốn nhờ các những suggestions.
Thông tin khác mà Apple lưu trữ trên các thiết bị có thể là dữ liệu mang tính cá nhân nhất mà Apple thu thập được: những từ ngữ mà users gõ bằng bàn phím iPhone QuickType standard. Nhờ có hệ thống neural network theo dõi thời điểm bạn gõ chữ, Apple sẽ phát hiện được các events và items chính như thông tin chuyến bay, số liên lạc và lịch hẹn – nhưng các thông tin đó lại nằm trong điện thoại của bạn.
Thậm chí trong các backups lưu trên cloud của Apple, thông tin được chắt lọc để backup không thể đụng đến. “Chúng tôi không muốn thông tin đó được lưu trữ trong servers của Apple. Một tổ chức như Apple không có nhu cầu tìm hiểu về thói quen của bạn hay địa điểm bạn sẽ đến”
Apple cũng cố gắng giảm số lượng thông tin được giữ lại. Federighi đề cập đến ví dụ như sau: khi bạn có 1 cuộc hội thoại và ai đó nói đến 1 thuật ngữ có thể trở thành từ khóa tìm kiếm tiềm năng, các doanh nghiệp khác sẽ phải phân tích toàn bộ cuộc hội thoại trong cloud để nhận diện những thuật ngữ đó nhưng 1 thiết bị Apple có thể nhận diện được chúng mà không cần phải lấy data ra khỏi quyền sở hữu của người dùng. Hệ thống của Apple sẽ liên tục tìm kiếm các kết quả phù hợp theo knowledge base (thông tin chung) trong điện thoại (1 phần của “brain” 200 megabyte)
“Thao tác này rất gọn nhẹ nhưng được thực hiện xuyên suốt knowledge basse, với hàng trăm ngàn locations và entities….” Tất cả ứng dụng của Apple đều sử dụng knowledge base (thông tin chung) như app tìm kiếm Spotlight, Maps và Safari. Knowledge base còn hỗ trợ cả auto-correct.
Nhưng liệu những quy định bảo mật nghiêm ngặt của Apple có gây trở ngại cho các thuật toán neural net hay không – đó chính là vấn đề thứ 2 đã được đề cập trước. Neural nets cần 1 lượng lớn dữ liệu để được train đầy đủ, chính xác.
Nếu Apple không can thiệp vào hành vi của tất cả người dùng, vậy làm sao để lấy được dữ liệu đó? Như nhiều công ty khác đã làm, Apple huấn luyện nets của mình trên các tập thông tin công khai có sẵn (ví dụ như bộ thông tin gồm các stock images để nhận diện hình ảnh).
Nhưng thỉnh thoảng, nó cần nhiều thông tin chi tiết hơn hoặc cập nhật hơn, mà những thông tin này chỉ có thể đến từ user base. Apple đã cố gắng lấy thông tin này mà không cần biết đến users đó là ai; Apple ẩn dữ liệu, gắn nó với các mã nhận diện ngẫu nhiên không liên kết với Apple IDs.
Bắt đầu từ iOS 10, Apple dự định sẽ tuyển chọn 1 công nghệ khá mới tên là Differential Privacy. Công nghệ này dựa vào thông tin của đám đông và không nhận diện bất cứ cá nhân nào.
Chẳng hạn Diffential Privacy sẽ tìm các từ khóa nổi tiếng mới nhất không có trong knowledge base của Apple hoặc từ điển của Apple, thường xuất hiện bất ngờ dựa trên rất nhiều đáp án liên quan đến các truy vấn hoặc lượt sử dụng các emojis nào đó tăng cao.
“Cách thức truyền thống mà giới công nghệ giải quyết vấn đề này chính là gửi đi mọi từ, mọi kí tự mà bạn gõ lên servers, sau đó sẽ rà soát tất cả và phát hiện những thông tin thú vị” – Federighi trình bày. “Nhờ thực hiện mã hóa end-to-end, chúng tôi sẽ không làm theo cách thức truyền thống đó”. Dù Differential Privacy được phát triển trong cộng đồng research, Apple đang dần dần áp dụng nó trên diện rộng. “Chúng tôi đang thực hiện khảo sát trên 1 tỷ users” – Eddy Cue chia sẻ.
“Chúng tôi đã bắt đầu nghiên cứu công nghệ này từ nhiều năm trước và đã hoàn thành nhiều sản phẩm hay, có tính thực tiễn. Mức độ bảo mật của nó thực rất đáng kinh ngạc” – Federighi (sau đó anh ấy mô tả 1 hệ thống liên quan đến các protocols mã hóa và tung đồng xu ảo mà tôi không theo dõi kịp.
Về cơ bản, công nghệ này liên quan đến việc thêm công cụ toán học vào những phần nào đó của dữ liệu để Apple có thể phát hiện các usage patterns dù không nhận diện các users cá nhân). Anh cũng đề cập đóng góp của Apple rất có giá trị đối với thế giới vì nó cho phép các scientists làm việc với quy trình implementation, từ đó có thể xuất bản bài viết về công trình cá nhân.
Rõ ràng, Machine Learning đã thay đổi các sản phẩm của Apple nhưng liệu Machine Learning có đang thay đổi Apple hay không?. Ở khía cạnh nào đó, mindset về Machine Learning dường như khác biệt với các tập quán xưa nay của Apple.
Apple là 1 công ty kiểm soát cẩn thận trải nghiệm người dùng, kể cả các cảm biến dự đoán thao tác quét của users. Mọi thứ được thiết kế trước và được xây dựng các đoạn code 1 cách chính xác. Nhưng khi các kĩ sư áp dụng Machine Learning, họ phải lùi lại, để chính phần mềm tự khám phá các hướng giải quyết. Liệu Apple có chấp nhận thực tế là các hệ thống Machine Learning có thể tiếp cận đến thiết kế sản phẩm?
“Thiết kế sản phẩm là cội nguồn của rất nhiều cuộc tranh luận nội bộ. Chúng tôi thường mang đến các trải nghiệm đã được lên kế hoạch & giám sát chu đáo, từ đó chúng tôi cs thể quản lý tất cả các hướng đi mà hệ thống đang dự định tương tác với người dùng. Khi bạn bắt đầu huấn luyện 1 hệ thống dựa trên lượng dữ liệu hành vi người dùng lớn, [các kết quả xuất hiện] không nhất thiết là những gì mà 1 Apple designer chỉ định. Chúng là những gì xuất hiện từ dữ liệu”
Nhưng với Schiller, “Tuy những công nghệ này ảnh hưởng lớn đến cách thiết kế nhưng đến cuối cùng, chúng tôi mới là người sử dụng những công nghệ này vì chúng có thể giúp chúng tôi đem đến 1 sản phẩm chất lượng hơn”
Và đây là kết luận: Apple có thể không nói rõ về những gì họ đang với Machine Learning nhưng công ty sẽ tận dụng Machine Learning nhiều nhất có thể nhằm cải thiện các sản phẩm của mình. Bằng chứng chính là “bộ não” bên trong điện thoại của bạn.
“Khách hàng bình thường đang trải nghiệm deep learning mỗi ngày [và đây chính là ví dụ] cho thấy tại sao bạn lại yêu mến 1 sản phẩm nào đó của Apple. [Ví dụ] thú vị nhất chính là deep learning khôn khéo đến nỗi bạn thậm chí còn không biết về nó cho đến lần thứ 3 khi thấy nó, bạn sẽ dừng lại và tự hỏi: Điều gì đang xảy ra?”
AMA (Ask Me Anything), một sự kiện Q&A ( Hỏi đáp trực tiếp ) diễn ra đều đặn trên fanpage của TopDev. Trong chương trình vừa rồi, anh Nguyễn Thanh Tùng đã có những chia sẻ hết mình với những thành viên trên cộng đồng lập trình.
Hiện anh đang đảm nhiệm vai trò là trưởng bộ phận phát triển sản phẩm Web – app thuộc công ty cổ phần Thế Giới Di Động. Anh có trên 10 năm kinh nghiệm làm Product Management và UI/UX, cộng thêm anh đã kinh qua rất nhiều dự án ở các công ty lớn như Baamboo MP3 (VCcorp), Anhso.net (Moorecorp),Thegioididong.com, Dienmayxanh.com, Ứng dụng TGDD. Hãy cũng xem qua những chia sẻ của anh với bạn đọc trong tuần qua.
Chào anh Tùng, anh cho em hỏi là nếu học UX có cần phải biết kỹ thuật không anh? Em muốn nghiên cứu UX thì nên bắt đầu từ đâu ạ?
Muốn làm UX designer không nhất thiết cần phải biết lập trình, nhưng nên rèn cho mình để có engineering/hacker mindset + trang bị cho mình kỹ năng Research thông tin khi gặp vấn đề (cần tiếng Anh tốt). Anh lấy một ví dụ cụ thể về Hacker mindset giúp ích thế nào cho việc gia tăng trải nghiệm UX (case study này của Instagram): xem linktại đây
Ở thegioididong.com, Product Manager kiêm luôn vai trò UX và nhiều vấn đề về trải nghiệm người dùng cần được giải quyết bằng lập trình thì PM có thể research và đưa ra giải pháp cho Dev triển khai luôn (vì ko phải Dev nào cũng có kỹ năng research hay nhạy về UX). Ví dụ đợt rồi để tối ưu trải nghiệm loading app cho nhanh, anh là người đưa ra một số hướng đi kỹ thuật cho bên Dev tối ưu (dù anh xuất thân là dân Ngoại thương, học UI)
Em là iOS Dev. Mặc dù nhiều năm làm mobile nhưgn k có nhiều kiến thức về UX cũng như làm sao để tối ưu quy trình làm app của bản thân, vì nhiều khi k hiểu dc ý đồ của UX design lai đâm ra khó chịu không hợp lí. Với dev, nên bắt đầu học và hiểu UX từ nền tảng nào? Cảm ơn anh Tùng.
Ở thegioididong đã có lúc anh gặp vấn đề tương tự với team IT, và anh có làm một buổi chia sẻ với họ về việc vì sao IT nên biết UX và nên trang bị gì, em có thể tham khảo ở đây nhé
Cái này có hơi kì 1 tí nhưng anh có thể chia sẻ với em cách để thuyết phục sếp duyệt UX của mình là gì ạ? Mặc dù mình tin là cái UX này sẽ work nhưng các sếp thì lại không thì làm sao anh?
UX tốt ko phải do em hay sếp em quyết định, mà do user sử dụng sp đó quyết định. Cách tốt nhất là sau khi thiết kế hãy mang sp ra ngoài cho user trải nghiệm thử (kỹ thuật thì nhiều: gửi survey hàng loạt, phỏng vấn ngẫu nhiên 5 user, gọi điện khách hàng cũ mời họ tham gia focus group testing). Ở tgdd, sau khi thiết kế xong bọn anh hay dựng prototype và mang nó cho một số user sử dụng thử, kết quả mang về thảo luận với team. Sếp mà sai thì cũng loại 🙂
Em muốn hỏi về con đường trở thành UX design của anh như thế nào ạ? hiện tại em đang muốn trở thành 1 UX designer nhưng chưa biết phải bắt đầu từ đâu ạ?
Quá trình học UX design của anh đến từ 2 nguồn:
– Học từ thực tế: em có thể xem qua con đường công việc mà anh đã làm. Trong đó trải nghiệm UX sâu sắc nhất là khi làm ở Thegioididong (5 năm). Các bài học truyền cảm hứng nhất về UX lại đến từ những người không ở trong lĩnh vực chuyên môn của mình mà đến từ những người “ngoại đạo”, họ cho mình thấy một điều là “UX bắt nguồn từ cuộc sống” và người làm UX nên ra ngoài trải nghiệm thực tế nhiều hơn là chỉ đọc và nghiên cứu. Quan điểm thiết kế UX của anh hiện tại là “tối giản” và “lúa hoá”. Anh có chia sẻ lúc trước ở đây:
– Tự học: anh đọc tài liệu, các bài viết về UI/UX mỗi ngày (nguồn chính giờ là medium.com, quora.com), tham gia trao đổi ở một số nhóm về UI/UX/Product Management trên Slack (group VN thì team Marquee, nước ngoài thì có https://www.productmanagerhq.com), kết nối và follow một số UI/UX designer + PM nổi tiếng trên thế giới ở Facebook, medium.com.
Anh có thể giới thiệu một số các UX designs từng truyền cảm hứng cho anh với em được không ạ?
Đây là một số UX design story mà anh ấn tượng thời gian gần đây – một case stuty chi tiết về quá trình thiết kế UX/UI của một ứng dụng giả định Google Hobbies
– Thiết kế lại trải nghiệm Uber theo hướng “lúa” và dễ sử dụng cho người già
– Thiết kế trải nghiệm nghe nhạc trên Spotify, anh rất ngạc nhiên khi biết cách thuật toán của spotify thông minh thế nào và làm sao mà họ có thể gợi ý nhạc đúng gu mình như vậy
-Phân tích về flow User onboard của các web/app nổi tiếng. Cũng học được nhiều về UX và cách làm UX audit
Em chào anh. Khó khăn lớn nhất trong 10 năm giữ vị trí PM của anh là gì? Cách anh vượt qua khó khăn đó ạ? Thêm nữa, tố chất để trở thành 1 PM giỏi là gì vậy anh? Cảm ơn anh.
Có 2 thách thức lớn nhất với anh sau 10 năm làm PM
– Năng lực quản trị và triển khai dự án: Làm sao để sản phẩm mà mình ấp ủ ra mắt ĐÚNG TIẾN ĐỘ, ĐÚNG THIẾT KẾ. Một số vấn đề mà các team thường hay gặp: Dev code xấu, ko như thiết kế; Dev ko đưa ra được giải pháp kỹ thuật để giải quyết vấn đề mình nêu hoặc chỉ được 50% kỳ vọng; Content long lanh như thiết kế lấy ai viết; quy trình giao hàng 30 phút ai làm được; …. Rất nhiều yếu tố chi phối đến kết quả của dự án và người PM giỏi phải có power và sự quyết liệt, cầu toàn để đưa mọi thứ về đích
– Thường thì khi em làm 10 năm trong một lĩnh vực, em sẽ có nhiều kinh nghiệm và các kinh nghiệm đó sẽ dần chuyển hoá thành các quan điểm, triết lý của em, điều này đôi khi sẽ khiến em khó tiếp thu các luồng suy nghĩ trái chiều hay các góc nhìn mới. Một người PM/UX designer nên giữ một thái độ cởi mở với mọi luận điểm, anh có chia sẻ ý đó trong slide này hoặc em đọc bài này.
Em có thể đọc series bài viết của chị này (Product Director của Facebook), chị ấy chia sẻ rất nhiều điều thú vị để trở thành một PM giỏi: https://medium.com/@joulee Còn muốn đọc sâu hơn để chuẩn bị làm một PM thì có nguồn này rất đầy đủ.
Dự án UI/UX mà anh tâm đắc nhất & những gì anh học được từ dự án đó? Em với team đang ấp ủ 1 dự án game chạy trên nền tảng di động, anh có kinh nghiệm UI/UX đối với dự án kiểu này không? Rất mong được nghe anh chia sẻ.
Mỗi nămthegioididong.com và Điện Máy Xanh (dienmayxanh.com) sẽ có một lần thay đổi UI/UX lớn để phục vụ cho việc bán hàng và phục vụ user tốt hơn, và sau mỗi dự án (khoảng 3-4 tháng) thì anh và team đều rút ra những bài học mới. Một số điều anh cho là quan trọng khi quản trị một dự án:
– Chọn một mô hình quản lý dự án hiệu quả: ở tgdd bọn anh dùng scrum
– Giao tiếp team minh bạch, rõ ràng, liên tục và thường xuyên là yếu tố mấu chốt quyết định thành công cho dự án
– Huy động nguồn lực từ nhiều bộ phận vào quá trình làm UX: trong quá trình làm, để sản phẩm có UX tốt nhất nhiều khi em sẽ đụng đến các team khác như content, logistics, call center. Đặt khách hàng làm trọng tâm, em sẽ thấy có nhiều thứ cần tác động đến các bộ phận để sản phảm có một UX flow tốt.
Để học lập trình hiệu quả: Hãy tiếp cận tất cả những gì có thể!
Tác giả: Endy Austin
Bạn có thể dành hàng tháng trời để đến phòng tập thể dục mà vẫn không thấy kết quả gì vì cách bạn tập luyện không đúng. Hầu hết chúng ta đều biết điều này. Và điều này cũng hoàn toàn đúng khi học lập trình. Bạn có thể dành hàng tháng trời để học, thử những thứ khác nhau, xem qua các hướng dẫn và vẫn cảm thấy như bạn là người mới bắt đầu.
Vậy làm thế nào để học lập trình hiệu quả hơn?
Học lập trình bằng cách nào để nhanh đạt được kế hoạch đặt ra?
Học lập trình với mẹo 2 phút
Nếu tôi nói với bạn rằng có một hướng dẫn dài 2 phút giúp bạn thành thạo JavaScript ngay lập tức, bạn có xem thử không? Dù bạn trả lời “có” hay “không”, điều đó không quan trọng. Nghĩa là, với điều kiện bạn hiểu sâu xa rằng chỉ một hướng dẫn ngắn thôi đã đi ngược lại nguyên tắc làm chủ bất kỳ miền nào.
Tóm lại, đây là cách làm việc hiệu quả mà bạn nên tuân theo: Bắt đầu với một đống thông tin khổng lồ. So sánh kiến thức mới với những gì bạn đã biết trước đây. Liệt kê những điểm khác nhau mà thông tin mới và cũ mang lại. Kiểm tra bản thân bằng cách tạo ra các kiến thức của bạn từ đầu. Và cuối cùng, hãy hướng dẫn lại cho người khác.
Vì vậy, lần tới khi bạn nhìn thấy một hướng dẫn duy nhất trong đời hứa hẹn bạn sẽ thành thạo chỉ trong một lần xem, hãy nhớ rằng tốt nhất nó chỉ là cung cấp cho bạn kết xuất thông tin.
Hãy cố gắng ghi nhớ điều này và làm theo, kiến thức sẽ dần dần “đeo đuổi” bạn đó.
Làm thế nào để ứng phó với nỗi sợ mang tên “phấn đấu”?
Tôi đã thấy mọi người bỏ lập trình vì họ không muốn vật lộn với bug. Điều đó chẳng khác gì với việc bạn ghét phòng tập thể dục vì không muốn quá trình tập luyện của mình bị tổn thương. Nhưng thực tế là thế này: bạn không chạy trốn khỏi bug – bạn chỉ là đang tự cố gắng để tìm ra chúng nhanh hơn.
Bởi vì một lập trình viên thành thạo chỉ đơn giản là một người dò bug hiệu quả.
Mỗi khi bạn cảm thấy thất vọng vì có bug xuất hiện, hãy nhớ rằng đây cũng là cách giúp bạn mở mang cơ hội học tập và nâng cao chuyên môn. Nghiên cứu khoa học thần kinh khẳng định rằng luyện tập không chỉ đơn giản là làm cho bạn trở nên hoàn hảo – đó là luyện tập có chủ đích để cải thiện trong một nhiệm vụ cụ thể giúp bạn tốt hơn.
Và thực hành có chủ ý của một lập trình viên liên quan đến việc đấu tranh với bug. Vì vậy, bạn đừng nên kỳ vọng rằng mình sẽ lập trình mà không có bug. Hãy biết sửa sai để làm tốt hơn. Bạn càng nắm bắt được điều này sớm thì việc học của bạn càng trở nên hiệu quả hơn.
Học lập trình hiệu quả bằng cách nắm bắt đúng các kỹ năng
Bạn không kém cỏi, chỉ là bạn chưa học đúng trình độ
Hãy tưởng tượng bạn đang học ngôn ngữ tiếng Anh. Bạn bắt đầu với một hướng dẫn thúc đẩy bạn học đánh vần những từ lớn như ELEPHANT. Nhưng nó không hoàn toàn chính xác. Sau khi vật lộn với việc học trong một thời gian dài, bạn quyết định đi đến một hướng dẫn thấp hơn và học cách đánh vần các từ nhỏ hơn như ANT chẳng hạn. Nhưng rồi dù phải bỏ nhiều thời gian vẫn không đạt được kết quả mà bạn mong muốn.
Nhiều người cũng đã học viết code theo cách như thế.
“Tôi đã hoàn thành việc học viết code. Nhưng điều này rõ ràng không dành cho tôi”.
Ngay cả các khóa học giới thiệu cũng có thể được nâng cao bởi vì tư duy của bạn chưa được thiết kế để lập trình nói chung. Tôi thấy điều này không đủ được đề xuất, nhưng nếu bạn đang gặp khó khăn với các khóa học giới thiệu, bạn nên xem xét Giới thiệu về lập trình cho học sinh. Không có gì xấu hổ khi tìm kiếm thứ gì đó thấp hơn các khóa học giới thiệu và bắt đầu từ đó để xây dựng.
Họ sẽ cung cấp cho bạn phần giới thiệu mềm rất cần thiết, có ý nghĩa và giúp bạn hứng thú với việc lập trình. Một lần nữa, điều này không liên quan gì đến bản ngã. Đó là hành trình học tập của bạn. Bạn sẽ học hiệu quả hơn nếu bạn học ở cấp độ phù hợp.
Khoa học đã chứng minh rằng tắm nước nóng sẽ khiến chúng ta cảm thấy tâm trạng tốt hơn. Bạn nên làm theo điều này. Vậy chẳng may bị mất nước nóng trong 2 tuần, bạn sẽ không tắm nữa?
Câu hỏi nghe thật nực cười.
Vậy nên dù tốt cũng không có nghĩa là ngày nào cũng thực hiện. Hãy cố gắng tạo động lực cho bản thân và luyện tập nhiều hơn vào những ngày bạn tràn đầy năng lượng và động lực làm việc.
Có rất nhiều ngày thú vị, phù hợp với việc viết code nhưng cũng sẽ có những ngày đen tối, không còn động lực làm việc. Thành thật mà nói, điều này không chỉ với lập trình mà bất kể là công việc gì mỗi ngày cũng đều như vậy. Nhưng bạn phải rèn luyện bản thân để xuất hiện không chỉ khi cảm thấy quá hứng khởi, mà còn cả vào những ngày buồn chán.
Vào những ngày bạn cảm thấy có nhiều động lực, hãy sử dụng động lực để nhanh chóng cam kết thực hiện một điều gì đó lớn lao giúp bạn có trách nhiệm khi động lực cạn kiệt. Hãy viết những chương trình mà bạn còn tồn đọng và cảm thấy khó khăn với nó.
Bạn sử dụng những khoảnh khắc khi bạn lạc quan để cam kết tương lai cho khi bạn không còn động lực. Sử dụng kỹ thuật này và bạn sẽ duy trì được bản thân trong một khoảng thời gian dài hơn.
Học tập là một hành trình dài. Đừng để bản thân trở nên yếu kém khi bạn luôn có thể áp dụng những mẹo hữu ích này cho công việc mỗi ngày của mình, trong đó có công việc của một lập trình viên.
Giới thiệu bản thân khi phỏng vấn được xem là một cách thức tạo dấu ấn khá quan trọng đối với bất kỳ một ứng viên nào. Có thể nói, việc giới thiệu bản thân khi phỏng vấn là một thách thức mà nhà tuyển dụng đặt ra cho mỗi ứng viên. Thoạt nghĩ, chúng ta tưởng chừng đây là một việc hết sức dẽ dàng. Tuy nhiên, để giới thiệu bản thân khi phỏng vấn hiệu quả lại là điều hoàn toàn không đơn giản. Cùng TopDev tìm hiểu bài viết sau đây để nắm bắt được bí quyết giúp ghi điểm tuyệt đối với nhà tuyển dụng.
Mỗi phát ngôn, mỗi lời kể – tường thuật lại trong buổi phỏng vấn của bạn đều thể hiện là bạn đang giao tiếp với nhà tuyển dụng. Do vậy, bạn cảm thấy đắn đo trong việc truyền tải những suy nghĩ? Bạn cởi mở hay giao tiếp một cách e dè; lo lắng khi giao tiếp? Hãy cùng điểm qua những bí quyết thực tế nhằm giúp các ứng viên ghi điểm tuyệt với nhà tuyển dụng; thiết lập xây dựng một quy trình giới thiệu bản thân khi phỏng vấn một cách hiểu quả và thiế thhực
Cấu trúc của một lời giới thiệu bản thân khi phỏng vấn
Bên cạnh những thông tin cơ bản như tên, tuổi, ngành học, một lời giới thiệu bản thân khi phỏng vấn tìm việc nên đảm bảo những đặc điểm sau:
Hãy thể hiện rằng bạn là người có năng lực và tiềm năng phát triển tốt trong việc sắp xếp, tổ chức và thực hiện công việc.
Nhà tuyển dụng luôn muốn khai thác khả năng; tiềm năng của bạn khi thực hiện công việc. Vì vậy, hãy làm nổi bật những kinh nghiệm, kỹ năng và thành tích học thuật khoa học -xã hội liên quan đến vị trí ứng tuyển (nếu bạn là người có nhiều kinh nghiệm – dù hay ít); hoặc các chương trình thực tập, trao đổi sinh viên, thủ lĩnh; các sở thích, các hoạt động tình nguyện hay khóa học thực tế ứng dụng liên quan đến công việc (nếu bạn là sinh viên mới ra trường).
Hãy nhấn mạnh rằng bạn là người có khả năng thích ứng nhanh với mọi môi trường làm việc. Bạn sẽ rất phù hợp với văn hóa công ty và có thể tạo ra sự gắn kết với mọi người. Hầu hết các nhà tuyển dụng rất muốn làm việc với những cá nhân ứng thích nghi tốt với văn hóa doanh nghiệp.
Nếu bạn đã được một nhân viên công ty giới thiệu, hãy chia sẻ rằng chính người giới thiệu cũng có nhận định rằng bạn hoàn toàn phù hợp với môi trường ở đây.
Bật mí các bước giúp giới thiệu bản thân thật ấn tượng
Điều đầu tiên chính là xác định các kỹ năng quan trọng nhất mà bạn sở hữu. Tất nhiên, đó phải là những kỹ năng mà nhà tuyển dụng đang tìm kiếm. Điều này sẽ khiến bạn tạo dấu ấn mạnh mẽ cho nhà tuyển dụng ngay từ ban đầu. Đồng thời thể hiện bạn là người phù hợp với công việc.
Hãy suy nghĩ về những gì họ có thể muốn nghe. Biết đâu trong quá trình bạn chia sẻ, nhà tuyển dụng sẽ thấy hứng thú và bổ sung, đưa ra các đánh giá trực tiếp. Đó không phải là một cuộc giao tiếp hiệu quả hay sao khi có sự tương tác qua lại. Và đồng thời, bạn lại còn được học được nhiều kiến thức hơn nữa.
Không những thế, bạn còn có thể:
Tự đặt ra cho mình một số câu hỏi:Bạn là ai? Tại sao bạn lại lựa chọn và đồng hành cùng doanh nghiệp này? Những kỹ năng và kinh nghiệm chuyên môn nào khiến bạn đạt đủ những tiêu chí của doanh nghiệp/tổ chức này. Những mong muốn nào bạn thật sự mong đợi tại công ty.
Viết ra nội dung và chỉnh sửa: Viết phần giới thiệu của bạn ra giấy bắt đầu bằng các chi tiết cơ bản về bản thân. Sau đó chuyển sang kỹ năng và kinh nghiệm chuyên môn và kết thúc bằng các mục tiêu nghề nghiệp chính. Trong khi thực hiện, nhớ viết một cách ngắn gọn lời giới thiệu bởi nhà tuyển dụng đánh giá một cách tổng quan những gì bạn thể hiện.
Sự luyện tập: Mọi sự luyện tập luôn luôn là cần thiết để giúp cho phần giới thiệu bản thân khi phỏng vấn trở nên thú vị và háp dẫn hơn. Để nhớ các ý chính, bạn có thể viết chúng trong cuốn sổ tay và đem theo bên mình. Trong cuộc phỏng vấn, nó sẽ giúp bạn an tâm hơn. Điều này đồng thời cũng thể hiện bạn là một người chỉn chu và chuyên nghiệp.
Triển khai việc giới thiệu về bản thân
Từng bước giới thiệu chung. Hãy cho nhà tuyển dụng biết bạn là ai một cách chuyên nghiệp. Chẳng hạn, “Tôi là một trong những kỹ sư khoa học máy tính với 10 năm kinh nghiệm quản lý vận hành; phát triển các phần mềm ứng dụng máy tính trong các mô hình công ty vừa và nhỏ”.
Nói về các minh chứng có liên quan đến kinh nghiệm học thuật – trải nghiệm nghiên cứu của bạn. Đặc biệt, hãy thông mình và linh hoạt trong việc đưa ra các kinh nghiệm. Không nên kể một loại mà hãy chọn lọc những kỹ năng tốt nhất, phù hợp nhất.
Chia sẻ về lý do bạn gửi đơn dự tuyển hồ sơ. Có thể nhà tuyển dụng rất quan tâm đến lý do của bạn. Hãy chia sẻ thẳng thắn lý do. Nếu là người tinh tế, bạn hãy lồng ghép các thông tin về những hiểu biết của mình về tổ chức/doanh nghiệp. Nó là mấu chốt giúp tạo ra dấu ấn đặc biệt nhé!.
Cách thể hiện bản thân cũng là một nghệ thuật
Một nụ cười thân thiện với đối phương sẽ tạo ra một cảm giác gần gũi; thể hiện rõ bạn là người mong muốn trao đổi; lắng nghe một cách chân thành. Hãy thật sự thoải mái và đừng quá gò bó trong cuộc phỏng vấn của mình. Bạn chỉ cần mỉm cười và là chính mình. Đừng lo lắng về việc thảo luận các kỹ năng của bạn.
Giao tiếp bằng mắt rất quan trọng trong việc giao tiếp. Và nó cũng được xem là một kỹ năng giap tiếp quan trọng. Vì thế, bạn cần phát huy tối việc giao tiếp bằng mắt để thể hiện sự tự tin. Đừng để việc thiếu tự tin là rào cản ngăn cản bạn. Vì nó sẽ khiến bạn bị đánh giá thấp trong quy trình tuyển chọn của họ.
Một điểm cần đặc biệt lưu ý là bạn đừng quá lan man. Hãy tập trung vào các khía cạnh trọng tâm. Đừng thêm bất cứ điều gì quá xa những nội dung bạn đã lên kế hoạch chia sẻ từ trước. Vì nó có thể khiến lạc đề và giảm hiệu quả tương tác trong cuộc phỏng vấn. Điều này vô tình làm cho phần giới thiệu bản thân khi phỏng vấn trở của bạn trở nên thât bại.
Quan trọng hơn hết, bạn cần giữ một thái độ lạc quan. Đồng thời sẵn sàng cho những phát sinh khó khăn ngoài ý muốn. Bình tĩnh xử lý vì đó có thể là các thách thức của nhà tuyển dụng dành cho bạn.
Đừng đánh giá thấp bản thân, cũng đừng quả tự tin và thể hiện quá nhiều. Thay vào đó hãy tập trung vào những gì mà bạn đã làm tốt.
Thách thức khi giới thiệu bản thân khi đi phỏng vấn
Nhiều thách thức được đặt ra trong chính quá trình giới thiệu bản thân khi phỏng vấn. Việc của ứng viên là cần bình tĩnh để xử lý các thách thức. Bạn không nên hoang mang để rồi cảm thấy bị bế tắc trong chính những thách thức ấy. Hãy có cách ứng xử thông mình, hiệu quả phỏng vấn hầu như đạt mức tuyệt đối. Tuy nhiên, nhiều câu trả lời dường như chỉ tập trung vào việc đào sâu các vấn đề nhạy cảm liên quan đến công việc. Cụ thể, nhiều ứng viên sẽ đề cập đến mức lương và các chế độ thuộc về mặt quyền lợi của nhân viên. Từ đây, các ý kiến khác nhau được bàn luận. Hãy cẩn trọng để không phải mắc phải cấm kỵ khi đi phỏng vấn nhé!
Bạn muốn mình là ai và như thế nào trong 5 năm tới?
Nhiều ứng viên đã trình bày các kế hoạch không một tí liên quan gì đến công việc như: mua nhà, đi du lịch, kinh doanh,…
Hoặc thậm chí, ứng viên bộc lộ nhiều sự cường điệu trong cách dẫn dắt câu chuyện. Chẳng hạn như việc chia sẻ rằng họ sẽ là một người có đam mê với công việc nhiều nhất; làm việc chăm chỉ nhất. Tồi tệ hơn là có nhiều ứng viên chỉ cười trừ vì không biết phải trả lời như thế nào. Vậy đâu là lỗi khi đi phỏng vấn, gây ấn tượng lúc phỏng vấn?
Bạn phải thật sự cẩn trọng trong cách trả lời của mình. Nếu không, bạn sẽ thất bại về vấn đề tri nhận các yêu cầu phản hồi thông điệp. Dù bạn cố tình hay vô tình (thiếu sự trải nghiệm), bạn cũng không nên khiến mình thiếu chuyên nghiệp.
Em mong muốn mức lương bao nhiêu? Theo em tự đánh giá, với năng lực hiện tại thì mức lương cụ thể nào phù hợp với em?
giới thiệu bản thân khi phỏng vấn
Nhiều ứng viên đã đánh giá về mức lương. Họ chê mức lương hoặc đề nghị một mức lương cao hơn. Tất nhiên, câu chuyện về quyền lợi thì bất cứ ứng viên nào cũng đều quan tâm. Nhưng họ cần biết, nếu là một ứng viên thông minh và nhạy bén, ít ai lại “cò kèo” lương với nhà tuyển dụng. Vậy đâu là lỗi khi đi phỏng vấn, gây ấn tượng lúc phỏng vấn?
Một cách phản hồi cấm kỵ khi đi phỏng vấn nữa đó là ứng viên than vãn hoặc đòi hỏi quá nhiều về “giấc mơ doanh nghiệp”. Ví dụ họ muốn có một môi trường làm việc tốt, một người sếp biết quan tâm, các kế hoạch cho sự thăng tiến,… Đây mới thật sự là những gì họ quan tâm.
Chắc chắn nhà tuyển dụng sẽ không hề mong muốn nghe lại những chia sẻ của bạn suy quanh chiếc CV. Đơn giản vì họ đã nghe xem xét và nắm bắt những thông tin chung quanh bạn rồi. Bạn có thể đề cập đến thời gian bắt đầu sự nghiệp; một số công việc đã trải nghiệm và vai trò gần đây nhất của bạn. Nhưng việc lặp lại các khía cạnh sâu như những gì họ thấy trong CV là một điều hoàn toàn không nên.
Tôi đã từng có kinh nghiệm làm việc tại…. và một số trải nghiệm có liên quan khác như… Đây là công việc tôi đam mê và định hướng tương lai, tôi muốn trở thành….
Và tôi hy vọng môi trường ở đây sẽ giúp tôi phát huy hết năng lực của mình một cách tốt nhất. Tôi là một người có tính cách…
Tôi hy vọng với những gì mình chia sẻ, mình có thể may mắn trở thành một mảnh ghép của công ty.
Dựa trên những mẫu giới thiệu bản thân bằng tiếng Việt này, bạn có thể chỉnh sửa để phù hợp hơn với hoàn cảnh và công việc ứng tuyển để tạo sự thuyết phục với nhà tuyển dụng.
Mẫu giới thiệu bản thân tiếng Anh
Nếu tham gia ứng tuyển vào các vị trí thuộc các tập đoàn đa quốc gia; các công ty lớn đòi hỏi vốn anh ngữ, các bạn có thể tham khảo mẫu giới thiệu dưới đây:
Hi good morning. My name is… I’ve been working as a Marketing Staff for 3,5 years. At my current job in planning, developing and implementing effective marketing communication campaigns. I also write content for all marketing collateral, including brochures, letters, emails and websites.
Xin chào. Tôi tên là… Tôi đã làm nhân viên Marketing được 3 năm. Tại công việc của tôi là lênkế hoạch, phát triển và thực hiện các chiến dịch truyền thông tiếp thị hiệu quả. Tôi cũng viết nội dung cho tất cả các bài quảng cáo, email marketing và các trang web.
I’m known as a detail-oriented and good communicator employee. I never miss deadlines and can take multiple tasks at once. My supervisor aslo appreciates my enthusiasm for the job.
Tôi được đánh giá mà một người có khả năng giao tiếp và chú ý đến chi tiết. Tôi không bao giờ trễ hạn và có thể làm việc đa nhiệm cùng lúc. Người quản lý cũng đánh giá cao sự nhiệt tình của tôi đối với công việc.
“With my experience, I’m looking for an opportunity to take you an open job. I hope to work for an organization like yours; and contribute to improve the environment, which is something I’m interested in.
Với các kinh nghiệm đã có được, tôi đã ứng tuyển vào vị trí… Tôi hi vọng sẽ được hợp tác với công ty và góp phần đưa công ty ngày càng phát triển tốt hơn.
Lời kết
Giới thiệu bản thân khi phỏng vấn là rất cần thiết và không phải ai cũng có thể ghi điểm tuyệt đối với nhà tuyển dụng. Vấn đề giới thiệu bản thân cho thấy tầm quan trọng lớn của kỹ năng giao tiếp. Vì vậy, bạn hãy thật sự chú tâm đến việc rèn luyện kỹ năng này.
Có thế, quá trình tạo dấu ấn thông qua việc giới thiệu bản thân khi phỏng vấn sẽ đạt thành công hơn. TopDev hi vọng thông qua bài viết, các bạn sẽ có những thông tin bổ ích; bổ sung hành trang chắc chắn hơn trong việc ghi điểm trong lòng nhà tuyển dụng trong buổi đầu chạm mặt. Chúc các bạn sẽ chính phục những nhà tuyển dụng một cách thành công.
Bài viết được sự cho phép của tác giả Tô Thị Vân Anh
Chúng ta đều biết rằng, trong mỗi môi trường phát triển phần mềm, dữ liệu là một phần không thể thiếu. Khi phát triển, chúng ta thường lưu trữ dữ liệu trực tiếp trong các file chương trình, mỗi khi có sự thay đổi nào đó liên quan trực tiếp đến dữ liệu trong các file đó thì bắt buộc phải thực hiện biên dịch code và kiểm tra lại các kết quả biên dịch đó.
Vậy thì vấn đề đặt ra ở đây là, nếu như dữ liệu cần phải thay đổi nhiều lần, liên tục và hàng ngày thì chúng ta sẽ thực hiện thay đổi từng phần theo mỗi lần thay đổi đó và rồi lại biên dịch lại? Chỉ nghĩ thôi đã thấy khá là mệt mỏi rồi, chưa kể đến việc biên dịch lỗi và ngồi mần lại thì đúng là ác mộng.
Thế nên trải qua rất nhiều kinh nghiệm xương máu, người ta và người tây đã rút ra được rằng, việc phát triển code tốt nhất là nên tách rời với phần dữ liệu để khi hoạt động chúng không ảnh hưởng đến nhau đến các file chương trình. Đưa dữ liệu ra ngoài các file code của chương trình chính là cách duy nhất để làm việc đó, chúng ta có thể đưa dữ liệu vào trong các file excel, property file, config file, Json file, hay các XML file…
1. Về Apache POI
Apache POI giúp Java/ các công nghệ liên quan đến Java có thể đọc và ghi các file excel trên nhiều nền tảng khác nhau. Sử dụng Apache POI chúng ta có thể thực hiện các thao tác đọc, ghi trên cả định dạng file .xls hay .xlsx. Apache POI là một công cụ mã nguồn mở được cung cấp bởi apache.
Apache POI sẽ rất hữu ích khi thực hiện sửa đổi một lượng lớn nội dung dữ liệu. Dưới đây là các bước thực hiện download và sử dụng Apache POI nhé.
Chúng ta có thể sử dụng tích hợp Apache POI trong Selennium Webdriver để thực hiện đọc và ghi file excel và tạo một data drivent framework.
Các bước để thực hiện tích hợp Apache POI với project Selenium webdriver:
1. Mở project selenium webdriver trên Eclipse
2. Nhấn chuột phải vào tên project và chọn Properties > Java build path
3. Nhấn vào nút Add External jars
4. Thực hiện điều hướng đến thư mục chứa Apache POI vừa giản nén, chọn các file jars trong thư mục chính, các file jar trong thư mục lib, và trong thư mục ooxml-lib:
5. Nhấn nút OK > Hoàn tất việc thêm Apache POI vào trong project.
6. Để kiểm tra việc thêm này đã thành công hay chưa, ta có thể gõ thử từ khóa Workbook sau đó nhấn tổ hợp Ctrl + Space để xem gợi ý, nếu nó hiển thị tương tự như hình phía dưới thì bạn có thể sử dụng thoải mái nhé!
3. Một số thuật ngữ quan trọng thường dùng trong Apache POI
Thư viện của Apache POI xoay quanh 4 từ khóa quen thuộc trong một file excel:
Workbook: 1 workbook đại diện cho 1 file excel
Sheet: 1 workbook có thể bao gồm nhiều sheet, chúng ta có thể truy cập vào các sheet này dựa theo tên hoặc chỉ số (index) của sheet đó trong workbook.
Row: như tên gọi của nó, đại diện cho một hàng của 1 sheet.
Cell: một cell sẽ đại diện cho một ô trong sheet.
4. Đọc dữ liệu file excel với Apache POI
Trước tiên chúng ta sẽ cùng thực hiện đọc dữ liệu từ 1 file excel và in ra màn hình nội dung đó.
1. Tạo project, và class trong Eclipse
2. Tạo 1 file excel có tên là testData.xlsx, có 1 sheet tên là Sheet1 và nội dung của ô A1 = Hello. Lưu lại trong một thư mục ở máy tính của bạn.
3. Tạo một đối tượng cho FileInputStream chứa đường dẫn đến nơi lưu trữ file data excel:
4. Tạo đối tượng workbook bằng cách sử dụng method create() trong WorkbookFactory class và truyền vào đó tham số đầu vào là đối tượng fis file excel ta vừa tạo ở bước 3:
Workbook wb = WorkbookFactory.create(fis);
5. Tạo đối tượng sheet từ đối tượng workbook (wb) vừa tạo ở bước 4, ở đây ta sẽ truyền tham số đầu vào chính xác tên của sheet trong file excel ta đã chuẩn bị ở bước 2 là Sheet1:
Sheet sheet = wb.getSheet("Sheet1");
6. Tạo đối tượng Row từ sheet vừa có ở bước 5, tham số đầu vào là chỉ số hàng – bắt đầu từ 0
Row row = sheet.getRow(0);
7. Ta cũng có thể tạo 1 đối tượng cell từ đối tượng row ở bước 6, tham số đầu vào ở đây cũng là chỉ số cell:
Cell cell = row.getCell(0);
8. Để lấy ra giá trị của ô trong file excel ta có thể gọi method getStringCellValue() trong cell class:
System.out.println(cell.getStringCellValue());
5. Ghi dữ liệu vào file excel trong Selenium Webdriver
Ta cũng thực hiện các bước 1, 2, 3, 4, 5, 6 tương tự như thao tác đọc dữ liệu để khởi tạo đầu vào file excel liên quan đến: Workbook, sheet, row.
10. Method write() sẽ giúp chúng ta thực hiện lưu thông tin giá trị vừa gán vào trong file với đối tượng fos:
wb.write(fos);
Vậy là xong rồi đó :D, ngoài ra các bạn cũng có thể tham khảo thêm tại đây nhé.
Trên đây là mấy bước và mấy hàm cơ bản để chúng ta làm quen với Apache POI và Excel trong Selnium. Và tất nhiên với những bài toán cụ thể thì nó sẽ chẳng thể nào đơn giản từng dòng, từng chữ như ví dụ trên này được. Nó có thể có rất nhiều các dòng, cột dữ liệu, yêu cầu ta cần phải xử lý tỉ mỉ, chi tiết hơn rất nhiều.
Để đọc thì đơn giản là ta sẽ cần sử dụng vòng lặp for với biến i,j tương ứng cho hàng và cột cứ thế thì sẽ ra thôi. Kaka. Nói thì dễ nhưng làm rồi mới thấy dễ hơn =)))
Thông thường, đọc và ghi dữ liệu file excel mình sẽ viết thành một hàm và cho nó vào 1 file common nào đó, khi nào cần thì sẽ gọi ra và dùng thôi.
Các bạn có thể tham khảo đoạn phía dưới này về hàm đọc và ghi dữ liệu excel của mình, nếu có vấn đề gì cần trao đổi hay góp ý các bạn thoải mái để lại phía dưới bình luận nhé!
Khi nói đến hệ điều hành dành cho máy tính, nhiều người sẽ nghĩ ngay tới Windows – nó như là một suy nghĩ mặc định trong đầu vậy.
Mặc dù được bán với giá khá cao so với thu nhập bình quân của nhiều Quốc gia, nhưng Windows lại đang là hệ điều hành phổ biến nhất thế giới, ít nhất là đối với người dùng cơ bản.
Còn Linux thì sao, trái ngược hoàn toàn với Windows, Linux hướng tới người dùng hơi nâng cao hơn một tí, kho ứng dụng khổng lồ, cộng đồng hỗ trợ luôn có mặt trên toàn thế giới, và hơn hết, nó miễn phí 100%.
Đây là một cuộc chiến không hồi kết đối với 2 hệ điều hành nổi tiếng này trong việc “lôi kéo” người dùng. Vậy có gì khác biệt giữa 2 hệ điều hành này? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này nhé.
#1. Về lịch sử phát triển
Linux được bắt đầu như một dự án cá nhân của một sinh viên người Phần Lan tên là Linus Torvalds, mục đích ban đầu là để tạo ra một nhân hệ điều hành miễn phí hoàn toàn.
Linux miễn phí và là mã nguồn mở ngay từ khi mới ra đời – năm 1991. Linux bắt đầu như một dự án “chỉ làm cho vui”, nhưng nó đã nhanh chóng trở thành một trong những dự án mã nguồn mở lớn nhất từ trước đến nay.
Ban đầu, Linux theo giấy phép riêng của nó có hạn chế về hoạt động thương mại. Sau đó, dự án đã thông qua GPLv2. Tìm hiểu thêm về loại giấy phép này trên Wikipedia tại đây !
Còn đối với Windows, phiên bản Windows 1.0 của Microsoft được phát hành vào năm 1985 và không giống như Linux, nó là một sản phẩm mã nguồn đóng hoàn toàn được Microsoft bán theo chương trình cấp phép.
#2. Về xử lý, can thiệp vào mã nguồn
Có lẽ, điểm khác biệt lớn nhất của 2 mã nguồn này là khả năng truy cập và chỉnh sửa mã nguồn. Bạn có thể chỉnh sửa, thay đổi các tính năng đối với Linux, nhưng với Windows thì không.
Linux được cấp phép GNU Public License nên nó cho phép người dùng truy cập mã nguồn đến tận lõi của hệ điều hành.
Theo Wikipedia thì: GNU General Public License, viết tắt GNU GPL hay chỉ GPL) là giấy phép phần mềm tự do được sử dụng rộng rãi, đảm bảo cho người dùng cuối tự do chạy, nghiên cứu, sửa đổi và chia sẻ phần mềm.
Còn đối với hệ điều hành Windows thì chắc chắn là không rồi, chỉ trừ khi bạn là kỹ sư trong nhóm phát triển hệ điều hành Windows, còn không thì bạn không có quyền truy cập vào mã nguồn này. Nó được bảo mật vô cùng cẩn thận !
Tính mở của Linux có cả ưu điểm và nhược điểm, một mặt nó cho phép người dùng chỉnh sửa, nâng cấp các phần mềm và hệ điều hành nhanh hơn.
Nhưng mặt khác, nó cũng cho phép các nhà phát triển truy cập vào mã nguồn, nhiều kẻ xấu sẽ tìm kiếm và lợi dụng các lỗ hổng để phát tán các phần mềm độc hại đến người dùng.
Trên Windows, điều này là không thể, nhưng không có nghĩa là nó an toàn 100% nhé. Một lần nữa, với một người sử dụng bình thường thì họ thường không quan tâm đến việc liệu họ có xem được mã nguồn tạo nên hệ điều hành mà họ đang sử dụng hay không.
Mà quan trọng nhất đối với họ vẫn là trải nghiệm sau khi đã hoàn tất việc cài đặt tất tần tật, tít tìn tịt các chương trình, phần mềm… mà hỗ trợ cho công việc của họ thôi. Có đúng không ạ.
#3. Về vấn đề bản quyền
Như mình đã đề cập ở trên, Linux cực kỳ dễ tiếp cận từ góc độ nhà phát triển, trong khi Windows thì nghiễm nhiên là không.
Nhưng để có quyền truy cập mã nguồn Linux thì phải được cấp phép. Cấp phép nghĩa là phần mềm sẽ có quyền được phân phối.
Với giấy phép GPL của Linux, bạn có thể tự do sửa đổi OS đó, tái xuất bản nó và thậm chí bạn có thể thương mại nó, miễn là bạn cung cấp mã nguồn của nó, không giữ bí mật cho riêng mình.
Với giấy phép GPL, bạn cũng có thể tải xuống bản sao của Linux và cài đặt nó trên bao nhiêu máy tùy ý. Giấy phép này là gì thì mình đã để link đến Wikipedia ở phần #1 của bài viết này rồi nhé. Nếu thích bạn có thể tham khảo qua.
Còn giấy phép của Microsoft thì sẽ rất khác với giấy phép này, tức là bạn không thể sửa đổi mã nguồn vì Microsoft không bao giờ công bố mã nguồn của hệ điều hành này cả. Cần câu cơm của họ mà.
Thứ hai nữa, khi bạn mua bản quyền Windows (đối với các cá nhân) thì bạn chỉ sử dụng giấy phép đó cho cho một máy tính duy nhất. Còn các giấy phép dành cho máy doanh nghiệp thì khác, bạn có thể sử dụng 1 key để kích hoạt cho nhiều máy tính. Nhưng tất nhiên loại giấy phép này sẽ đắt hơn rất nhiều.
#4. Về ứng dụng – phần mềm
Với hầu hết các bản phối của hệ điều hành Linux, bạn có một trung tâm để cài đặt các ứng dụng. Điều này giúp bạn dễ dàng thêm các ứng dụng mới và xóa chúng đi khi không còn dùng đến.
Tính năng quản lý gói của Linux cực kỳ hữu ích vì bạn có thể tìm kiếm và cài đặt ứng dụng trực tiếp mà không cần phải dò tìm trên mạng. Và tất nhiên, tất cả đều miễn phí 100%.
Trước đây, Windows không có kho ứng dụng của riêng mình. Với Windows, bạn phải lên Google và tìm kiếm những phần mềm của bên thứ 3 để cài đặt.
Sau đó đến quá trình tải về máy rồi chạy file thực thi *.exe để tiến hành cài đặt. Sau khi ứng dụng đã được cài đặt, bạn cũng không biết nó đã thay đổi bao nhiêu tập tin hệ thống.
Vì đâu phải phần mềm nào cũng an toàn đâu, với nhiều người dùng không có kinh nghiệm, họ rất dễ cài phải các phần mềm rác, phần mềm độc hại…
Tuy nhiên, kể từ phiên bản Windows 8.x, Microsoft đã có kho ứng dụng riêng của mình – nó mang tên Windows Store, mặc dù còn hạn chế so với Linux nhưng nói chung là nó cũng cung cấp khá nhiều phần mềm (cả miễn phí và trả phí), đáp ứng nhu cầu cơ bản của người dùng.
À, còn một điều nữa mà mình muốn chia sẻ với các bạn:
Đối với Windows thì Registry như là xương sống của con người vậy. Nó là một cơ sở dữ liệu chủ cho toàn bộ các thiết lập của người dùng nằm trên máy tính. Registry nắm giữ thông tin ứng dụng, mật khẩu người dùng, thông tin thiết bị… và rất rất nhiều thứ khác nữa.
Còn đối với Linux thì không, Linux không có Registry. Vâng, các bạn không nghe nhầm đâu.
Các ứng dụng trên Linux sẽ lưu thiết lập trên cơ sở chương trình, dưới sự phân cấp người dùng. Điều này cũng có nghĩa là những cấu hình của Linux sẽ ở dạng mô đun. Bên dưới là cây hệ thống file trên Linux !
#5. Về đối tượng sử dụng
Đối tượng sử dụng của các hệ điều hành này là ai?
Mình không thiên vị hay có ý chê bai nhé, nhưng Linux chủ yếu dành cho những người dùng máy tính thành thạo, những người biết họ đang làm gì.
Người dùng Linux trung thành với nền tảng của họ đến mức họ có xu hướng trở thành những fan trung thành của nền tảng này ◔◡◔
Điều này chủ yếu là do bạn có toàn quyền kiểm soát hệ thống của mình và một khi bạn đã sử dụng quen Linux thì bạn sẽ muốn chuyển sang hệ điều hành Windows nữa.
Đối với người dùng bình thường, họ chỉ muốn duyệt web, xem video và viết email,… Tất cả đều có thể được thực hiện trên Windows mà không cần phải có kiến thức sâu về xử lý hệ điều hành.
Thành thật mà nói, nếu một người dùng bình thường chuyển từ hệ điều hành Windows sang Linux, khả năng cao là họ sẽ bị lạc lối, choáng ngợp và muốn quay về Windows ngay lập tức.
Vâng, đó là điểm khác biệt lớn giữa một người dùng máy tính phổ thông và một người dùng máy tính chuyên nghiệp…
Nhưng nói gì thì nói, Microsoft đã quá khôn khéo để lôi kéo người dùng. Một phần là vì giao diện đồ họa rất dễ tiếp cận, mọi thao tác, mọi hành động đều hiện sờ sờ trước mắt.
Một phần nữa là họ có vẻ như cố tình để người dùng cá nhân sử dụng chùa Windows thì phải. Chứ mình nghĩ nếu muốn quản lý chặt vấn đề bản quyền thì họ đủ khả năng để làm mạnh tay hơn.
Mục đích của việc này thì có lẽ các bạn đã thừa biết, nó giúp tạo ra một cộng đồng người dùng Windows đông đảo. Mà một khi đã có một cộng đồng lớn mạnh rồi thì làm cái gì cũng dễ. Microsoft chủ yếu thu tiền từ các doanh nghiệp, các cơ quan.. là chủ yếu.
#6. Về khả năng tương thích phần cứng
Vâng, khoảng thời gian từ năm 2005 trở về trước thì Linux đúng là không có cửa gì để so sánh với Windows cả.
Bằng chứng rõ ràng nhất là các nhà sản xuất chỉ coi Linux là một lựa chọn bổ sung thêm mà thôi, có nghĩa là việc bạn cài đặt driver để hỗ trợ cho các phần cứng trên Linux là rất khó khăn.
Nhưng bây giờ tình thế đã khác rồi, cộng đồng LinuxOS đã rất lớn mạnh và đã có thể cạnh tranh sòng phẳng với Windows. Và các nhà phát triển cũng đã đặt vị thế của Linux ngang hàng với Windows.
#7. Về bảo mật
Vâng, một kiến trúc đóng hoàn toàn và được phát triển bởi một công ty phần mềm hàng đầu thế giới – Windows thực sự là một hệ điều hành rất bảo mật.
Nếu bạn kết hợp với một số phần mềm bảo mật bản quyền của bên thứ 3 khác nữa như Kaspersky, ESET, BIT… thì thực sự là rất tuyệt vời.
Tuy nhiên, vì Windows là quá phổ biến nên nó sẽ là mục tiêu hàng đâu của các hacker. Và một điều nữa là do trình độ của người dùng, nhiều người dùng rất chủ quan trong việc sử dụng máy tính, thường xuyên sử dụng các phần mềm lậu, Windows bẻ khóa thì chả bị hack… trách ai bây giờ 😀
=> Nói tóm lại thì mình vẫn đánh giá rất cao sự bảo mật của hệ điều hành Windows.
Còn Linux thì sao nhỉ?
Vâng, mặc dù là một hệ điều hành mã nguồn mở nhưng tính bảo mật của Linux là không thể bàn cãi. Bạn có thể tham khảo qua bài viết bên dưới đây, đã có một bài viết về vấn đề này rồi.
Linux hiện tại đang được các tổ chức doanh nghiệp sử dụng để làm máy chủ và hệ điều hành cho mục đích bảo mật tại các tập đoàn công nghệ như Google, Facebook, Twitter… trong khi đó, Windows chủ yếu được sử dụng bởi các người dùng cá nhân, các doanh nghiệp, hay là game thủ…
Mặc dù mọi người có thể nghĩ rằng Linux không có đường dây hỗ trợ riêng, nhưng vì nó có một cộng đồng người dùng lớn nên bạn có thể dễ dàng tìm thấy giải pháp cho mọi vấn đề của mình thông qua các diễn đàn, tìm kiếm trên Google và nhiều trang web chuyên về Linux.
Và nếu bạn là một doanh nghiệp phụ thuộc nhiều vào Linux thì bạn cũng có thể nhận được hợp đồng từ các công ty như Red Hat hay là Novell.
Nhưng nói gì thì nói, khâu hỗ trợ vẫn là một điểm yếu chí mạng của Linux. Vì bạn cứ thử hình dung mà xem, với người dùng cá nhân thì OK, không sao cả. Nay không sửa được thì mai sửa, vội đi đâu.
Nhưng với doanh nghiệp thì khác, họ cần ngay lập tức, họ không đủ thời gian để chờ đợi. Làm thế có mà sập tiệm sớm..
Còn Windows là một sản phẩm thương mại hoàn toàn nên chắc chắn về khâu support sẽ tốt hơn, họ cung cấp cho bạn sự hỗ trợ tận tình đến tận răng. Tất nhiên điều này chỉ xảy ra khi bạn mua giấy phép bản quyền từ họ. Còn bạn xài Windows lậu thì ráng mà chịu đi ᵔᴥᵔ
#9. Về khả năng hỗ trợ game
Vâng, tính đến năm 2018 thì theo số lượng thống kê. Tổng số lượng game hỗ trợ cho Windows mà nền tảng phân phối game Steam có được là hơn 20.000 tựa game.
Trong khi đó, Linux chỉ hỗ trợ gần 5000 game và đang tăng lên từng ngày.
=> Vâng, nói chung về khoản chơi game thì rõ ràng rồi, Linux xách dép cho Windows. Chấm hết ^^
#10. Kết luận
Nhìn chung, nếu bạn chỉ là một người dùng bình thường, không quan tâm đến cách hoạt động bên trong của hệ điều hành thì Windows là một sự lựa chọn phù hợp nhất dành cho bạn.
Còn nếu bạn là một kỹ sư hoặc là một người dùng máy tính chuyên nghiệp thực thụ, thậm chí là một người đam mê với các dòng lệnh, muốn toàn quyền kiểm soát hệ thống thì Linux là một lựa chọn tuyệt vời dành cho bạn.
Okay, trên đây là những góc nhìn rất khách quan của mình về Windows và Linux. Còn bạn thì sao, bạn thấy điểm khác biệt lớn nhất giữa Windows và Linux là gì? bạn thích Windows hay Linux?
Appium là một công cụ kiểm thử tự động cho các ứng dụng UI trên thiết bị di động. Appium cho phép kiểm thử các ứng dụng Native, Hybrid hay Web, trên các thiết bị vật lý thực (physical device) và cả thiết bị ảo (simulator/emulator).
Appium được phát triển từ nền tảng hệ thống Selenium (kế thừa các đối tượng, cấu trúc và cú pháp) nên Appium có khả năng làm việc với nhiều nền tảng khác nhau, iOS và Android, trên cùng một mã kiểm thử (cross-platforms).
Khả năng cross-platforms của Appium đến từ việc sử dụng các thư viện của Appium, thông qua một chương trình server, chuyển các câu lệnh sử dụng trong mã kiểm thử thành các lệnh UIAutomation (với iOS) hay UIAutomator (với Android) để tương tác với thiết bị.
Các thành phần của Appium
Chương trình máy chủ Appium – Appium Server: là một chương trình tạo lập một máy chủ Java, dùng để chuyển các lệnh trong mã kiểm thử thành các lệnh có thể tương tác với thiết bị: UIAutomation với iOS hay UIAutomator với Android.
Hệ thống thư viện Appium: Cũng như Selenium, Appium có một hệ thống thư viện dùng để nhận diện và tương tác với các đối tượng UI trên ứng dụng di động. Hệ thống thư viện Appium được cung cấp cho nhiều ngôn ngữ lập trình khác nhau như C#, Java, Python… để kỹ sư kiểm thử tự động có thể chọn ngôn ngữ lập trình quen thuộc cho việc tự động hóa kiểm thử.
Kết nối thiết bị Android với máy tính
Để kết nối thiết bị di động Android với máy tính để thực thi kiểm thử với Appium, chúng ta cần phải thiết lập thiết bị di động ở trạng thái dành cho nhà phát triển: Developer options.
Kiểm tra Developer Options trên thiết bị di động
Chúng ta có thể vào phần Settings của thiết bị, nếu có mục Developer options thì có nghĩa thiết bị đã được thiết lập trạng thái dành cho nhà phát triển.
Trường hợp nếu không có mục Developer options, chúng ta có thể theo các bước sau để thiết lập trạng thái nhà phát triển:
Vào phần Settings > About Phone
Tìm và nhấn vào mục Build Number vài lần
Trở lại phần Settings để kiểm tra mục Developer options đã được thêm vào.
Hiện tại, vì Android SDK đã được tích hợp sâu vào trong Android Studio, trang chủ chính thức của Andoird DSK đã không cho tải về bản SDK Stand-alone với màn hình giao diện GUI, mọi người có thể tải bản SDK Stand-alone ở đây.
Ở đây, mình sử dụng Appium cho việc tự động chơi một game đơn giản trên Android. Game này yêu cầu người chơi tính toán nhanh trong vòng 2 giây và chọn câu trả lời “đúng” hay “sai” dựa trên kết quả.
Link game: https://play.google.com/store/apps/details?id=com.tran.pat.mathpluser
Athenz là open source tập hợp các dịch vụ và thư viện hỗ trợ ủy quyền dựa trên vai trò (RBAC) cho các trường hợp sử dụng và cấu hình (ủy quyền tập trung) cũng như các trường hợp sử dụng / cấp phép (phân quyền). Và được cung cấp LICENSE-2.0 bởi Yahoo Inc từ 2016.
Athenz cung cấp cả chức năng của một hệ thống tập trung và một chứng chỉ và hệ thống phân tán dựa trên IP để xử lý việc thực thi trên hộp.
Bạn nhận được những lợi thế sau đây bằng cách sử dụng Athenz:
Hồ sơ bảo mật dựa trên dịch vụ: Định nghĩa bảo mật tự động chuyển xuống các máy chủ trong dịch vụ.
Cung cấp động: Quy mô nhanh hoặc di chuyển khối lượng công việc xung quanh mà không cần sự can thiệp thủ công (không cấu hình IP).
Nguồn chứng thực duy nhất: Hồ sơ dịch vụ hợp nhất phục vụ các triển khai bảo mật khác nhau, bao gồm hỗ trợ cho các thực thể không phải người dùng.
Tự phục vụ: Cấu hình thời gian thực và thực thi kiểm soát truy cập dựa trên tài nguyên (khả năng quản lý động).
Quan trọng hơn, các kỹ sư sử dụng Athenz và không xây dựng hệ thống kiểm soát truy cập dựa trên vai trò riêng của họ mà không có cửa hàng trung tâm và thường dựa vào ACL mạng và cập nhật thủ công.