Home Blog Page 225

Sử dụng Google Assistant để tạo ra các Interactive Games

Sử dụng Google Assistant để tạo ra các Interactive Games

Thông qua chủ đề này, bạn sẽ biết được cách Google Assistant có thể giúp lập trình viên build các Interactive Games như thế nào? Hiện tại, Google Assistant có thể hỗ trợ làm việc với 19 ngôn ngữ và hơn 80 quốc gia, có mặt trên hơn 1 tỷ thiết bị do đó bạn sẽ dễ dàng hơn cũng như có nhiều cách để làm việc với các thiết bị hơn.

interactive games
Sự phổ biến của Google Assistant giúp công việc thuận lợi hơn

Tổng quan về Google Assistant và Interactive Games

Mỗi ngày chúng ta sử dụng và tương tác với nhiều thiết bị thông minh khác nhau với nhiều cách khác nhau. Dựa vào kết quả nghiên cứu được thực hiện bởi AoGDevs, phần lớn người dùng sử dụng các thiết bị thông minh cho âm nhạc và các hoạt động thường nhật như cập nhật thông tin thời tiết,… Nhưng cũng có một lượng lớn người dùng sử dụng các thông tin này cho những trò đố vui hay để chơi game. Trong đó, 55% người dùng sử dụng Google Assistant cho những câu hỏi vui và 20% người dùng chơi games.

  Vừa học vừa chơi! Top 15+ game lập trình miễn phí
  7 game miễn phí giúp bạn nâng cao kỹ năng lập trình

Google Assistant tạo ra hướng đi mới cho Interactive Games

Smart Display ra mắt năm 2019 và trong suốt năm này, tỷ lệ những gia đình có ít nhất một thiết bị smart display đã tăng lên gấp 4 lần. Vậy có những games gì trên Assistant ngày nay? 2 năm trước chúng ta tiếp cận với voice game trên Assistant. Nó giúp tạo ra những trải nghiệm mang tính tương tác cao hơn, bằng cách tận dụng các lợi thế mà Google Assistant mang lại nhờ hiểu được những gì mà người dùng nói. Sự hấp dẫn và thú vị chính là cách mà những games này tạo được sự thành công trên thị trường.

Nhờ sự phổ biến của smart display, các lập trình viên cũng bắt đầu build những game mới như Guess the Drawing, Trivia Crack, Who wants to be a Millionaire,…

Xem thêm Một ngày làm việc của Google Product Manager

Với Guess the Drawing, bạn có thể chơi game với hàng trăm bức ảnh động đầy hấp dẫn ở chế độ xem chậm. Trong khi đó nhờ Trivia Crack, bạn có thể chơi game mà vẫn có thêm kiến thức với bộ câu hỏi và câu trả lời về các chủ đề như lịch sử, mỹ thuật, giải trí và khoa học. Với Who wants to be a Millionaire, người tham gia sẽ trả lời một bộ câu hỏi để chinh phục mức giải thưởng cao nhất là 1 triệu USD, đồng thời bạn cũng có thể sử dụng các quyền trợ giúp để tham gia cuộc chơi này.

Interactive Canvas là gì và hoạt động như thế nào?

Interactive Canvas là một API đóng vai trò quan trọng trong việc tạo ra các flood animation và tối ưu hóa trải nghiệm người dùng khi chơi game, bằng cách kiểm soát mức độ hiển thị khi làm việc với các ngôn ngữ HTML, CSS, JavaScript và web assembly. Dựa vào khả năng và sự hiểu biết sâu sắc bản chất vấn đề, các lập trình viên có thể phát triển các interactive games hay ho hơn với âm thanh và hình ảnh sinh động.

Interactive Canvas làm việc ra sao?

  • Lifecycle of a conversational action: Web service có thể được sử dụng để cung cấp để tạo ra các API calls hoặc kiểm tra database.
  • Web service yêu cầu thiết bị tìm nạp web app. Khi bạn nói chuyện trên thiết bị, thiết bị sẽ gửi qua âm thanh với những gì bạn đã nói và xử lý để trả về yêu cầu. Dữ liệu sẽ được sử dụng để phân tích và phản hồi yêu cầu.
  • Update web app ngay trên thiết bị: Trong web app, Interactive Canvas API sẽ được phân tích và sau đó website hiển thị trên thiết bị. Vì user có thể tương tác trực tiếp trong quá trình sử dụng nên bạn có thể update and request data giữa server và khách hàng. Đây cũng là mức độ cao nhất mà nó có thể làm được.
  • Fulfillment và web app logic: Hiện tại, Canvas đang hỗ trợ trên các thiết bị smart display và điện thoại android. Do đó, trước khi bạn gửi một phản hồi về thiết bị, hãy kiểm tra xem thiết bị của khách hàng có được Canvas hỗ trợ hay không. Khi dùng bạn phải sử dụng một thư viện mới là Node.js Client library. Class này có 2 thuộc tính: URL và data. Nếu bạn muốn gửi một Canvas response lần đầu tiên cần phải có một URL. Điểm hay ho của nó là giúp bạn giải quyết được tình trạng của web app và đảm bảo về các vấn đề bảo mật.

Chuyện gì xảy ra với khách hàng sau khi nhận được phản hồi từ Canvas?

Web app là 1 trang web hiển thị trên thiết bị của khách hàng. Nó được build chủ yếu bằng 2 ngôn ngữ là HTML và JavaScript. Khi web app closed cũng đồng nghĩa với việc nó đang khởi tạo một thư viện Canvas JavaScript. Thư viện Canvas JavaScript xử lý các phản hồi từ server và cũng tạo ra các request đến thiết bị. Bạn cũng có thể build web app bằng cách sử dụng các JavaScript framework phổ biến như React.

Cá nhân tôi đề xuất các dev nên sử dụng Single Page Application (SPA) vì nó có thể tránh được sự phức tạp và vẫn đảm bảo một giao diện đơn giản cho người dùng. Là một phần của web app, interactive canvas library sẽ được nhập and khởi tạo trong web app. Sau đó, bạn sẽ được truy cập vào phiên bản interactive canvas, cho phép giải quyết các Canvas response bằng cách sử dụng bản update callbacks ở những phương thức đã có sẵn.

interactive games
SPA giúp hỗ trợ tạo giao diện dễ dàng hơn

Làm cách nào để xử lý các phản hồi từ server ở phía khách hàng?

Điều này có thể được thực hiện thông qua lệnh calling send text query trên interactive canvas object. sendtextQuery giúp chuỗi giá trị của người dùng có kết quả chính xác hơn. Đây được xem là cách rất hiệu quả trong quá trình làm việc với server cũng như giải quyết các vấn đề phát sinh.

Thêm vào đó, để gửi data từ server bằng cách sử dụng send text query, chúng ta cũng có thể gửi thêm state đến server bằng lệnh setCanvasState vào JSON object. Nó cực kỳ hiệu quả khi bạn muốn xem trạng thái của yêu cầu trên web app to fulfillment.

Client và server sẽ tương tác với nhau ra sao?

Design Principles

Voice forward

Khi build các interactive games, bạn cần phải đảm bảo các tin nhắn có nội dung tương tự một cuộc trò chuyện chứ không phải là những câu mệnh lệnh. Hãy nghĩ về trải nghiệm của chính bạn khi chơi game khi phải đọc những dòng yêu cầu xem? Chắc chắn người xem sẽ có thể thấy khó chịu và nó không phù hợp với nhiều đối tượng khác nhau.

Tận dụng hình ảnh

Sử dụng nhiều hình ảnh sẽ khiến cho interactive game trở nên thú vị và hấp dẫn hơn. Các hình ảnh sẽ khiến game trông sinh động hơn và cho khách hàng thấy được đâu là tâm điểm trong giao diện người dùng. Họ sẽ biết được mục đích tương tác của mình là gì. Với các voice game, bạn nên tận dụng lợi thế hình ảnh có thể giúp trải nghiệm của người dùng trở nên đa dạng hơn.

  10 Add-on Google Sheets phải có dành cho các Recruiters

Optimize Display

Tối ưu hóa hiển thị và thiết kế giao diện cũng là một phần quan trọng. Sử dụng kích thước phông chữ tối thiểu là 32pt cho văn bản chính như tiêu đề và kích thước 24pt cho văn bản phụ như đoạn mô tả hay các đoạn văn bổ sung được xem là lựa chọn hợp lí.

Local Multiplayer

Đối với các trò chơi nhiều người chơi, sáng tạo các icons hay những chức năng cho nhiều người cùng tương tác chắc chắn sẽ giúp game được yêu thích hơn.

Xử lý lỗi

Sử dụng các đề xuất về âm thanh hoặc hình ảnh rõ ràng nếu người dùng gặp khó khăn

Tận dụng SSML và thư viện âm thanh được cung cấp bởi Google

SSML hay còn được gọi là Speech Synthesis Markup Language. Nếu bạn là một web developer, bạn chỉ cần xem SSML là một text, thực tế SSML còn có thể chuyển đổi âm thanh bằng cách chuyển các đoạn văn bản thành giọng nói. Nhờ đó nó cũng cho phép bạn cung cấp phụ đề cho các video,…

Tìm hiểu thêm về Parallel Media Tag bằng link dưới đây: developers.google.com/assistant/conversational/ssml

Sound Library hiện nay cũng là một open source được cung cấp bởi Google mà bạn có thể tận dụng: developers.google.com/assistant/tools/sound-library

Hiện đang có những loại games nào được build?

World Games được sáng tạo dưới dạng các câu hỏi đố và người chơi có thể trả lời trực tiếp bằng giọng nói.

Multiplayer Games là các loại game cho phép nhiều người chơi cùng lúc hiện cũng đang được phát triển khá phổ biến.

Persistent Games cho phép các người chơi chơi nối tiếp nhau một cách liên tục và được xây dựng dựa trên tình hình thực tế của mỗi khu vực, mỗi quốc gia.

Trên đây là giới thiệu một cách tổng quan về tất cả những gì có thể làm để phát triển game với Google Assistant. Hãy tự cởi bỏ giới hạn của bản thân và sáng tạo thêm thật nhiều những games hấp dẫn nhất.

Bài viết được trích dẫn từ phần trình bày của Ms Mandy Chan tại sự kiện Vietnam Web Summit 2020 LIVE do TopDev tổ chức


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

Xem thêm các việc làm Game hấp dẫn tại TopDev

7 Công Cụ Hay Dành Để Thực Hiện Devops

Trước đây, các nhà lập trình và các hoạt động thường hay mâu thuẫn với nhau. Việc tạo ra code thì chưa bao giờ được cập nhật đủ nhanh cho các nhà lập trình, các nhà quản lý có nhiệm vụ đảm bảo cho các server hoạt động một cách êm ả đã bực mình vì sự khẳng định vội vàng của các nhà lập trình về các quá trình theo đường tắt và chồng chất các yêu cầu xử lý.

Tuy nhiên, kể từ khi devops xuất hiện, thì các trận tuyến này đã không còn, nhờ có các công cụ mà đã nảy sinh khoảng cách, devops cung cấp các dịch vụ đa dạng từ quản lý cấu hình cho đến tính di chuyển được của các ứng dụng. Dưới đây là một vài công cụ nổi bật giúp thực hiện devops gây ấn tượng ngày nay.

Tìm việc làm DevOps lương cao trên TopDev

Atlas

techtalk-devops

HashiCorp đã giới thiệu Atlas mới nhất, Atlas cung cấp tầm nhìn về cơ sở hạ tầng, bao gồm các server, các container, và các máy ảo, ngoài việc quản lý cấu hình và khám phá dịch vụ. Việc xây dựng dựa trên các dự án mã nguồn mở phổ biến của công ty như Vagrant, Packer, Serf, Consul, và Terraform, Atlas – mã nguồn đóng riêng làm cho devops có khả năng qua các dịch vụ đám mây đa dạng, bao gồm AWS, Google Compute Engine, Azure và OpenStack, và cung cấp một bảng điều khiển dành cho lập trình, triển khai và bảo trì các ứng dụng.

Người dùng không có công việc thường xuyên đang xem xét Atlas cho nền tảng gắn kết khách hàng của công ty. Franks là người nói về Lithium Technologies, đã nhập vào Atlas, ông đang quan sát Atlas để tích hợp và triển khai liên tục. Franks nói rằng: “Hiện nay có nhiều công cụ như Jenkins, Travis và Bamboo.” “Dặm cuối cùng là phần triển khai, thì họ không xử lý.”

Các cài đặt tại chỗ cho khách hàng của Atlas được mong chờ vào đầu năm nay.

  DevOps – Giải pháp phát hành phần mềm nhanh chóng
Ơn giời, DevOps Engineer đây rồi!!!!

Bạn là DevOps Engineer kinh nghiệm và đang có mức thu nhập đáng mơ ước. Nhưng cuộc sống luôn chuyển động, và bạn, đôi khi cần một “level cao hơn” để trình của mình ngày càng khẳng định.

goGame có thể trở thành một điểm đến lí tưởng cho bạn. Vì sao ư?

  • Mức lương có thể lên đến $2000, hoặc cao hơn nếu năng lực của bạn khiến chúng tôi “choáng ngợp”
  • Được trang bị thiết bị chuyên dụng cấu hình cao dành riêng cho dân Game
  • Tuần làm việc chỉ 5 ngày, từ 9h sáng đến 6h tối, tha hồ “thư giãn” vào buổi sáng
  • Cơ hội làm việc với khách hàng trong và ngoài nước với môi trường chuyên nghiệp và “chất”

Tìm hiểu và ứng tuyển ngay tại đây!

Chef

techtalk-devops2

Chef là một hệ thống và framework cơ sở hạ tầng đám mây mà tự động hóa việc xây dựng, triển khai và quản lý cơ sở hạ tầng qua các script ngắn, lặp lại được gọi là “recipes.” Nhưng sức mạnh thật sự của Chef có lẽ nằm trong cách sử dụng các modun cấu hình nối được (hay còn gọi là cookbooks) của nó, có gần 2000 cookbooks có sẵn qua cộng đồng Chef. Gần đây Facebook của người dùng nổi bật đã có mã nguồn mở của một vài Chef cookbooks của riêng nó, quan sát một repo (nhà kho) của mã nguồn, chẳng hạn như Git và giữ server của Chef nội vùng ăn khớp.

Đại học Wharton School cũng là người dùng Chef. “Chef tự động hóa các nhiệm vụ phức tạp mà khác thời gian và nguồn – thì chuyên sâu, nhưng điều quan trọng hơn cả là nó cho phép chúng ta tập trung mọi nỗ lực của chúng ta vào sáng tạo và nâng cao chất lượng dịch vụ,” ông Sanjay Modi, giám đốc kỹ thuật của trường cho biết. “Nó cũng mở ra cánh cửa để thêm sự cộng tác và hiệu quả hơn nữa trong tổ chức.” Chef đã được sử dụng bởi Wharton để tự động hóa quản lý cấu hình cho các nguồn Amazon EC2, Linux nodes và máy ảo cục bộ

  Renoleap DevOps Bootcamp - Khóa Học Miễn Phí Trong 13 Tuần Tại Việt Nam.

Docker

techtalk-devops3

Docker mang lại tính khả chuyển cho các ứng dụng qua công nghệ Containerization của nó, do đó các ứng dụng hoạt động cho chính nó – các đơn vị được chứa đựng có thể được di chuyển trong toàn thể các nền tảng. Nó bao gồm Docker Engine, có thời gian chạy nhẹ và công cụ đóng gói, và Docker Hub là một dịch vụ đám mây dành cho ứng dụng trong việc chia sẻ và sự tự động hóa quy trình.

“Docker là một phần quan trọng của cơ sở hạ tầng dịch vụ quản lý và thử nghiệm thế hệ tiếp theo của Yelp,” Sam Eaton, giám đốc bộ phận kỹ sư tại Yelp cho biết. “Việc tách riêng các phần phụ thuộc và quay các container mau lẹ đã cho phép chúng ta rút ngắn lại chu trình phát triển và tăng tốc độ thử nghiệm nhiều hơn bốn lần.”

Puppet

techtalk-puppet

Puppet Enterprise xuất phát từ Puppet Labs, cung cấp quy trình xử lý trung tâm dữ liệu bằng cấu hình tự động hóa và quản lý máy móc và phần mềm. Phiên bản mới nhất 3.7 đã được công bố, đề cao các ứng dụng của Puppet, các ứng dụng được xây dựng cho một mục đích nhất định cho sự tự động hóa IT, bao gồm Node Manager dành cho quản lý với một lượng lớn các hệ thống được thay đổi thường xuyên. Một phiên bản mã nguồn mở của Puppet cũng có sẵn.

Đại học Stanford sử dụng phiên bản mã nguồn mở của Puppet “để nối khoảng cách giữa phát triển phần mềm mà chúng ta cần tạo ra các loại dịch vụ thư viện số và sự quản lý hệ thống mà chúng ta cần giữ cho các dịch vụ đó hoạt động với hiệu quả cao và an toàn,” Bess Sadler đến từ đại học Stanford cho biết. Các nhà lập trình đã bị thu hút vào sự quản lý hệ thống, trong khi các admin của hệ thống đã làm tăng thêm sự liên quan của mình vào phát triển phần mềm, làm cho các ứng dụng có khả năng phát triển nhanh hơn.

SaltStack

techtalk-devops22

SaltStack cung cấp sự tự động hóa dữ liệu dành cho quản lý các hệ thống, xây dựng đám mây, dự liệu server, và cấu hình ứng dụng. Một công cụ tự động hóa cơ sở hạ tầng đám mây được điều khiển theo sự kiện, nó có thể tự động hóa các nhiệm vụ trong quy trình devops. Deseret Digital Media đã sử dụng SaltStack khoảng hai năm để tự động hóa môi trường của nó, đề cao xấp xỉ 200 máy ảo đang chạy một môi trường sản phẩm và dịch chuyển.

SaltStack “tạo ra các sự hoạt động nhiều hơn việc có thể tới gần được cho các nhà lập trình,” Justin Carmony, giám đốc phát triển của Deseret Digital cho biết. Công ty có ba nhà điều khiển và 30 nhà lập trình; SaltStack để họ đóng góp vào sự hoạt động, chẳng hạn như dự liệu các server mới. “Theo truyền thống các sự hoạt động và các nhà lập trình luôn bất đồng với nhau.” Carmony nói. SaltStack cung cấp một phương thức và một ngôn ngữ bình thường để quản lý các server, theo cách ấy để nối khoảng cách giữa hai bên.

ScriptRock GuardRail

techtalk-202

GuardRail cung cấp theo dõi cấu hình, với sự quan sát liên tục trạng thái cấu hình máy. Nó có thể giúp người dùng đảm bảo môi trường sản phẩm của họ là đồng nhất với QA, kiểm tra và các môi trường lập trình. VersionOne, nhà tạo ra nền tảng quản lý dự án agile, đã bắt gặp các thử thách với sự kéo theo cấu hình và sự tự động hóa, do đó VersionOne đã chuyển sang GuardRail.

“Các nhà lập trình đang có các biểu tượng tắt để tạo ta sự tự động hóa dễ dàng hơn. Để mà có các bản build chạy trên các chương trình đại lý mới, thì họ đang thay đổi những gì đang hoạt động trước đây cho các bản build khác. Sự không ổn định của cơ sở hạ tầng đang làm suy yếu những gì có khả năng bằng nhiều bản build chương trình đại lý,” Ian Buchanan, giám đốc sản phẩm của VersionOne. “Nhờ GuardRail, bây giờ chúng tôi có thể hiểu được cách mà bất kỳ build agent được thiết lập cấu hình để chúng tôi có thể có nhiều agent đáng tin cậy như chúng tôi muốn.” VersionOne đã tăng thêm tầm nhìn vào việc kéo theo cấu hình và có thể dẫn chứng các kỳ vọng bằng tài liệu và cũng đã tạo ra được các thử nghiệm human-readable (người đọc cũng hiểu được), như vậy ngoại trừ sự tương đương của một tester trọn thời gian.

Splunk

techtalk-s29

Splunk là một công cụ dùng để tìm kiếm và sửa chữa các vấn đề theo thời gian thực qua chu kỳ đời sống của ứng dụng, nó cho phép các nhà lập trình hình dung dữ liệu từ các môi trường sản phẩm mà không phải truy cập máy sản xuất. Splunk giúp người dùng bao quát các quá trình devops, bao gồm sự triển khai và tích hợp liên tiếp.

User EnerNOC cung cấp phần mềm năng lượng thông minh dành cho các nhà điều hành mạng lưới điện và các lĩnh vực khác, User EnerNOC là người dùng của Splunk được khoảng năm năm. “Về cơ bản, Splunk đã thay đổi phương thức mà chúng ta điều hành hệ thống sản xuất,” James Nichol, kỹ sư trưởng tại EnerNOC nói. “Nó đã làm cho những người dùng kỹ thuật và phi kỹ thuật có khả năng đi sâu vào bản chất của một hệ thống rất phức tạp mà mặt khác sẽ không rõ ràng với họ. Chúng ta đã có các máy chủ ảo, các nhà quản lý phát triển, và quản lý chăm sóc khách hàng cài đặt các bảng điều khiển, hệ thống cảnh báo, và tìm tòi dữ liệu mà không thể không cần Splunk.”

Nguồn: topdev

Xem thêm các tin tuyển dụng việc làm IT trên TopDev

Hướng dẫn: JavaScript Modules

javascript

Nếu bạn mới học JavaScript, những thuật ngữ như “module bundlers vs. module loaders,” “Webpack vs. Browserify” và “AMD vs. CommonJS” có thể làm các bạn ‘bội thực’.

Hệ thống module của JavaScript tỏ ra khá đáng sợ, nhưng lại là những kiến thức cơ bản thiết yếu cho bất cứ web developer nào.

Trong bài viết, ta sẽ giải mã những thuật ngữ thông dụng này (kèm theo một vài đoạn code mẫu nữa). Hy vọng các bạn sẽ gặt hái được nhiều kiến thức từ bài viết.

Việc làm Javascript không yêu cầu kinh nghiệm

Part 1: Ông nào giải thích hộ module là gì lần nữa được không?

Tác giả giỏi sẽ chia sách thành chương và phần; lập trình viên giỏi sẽ chia chương trình thành module.

Giống như một chương truyện, module đơn giản chỉ là một loạt từ (hoặc code, tùy theo trường hợp).

Tuy nhiên, module tốt thì lại cực kỳ khép kín với chức năng riêng biệt, cho phép chúng được xáo trộn, xóa bỏ, hoặc thêm vào nếu cần, mà không gây gián đoạn cho hệ thống.

Tại sao phải dùng module?

Có rất nhiều lợi ích đến từ việc sử dụng module so với codebase phân nhánh phức tạp, liên quan đến nhau. Một số lợi ích lớn nhất, theo tôi là:

  • Khả năng duy trì: Theo định nghĩa, module thì khép kín. Một module được thiết kế đúng chuẩn sẽ có mục đích làm giải bớt dependency ở các phần trên codebase càng nhiều càng tốt, từ đó module có thể phát triển và cải thiện độc lập. Khi module được tách bạch khỏi những đoạn code khác, module này sẽ dễ cập nhật hơn rất nhiều.

Quay lại ví dụ cuốn sách, khi bạn muốn thay đổi một chương trong sách, nếu một thay đổi nhỏ trong chương cần phải chỉnh luôn trong các chương khác nữa, đây sẽ nhanh chóng trở thành một cơn ác mộng. Thay vào đó, bạn sẽ muốn viết mỗi chương làm sao để ít (hoặc không) phải động đến các chương khác khi muốn thay đổi gì đó.

  • Namespacing: Trong JavaScript, biến nằm ngoài hàm cấp cao sẽ là global (mọi người đều có thể truy cập). Bởi lẽ này, thường sẽ có “ô nhiễm vùng tên”, tại đây code (hoàn toàn không liên quan) chia sẻ các biến global.

Chia sẻ biến global giữa code không liên quan là thứ cực kỳ không nên xảy ra trong lập trình.

Sâu vào bài viết ta sẽ thấy rằng, module cho phép chúng ta tránh ô nhiễm vùng tên bằng cách tạo không gian riêng cho biến của chúng ta.

  • khả năng tái sử dụng: thành thật mà nói: bằng cách này hay cách khác, tất cả chúng ta ai cũng đã từng copy code đã viết trước đó vào project mới của mình. Ví dụ, hãy tưởng tượng bạn copy một vài method đa dụng bạn đã viết từ project trước đến project hiện nay.

Tốt đẹp cả thôi, nhưng nếu bạn nếu bạn tìm được cách hay hơn để viết một vài phần của code đó, bạn sẽ phải đi lại từ đầu đến cuối và phải nhớ mình đã viết ở chỗ nào để update.

Cách làm này lãng phí rất nhiều thời gian. Nếu ta có một… module có thể dùng đi dùng lại thì tốt biết mấy nhỉ?

Bạn kết hợp module như thế nào?

Có nhiều cách để liên kết module vào chương trình. Hãy cùng xem qua một số phương pháp thường thấy nhé:

Module pattern

Module pattern được sử dụng để mô phỏng khái niệm của class (vì JavaScript vốn không hỗ trợ class) từ đó chúng ta có thể lưu trữ cả các method public lẫn private và các biến trong một object duy nhất – tương tự với cách class được sử dụng trong các ngôn ngữ lập trình khác (như Java hay Python). Từ đó cho phép chúng ta tạo API đại chúng cho các method mà ta muốn tung ra global, mà vẫn kèm theo biến private và các method trong một phạm vi khép kín (closure scope).

Có nhiều cách thực hiện module pattern. Trong ví dụ đầu tiên, tôi sẽ sử dụng gói kín nặc danh (anonymous closure), đặt tất cả code của ta vào hàm ẩn danh (Nên nhớ: trong JavaScript, hàm là cách duy nhất tạo scope mới.)

Ví dụ 1: Gói kín ẩn danh (Anonymous closure)

(function () {
  // Chúng ta để các biến này ở private trong closure scope
  
  var myGrades = [93, 95, 88, 0, 55, 91];
  
  var average = function() {
    var total = myGrades.reduce(function(accumulator, item) {
      return accumulator + item}, 0);
    
      return 'Your average grade is ' + total / myGrades.length + '.';
  }

  var failing = function(){
    var failingGrades = myGrades.filter(function(item) {
      return item < 70;});
      
    return 'You failed ' + failingGrades.length + ' times.';
  }

  console.log(failing());

}());

// ‘You failed 2 times.’

Với cấu trúc này, hàm ẩn danh của chúng ta sẽ có môi trường đánh giá riêng hoặc “gói kín” (closure), và sau đó chúng ta sẽ đánh giá hàm ngay. Như vậy, chúng ta có thể giấu biến khỏi vùng tên mẹ (global namespace).

Cách này có một cái hay là bạn có thể sử dụng biến cục bộ trong hàm này mà không phải vô tình viết chồng lên các biến global đã có, mà vẫn truy cập được biến global, như sau:

var global = 'Hello, I am a global variable :)';

(function () {
  //  Chúng ta để các biến này ở private trong closure scope
  
  var myGrades = [93, 95, 88, 0, 55, 91];
  
  var average = function() {
    var total = myGrades.reduce(function(accumulator, item) {
      return accumulator + item}, 0);
    
    return 'Your average grade is ' + total / myGrades.length + '.';
  }

  var failing = function(){
    var failingGrades = myGrades.filter(function(item) {
      return item < 70;});
      
    return 'You failed ' + failingGrades.length + ' times.';
  }

  console.log(failing());
  console.log(global);
}());

// 'You failed 2 times.'
// 'Hello, I am a global variable :)'

Nên nhớ rằng dấu ngoặc tròn quanh hàm ẩn danh là bắt buộc, vì các câu lệnh (statement) bắt đầu với keyword function luôn được xem là khai báo hàm (nên nhớ, bạn không thể có khai báo hàm không tên trong JavaScript.) Do đó, các dầu ngoặc tròn xung quanh, thay vào đó sẽ tạo biểu thức hàm. Nếu muốn tìm hiểu thêm, bạn có thể đọc ở đây.

Example 2: Global import

global import là một phương pháp nữa khá nổi tiếng, được các thư viện như jQuery sử dụng. Tương tự với gói bao kín ẩn danh ta vừa thấy, nhưng sẽ không chuyển vào global như tham số (parameters):

(function (globalVariable) {

  //  Chúng ta để các biến này ở private trong closure scope
  var privateFunction = function() {
    console.log('Shhhh, this is private!');
  }

  // Expose các methods dưới đây qua giao diện globalVariable interface, đồng thời
  // giấu implementation của method trong 
  // function() block

  globalVariable.each = function(collection, iterator) {
    if (Array.isArray(collection)) {
      for (var i = 0; i < collection.length; i++) {
        iterator(collection[i], i, collection);
      }
    } else {
      for (var key in collection) {
        iterator(collection[key], key, collection);
      }
    }
  };

  globalVariable.filter = function(collection, test) {
    var filtered = [];
    globalVariable.each(collection, function(item) {
      if (test(item)) {
        filtered.push(item);
      }
    });
    return filtered;
  };

  globalVariable.map = function(collection, iterator) {
    var mapped = [];
    globalUtils.each(collection, function(value, key, collection) {
      mapped.push(iterator(value));
    });
    return mapped;
  };

  globalVariable.reduce = function(collection, iterator, accumulator) {
    var startingValueMissing = accumulator === undefined;

    globalVariable.each(collection, function(item) {
      if(startingValueMissing) {
        accumulator = item;
        startingValueMissing = false;
      } else {
        accumulator = iterator(accumulator, item);
      }
    });

    return accumulator;

  };

 }(globalVariable));

Trong ví dụ này, globalVariable là biến global duy nhất. Cách thức này có lợi thế so với gói kín ẩn danh là, bạn có thể khai biến global ngay từ đầu, giúp người đọc code hiểu rõ hơn.

Example 3: Object interface

Còn một cách tạo module khác là với object interface độc lập, như sau:

var myGradesCalculate = (function () {
    
  // Chúng ta để các biến này ở private trong closure scope
  var myGrades = [93, 95, 88, 0, 55, 91];

  // Expose những hàm này thông qua an interface while hiding
  // the implementation of the module within the function() block

  return {
    average: function() {
      var total = myGrades.reduce(function(accumulator, item) {
        return accumulator + item;
        }, 0);
        
      return'Your average grade is ' + total / myGrades.length + '.';
    },

    failing: function() {
      var failingGrades = myGrades.filter(function(item) {
          return item < 70;
        });

      return 'You failed ' + failingGrades.length + ' times.';
    }
  }
})();

myGradesCalculate.failing(); // 'You failed 2 times.' 
myGradesCalculate.average(); // 'Your average grade is 70.33333333333333.'

Như bạn thấy đấy, phương pháp cho phép chúng ta quyết định biến/method nào để giữ private (e.g. myGrades) và biến/method nào chúng ta muốn expose, bằng cách đặt vào câu lệnh trả về (e.g. average & failing).

Example 4: Revealing module pattern

Rất giống với cách làm đã nêu ở trên, ngoại trừ tất cả method và biến sẽ được giữ private cho đến khi được expose dứt khoát:

var myGradesCalculate = (function () {
    
  // Chúng ta để các biến này ở private trong closure scope
  var myGrades = [93, 95, 88, 0, 55, 91];
  
  var average = function() {
    var total = myGrades.reduce(function(accumulator, item) {
      return accumulator + item;
      }, 0);
      
    return'Your average grade is ' + total / myGrades.length + '.';
  };

  var failing = function() {
    var failingGrades = myGrades.filter(function(item) {
        return item < 70;
      });

    return 'You failed ' + failingGrades.length + ' times.';
  };

  // Dứt khoát expose public pointers đến các private functions 
  // mà ta muốn expose công khai

  return {
    average: average,
    failing: failing
  }
})();

myGradesCalculate.failing(); // 'You failed 2 times.' 
myGradesCalculate.average(); // 'Your average grade is 70.33333333333333.'

Nhìn thì nhiều như vậy đấy, nhưng “không may” đây mới chỉ là phần nổi của tảng băng trôi module pattern mà thôi.

CommonJS và AMD

Có một điểm chung ở tất cả các phương pháp trên: sử dụng một biến global duy nhất để gói code trong một hàm, từ đó tạo vùng tên private cho chính nó với phạm vi khép kín (closure scope).

Tuy mỗi phương pháp đều có hiệu quả riêng, nhưng khuyết điểm vẫn không thể tránh khỏi.

Ví dụ như, với cương vị lập trình viên, bạn cần phải biết đúng thứ tự của dependency để load file vào đó. Giả sử, cho là bạn đang dùng Backbone cho project của mình, nên bạn sẽ thêm kèm script tag cho mã nguồn của Backbone trong file.

Tuy nhiên, kể từ khi Backbone có dependency cứng trên Underscore.js, sript tag cho file Backbone không thể được thay thế trước file Underscore.js được.

Là lập trình viên, việc quản lý dependencies song song với xử lý tốt những công việc này đôi khi tỏ ra quá sức.

Một thiếu sót khác là chúng vẫn có thể dẫn đến xung đột vùng tên. Ví dụ, Nếu như có hai module bị trùng tên thì sao? Hoặc nếu như bạn có hai phiên bản của cùng một module, mà bạn lại cần cả hai?

Có lẽ bạn đang tự hỏi: chúng ta có thể thiết kế ra cách yêu cầu interface của module mà không phải đi qua phạm vi toàn thể (global scope).

Thật may mắn, câu trả lời là “có”. Và chúng ta có hai giải phép khá nổi tiếng và tối ưu: CommonJS và AMD.

CommonJS

CommonJS là một nhóm làm việc tình nguyện, thiết kế và tích hợp JavaScript APIs để khai biến.

Một module CommonJS thực ra là một đoạn JavaScript tái sử dụng được, có khả năng export một số object nhất định, giúp các module khác có thể require trong chương trình của chúng. Nếu đã từng lập trình với Node.js, bạn hẳn sẽ rất quen thuộc với format này.

Với CommonJS, mỗi file JavaScript lưu trữ module trong bối cảnh module của riêng nó (cũng giống như gói vào gói kín vậy). Trong phạm vi (scope) này, chúng ta sẽ sử dụng object module.exports để expose module, và require để import.

Khi bạn xác định một module CommonJS, bạn sẽ thường thấy:

function myModule() {
  this.hello = function() {
    return 'hello!';
  }

  this.goodbye = function() {
    return 'goodbye!';
  }
}

module.exports = myModule;

Chúng ta sẽ sử dụng module object đặc biệt và đặt reference của hàm vào module.exports. Từ đó cho phép hệ thống module CommonJS biết được chúng ta muốn expose cái nào, để các file khác có thể tiêu thụ.

Sau đó nếu có người muốn dùng myModule, họ có thể require ngay trong file của họ, như sau:

var myModule = require('myModule');

var myModuleInstance = new myModule();
myModuleInstance.hello(); // 'hello!'
myModuleInstance.goodbye(); // 'goodbye!'

Giải pháp này có hai ích lợi rõ rệt so với các module pattern ta đã bàn đến:

  1. Tránh ô nhiễm vùng tên toàn phần (global namespace pollution)
  2. Để dependencies ở explicit

Hơn nữa, cú pháp cũng rất gọn gàng, tôi rất thích điểm này.

Một đặc điểm nữa cần lưu ý, rằng CommonJS đi theo hướng server-first (server trước) và load module đồng bộ. Lý do ta cần lưu ý là vì nếu ta có ba module khác cần require, thì chỉ load được từng module một mà thôi.

Đến đây, server thì tuyệt rồi, nhưng thật xúi quẩy, ta sẽ gặp khó khăn khi viết JavaScript cho trình duyệt, đọc module từ web sẽ mất rất nhiều thời gian hơn so với đọc từ ổ cứng. Miễng là đoạn script để load module đang chạy, script sẽ chặn trình duyệt không cho chạy bất cứ thừ giì khác cho đến khi module load xong. Chúng ta thấy hành vi này vì thread trong JavaScript sẽ dừng cho đến khi code load xong hết.

AMD

CommonJS rất hay và mượt, nhưng nếu chúng ta muốn load module không đồng bộ thì sao? Câu trả lời là Asynchronous Module Definition (ADM).

Load module bằng ADM sẽ trông như sau:

define(['myModule', 'myOtherModule'], function(myModule, myOtherModule) {
  console.log(myModule.hello());
});

Chúng ta có thể thấy rằng hàm define tiếp nhận một array của dependencies của module làm tham số đầu tiên. Những dependencies này được load trong background (theo hướng không block), và khi đã load, define sẽ call hàm callback nó đã được chỉ định.

Tiếp theo, hàm callback sẽ lấy các dependencies đã được load làm tham số – trong trường hợp của chúng ta, myModulemyOtherModule  cho phép hàm sử dụng những dependencies. Cuối cùng, bản thân dependencies cũng phải được xác định bằng từ khóa define.

Ví dụ, myModule có thể trông như sau:

define([], function() {

  return {
    hello: function() {
      console.log('hello');
    },
    goodbye: function() {
      console.log('goodbye');
    }
  };
});

Vậy, một lần nữa, khác với CommonJS, AMD đi theo hướng browser-first cùng với hành vi không đồng bộ để xử lý công việc. Bên cạnh tính chất không đồng bộ, module của bạn còn có thể là object, hàm, hàm dựng, string, JSON và nhiều kiểu dữ liệu khác, trong khi CommonJS chỉ hỗ trợ object làm module.

Như vậy, AMD không tương thích với io, filesystem, và các tính năng hướng server khác có ở trong CommonJS, và cú pháp gói hàm dài dòng hơn, nếu so với chỉ một câu lệnh require đơn giản.

UMD

Với các project yêu cầu hỗ trợ cả các tính năng của AMD và CommonJS, ta còn một format nữa: Universal Module Definition (UMD).

UMD là hướng dùng một trong hai phương pháp trên, đồng thời hỗ trợ xác định biến global. Từ đó, module trong UMD có thể làm việc trên cả client và server.

Sau đây là một ví dụ ngắn về cách UMD:

(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
      // AMD
    define(['myModule', 'myOtherModule'], factory);
  } else if (typeof exports === 'object') {
      // CommonJS
    module.exports = factory(require('myModule'), require('myOtherModule'));
  } else {
    // Browser globals (Chú ý: root là window)
    root.returnExports = factory(root.myModule, root.myOtherModule);
  }
}(this, function (myModule, myOtherModule) {
  // Methods
  function notHelloOrGoodbye(){}; // A private method
  function hello(){}; // Là public method vì được trả kết quả (xem bên dưới)
  function goodbye(){}; // Là public method vì được trả kết quả (xem bên dưới)

  // Các public methods được expose
  return {
      hello: hello,
      goodbye: goodbye
  }
}));

Để dọc thêm ví dụ của UMD format, bạn có thể đọc tại đây.

Native JS

Nhiều quá đúng không, nhưng vẫn chưa hết đâu. Vì chúng ta vẫn còn một kiểu module nữa.

Chắc các bạn cũng đã nhận ra, không có kiểu module nào bên trên có sẵn trong JavaScript cả. Thay vào đó, chúng ta đã tìm cách emulate một hệ thống module thông qua việc sử dụng module pattern, CommonJS hoặc AMD.

May thay, những chuyên gia tại TC39 đã giới thiệu module built-in với ECMAScript 6 (ES6).

ES6 đưa ra một loạt khả năng import và export module đa dạng, sau đây là một số tài nguyên các bạn có thể xem thử:

So với CommonJS và AMD, ES6 module tỏ ra vượt trội hơn: cú pháp gọn gàng và rõ ràng, cùng khả năng load không đồng bộ, và các lợi thế như hỗ trợ cyclic dependencies tốt hơn.

Có lẽ tính năng ưa thích nhất của tôi với ES6 module là: xem trước trực tiếp exort dưới dạng read-only. (So với CommonJS, imports là bản sao của export và vì vậy sẽ không ‘sống’).

Sau đây là một ví dụ minh họa:

// lib/counter.js

var counter = 1;

function increment() {
  counter++;
}

function decrement() {
  counter--;
}

module.exports = {
  counter: counter,
  increment: increment,
  decrement: decrement
};


// src/main.js

var counter = require('../../lib/counter');

counter.increment();
console.log(counter.counter); // 1

Trong ví dụ này, chúng ta về cơ bản tạo hai bản sao module: một bản sao khi export, và một bản sao khi require.

Hơn nữa, bản sao trong main.js hiện đã bị ngắt kết nối khỏi module ban đầu. Đó là lý do ngay cả khi chúng ta gia tăng số counter, nó sẽ vẫn trả về 1 – vì biến counter mà ta import là bản sao đã disconnet của biến counter từ module.

Như vậy, việc tăng counter sẽ tăng số trong module, nhưng sẽ không tăng số version bản sao. Cách duy nhất để điều chỉnh version bản sao của biến counter, là làm thủ công:

counter.counter++;
console.log(counter.counter); // 2

Mặt khác, ES6 tạo xem trước trực tiếp (read-only) của module ta import:

// lib/counter.js
export let counter = 1;

export function increment() {
  counter++;
}

export function decrement() {
  counter--;
}


// src/main.js
import * as counter from '../../counter';

console.log(counter.counter); // 1
counter.increment();
console.log(counter.counter); // 2

Cool nhỉ? Một điểm rất hay của tính năng xem trước trực tiếp là bạn có thể tách module thành nhiều mảnh nhỏ mà không làm mất tính năng nào.

Sau đó bạn có thể quay lại và merge lần nữa. Không có bất cứ sự cố nào cả, nên bạn cứ yên tâm.

Ở phần sau: bundling modules

Như vậy, vừa rồi ta đã tìm hiểu sơ bộ về module. Trong phần tới, chúng ta sẽ khám phá sâu hơn nữa về module trong JavaScript, cụ thể hơn là module bundling (gói module):

  • Tại sao ta phải gói module
  • Các phương pháp gói khác nhau
  • API load module của ECMAScript

Nguồn: topdev.vn via Techtalk via Medium

Tham khảo các vị trí tuyển nhân viên IT hấp dẫn tại đây

Lời khuyên cho các bạn thiết kế web

AMA (Ask Me Everything) là sự kiện Hỏi – đáp diễn ra thường kì trên fanpage Topdev nhằm tạo cơ hội để các bạn lập trình viên tiếp cận được những kiến thức, kinh nghiệm thực tế từ các chuyên gia trong ngành thông qua những màn hỏi đáp trực tuyến nóng hổi. Bắt đầu từ đầu năm 2017, sự kiện AMA sẽ kéo dài nguyên tuần từ 8h sáng thứ 3 đến 24h thứ 6 hằng tuần để cộng đồng dev có nhiều thời gian trao đổi với các chuyên gia hơn.

Tuần rồi, AMA đón chào thêm 1 gương mặt quen thuộc khác là anh Nguyễn Thanh TùngTrưở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 và Điện Máy Xanh.

Anh Tùng đã có trên 10 năm kinh nghiệm làm Product ManagementUI/UX, cùng những kinh nghiệm xương máu và vốn kiến thức sâu rộng được anh đúc kết qua rất nhiều dự án ở các công ty lớn như Baamboo MP3 (VCcorp), Anhso.net (Moore corp), Thegioididong.com,Dienmayxanh.com, Ứng dụng TGDD.

Cùng xem thử các câu hỏi được đặt ra cho anh Tùng là gì nhé!

Q: Em chưa có kinh nghiệm nhưng muốn hướng theo lĩnh vực thiết kế website. Anh có thể chia sẻ cho em biết làm thế nào có thể thiết kế hay phát triển một website với giao diện tối ưu nhât, không khiến người dùng cảm thấy bối rối khi có quá nhiều sản phẩm được đưa ra trong cùng một trang website?

A: Mỗi lĩnh vực sẽ có những đặc thù riêng về trải nghiệm người dùng để tối ưu. Một UX designer nhiều kinh nghiệm về TMĐT thì khi dấn thân vào một lĩnh vực mới (VD ngân hàng, bất động sản) thì họ cũng sẽ phải bắt đầu một quá trình nghiên cứu mới để thấu hiểu nhu cầu của user trong lĩnh vực đó. Khó có câu trả lời tuyệt đối cho câu hỏi “Đâu là website với giao diện tối ưu nhất”, mặc dù các website tốt sẽ chia sẻ một số nguyên tắc chung như “Don’t make me think” (Em có thể search thông tin về cuốn sách này trên Google)

Với những bạn trẻ muốn học thiết kế website, anh xin chia sẻ mấy ý
1. Tìm một môi trường để cọ xát và có một người thầy tốt/sếp giỏi: em có thể chọn startup/studio/agency hoặc một công ty lớn, mỗi thứ đều có những điểm mạnh riêng. Tốt nhất nên làm qua cả 2 để biết mình phù hợp với môi trường nào.
2. Nỗ lực tự học tiếng Anh ít nhất ở mức đọc hiểu tốt và tìm môi trường có thể giúp mình cọ xát tiếng Anh (VD các outsource studio/agency) : những người giỏi mà anh quen (Dev, Designer, các chuyên gia..) đa phần đều đi lên nhờ tự học, và mọi thứ kiến thức hữu ích đều có thể tự tìm ra bằng Google và tiếng Anh. Ko biết tiếng Anh sẽ cản trở em khá nhiều trong việc phát triển kỹ năng của bản thân.
3. Việc còn lại là follow những người giỏi mà em biết (có thể bắt đầu với những diễn giả tham gia AMA trước đó của TopDev) , từ đó quan sát và học hỏi từ những gì họ chia sẻ và bắt tay vào thực hành ngay nhé

Q: Anh Tùng có thể chia sẻ kinh nghiệm trong quá trình thiết kế Website của mình là làm thế nào để website được tải với tốc độ nhanh, có khả năng tương thích với hầu hết các trình duyệt web phổ biến nhất hiện nay?

A: Các kỹ thuật về Cache, HTML/CSS… giúp tối ưu tốc độ tải trang web thì cũng có đầy rẫy trên mạng rồi, em có thể search google/Stackoverflow để tham khảo thêm, hoặc một cách khác là em mở công cụ PageSpeed của Google ra đo tốc độ trang web của em và làm theo các khuyến nghị mà công cụ này tư vấn, làm sao đạt trên 90 điểm cho cả 2 version Mobile và Desktop là okie. Tuy nhiên, cái quan trọng để việc tối ưu tốc độ trở thành mindset đó là tìm cách lôi cuốn và đưa nó vào như một KPI bắt buộc đối với team lập trình (front and back end) và team leader thì việc này mới được triển khai mạnh mẽ. VD trong năm 2015 KPI bên anh là yêu cầu mọi trang web có tốc độ load dưới 4 giây (đo bằng Google Analytics), sau đó năm 2016 là nhỏ hơn hoặc bằng 3 giây. Khi đó IT sẽ tìm mọi cách để giải bài toán này, mình ko cần nghĩ thay cho họ

Q: Anh có thể chia sẻ sơ lược về quy trình ux design đang được áp dụng tại TGDD. Anh có thể chia sẻ về đội ngũ team Ux hiện tại của công ty? Anh có nghĩ những công ty nhỏ, startup có thể học tập gì từ quy trình đó không? Cảm ơn anh và chúc anh năm mới mạnh khoẻ và thành công.

A: UX design là một phần của quy trình phát triển sản phẩm, bên anh ko có người chuyên cho vị trí UX designer mà chỉ có một bạn Product Manager (PM) kiêm nhiệm luôn vài trò UI/UX. Mindset của bọn anh là “Mọi người đều là UX designer”, “Hãy đi hỏi khách hàng”. Quy trình bên anh nếu đẩy đủ thì như thế này:

1. Request: các bộ phận yêu cầu một tính năng có thể là từ team Content, Phát triển bán hàng online, Ngành hàng, marketing, các đối tác. PM sẽ là người tiếp nhận các yêu cầu này
2. Analyse: PM đặt câu hỏi “Why should we do that” Sau bước này PM có thể approve/deny một yêu cầu và đặt thứ tự ưu tiên cho việc đó
3. (Validate ideas) Design + prototype + interview: bạn PM wireframe trên giấy/bảng và thảo luận nhóm + UX audit (optional, nếu đó là một tính năng cũ cần cải tiến), sau khi chốt sơ bộ bắt đầu đi vào UI Design luôn (trên Sketch), sau đó chuyển thiết kế qua Marvelapp.com và sau đó mang prototype (nằm trên điện thoại) đi mời khách vãng lai xem họ cách họ sử dụng (vì sản phẩm của bọn anh dành cho mass market). Kỹ thuật này gọi là hallway testing, và thường chỉ cần gặp và nói chuyện với khoảng 5 Khách hàng là tạm đủ insight và vấn đề cần fix. Sau đó lại tiếp tục quay về tối ưu giao diện và lặp lại chu trình trên sau khoảng 2 – 3 vòng là ra final design
Ở khâu design, có 3 điểm bọn anh lưu tâm, đó là Design for mobile first (Làm mobile xong mới làm Desktop. Đây là một điểm rất khác biệt của bên anh vì UX trên mobile thường khó xử lý hơn Desktop) + Design for worst case scenarios + Lúa hóa cho bà ngoại cũng dùng được
4. Development: Ở bước này, ngoài khâu coding thì một phần thường thấy đó là làm việc tiếp với nhóm content và có một checklist các công việc cần các bạn hoàn thiện, vì một trang web muốn có UX tốt nội dung phụ thuộc rất nhiều vào content tốt (đặc biệt là website TMĐT). UX trong content cũng là một điểm tạo nên sự khác biệt và anh nghĩ yếu tố này chưa nhiều website Việt Nam làm chỉn chu. Có dịp anh sẽ viết sâu hơn về phần này
5. Measure and improve: Sau khi launch web, bọn anh sẽ cài Crazyegg để đo tương tác trên site mới và thiết lập một số goal đo lường. Trong quá trình đó, tiếp tục quan sát và fix các lỗi. Bọn anh cũng có một đội gọi là “Super soi”, đó là những CTV ko nằm trong nhóm web và như những user bình thường, họ có nhiệm vụ detect ra các UI/UX/Function bugs và báo cho nhóm anh fix.

Có 2 điểm đáng chú ý trong quy trình này:
1. Bọn anh invite Developer vào dự án nhiều khi rất sớm, từ khi Analyse hoặc Validate ideas để họ tư vấn cho mình. Các bạn thường cho nhiều góc nhìn sâu sắc có thể mình bỏ lỡ
2. Xây dựng một cơ chế communicate trong team nhấn mạnh yếu tố: Kịp thời, minh bạch, lôi cuốn. Anh nghĩ cách giao tiếp qua lại thường xuyên sẽ giúp dự án tránh được nhiều rủi ro về mặt tiến độ, và tạo động lực cho cả team

Q: Anh có thể cho em biết những tính năng nổi trội mà một website thương mại điện tử cần có là gì không ạ ?

A:  Chào em, một website TMĐT nên chú ý những điểm sau:
1. Speed: load nhanh. KPI của nhóm lập trình bên anh là phải bảo đảm tốc độ load full trang nhỏ hơn hoặc bằng 3 giây. Đừng vì những hiệu ứng phù phiếm mà làm ảnh hưởng đến tốc độ load trang
2. Easy to use: hay nôm na là “Lúa hóa”. Đừng làm theo trend, mà hãy đi hỏi khách hàng thật sự của bạn.
3. Content is king: Phát triển nội dung sao cho người dùng cần gì cũng có, thỏa mãn với việc xem từng nội dung. Thực tế thì việc thiết kế đẹp hay xấu ko quyết định nhiều đến việc bán được hàng hay ko mà nằm ở content. Content viết tốt thì dù trình bày có chưa okie vẫn “chất” và giúp user dễ mua hàng hơn. Có thể nói Content là một điểm nổi bật nhất ở hệ thống website bên anh và để làm được như vậy cần đầu tư lâu dài.
4. SEO is queen: Có một danh sách dài để nói về Design for SEO, và mindset SEO cần thấm nhuần cho từng thành viên kể cả designer chứ ko chỉ PM, content. Một website SEO tốt sẽ tiết kiệm một đống tiền thay vì làm SEM, và thực tế việc làm SEO bên TGDD gần như có một công thức thành công = SEO on site chứ ko cần dùng chiêu trò blackhat hay seeding, link building ở đâu cả
5. Tạo được mối tương tác qua lại với User: Phản hồi nhanh chóng mọi câu hỏi của user trong phần bình luận (VD trong vòng 30p), Live chat, invite đánh giá sản phẩm đã mua v.v… —> tạo điểm tín dụng và uy tín cho nội dung của website đó —> Top destination để tham khảo thông tin

Q: Chào anh Tùng, em rất ngưỡng mộ cách mà Điện máy xanh làm marketing và thấy độ viral của các ấn phẩm bên anh thật khủng, anh có thể cho em được biết bí quyết để làm nên những cú hit như vậy không ạ.

A: Với trường hợp của Điện Máy Xanh, đã có nhiều bài phân tích về việc tại sao nó lại viral rồi. Tuy nhiên để chốt lại thì có mấy yếu tố chính: 1. Sự đầu tư mạnh từ công ty với mục tiêu tạo Top of mind (chi phí quảng cáo trên truyền hình vài trăm tỉ), 2. Sự dũng cảm (quá trình chọn ý tưởng cho clip này khá gây tranh cãi trong nội bộ), 3. Đội ngũ in house follow trend khá tốt, 4. Sự may mắn (bài hát gây ám ảnh và kiếm được earned media mạnh, rất nhiều meme về bài hát này thực sự do các KOL chủ động làm chứ bọn anh ko seeding hay mua)

Q: Hi anh, đã làm công việc này 10 năm, sao anh có thể giữ mãi cảm hứng với nghề vậy ạ? Anh có thể chia sẻ các website hữu ích nếu em muốn tìm hiểu về công việc ux và ui design dc ko? Ngoài ra em thấy 1 số công ty ko có PM cho dự án mà người làm ux thường là bộ phận kinh doanh (trực tiếp đưa yêu cầu) hoạc development (trực tiếp làm). Anh thấy quy trình này có phù hợp ko ạ?

A: Cảm hứng đến từ 2 thứ:
1. Mình tự đặt ra những giới hạn mới muốn vươn tới hoặc được làm cho công ty có tầm nhìn lớn, sếp đặt target năm sau cao hơn năm trước —> từ đó tạo động lực phát triển bản thân
2. Nghề ko phụ người, nếu em cứ kiên trì với một nghề và thành chuyên gia trong lĩnh vực đó, anh tin là thu nhập cũng sẽ tới lúc đủ để em lo cho gia đình + mua những thứ giúp trải nghiệm cuộc sống phong phú hơn. Việc đó sẽ giúp tạo năng lượng cho em tiếp tục theo đuổi công việc đó

Với các công ty nhỏ với cấu trúc phòng ban tinh gọn hoặc các dự án đơn giản (VD làm landing page, site giới thiệu công ty…) thì có thể ko cần PM mà chỉ cần sự kết hợp của một Project owner (Boss, MKT lead, Trưởng phòng kinh doanh…) + 1 Designer (có thể biết chút ít UX) + Developer.

Ở Việt Nam hiện cũng có một số bạn tổ chức các khóa học về UX, em có thể tham khảo UX Design 101 hoặc Scott Experience Design hoặc gia nhập các nhóm active như Team Marquee trên Slack

Cảm ơn anh Nguyễn Thanh Tùng với những câu trả lời rất nhiệt tình và tâm huyết. AMA tuần này đã lên sóng, truy cập ngay TẠI ĐÂY để “chất vấn” anh Bùi Huy Thắng – CEO & Co-Founder đến từ BraveBits nếu bạn có những thắc mắc liên quan đến cách thức để sản phẩm fit với nhu cầu thị trường, kiến thức về UX và kinh nghiệm điều hành công ty nhé!

Nguồn: Topdev

Nên đặt câu hỏi gì khi phỏng vấn vào 1 công ty công nghệ?

Khi tôi, ở vị trí senior, ứng tuyển vào MIT cho vị trí full-time đầu tiên, phần khiến tôi lo sợ nhất không phải là thiết kế thuật toán hay phân tích phức tạp gì, mà chính là khoảnh khắc vào cuối buổi phỏng vấn – khi được hỏi: “Bạn có câu hỏi gì với công ty không?”

Tôi thực sự rất lo, không biết liệu nếu mình đặt ra câu hỏi khó có khiến họ có cái nhìn thiếu thiện cảm với mình và làm giảm khả năng nhận được offer hay không. Tôi càng không muốn thể hiện mình là 1 người khó làm việc cùng. Trên tất cả, tôi không chắc mình nên hỏi cái gì để thực sự hiểu rõ về công ty đó.

2 năm rưỡi sau, tôi giờ đây đã là software engineer full-time tại Quora và đã trải qua hơn 150 giờ phỏng vấn các ứng viên. Cuối mỗi buổi phỏng vấn, tôi luôn dành ra 5-10 phút để cho phép các ứng viên đặt bất kì câu hỏi nào họ muốn. Vào khoảng thời gian đó, tôi thực sự đánh giá rất cao nếu ai đó đặt ra những câu hỏi đúng trọng tâm. Câu hỏi của họ giúp tôi tập trung vào những yếu tố mà họ thực sự hứng thú, thay vì chỉ nói chung chung về công việc.

Dù bạn xin vào vị trí thực tập hay full time, việc đặt cho người phỏng vấn câu hỏi là 1 trong những việc quan trọng nhất mà bạn có thể làm. Lý do là vì:

  1. Có những chuyện về 1 công ty mà bạn chỉ có thể biết được bằng cách thực sự nói chuyện với những người làm việc tại đó. Rất nhiều khía cạnh liên quan đến công ty – như quy mô và sứ mệnh – dễ dàng tìm kiếm được trên online. Nhưng văn hóa và quy trình là những thứ bạn chỉ biết được bằng cách nói chuyện với người trong team.
  2. Đặt ra những câu hỏi khó trả lời chứng tỏ bạn đã suy nghĩ về kiểu môi trường làm việc mà bản thân mong muốn. Là 1 người phỏng vấn, tôi thực sự rất ấn tượng khi các ứng viên hỏi những câu hỏi có chiều sâu và nếu ứng viên đó tỏ ra không hứng thú tìm hiểu thêm về khả năng làm việc tại công ty của tôi, đây sẽ là dấu hiệu không tốt cần cân nhắc.
  3. Để giải quyết nỗi sợ rằng nếu đặt ra những câu hỏi khó sẽ thể hiện hình ảnh tiêu cực, để tôi cho bạn biết: khi bắt đầu phỏng vấn, tôi chưa từng 1 lần cảm thấy bị xúc phạm bởi bất kì câu hỏi nào mà ứng viên đặt ra – và tôi cũng chưa nghe nói ai có cảm giác đó tại Quora. Rõ ràng, nếu người phỏng vấn của bạn dễ cảm thấy phật lòng bởi những câu hỏi nhạy cảm, thì bạn nhiều khả năng sẽ chẳng còn hứng thú làm việc cùng họ nữa.

5 câu hỏi mà bạn nên bắt đầu sử dụng

1. Hãy kể cho tôi về 1 project mà bạn đã từng làm việc trong 6 tháng qua

Câu này sẽ khiến người được hỏi kể về những gì đã thực sự xảy ra – chứ không phải mô tả lại 1 tình huống lý tưởng nào đó.

Đừng quên đào sâu vào những khía cạnh khác để bạn hiểu được chính xác những chi tiết nhỏ nhặt nhất.

  • Ai đã đề xuất dự án này?
  • Làm sao để dự án được ưu tiên hơn?
  • Ai là người chịu trách nhiệm cho dự án này và làm cách nào để quyết định được điều đó?
  • Làm cách nào để bạn giải quyết những bất đồng trong team project?
  • Manager của bạn chịu trách nhiệm như thế nào với project?
  • Quy trình review dự án như thế nào?
  • Nếu phải thực hiện lại project lần nữa, bạn sẽ làm khác đi chuyện gì?

2. Các quyết định về sản phẩm được đưa ra như thế nào?

Đây là 1 câu hỏi mở có chủ đích. Từ đây, bạn có thể khai thác được những điều sau:

  1. hiểu sâu hơn về sứ mệnh và tầm nhìn liên quan đến product của công ty
  2. liệu sứ mệnh và tầm nhìn đó có thực sự gắng liền với các dự án mà công ty đang triển khai hay không

Theo sau đó, bạn có thể hỏi:

  • Sứ mệnh và năng lực cốt lõi của công ty là gì?
  • Làm thế nào để việc ra mắt sản phẩm hiện tại đáp ứng được những điều đó?
  • Có những thách thức nào mà công ty cần vượt qua để đạt được sứ mệnh của mình?
  • Làm thế nào để công ty ưu tiên các khoản đầu tư kĩ thuật hay các khoản đầu tư sản phẩm?

3. Công ty đã giúp bạn đạt được mục tiêu nghề nghiệp ra sao?

Công ty mà bạn đang muốn gia nhập chắc chắn phải tương đồng với các dự định nghề nghiệp của bạn. Lý tưởng nhất là khi gia nhập công ty, bạn sẽ làm những loại công việc đáp ứng chính xác kế hoạch, dự định đó.

Những câu hỏi bạn có thể đặt ra với người phỏng vấn bao gồm:

  • Bạn và quản lý của mình có trao đổi về mục tiêu nghề nghiệp của bạn?
  • Quản lý giúp bạn xác định và thực hiện những mục tiêu đó như thế nào?
  • Điều gì sẽ xảy ra khi mục tiêu cá nhân của bạn không phù hợp với công việc mà bạn đang làm mà công việc đó lại có sức ảnh hưởng lớn nhất đến công ty?
  • Làm thế nào để mọi người phát triển và tiến bộ trong nghề nghiệp của họ tại công ty?
  • Nhân viên mới sẽ được giao trách nhiệm ở chừng mực nào?

4. Văn hóa công ty khác gì với các công ty công nghệ khác?

Rất nhiều công ty Tech có chính sách đãi ngộ tốt, những nhân tài kiệt xuất, văn phòng đẹp, vậy bạn nên xác định được điều gì phân biệt công ty này với các công ty khác.

Những điểm mà bạn có thể cân nhắc chính là:

  • Tỷ lệ giữa những người có kinh nghiệm với những nhân viên mới tuyển dụng
  • Mức độ mọi người giao lưu với nhau ngoài công việc
  • Tính linh hoạt về địa điểm và thời gian làm việc
  • Mức độ trân trọng sự khác biệt

Những con người khác biệt sẽ phát triển tốt tại những môi trường và văn hóa làm việc khác biệt, và việc tìm kiếm 1 nơi giúp bạn làm việc năng suất nhất, cảm thấy thoải mái nhất là 1 yếu tố rất quan trọng.

5. Cơ hội nào cho nhân viên để học hỏi những điều mới?

Học hỏi là 1 trong những thứ có tỷ lệ ROI (Return on Investment) cao nhất về lâu dài. Hầu hết các công ty đều phát triển những quy trình nhập môn và hướng dẫn người mới khá bài bản, nhưng tôi lại đặc biệt đánh giá cao những công ty liên tục đầu tư vào việc phát triển con người trong những tháng đầu tiên.

Ví dụ:

  • Liệu có dễ dàng không nếu mọi người muốn chuyển sang những teams khác và thử nghiệm những vai trò mà họ chưa từng làm trước đây?
  • Có cách nào để học hỏi 1 lĩnh vực kĩ thuật khác so với những gì mà bạn đang làm?
  • Làm cách nào để mọi người chia sẻ những kiến thức có được từ những projects cũ và giúp đỡ nhau phát triển kiến thức chung?

TẠO CV ONLINE MIỄN PHÍ

Hãy hỏi những gì mà bạn quan tâm nhiều nhất

Như bạn thấy, với mỗi câu hỏi tôi lại liệt kê những câu hỏi đi kèm. Hãy hỏi chúng dựa trên những câu trả lời mà bạn nhận được. Tôi cá là những gì bạn thu hoạch được sẽ rất thú vị dựa trên những câu hỏi đi kèm.

Cuối cùng, điều bạn muốn hỏi nhất phải phụ thuộc vào những gì bạn cho là quan trọng nhất trên nấc thang tiếp theo trong nghề nghiệp của mình. Liệu bạn có muốn làm việc với những công nghệ và frameworks Javascript mới nhất, thịnh hành nhất? Bạn có quan tâm đến phát triển khả năng networking và trở thành leader trong lĩnh vực này? Bạn có hứng thú với việc khám phá những vai trò mới như quản lý dự án? Hãy tự mình đặt ra danh sách những câu hỏi mà bạn quan tâm nhất và đảm bảo rằng bạn có cơ hội để hỏi chúng trong buổi phỏng vấn của mình.

Nguồn: medium.freecodecamp.com

Học lập trình có cần quá thông minh?

Như tiêu đề, một vấn đề nan giải và cũng là câu hỏi của nhiều người mới bước chân vào học lập trình. Có nhất thiết bạn cần phải quá thông minh để có thể học lập trình? Câu trả lời là “Hoàn toàn không!”. Nguyên nhân vì sao thì hãy cùng nhau đọc tiếp bên dưới.

Theo mình tìm hiểu thì cho đến nay trong ngành lập trình không có khái niệm nào nói rằng người học phải đạt được sự thông minh ở cấp độ nào thì mới có thể hiểu được. Để học lập trình thì chỉ cần bạn là một người bình thường (IQ >= 85), có một chiếc máy tính (kết nối mạng càng tốt), một vài cuốn sách và một quyết tâm sắt đá.

Có phải đơn giản quá không, thực sự là không đơn giản vậy. Nói ngắn gọn để cho các bạn khỏi hoang mang chứ học lập trình thì cũng có những cái khó của nó. Đầu tiên hãy tìm hiểu vì sao bạn thấy nó khó.

Những điều cản trở bạn học lập trình

Lập trình thật là khô khan và khó hiểu

Mình chắc có tới 96,69% các bạn mới tiếp xúc với ngôn ngữ lập trình sẽ thấy tá hỏa khi đọc một file code chứa khoảng vài trăm dòng trở lên (bản thân mình cũng vậy). Thật dễ hiểu là vì sao mấy bạn sợ, đó là vì bạn chưa quen, chưa hiểu từng thành phần của thứ bạn đang đọc, hoặc chưa hiểu được luồng, quy tắc đặt tên, quy tắc gọi hàm,… nên không thể hiểu hết được code viết để làm gì, chạy ra làm sao. Từ đó cảm giác sợ hãi sẽ xâm lấn khiến cho bạn nản và suy nghĩ rằng bạn không có khả năng học lập trình.

Kể một kỷ niệm nho nhỏ của mình vào năm 2015, có đi phỏng vấn vị trí back-end developer tại một công ty game, bị đưa optimize một file code đâu đến hơn 300 dòng (cũng không nhớ chính xác). Mà lúc đó ngáo ngơ mới ra trường, cũng chưa có kinh nghiệm gì nhiều nên rất choáng khi đụng phải mớ hỗn độn như vậy, cuối cùng mình bỏ bài đó và kết quả thì mấy bạn biết rồi đó. Điều đó sẽ không có gì to tát, rớt thì về học lại thôi, nhưng khi về nhà mình ngồi suy nghĩ lại, hiểu được và cũng thấy được cái chỗ cần optimize đó. Có lẽ lúc đó quá áp lực về tâm lý khi lần đầu tiên thấy nhiều code đến vậy!

afraid-code

Tôi đã từng một thời sợ code

Các thuật toán phức tạp cần người thông minh để giải quyết

Không biết từ bao giờ, nhưng khi nói về các giải thuật thì người ta đều nghĩ ngay đến những lập trình viên với bộ óc siêu phàm. Đừng thần thánh hóa vậy, vì bản thân mình thấy được rằng các giải thuật thường dùng thì không cần đến những bộ óc phải thật xuất sắc mới có thể hiểu được, học ngu như mình cũng đọc và cũng hiểu mà. Tất nhiên sự thông minh sẽ giúp bạn đọc, hiểu và nắm bắt vấn đề nhanh hơn người khác, nhưng đó không phải vấn đề quan trọng nhất, vấn đề thật sự là bạn có muốn hiểu nó không, có quyết tâm đi đến cùng khi gặp khó khăn không? Lúc gặp khó khăn thì bạn làm gì?

Bản thân những người lập trình giỏi không giỏi ngay từ lúc ban đầu, nhưng họ khác biệt bằng thái độ làm việc và suy nghĩ tích cực cộng với sự chăm chỉ không gì sánh nổi.

Malcolm Gladwell nói “Để trở thành chuyên gia trong một lĩnh vực nào đó cần tới 10.000 giờ thực hành”. Vậy bạn đã thực hành bao nhiêu giờ rồi?

Một người anh đã từng chia sẻ với mình rằng: “Khi gặp một khó khăn nếu bạn nói không thể thì nó mãi mãi là không thể, nhưng nếu bạn nói có thể thì cơ hội, cơ may thành công chắc chắn sẽ lớn hơn khi nói không. Đó có lẽ là câu nói hay nhất mình từng được nghe.

Tham khảo các việc làm ngành cnttt hot:

Bạn không tin vào chính con người mình

Đây chính là điều quan trọng nhất giết chết bạn. Mình từng có một thời gian trầy trật với môn lập trình căn bản, có thể vì thời gian đầu khi mới tiếp xúc mình đã đi không đúng cách nên rất khó nuốt mớ kiến thức đó. Nhưng nếu ngay tại thời điểm đó tự chọn cách từ bỏ và phó mặc số phận thì bây giờ đã không thể ngồi đây viết bài chia sẻ, và tất nhiên mình cũng không thể trở thành một lập trình viên… ahihi. Mỗi người sinh ra không ai giống ai cả, và cũng không ai biết được khả năng tiềm tàng trong mỗi chúng ta cho đến lúc bạn làm cho nó bộc phát.

Niềm tin chính là thứ khiến mọi việc dễ dàng hơn rất nhiều, nếu muốn trở thành một người lập trình viên giỏi thì bước đầu tiên phải làm là tin điều đó, là bạn chắc chắn sẽ làm được. Sau đó thì bước những bước đi vững vàng kế tiếp.

Nói rất tốt! Thế bây giờ thì phải làm sao?

Tìm kiếm một nguồn động lực

Động lực thì mỗi người mỗi khác, nhưng thôi để mình kể một câu chuyện điển hình về chuyện tình cay đắng của thằng bạn mình.

Hồi xưa mình có thằng bạn tên (tạm gọi nó là A) sống trong khu chung cư tráng lệ mới xây bên bờ sông Sài Gòn. Đối diện nhà A có em hàng xóm rất là xinh đẹp cùng tuổi tên là B. Hàng ngày A nhìn thấy B với da thịt đầy đặn phô ra trước nhà thì trong lòng vô cùng hoan hỉ và đêm về tốn không biết bao nhiêu là giấy (A chỉ dùng An An và Sài Gòn Extra). Nhưng một hôm thằng A đang nhìn trộm em B thì để ý thấy thằng C nhà bên cạnh cũng đang làm cái hành động y chang mình. A biết rằng B không thể thuộc về mình nếu có cảm tình với C nên cố gắng suy nghĩ cách để lấy lòng em nó. Với niềm tin sắt đá, A quyết tâm học lập trình để làm cho B một website khoe hình ảnh đú đỡn của em ấy và tất nhiên cũng để chiếm trọn lấy tình cảm của em.

Nhưng lập trình không dễ như A tưởng. Lúc mới tiếp cận với ngôn ngữ lập trình thì A luôn bị nhức đầu và buồn ngủ. Nhưng vì muốn chén được con B ngon và múp này, A không thể bỏ cuộc như thế được. Thay vì ngồi học theo các tuts chia sẻ nhan nhản trên mạng, A quyết tâm lập ra con đường sự nghiệp cua gái cho mình mà điển hình là học một ngôn ngữ từ bước cơ bản nhất. Sau vài lần tiếp xúc A quyết tâm chọn PHP để làm nền tảng. Dần dần website khoe hình của A hoàn thiện và chạy mượt mà, nó vội vàng khoe với em B. Sau một hồi nhìn tới ngó lui upload vài hình thử nghiệm thì em B lại muốn phải có thêm chức năng phóng to thu nhỏ để có thể xem rõ hơn những vùng …. nhạy cảm.

Biết giới hạn trình độ của mình, và cũng không muốn làm em B giận. A cày ngày cày đêm học hỏi, mò mẫm kiến thức trên mạng để làm cho xong những chức năng mà em ấy yêu cầu. Ông trời không phụ lòng người, sau vài lần xong trước tiến độ, cái website khoe ảnh nude của em B đã hoàn thiện. Tuy nhiên chỉ sau vài tháng chạy thử với số lượng người truy cập quá đông nên website bị sập và A nghiễm nhiên trở thành một người bạn thân, một người anh trai tốt của em B mà chưa kịp nói lời tỏ tình.

Đấy các bạn thấy chưa, chỉ cần tin vào chính mình thì việc gì cũng có thể thành công. A đã tin vào bản thân, nói đúng hơn là A có động lực lớn để học tập.

Không ngừng thử thách bản thân

Hãy luôn thử thách bản thân khi học lập trình, ngày càng nâng cao skills của bản thân bằng cách học nhiều hơn, học tất cả những gì cảm thấy cần thiết. Tự tìm kiếm những vấn đề còn tồn tại của mình để khắc phục và phát triển. Cách mà mình hay dùng là tự làm những project nhỏ để nâng cao skills những lúc rảnh rỗi, ngoài ra lên mạng tìm đọc những bài viết hay ho của người khác và làm theo cũng là một cách tốt.

Nếu vẫn không biết cần học gì thì có thể đọc bài viết để lập trình được sau 1 năm.

Kết giao và học hỏi với người giỏi hơn mình

Nếu đi với một người giỏi hơn mình, không bao lâu sau mình cũng sẽ giỏi như người đó. Đó là một điều được rút ra bởi….. chủ nhân blog Jusfunny. Tất nhiên, nếu kết bạn với người ta mà chỉ chăm chăm để học hỏi, chỉ để tìm kiếm cái giá trị gì đó cho bản thân thì thật là bỉ ổi và vụ lợi, có ngày nó nổi giận quánh đập, xài xể thì lúc đó mình không chịu trách nhiệm. Hãy làm bạn tự nhiên nhất, thân thiện và chân thành với tất cả mọi người, giúp đỡ lẫn nhau hết sức có thể, học hỏi từ người khác rồi sẽ đến lúc bạn sẽ cùng trình độ với họ.

Mạnh dạn lên, hồi xưa mình toàn vậy! Gặp ai cũng xởi lởi nhảy vô làm quen này nọ đủ kiểu, trong công ty ai cũng biết mặt. Giữa giờ thì rủ nhau pha cà phê, lấy nước (công ty có hệ thống nước và cà phê), cuối tuần rủ nhậu với hy vọng ngày đêm là thu lại chút gì đó kiến thức gì đó. Cũng được một thời gian lên bờ xuống ruộng, hai bên có tình cảm lẫn nhau thì anh kia mới nhắn tin rủ vô hotel bắt pokemon gì đó quý hiếm lắm…. mọi chuyện diễn ra thế nào thì tự tưởng tượng đi, mỏi tay quá.

Lập trình viên giỏi ngoài biết code thì cần có thêm nhiều kỹ năng khác. Trong một team, bạn có thể code tốt nhưng chưa chắc người ta nể bạn, ngoài kỹ năng code bạn còn cần rất nhiều kỹ năng khác để người ta nể phục mình. Có lẽ vài bữa sẽ viết riêng một series bài viết “để trở thành một team member được mọi người nể phục” luôn cho nó máu.

Tham khảo thêm các nhà tuyển dụng HOT như:

Đừng quên giúp đỡ người mới khi đã có kiến thức

Người mới ở đây là lập trình viên mới vô nghề, có thể còn trinh đầu óc. Họ có thể thua bạn về kinh nghiệm và kiến thức. Nhưng chắc chắn họ sẽ có khá nhiều cái hay ho để học hỏi. Ngoài ra dạy lại cho người khác cũng là cách bị động để ta ôn lại kiến thức, khám phá ra những cái mới mà mình chưa có cơ hội đi sâu.

Đó là toàn bộ cách mà mình đang dùng, vì mình không được thông minh mà. Ít nhất là cho tới thời điểm này mình cảm thấy nó hiệu quả với bản thân và tất nhiên là sẽ tiếp tục cố gắng theo đuổi đến cùng ngành lập trình hay ho này.

Thực hành, thực hành và thực hành

Với mốc 10.000 giờ đã nói ở trên, ta cần tới 10 năm để thực hành với 3h/ngày trừ những ngày ốm đau, mệt mỏi vì con bồ có chồng, con vợ có bồ. Càng thực hành nhiều, bộ não sẽ quen dần với việc code mà không thấy sợ hãi. Nó sẽ suy nghĩ logic hơn, càng ngày càng biết được nhiều kiến thức hơn. Hãy thực hành hằng ngày nếu có thể, hãy tìm những vấn đề random và giải quyết nó theo cách của bạn, cố gắng càng nhanh càng tốt. Một khi đã thực hành nhiều, bạn sẽ tự tin vào đôi tay của mình và mọi khó khăn gặp phải cũng sẽ có hướng giải quyết.

Một số nguồn hay nên đọc lúc rảnh rỗi:

Codefights: quánh lộn với code, có một số bài toán lập trình khá chua đấy. Trang này dành để luyện não khá hay, bạn sẽ được code thi với máy. Giải quyết các bài toán do chương trình đưa ra, đặc biệt ở đây có khá nhiều công ty cho đề, nếu bạn giải quyết tốt thì có thể có cơ hội hợp tác với họ.

Quora: nơi rất nhiều người có đầu óc viết những bài viết chất lượng về đủ thứ chủ đề, trong đó có chủ đề về phần mềm và các thứ liên quan đến lập trình viên.

Medium: tương tự quora, được sáng lập bởi co-founder của mạng xã hội twitter.

Simple programmer: trang blog khá hay nói tất tần tật về lập trình, tuy nhiên chú ý một điều là mặc dù hay nhưng vẫn không qua Jusfunny, ahihi.

Stackoverflow: trang giải đáp về lập trình lớn nhất thế giới hiện nay, search bugs trên google chỉ ra trang này, SEO bá ghê.

Techtalk via justfunny

Các resources mới dành cho web dev

Các công cụ lập trình web cứ vài tháng lại thay đổi 1 lần. Bài viết dưới đây cập nhật các công cụ mới trong tháng 1/2017 gồm các thư viện JavaScript, 1 plugin Sketch cho UI design responsive và 1 cặp frameworks CSS.

iTyped

Thư viện Javascript cho phép bạn hiển thị các hiệu ứng typing của danh sách text; 1 dãy hiệu ứng mà bạn đã thấy gần đây. Rất dễ thực hiện thư viện Javascript này với khá nhiều lựa chọn để tối ưu effects. Bạn có thể cài đặt thư viện này thông qua NPM hoặc tải nó bằng CDN tại https://unpkg.com/ityped@0.0.7.

https://github.com/luisvinicius167/ityped

Opera Neon

Opera từng được biết đến là công ty đầu tiên giới thiệu hệ điều hành theo tab, và từ đó, chúng ta có được các hệ điều hành với tên gọi Tabs và Speed Dial. Opera gần đây cho ra mắt chức năng mới là Opera Neon. Một hệ điều hành mới với giao diện tươi mới hơn như các lựa chọn omnibox, split-screen mode và wallpaper đẹp. Vậy liệu Opera Neon có thể thay đổi môi trường hệ điều hành 1 lần nữa?

http://www.hongkiat.com/blog/opera-neon/

At.js

At.js là 1 thư viện Javascript mới, cho phép thêm các biểu tượng mặt cười, mention bạn bè hoặc tag – những tính năng chúng ta từng thấy trên Slack, Twitter và Facebook. Plugin này hoạt động được trên Internet Explore 7 và cả Internet Explorer 6. Thật tuyệt vời!

https://github.com/ichord/At.js

Release

Release sẽ giúp tạo release phiên bản mới của phần mềm trong Github thuận tiện hơn. Một release mới thường đi kèm với 1 changelog, và module này để bạn điền changelog tự động lấy từ Git commit messages.

https://github.com/zeit/release

Prettier

Một beautifier Javascript đảm bảo code Javascript được format 1 cách thống nhất. Prettier hỗ trợ ES2017 và JSX.

https://github.com/jlongster/prettier

Ayu

Ayu là theme Sublime Text mới và hiện đại, đi kèm 2 tông tối và sáng. Ayu, trong tiếng Indonesia nghĩa là đẹp, nên có thể hiểu là Ayu giúp Sublime Text UI trông đẹp mắt hơn.

https://github.com/dempfi/ayu

JSON Splora

Một ứng dụng nhẹ dùng để chỉnh sửa, visualize dữ liệu JSON. Ứng dụng tương thích với Windows, Linux và MacOS.

https://github.com/wellsjo/JSON-Splora

Zooming

Nguồn JavaScript để zoom hình ảnh. Zooming được tối ưu hóa trên mobile, hoạt động hiệu quả trên màn hình hi-def và rất dễ tùy chỉnh.

https://github.com/kingdido999/zooming

Ramme

Ramme là 1 client của desktop Instagram. Dù chưa chính thức, nhưng bạn có thể học được kha khá thứ hay ho từ source code này.

https://github.com/terkelg/ramme

Change Username

Một plugin WordPress đã từng được activate, thêm link “change” bên cạnh username input và cho phép bạn thay đổi username. 

https://github.com/dannyvankooten/change-username

NodeifyWP

NodeifyWP là 1 plugin WordPress độc lạ, để bạn sử dụng WordPress như bình thường, sau đó output content sử dụng module Node.js. Tôi chưa từng thử plugin này trong dự án nào hết. Nhưng bài thuyết trình tôi xem tại WordCamp Denpasar 2016, plugin này hứa hẹn sẽ hiện đại hóa công việc lập trình WordPress.

https://github.com/10up/nodeifywp

ColorMe

ColorMe khá khác biệt so với các ứng dụng generator color khá. Ngoại trừ các code generating color, ứng dụng này sẽ điều chỉnh độ sáng, độ bóng, độ sắc, độ bão hòa, độ tương phản… của màu sắc. 

https://colorme.io/

Các packages WP-CLI

Tập hợp các extensions của WP-CLI bổ sung các dòng lệnh và parameters để thực hiện thêm các tasks như triển khai WordPress với server ở xa, tích hợp site WordPress, xóa caches

http://wp-cli.org/package-index/

Tailor Page Builder

Một plugin WordPress tạo content non-linear với 1 giao diện drag-n-drop. Plugin này có thể mở rộng được với 1 component mới để thêm content type unique vào. Tailor Page Builder còn cung cấp WP-API để quản lý những nội dung này. Đây có thể xem là plugin tốt nhất trong lĩnh vực này.

Tailor Page Builder

XVG

XVG là 1 extension của Chrome hiển thị các outline và anchors graphic SVG, hỗ trợ debug dễ dàng các đối tượng SVG.

https://xvg.now.sh/

RibbonJS

RibbonJS là 1 thư viện JavaScript generate các dải lụa trảng trí trên trang web. Nó chỉ tốn 1kb nhưng lại rất dễ tùy chỉnh. 

http://git.hust.cc/ribbon.js/

Auto Layout

Auto-Layout là 1 plugin Sketch cung cấp 1 số lượng các kích cỡ màn hình preset để test thiết kế UI của bạn. Nhờ đó, bạn có thể đảm bảo giao diện thiết kế đẹp mắt dù user xem trên iPhone 5 hay iPhone 6… Plugin này cũng cho phép bạn define các kích thước tùy chỉnh trong trường hợp không hiển thị trên preset. Xem thêm video này

https://animaapp.github.io/Auto-Layout/

Funcssions

Funcssion tập hợp các classes CSS hoạt động theo nguyên tắc Pure Function. Mỗi class CSS xác định 1 mục đích styling duy nhất. Framework CSS này hiện đang được cải tiến với nhiều tính năng hơn như Grid, Buttons responsive…

https://funcssion.com/

Webslides

Một framework nhẹ, dễ dùng để xây dựng các slide thuyết trình. Thư viện này chỉ sử dụng HTML và CSS. Các websites hiện tại đang cung cấp các bộ slide templates giúp bạn bắt đầu xây dựng slide thuyết trình của mình ngay lập tức.

https://webslides.tv/

Resilient Web Design

Resilient Web Design là 1 quyển sách online. Quyển sách này không liên quan gì đến kĩ thuật mà tập trung nói về lịch sử, nguyên tắc và những phát minh định hình nên Web như chúng ta đang có hiện tại. Một quyển sách tuyệt vời để đọc vào dịp cuối tuần.

https://resilientwebdesign.com/

Nguồn Hongkiat

Giải đáp UX: User Empathy Mapping là gì? User Story được form như thế nào?

Le Quang Phowr

AMA (Ask Me Everything) là sự kiện Hỏi – đáp diễn ra thường kì trên fanpage Topdev nhằm tạo cơ hội để các bạn lập trình viên tiếp cận được những kiến thức, kinh nghiệm thực tế từ các chuyên gia trong ngành thông qua những màn hỏi đáp trực tuyến nóng hổi. Bắt đầu từ đầu năm 2017, sự kiện AMA sẽ kéo dài nguyên tuần từ 8h sáng thứ 3 đến 24h thứ 6 hằng tuần để cộng đồng dev có nhiều thời gian trao đổi với các chuyên gia hơn.

Khách mời sẽ xông đất năm mới cho sẽ là anh Quang Phowr – một Product Manager kỳ cựu đang làm việc tại Websosanh.

Trước tiên chúng ta hãy cùng tìm hiểu đôi nét về khách mời nhé:

  • Anh đã từng kinh qua các vị trí như Product Designer và PM tại VNP
  • Năm 2014 làm PM và Mobile Development Manager tại VNP Group
  • Tháng 7/2014 anh đảm nhiệm vị trí VP Business Development tại CubicWater
  • Tháng 9/2014 đến tháng 5/2015 anh làm Product Specialist tại VinEcom thuộc VinGroup
  • Anh đã có 1 năm nắm giữ vai trò Head of Product ở Haravan và hiện tại anh đang là Head of Product tại Websosanh.vn

Lĩnh vực chuyên môn mà anh trao đổi kì này vẫn là UX trong lĩnh vực thương mại điện tử.

Dưới đây là những thắc mắc đã được anh Quang Phowr giải đáp tuần rồi. Cùng xem qua để rút tỉa kinh nghiệm cho bản thân nha các dev!

Q: Chào anh Quang ạ, anh có thể chia sẻ cấu trúc và cách xây dựng User Empathy Maping, từ đó làm thế nào liệt kê đc triệt để các User Story ạ? Hiện tại team em đang có kế hoạch improve website của mình https://www.tripi.vn/ . Anh có thể cho bọn em 1 vài góp ý, trước hết là ở trang chủ đc ko ạ? Em cảm ơn anh ạ

A: User Empathy Mapping có 2 phần quan trọng nhất là Pain và Gain. Pain là những thứ người dùng đang gặp khó khăn, khó chịu. Gain là những thứ người dùng muốn đạt được.

User story được form dưới dạng cấu trúc, As a [user segment], I want to [do something] so that I can [achieve something]

Có 2 chú ý:
1, Làm user empathy map với từng user segment (nếu có nhiều hơn 1 user segment)
2, Achieve something trong user story có thể đến từ phần GAIN hoặc đã giải quyết được phần PAIN

Ví dụ: Là một người hay bay thường xuyên, tôi muốn tripi có chức năng săn vé tự động, để tôi bay được nhiều chuyến hơn (gain). Là một người bận bịu, tôi muốn tripi có chức năng săn vé tự động, để tôi không mất thời gian đi săn vé (pain)

User segmentation do cách team thống nhất với nhau để dễ phục vụ khách hàng hơn chứ ko có quy chuẩn chung

Q: Hello anh em học chuyên ngành thương mại điện tử về tech e cũng biết 1 ít và về kinh tế cũng biết 1 ít, em rất thích làm 1 product manager như a, a có thể chia sẻ 1 số bước cơ bản để trở thành 1 PM không ạ. E cũng tò mò là hồi đó anh Quang học chuyên ngành gì ạ hehe.

A: Chào Nam, sry em vì comment bị trôi nên giờ anh mới trả lời.

Trước anh học CNTT ở Bách khoa Hà Nội. Anh cũng background là dev 1 thời gian. Nói chung, product manager phải biết khá nhiều thứ. Tùy vào tổ chức công ty mà vai trò lớn hay nhỏ.

Với PM trong mảng phát triển sản phẩm (product development manager) thì việc chính là đưa ra các giải pháp để phát triển sản phẩm. Lúc này là sự giao thoa giữa business, tech và user experience. Em cần có background của 3 cái này thì giải pháp đưa ra mới hiệu quả (bám sát business, khả thi với tech và ux tốt)

Với PM trong mảng quản lý sản phẩm nói chung (có một số nơi gọi là product owner hoặc product director) thì PM ngoài việc quản lý development còn có thêm 2 phần nữa là product strategy và product operation. Lúc này cần hiểu biết rất sâu về đối thủ, chiến lược thị trường, marketing, sale, vận hành doanh nghiệp để đưa ra các quyết định sản phẩm hợp lý. Thường PM dạng này là CEO công ty hoặc hoạt động như CEO của sản phẩm. Startup thì CEO kiêm PM luôn, vừa định hướng, vừa phát triển, vừa vận hành. Hoặc là các dự án độc lập trong 1 công ty to cũng tương tự như vậy.

Các bước cơ bản thì em nên tích lũy kinh nghiệm công việc, trải nghiệm sống, tự tạo mục tiêu cho bản thân trong việc học (học gì thì anh nói ở phía trên rồi). Tìm các môi trường thực hành và kiểm nghiệm kiến thức của mình như các công ty sản phẩm sẽ hiệu quả. Chúc em thành công

Q: Chào anh, em hiện cũng đang thích theo đuổi UX Designer. Tuy nhiên, em vẫn còn chút chưa rõ về công việc. Vậy anh có thể mô tả công việc cụ thể của chức danh UX Designer tại Websosanh được không ạ?

A: Chào Dương. Anh sẽ trả lời em ở phạm vi rộng hơn là chức danh UX Designer ở các công ty Việt Nam.

Hiện nay có nhiều công ty đặc biệt là các công ty lớn như VNG, Tiki, Viettel, Lazada… có nhu cầu về vị trí này nhưng rất khó tuyển người và đãi ngộ các vị trí này tương đối cao so với mặt bằng thu nhập nói chung.

Hiện tại có 2 vị trí phổ biển em sẽ thấy thông qua các mẫu tuyển dụng:
– UX/UI Designer
– UX Designer hoặc các vị trí có công việc tương tự như product executive, product manager

Với UX/UI Designer (tuyển dụng nhiều) thì em sẽ phải lo cả về mặt đồ họa và giao diện khi thiết kế một ứng dụng di động hoặc một website
Với UX Designer (ở các công ty lớn) thì sẽ có những bạn lo phần đồ họa và giao diện nên em sẽ san sẻ được phần nào công việc.

Công việc chính của UX Designer nói chúng là tìm hiểu vấn đề của phía người dùng thông qua nhiều phương pháp khác nhau như hỏi người dùng, tự cảm thông người dùng, … Từ đó đưa ra các giải pháp cải thiện và theo dõi hiệu quả của việc cải thiện

Q: Hiện nay, các công ty lớn đang dần chú trọng vào phát triển đội ngũ UX designer vì họ nhận ra UX là yếu tố cơ bản tạo nên sự thành công trong hoạt động kinh doanh thương mại điện tử. Anh có thể chia sẽ chi tiết hơn là vì sao UX lại là yếu tố cơ bản trong thành công của thương mại điện tử không ạ?

A: Chào Phong, anh nói rộng hơn TMDT mà ngành công nghệ nói chung

Khái niệm user phổ biến trong lĩnh vực phần mềm. Ngoài đời sống thì được gọi với cái tên customer. Trải nghiệm người dùng UX hay rộng hơn là trải nghiệm khách hàng CX (chú ý hai khái niệm này không phải lúc nào cũng tương đương, phụ thuộc vào góc nhìn). Khách hàng quan trọng với doanh nghiệp thế nào thì User quan trọng với phần mềm như vậy. Bên kinh doanh có câu “Khách hàng là thượng đế” chắc em còn nhớ.

Trước đây phần mềm được xây dựng để sử dụng trong doanh nghiệp, và để sử dụng được thì phải thông qua đào tạo sử dụng. Tuy nhiên xu hướng internet nên các phần mềm lên mây nhiều hơn. Vì lên mây nhiều nên có nhiều sự so sánh cạnh tranh cái này tiện hơn, cái kia tốt hơn v.v. Từ đó UX là một trong các yếu tố giúp phần mềm bán được (phần mềm ở đây em hiểu theo nghĩa rộng là 1 chương trình máy tính cho người sử dụng, tùy cách bán là thu tiền như các dịch vụ SaaS hay miễn phí rồi bán sản phẩm cho đối tượng khác như Facebook bán quảng cáo)

Sales/Marketing có vai trò thu hút khách hàng về, khách hàng kí hợp đồng. Tuy nhiên để giữ được khách hay không thì lại góp công lớn nhờ chất lượng của phần mềm. Phần mềm mà khó sử dụng, không đáp ứng được nhu cầu, nhàm chán thì việc bán lại lần thứ hai rất khó (vì hiện tại có nhiều lựa chọn rồi). UX có vai trò trong việc giữ khách hàng.

Ngoài ra UX cũng giúp khách hàng chi trả nhiều tiền hơn, có nhiều thiện cảm hơn đối với phần mềm, từ đó giúp doanh nghiệp tăng trưởng bền vững hơn (nhiều lợi nhuận tốt vì NPS tăng lên)

Q: Anh có thể chia sẻ một vài thủ thuật nhỏ nhằm giúp website trông thân thiện với người dùng hơn được không ạ?

A: Trước tiên bạn cần xác định nhóm người dùng của website mình là ai?

Bước 2, bạn giả định mình là họ và trả lời một số câu hỏi:
1, Website của mình đã đáp ứng được nhu cầu sử dụng của họ hay chưa?
2, Website của mình có quá khó hiểu với họ không?
3, Website của mình có bị lỗi ở đâu không?
4, Website của mình có hấp dẫn với họ (về nội dung lẫn giao diện)
5, Website của họ có mang lại nhiều giá trị cho họ hơn các website đối thủ không?

Từ những câu hỏi này bạn sẽ cải thiện. Khi ấy website của bạn sẽ ngày càng thân thiện với người sử dụng hơn

Q: Chào @Le Quang!

Theo giới thiệu, bạn hiện đang làm tại công ty so sánh giá lớn nhất hiên nay là http://websosanh.vn

Bạn có thể chia sẻ một số kinh nghiệm khi làm ở đó được không?
– Việc thiết kế ui/ux của họ có thực sự hướng đến ngừoi dùng không?
– Họ không bán hàng, thì trải nghiệm người dùng trên websosanh.vn dc họ đánh giá thế nào?

Cảm ơn bạn rất nhiều!

A: Chào anh Tú.

Hiện tại websosanh đang dễ dùng hơn trước. Thay đổi cần có thời gian nhưng đang đi đúng lộ trình.

Websosanh.vn không bán hàng nhưng mang lại giá trị là cung cấp nhiều lựa chọn hơn cho người dùng để linh hoạt lựa chọn mua sắm cho phù hợp.

Mình lấy ví dụ anh cần mua Iphone 7 anh phải vào nhiều nơi để khảo giá thì thay vào đó chỉ cần vào websosanh là đủ. Giả sử anh chỉ vào lazada để xem thôi thì anh bị phụ thuộc vào chính sách vận chuyển của lazada, có thể vài ngày anh mới nhận được hàng. Tuy nhiên với websosanh thì anh biết được địa điểm nào gần mình đang bán (có thể giá cao hơn 1 chút) nhưng lại đáp ứng được nhu cầu sử dụng gấp của anh. Đó là giá trị websosanh muốn đem lại.

Cách đánh giá trải nghiệm websosanh thì dựa trên các chỉ số định lượng về việc khách hàng có đáp ứng được nhu cầu mua sắm của mình (như ví dụ nói trên) hay không)

Q: Chào anh trước Tết em có tham gia sự kiện Demo Day của các bạn về việc reDesign UX của web 123phim.vn không biết thì hiện tại anh còn hỗ trợ các đội nhóm đó không anh nhỉ và anh có dự tính muốn mở rộng những mô hình như kiểu khóa huấn luyện UX Design vừa rồi không ạ.

A: Hiện tại mình vẫn đang dạy các khóa ngắn ngày. Bạn follow UX Design 101 để nắm các thông tin. Cảm ơn bạn

Q: Em chào anh Quang ạ. Đối với UX design nói chung và trong thương mại điện tử nói riêng, thì coder sẽ chịu trách nhiệm phát triển UX, cùng với sự hỗ trợ của, marketing, product và sale team. Thì anh có thể chia sẻ chi tiết hơn về những sự hỗ trợ của các team ấy sẽ diễn ra như thế nào vậy anh?

A: Chào Yukay,

Chúng ta sẽ đứng trên góc độ người sử dụng để trả lời câu hỏi này. Anh lấy ví dụ chúng ta vào Amazon.
1, Nếu em vào Amazon mà website không truy cập được thì em sẽ thấy thế nào? Có hài lòng hay không? Lỗi này là lỗi của ai?
2, Nếu em ấn vào nút “add to cart” mà giá trong cart lại khác với giá hiển thị thì em có hài lòng không? Có thấy amazon mập mờ không? Lần sau còn tin tưởng mua hàng tại amazon không?
3, Nếu em tìm sản phẩm em định mua là “iphone 7” nhưng toàn ra các kết quả “ốp lưng cho iphone 7” thì em có thấy bực mình không? Có tin tưởng vào chức năng search của Amazon không?
4, Nếu em vào Amazon mà amazon biết ngay thị hiếu mua sắm của em ra sao. Em tìm chung chung từ khóa “điện thoại” nhưng Amazon lại đưa ra các kết quả hoàn toàn trùng khớp với thị hiếu của em là điện thoại cho nữ, selfie lung linh (anh ví dụ vậy) thì em có dễ dàng lựa chọn hơn không?

4 ví dụ trên để em thấy vai trò của coder đối với UX, không chỉ xoay quanh việc đáp ứng chức năng hoạt động đúng mà còn giúp gia tăng hiệu quả bán hàng. UX là khái niệm trải rộng, mỗi người đều có thể tham gia nhằm phục vụ khách hàng tốt hơn

Một lần, Topdev rất cảm ơn anh Le Quang Phowr với lần xuất hiện thứ 2 trên AMA. Những chia sẻ nhiệt tình, thực tế của anh chắc chắn đã giải tỏa được rất nhiều khúc mắc về UX của các bạn. 

Xem thêm: Các công việc ux và việc làm it hấp dẫn tại Topdev.vn

Bức tranh toàn cảnh về thị trường lập trình Việt Nam 2016

Năm 2016 đang dần trôi qua và đây là thời khắc để cũng nhìn lại bức tranh toàn cảnh về ngành lập trình Việt Nam nói chung và nhân sự ngành nói riêng bắt nguồn từ sự thay đổi về công nghệ và những xu hướng mới trong hoạt động của doanh nghiệp.

Bạn có thể tải miễn phí ngay bản báo cáo tại đây

Về công nghệ, bên cạnh sự tăng trưởng bền vững trong số lượng các lập trình viên web, các ứng viên có kiến thức, kỹ năng liên quan đến lập trình mobile đang dần được ưa chuộng nhiều hơn. Ngay cả Big Data cũng sẽ chuyển qua các “sân khấu nhỏ” hơn để hỗ trợ cho làn sóng mới này. Bên cạnh đó, những kỹ năng về UX/UI, phân tích dữ liệu, công nghệ về AI (trí thông minh nhân tạo) đang có bước đà trong năm 2016, cũng được dự báo sẽ bùng nổ mạnh mẽ hơn trong thời gian tới. 

vietnam-developer-report-2016-05vietnam-developer-report-2016-07

Về mô hình doanh nghiệp, các công ty startup tiếp tục nở rộ về số lượng khiến nhu cầu tuyển dụng lập trình viên gia tăng. Một trong những đề tài được nhắc đến nhiều nhất là thiếu hụt nhân sự có tay nghề cao. Nhân sự cấp cao khan hiếm khiến nhiều doanh nghiệp có nhiều hoạt động tuyển dụng đa dang để thu hút nhân tài và đưa ra các chế độ lương thưởng phù hợp nhằm giữ chân nhân viên, đáp ứng các hướng đi dài của công ty. Nhìn chung, lập trình viên giờ không chỉ là những người “thợ” thuần gia công ứng dụng, mà họ còn phải được trang bị kiến thức cũng như những kỹ năng tổ chức quản lý đội ngũ. Theo các thống kê của Topdev, nhu cầu tuyển dụng các senior dev có kinh nghiệm làm việc trong startup đang tăng mạnh trong năm 2016.

vietnam-developer-report-2016-08vietnam-developer-report-2016-13

Cụ thể, các nhà tuyển dụng IT đã có hướng đi và góc nhìn mới cho công tác tuyển dụng như thiên về khuynh hướng Marketing và Branding hơn là các phương pháp truyền thống. Số liệu cho thấy hơn 55% các nhà tuyển dụng hàng đầu Việt Nam đều tin rằng các công ty cần chú trọng đến đánh bóng tên tuổi mình trước những ứng viên hơn. Cũng chính việc tạo thương hiệu tốt, các công ty sẽ có nhiều cơ hội thu thập nhiều hồ sơ và dữ liệu thuận tiện phát triển các dự án về sau, cũng như tạo được lợi thế cạnh tranh trong việc thu hút nhiều ứng viên tốt hơn trong giai đoạn cạnh tranh khốc liệt giữa các công ty công nghệ. Trung bình, các nhà tuyển dụng thường tốn khoảng 1 tháng để kiếm được 1 ứng viên thật sự tốt và phù hợp cho đội ngũ của mình. Theo đó, các nhà tuyển dụng sẽ kết hợp nhiều công cụ mạng xã hội, tận dụng mạng lưới quan hệ hơn là chỉ đơn thuần phụ thuộc vào trang tuyển dụng, để nguồn tuyển cũng phong phú hơn và không còn phụ thuộc vào các trang job listing thông thường nữa.

vietnam-developer-report-2016-12

TẢI ĐẦY ĐỦ REPORT THỊ TRƯỜNG LẬP TRÌNH VIÊNbutton_ta%cc%a3i-da%cc%82y

 

[Infographic] Lương của nhân sự ngành CNTT dao động từ 8 – 120 triệu đồng

Lương của nhân sự ngành CNTT dao động từ 8 – 120 triệu đồng, trong đó vị trí công việc có lương cao nhất là Giám đốc CNTT (CIO) – theo tài liệu tham khảo lương 2016 của Adecco Việt Nam.

KIỂM TRA MỨC LƯƠNG CỦA BẠN NGAY

0578b93ed07b04359790d04cc3b46933

Tài liệu tham khảo về mức lương năm 2016 đã được Adecco Việt Nam thực hiện và công bố hồi quý I trong năm. Cũng theo thông tin từ Adecco Việt Nam, tài liệu này được tổng hợp dựa trên các vị trí công việc toàn thời gian cố định được khách hàng yêu cầu Adecco Việt Nam tuyển dụng trong năm vừa qua cũng như từ chính các ứng viên đã làm việc với Adecco. Thông tin gồm mô tả công việc, mức lương cũng như số năm kinh nghiệm làm việc. Các tư vấn viên của Adecco cũng đã thực hiện phỏng vấn các ứng viên được lựa chọn cho từng vị trí để xác minh mức lương đối với yêu cầu công việc.

Screen Shot 2016-08-24 at 4.19.30 PM

Tính lương chuẩn với công cụ tính lương gross – net tại TopDev

Đại diện Adecco khu vực Thái Lan và Việt Nam đã nhận định: “Thiếu hụt nhân sự có tay nghề cao đã trở thành một trong những đề tài được nhắc đến nhiều nhất trong năm 2015. Nhân sự cấp cao khan hiếm khiến nhiều doanh nghiệp cố gắng thu hút và giữ chân nhân viên tài năng hiện tại. Chế độ lương thưởng đóng một vai trò quan trọng trong việc giữ chân nhân sự, đặc biệt với sự hình thành của Cộng đồng Kinh tế ASEAN – nơi sự chuyển dịch nhân sự trong khu vực vừa là cơ hội vừa là thách thức cho các doanh nghiệp. Làm thế nào để công ty có thể tìm thấy tài năng thật sự và giữ họ ở lại mà không bị cuốn vào vòng xoáy lương – lạm phát là vấn đề cấp bách nhà lãnh đạo cần phải xem xét trong năm nay”.

Theo thông tin của nhiều đại lý cung cấp các gói bảo hiểm nhân thọ của nước ngoài như AIA, Acelife, Liberty … năm 2016 các doanh nghiệp đã đẩy mạnh việc sử dụng các gói bảo hiểm cao cấp của họ cho việc “giữ chân nhân tài”.

Xem việc làm IT tại TopDev

Nguồn: Techtalk via Funix 

Làm thế nào để IT và HR hiểu nhau hơn?

Sự chuyển đổi công nghệ số đã loại bỏ được rất nhiều công việc khó khăn hằng ngày liên quan đến nhân sự. Perry Oostdam, đồng sáng lập và CEO của Recruitee chia sẻ rằng nhân sự (HR) đã từng là bộ phận thụ động bởi những thủ tục giấy tờ, nhưng công nghệ tự động hoá các hoạt động về biên chế, lương bổng và quyền lợi của nhân viên đã giảm bớt những công việc nhàm chán, giải phóng các chuyên gia HR, giúp họ tập trung nhiều hơn vào chiến lược sáng tạo và kỹ năng phân tích.

“Công nghệ giúp tăng năng suất, nâng cao hiệu quả là một điều không thể phủ nhận”. Điều quan trọng hơn nữa là công nghệ đã giúp HR thêm động lực để đổi mới. Thay vì dùng cả ngày chỉ để duy trì bits and mảng số liệu trên giấy tờ, bây giờ HR có thể có thời gian và công cụ để tối ưu hoá và tái tạo lại quá trình này,”- ông ấy nói.

Tuy nhiên, khi công nghệ được áp dụng ngày càng rộng rãi, các chuyên gia HR sẽ cần đánh giá mối quan hệ của họ với bộ phận IT. Oostdam chia sẻ rằng đối với mỗi công ty, có một sự đối đầu cơ bản truyền thống giữa hai bộ phận này, nhưng mà điều quan trọng là công nghệ chuyển đổi ngày càng nhanh chóng sẽ làm thay đổi thái độ lạc hậu này.

CẦN SỰ HỢP TÁC ĐỂ TÌM RA ĐƯỢC PHẦM MỀM HỖ TRỢ CHO HR TỐT NHẤT

Có rất nhiều platforms HR áp đảo trên thị trường để hỗ trợ HR, tuy nhiên phòng IT có thể giúp phòng HR bằng cách sắp xếp và xác định rõ những công cụ có sẵn nào là hiệu quả nhất. Họ sẽ đảm bảo phần mềm triển khai suôn sẻ, tổ chức đào tạo tất cả nhân viên làm sao tận dụng tốt nhất các phần mềm nhân sự mới nhất.

“Hơn thế nữa, chúng ta có thể thấy rằng HR đóng vai trò lớn trong việc tổ chức hiệu quả các hoạt động, vì vậy họ cần có công nghệ phù hợp để thực hiện điều đó,”  Kris Duggan, Giám đốc điều hành của BetterWorks chia sẻ.

Để bắt kịp sự phát triển không ngừng của công nghệ, IT phải thay đổi bản thân theo xu hướng. Duggan cho rằng nhân sự và IT cũng giống như việc tập trung vào “Xu hướng nào đang xảy ra giữa người và công nghệ.” Và vì con người đang dần tiếp thu nhiều hơn trong thời đại công nghệ không ngừng thay đổi, họ cũng ngày càng mong đợi nhiều hơn sự tiện dụng mà công nghệ sẽ hỗ trợ họ trong công việc.

Cách phối hợp này đã bắt đầu từ những ngày đầu. Nếu các CIO và giám đốc nhân sự (CHRO) ây dựngmối quan hệ liên kết lẫn nhau bền chặt, luôn giao tiếp cởi mở, hiện tượng giao tiếp này sẽ xảy ra tương tự khắp các bộ phận khác – theo Gordon Laverock, Hoa Kỳ đối tác quản lý về Presence of IT – một công ty tư vấn toàn cầu thuộc ngành nhân sự.

Mối quan hệ bền chặt giữa CIO và CHRO không chỉ khuyến khích nhân viên phòng ban IT và HR cộng tác với nhau, mà còn giúp phát triển các phương pháp hay công nghệ cho toàn bộ tổ chức. Mỗi bộ phận, từ Marketing đến Tài Chính, đều dựa vào các phần mềm hay phần cứng mới và cải tiến – nhưng không phải bộ phận nào cũng hiểu được ý nghĩa của việc áp dụng công nghệ mới. Bởi vì IT và HR là hai bộ phận phải làm việc với nhiều dữ liệu nhạy cảm, các giám đốc nên hướng dẫn, đưa ra đường lối chỉ đạo để giúp họ thực hiện công việc một cách tốt nhất thông qua khả năng nhận sự thay đổi của chiến lược kỹ thuật số mới.

“Hình thành một cơ cấu quản trị không chỉ dựa vào sự đánh giá của công nghệ và quá trình thực hiện mà còn thiết lập quy trình quản trị liên tục trên mọi phòng ban của tổ chức – điều này sẽ tạo ra cơ hội mạnh mẽ để tiến tới thành công” – Laverock nói.

HR CẦN BIẾT CÁCH HOẠT ĐỘNG CỦA BẢO MẬT IT

Có rất nhiều công cụ giúp các chuyên gia HR trong quá trình làm việc, và chẳng có gì sai khi áp dụng các công cụ đó vào nơi làm việc, tuy nhiên nhân sự cũng giải quyết số lượng lớn dữ liệu một cách rất bí mật. Điều cuối cùng mà tổ chức mong muốn làm là thông tin về sức khoẻ , tiền lương hoặc những dữ liệu cá nhân khác của nhân viên không rơi vào tay người xấu khi được đưa lên các đám mây trực tuyến hoặc một máy chủ nào đó. Ngược lại, hệ quả sẽ gây ra rắc rối pháp lý nếu dữ liệu nhân sự bị khai thác hoặc bị mất – và đó là một trong những vấn đề lớn nhất mà IT có thể giúp đỡ – Oostdam chia sẻ.

Nếu bộ phận IT và nhân sự chỉ hợp tác trên một khía cạnh nào đó, việc hợp tác này nên được bảo mật. Làm việc chặt chẽ với IT là cách duy nhất để có thể đảm bảo mọi người đều được bảo vệ; đặc biệt kể từ khi HR đồng ý giao dịch các thông tin nhạy cảm hơn so với IT, biến yêu cầu bảo mật trở thành ưu tiên số 1.

TRẢI NGHIỆM BUY-IN VÀ NGƯỜI DÙNG

Nhân viên mong đợi khả năng sử dụng với các ứng dụng của doanh nghiệp, và phần mềm hỗ trợ cho HR cũng không ngoại lệ. Theo Duggan, IT không lạ lẫm gì khi lựa chọn phần mềm hay phần cứng sao cho phù hợp với trải nghiệm người dùng, bởi vì họ có nhiều kinh nghiệm có thể  hướng dẫn HR đâu là hướng đi đúng, từ đó đưa ra được lựa chọn thân thiện nhất với người dùng. Lựa chọn phần mền HR đúng đắn sẽ cải thiện độ hài lòng của nhân viên, đối tác, năng suất và hiệu quả công việc, kết quả sẽ ảnh hưởng đến doanh thu, hạn chế lãng phí thời gian và sự thất vọng của khách hàng.

Căn chỉnh hệ thống IT và HR để gặt hái doanh thu

IT và HR đều là hai bộ phận cơ bản trong mỗi doanh nghiệp và có rất nhiều công việc của họ ảnh hưởng trực tiếp đến nền tảng hoạt động của công ty. Nếu HR có thể đánh giá mức độ engage và hạnh phúc của nhân viên, họ sẽ đảm bảo lực lượng lao động luôn giữ vững động lực và giúp mang doanh thu trở lại. Đối với IT, nếu họ lựa chọn đúng công cụ thích hợp với nhân viên, công việc sẽ đạt hiệu suất cao hơn và hiệu quả tốt hơn.

“Các mối quan hệ hiện đại giữa HR và IT nên tập trung vào trải nghiệm của nhân viên mà cả 2 bộ phận muốn cung cấp. Thay vì triển khai 1 chương trình nhân sự cứng nhắc, hãy biến chương trình ấy trở nên thật “hào nhoáng”. Đội ngũ nhân viên đang tương tác với rất nhiều công cụ và công nghệ trong cuộc sống hằng ngày, do vậy HR và IT phải tích hợp được 1 chương trình nhân sự HR vào công nghệ stack hiện tại của tổ chức” – Duggan đề cập.

Một nhân viên vui vẻ và năng suất sẽ mang đến lợi nhuận tốt hơn và tính thống nhất cho toàn bộ tổ chức hơn.  Theo Laverock: “Bằng cách kết hợp 50.000 cách nhìn nhận về thiết kế, triển khai và duy trì một giải pháp tầm cỡ doanh nghiệp cộng với sự hiểu biết nhân lực của đội ngũ HR, HR & IT có thể khai thác sự hợp tác hiệu quả hơn và đem lại nhiều giá trị hơn cho doanh nghiệp.” – 

Nguồn: Techtalk via cio.com

 

Tại sao 1 người sếp tốt thường là 1 người bạn tệ?

Tôi lên vị trí quản lý lần đầu khi còn rất trẻ. Từ sale trở thành leader của 1 nhóm sale, trong đó rất nhiều người gấp đôi tuổi tôi. Bây giờ nhìn lại, thực sự thì tôi cũng không giỏi đến mức như vậy.

Tuy nhiên, trải nghiệm đó đã dạy tôi rất nhiều bài học quý giá – 1 trong số đó chính là rất khó để cân bằng giữa những mối quan hệ cá nhân và mối quan hệ công việc với những người bạn lead. Đây không chỉ là vấn đề mà các nhà quản lý mới làm lần đầu gặp phải, mà còn là câu chuyện ngay rất nhiều nhà quản lý kinh nghiệm cũng đang đặt nghi vấn và rất nhiều người thậm chí còn không cho đó là vấn đề.

Thân thiện với những người trong team của bạn đóng vai trò thực sự rất quan trọng. Trên thực tế, khi thuê nhân viên mới, 1 trong điểm ưu tiên hàng đầu của tôi là liệu tôi có muốn đi uống 1 cố bia với người đó và tìm hiểu họ nhiều hơn không? Tôi sử dụng cách suy nghĩ này như 1 linh cảm để đánh giá sự phù hợp của 1 ai đó với văn hóa của công ty.

Như đã nói, tuy việc tạo khoảng cách giữa người chủ và bạn bè có thể khá khó khăn nhưng điều đó là cần thiết. Đối xử với nhân viên như bạn thân thỉnh thoảng lại có ảnh hưởng tiêu cực đến 1 số đặc tính trong leadership, bất kể bạn là manager mới hay bạn đã quen với công việc này. Dưới đây là 1 số ví dụ về những chức năng đó, cách áp dụng chúng và 1 số lời khuyên để điều chỉnh chúng và đảm bảo sự “mạnh khỏe” của doanh nghiệp lẫn sự hài lòng của nhân viên.

1. Duy trì tính khách quan và nhất quán

Trở thành 1 leader tốt nhất định phải khách quan. Các hoạt động đánh giá chất lượng, phân tích tài năng, đánh giá điểm mạnh và điểm yếu là những nghĩa vụ đặc biệt quan trọng của 1 leader. Những nghĩa vụ này cũng đòi hỏi tinh thần khách quan gần như cao tuyệt đối. Mặc khác, tình bạn lại không mang đến điều đó.

Thật không may là các nhà quản lý thường đưa ra quyết định dựa trên mức độ họ quen thân với 1 nhân viên nào đó dù chính bản thân họ cũng không nhận ra. Sau tất cả, đây cũng là cách kết nối dễ nhất với những người mà bạn thích nhất. Nên nhớ, dù tính cách và quan điểm của nhân viên đó có tương thích với bạn hay không, thì họ thường chứng tỏ được giá trị với tổ chức 1 cách chính xác nhất dựa trên những điểm khác biệt. Một nhân viên không giống bạn sẽ mang đến những quan điểm và kĩ năng đặc biệt đến độ mà team của bạn không thể thiếu. Việc hướng về những nhân viện mà chúng ta quen thuộc nhiều nhất có thể khiến chúng ta không thấy rõ những đóng góp của các cá nhân khác.

Tuy không muốn thừa nhận nhưng những mối quan hệ thân thiết với nhân viên sẽ tạo nên sự thiên vị khó mà thay đổi được. Ví dụ rõ ràng nhất là khi bạn phải đưa ra quyết định mang tính quản trị như tăng lương, sa thải hoặc thăng chức. Tuy rất khó khăn khi phải để bất kì nhân viên nào ra đi thì bạn sẽ cảm thấy khó khăn gấp bội sau khi đã xây dựng 1 mối quan hệ cá nhân thân thiết. Dù chỉ là ngẫu nhiên thì bạn cũng dễ tha thứ cho những lỗi lầm của họ hơn so với nhân viên khác. Hãy cảnh giác, xem thử mối quan hệ giữa sếp – nhân viên đang ở vị trí nào trước khi đưa ra bất kì quyết định cuối cùng nào.

Nói cách khác, sự khích lệ tích cực và hỗ trợ thân thiện là những nghĩa vụ cần thiết.

Cũng giống như bất kì sản phẩm nào khác, content sáng tạo, chất lượng cần phải được truyền tải kịp thời và trong kinh phí cho phép. Nhưng để sản xuất được content chất lượng, sáng tạo đòi hỏi sự liều lĩnh, dám mạo hiểm, sự trải nghiệm và khám phá – những concepts rõ ràng, không thể thay đổi. Ưu tiên của tôi là luôn truyền đạt tinh thần hứng khởi đến các khách hàng của mình và thỉnh thoảng, điều đó đồng nghĩa với việc đang động viên nhân viên của mình làm việc chăm chỉ hơn hoặc nhanh hơn so với khi họ tự thúc đẩy bản thân.

Là 1 leader, trách nhiệm của tôi là tạo nên 1 môi trường làm việc nuôi dưỡng tinh thần sáng tạo và quyền tự do sáng tạo. Khi đi dạo quanh văn phòng, tôi cố gắng dành thời gian trao đổi nhanh với những người mình khi đi trên đường. Thỉnh thoảng, tôi trao đổi về công việc nhưng đa số là không.

Có thể nói, nếu việc hình thành khoảng cách quan trọng thì việc thân thiện, cơi mở, tạo sự kết nối với nhân viên cũng quan trọng không kém.

2. Những mong đợi bị xóa nhòa

“Chúng ta sẽ trở thành những gì mà chúng ta mong muốn trở thành, vì vậy hãy cẩn thận với những gì mà chúng ta mong muốn” – Kurt Vonnegut

Tôi không nghĩ Vonnegut đang ám chỉ đến việc quản lý nhân viên, nhưng nhìn chung vẫn có 1 mức độ tương thích nhất định. Tất cả chúng ta đều mong đợi điều gì đó ở bạn bè của mình cũng tương tự như cách chúng ta mong đợi ở những người sếp của mình.

Tuy nhiên, tôi có thể cá rằng không có nhiều điểm tương đồng như bạn nghĩ vậy đâu.

Điểm khác biệt chính là: Không giống như 1 người bạn, 1 người sếp là người dẫn dắt những nhân viên bằng cách cung cấp chỉ dẫn và góp ý thích hợp để giúp nhân viên phát triển. Sếp sẽ giúp bạn tối thiểu rủi ro và mang đến kết quả nào đó. Một người bạn có khuynh hướng tỏ ra thương xót khi điều gì đó xảy ra sai, thì 1 người sếp sẽ nhận diện lỗi lầm đó và thẳng thắn phân tích làm sao để chuyện đó không xảy ra lần nữa. Đây chính là 1 trong những điều quan trọng nhất mà tôi làm (dù nhân viên có nhận ra hay không)

Khi bạn mong đợi sự ưu tú, xuất sắc, tinh thần trách nhiệm từ tất cả các nhân viên, bạn sẽ công bằng và trung thực hơn, bạn cũng sẽ duy trì được tiêu chuẩn cao và theo đuổi được những mục tiêu giá trị. Khi các nhân viên biết rằng họ là thành phần quan trọng đối với team & team sẽ thất bại nếu họ không cam kết hết mình, sự gắn kết và chất lượng công việc sẽ tăng lên; họ có thể chắc chắn rằng các đồng nghiệp cũng đang ở tiêu chuẩn tương tự mà không hề có ngoại lệ nào.

Một lần nữa, điều này không đồng nghĩa là bạn phải tách biệt bản thân với tinh thần đồng đội của team. Chẳng có gì sai khi lâu lâu dành 1-2 giờ trao đổi với thoải mái với team. Nhưng nếu bạn mỗi tối thứ 3 hằng tuần để chơi game với họ, khoảng cách giữa sếp và nhân viên sẽ mờ dần đi và bạn đang lấy mất của nhân viên mình 1 trong những đặc tính giá trị nhất mà 1 người sếp có thể mang lại – khả năng giúp nhân viên phát triển bằng những góp ý khách quan.

3. Khu vực thư giãn

Cho dù bạn là 1 người lý tưởng như thế nào thì cũng không thể làm việc tốt 100% thời gian. Chúng ta đều cần 1 “lối thoát” để xử lý những căng thẳng trong công việc thường ngày khi rời khỏi văn phòng. Dù rủi ro nhưng chúng ta thường sẽ trút nỗi buồn và căng thẳng lên mạng xã hội – đây là không gian riêng tư và quyền lợi cần phải tôn trọng. 

Đó là lý do tôi khuyên bạn không nên kết bạn và theo dõi nhân viên trên mạng xã hội. Ban đầu có thể chẳng có gì, nhưng về sau sẽ xảy ra 1 trong 2 hướng: hoặc là họ sẽ kiềm chế chia sẻ quan điểm thực sự vì cảm thấy bạn đang theo dõi từng động thái của họ, hoặc quên luôn việc bạn đang theo dõi họ. Hướng thứ 2 sẽ dẫn đến những tình huống khó xử khi bạn nhìn thấy 1 bài viết trung thực về công ty, về khối lượng công việc và thỉnh thoảng về chính bạn. Trong cả hai trường hợp, bạn đã tạo ra 1 lực cản không thoải mái.

Vì lợi ích của bản thân và của team, hãy xem xét các hoạt động mạng xã hội cá nhân như một phần liên quan đến tài sản cá nhân; nó không liên quan đến bạn và không để lại lợi ích gì cho bạn khi áp đặt bản thân vào cuộc sống của nhân viên sau giờ làm việc. Nếu có một vấn đề gì về nhân viên thực sự cần phải quan tâm, họ sẽ tìm kiếm lời khuyên bằng cách thảo luận trực tiếp nghiêm túc với gia đình và bạn bè trước khi cố gắng giải quyết nó tại nơi làm việc.

Khi đặt mình vào vị trí của họ, bạn sẽ hiểu được lý do tại sao phải duy trì tính riêng tư này. Nếu tôi chấp nhận lời mời kết bạn của 1 nhân viên nào đó, họ sẽ có khả năng nhìn thấy tất cả suy nghĩ và ý kiến của tôi cho dù họ có liên quan trực tiếp đến công việc đó hay không. Cá nhân tôi không muốn nhân viên tạo ra các giả định về mình hay đem tôi ra như một tối tượng để bàn tán trong công việc, măc dù tôi không cố ý định tạo ra điều ấy và họ cũng không có ý định làm vậy. Bạn có thể hỏi thăm nhân viên làm gì vào ngày cuối tuần hay họ nghĩ gì về trận đấu bóng đá hôm qua, nhưng mạng xã hội không cho phép bạn kiểm soát những gì riêng tư của người khác. Duy trì được như vậy là chìa khoá để duy trì mối quan hệ tốt đẹp trong công việc.

Nguồn: topdev via wheniwork

50 Web & Mobile UI Kits miễn phí hot nhất đầu năm 2024 (phần 1)

Graphic là yếu tố đầu tiên nhất mà users nhìn thấy trên 1 trang web. Một giao diện người dùng tốt, chất lượng sẽ giúp users tương tác với website của bạn liên tục, liền mạch. Bên cạnh đó, giữa 2 websites hoặc ứng dụng, users sẽ chọn website hoặc ứng dụng nào có vẻ hấp dẫn về mặt thẩm mỹ và thân thiện với người dùng hơn. 

Dưới đây là tổng hợp 1 số các web và mobile UI kits hot nhất, mới nhất và hoàn toàn miễn phí đầu năm 2024. Những UI kits này hỗ trợ làm thủ công các thiết kế websites & app sáng tạo, đẹp và hữu ích. Bạn có thể điều chỉnh các thiết kế này để đáp ứng theo nhu cầu riêng, chỉnh sửa các element như button, login form, các icons của social media…

Tìm việc làm webviệc làm mobile

1. Chat

Format: Sketch, PSD [Download]

chat

2. Blog UI Kit

Format: Sketch [Download]

3. Prometheus

Format: PSD [Download]

Prometheus

4. 11thagency

Format: PSD [Download]

5. Creastore UI kit

Format: Sketch [Download]

Creastore UI kit

6. Inspirational UI Elements

Format: PSD [Download]

7. Take UI Kit

Format: PSD [Download]

Take UI Kit

8. Surfing Theme

Format: PSD [Download]

9. Kauf UI Web Kit

Format: PSD [Download]

Kauf UI Web Kit

10. Monet

Format: PSD [Download]

11. Move

Format: Sketch [Download]

12. V Avenue

Format: PSD, Sketch [Download]

13. Relate UI Kit

Format: Sketch, PSD [Download]

14. Smart Home UI Kit

Format: Sketch [Download]

15. Taxi App UI

Format: Sketch [Download]

16. Avital Mobile UI Kit

Format: PSD, Sketch [Download]

17. Beautiful Free Kit iOS

Format: PSD, Sketch [Download]

18. Material Fitness Dashboard UI

Format: Sketch [Download]

19. Trend

Format: PSD [Download]

20. Free PSD

Format: PSD [Download]

21. UI Kit

Format: PSD [Download]

22. Inspirational UI Elements

Format: PSD [Download]

23. Social Leads

Format: Sketch [Download]

24. Hooked

Format: Adobe XD [Download]

Nguồn: Topdev via Hongkiat

Nữ sinh đội tuyển Word đi theo CNTT chia sẻ bí kíp phát triển sự nghiệp

Confession là một hình thức fanpage không mới, nhưng với sự xuất hiện đầu tiên trong giới lập trình, page Lập Trình Viên Confessions mỗi tuần đều tạo cơ hội cho các bạn coder thể hiện sự “bẩn bựa” của mình, đem đến cho cộng đồng không ít lần phải “té ghế”.

Hẳn là đội tuyển Word

“Em là nữ ạ.Em sinh năm 99.Khối B là khối mạnh của em,bố mẹ định hướng cho em thi Y Đa Khoa.Nhưng thấy mấy anh chị học y bảo cực khổ vô cùng,ko nên thi vô đó.Em cũng không thích y cho lắm!Em search g.g tìm hiểu đôi chút về công nghệ thông tin,mà em thấy công nghệ thông tin khá dễ.Em cũng đã từng học về Word năm lớp 9,đội tuyển.Các anh chị bảo em rằng,con gái nên học công nghệ thông tin vì nó khá là nhàn.Em thì ko học Kinh Tế được và Ngoại Ngữ chắc không thi nổi.Anh chị em khuyên nên học ngành này,em cũng chưa quyết định.Vì em thấy anh họ em bảo em học được y đa khoa thì cái gì cũng học tốt”
Trích lời của cô em hàng xóm hỏi tôi.Ae cho tôi lời khuyên cho cô bé này.

Những chia sẻ về kinh nghiệm gầy dựng sự nghiệp

Chia sẽ kinh nghiệm cho các bạn đi theo nghề code dạo mới ra trường. Người chia sẻ không tài giỏi gì chỉ xoay sở được mức lương 2000$ trong 6 năm làm việc. Ai giỏi quá không cần phải chê đâu, tui tự biết.

Năm đầu :

+ Trường hợp thứ nhất : bạn không phải thiên tài bạn không có gia sản to đùng của ai đó để lại, không ai rủ bạn startup, bạn có tài năng bình thường như tôi . Hãy kiếm công ty nào cần người bất gấp bất kể chế độ lương bổng. Nổi tiếng bóc lột cũng không sao. Hãy lăn lê bò lết làm mọi thứ học mọi thứ. Tiền chỉ để ăn và học thêm ngoại ngữ. Hãy cố gắng code chạy được đừng nhọc nhằn lo vở sạch chữ đẹp, bạn có khả năng bị đuổi rất cao nếu không kịp deadline vì mải mê code đẹp.

+ Trường hợp thứ hai : bạn rất tự tin về tài năng của mình, bạn có vốn hay đủ uy tín để huy động vốn. Hãy làm startup đừng sợ thất bại. Hãy làm từ ý tưởng nhỏ trước. Startup nên với hai hoặc ba người là tối đa. Team rất dễ tan vỡ nếu nhiều hơn ba người. Lịch sử đã chứng minh chuyện đó rất nhiều rồi không cần phải đi theo vết xe đổ.

Năm hai: Từ năm này trở đi tôi chỉ nói về trường hợp một

+ Bạn đã có một số vốn kiến thức, bạn đủ tự tin có thể làm được sản phẩm kịp deadline. Okay giờ là vấn đề lương bổng. Lương bạn sao khi tang dưới 8 chai bạn nhảy. Lương bạn hơn 8 chai nhưng so với năm trước dưới 15% bạn nhảy. Bạn hỏi tại sao? Bởi vì đơn giản là bạn đang bị phạt chứ không phải thưởng. Công ty đang cố gang bóc lột bạn hơn thôi. Tiền lương của bạn không theo kịp tỉ lệ trượt giá. Trung Bình mỗi năm tiền ăn và tiền nhà của bạn trung bình tang 20% nếu lương bạn thấp hơn thì bạn hiểu rồi đó. Bạn càng ngày càng nghèo.
+ Bạn quyết định nhảy hay lựa chọn những công ty trả bạn cao hơn 30% so với múc lương hiện tại của bạn.

+ Từ đây bạn hay chú tâm vào luyện skill optimize.

Năm ba :

Nay bạn đã có thể code rất nhanh và dự án chạy với performance cực tốt. Lại nói về chuyện lương bổng. Cũng như năm trước nếu lương tăng dưới 20% bạn nhảy. Lương bé hơn 10 chai bạn nhảy luôn.

+ Từ năm này hay luyện kiến trúc code. Giờ bạn phải hiểu rang bạn sắp lên sub-leader hoặc leader hoặc chí ít bạn cũng phải quản lý chỉ dẫn cho những người mới vào. Thì một dự án không những cần nhanh performance tốt mà còn cần làm sao để cả team hoạt động hiệu quả. Kể cả giao cho team bạn người code chuối nhất nếu theo kiến trúc của bạn đặt ra thì dự án cũng thành công đó là mục tiêu.
Năm tư :
Nay bạn đã phải là một senior hoặc leader không phải thì hãy tự nhìn lại bản thân. Nếu theo đường quản lý thì hãy học thêm những khóa ngắn hạn về kỹ năng giao tiếp, lập kế hoạch. Nếu theo đường nghiên cứu thì hãy học thêm một lĩnh vực khác có liên quan. Chẳng hạn front-end thì học thêm back-end. Đừng quên ngoại ngữ.
Lại nói về lương nếu năm nay lương bạn dưới 16 triệu bạn nhảy.
Năm thứ năm trở đi bạn hãy làm việc ổn định đừng bay nhảy nữa. Lúc này trở đi bạn kiếm thêm tiền bằng các dự án ngoài, như hùn vốn mở tiệm…
Hãy học thêm thứ gì đó như kinh tế chẳng hạn.

Tham gia chia sẻ ngay tại Lập Trình Viên Confession

Để làm lập trình viên sau 1 năm, nên học gì?

Thực sự thì mình chỉ mới đi làm được gần 1 năm, skill cũng chưa có nhiều nên cũng không thể chém gió sâu vào kỹ thuật được. Lúc trước mình theo mảng front-end nhưng ngày càng nhận ra không có hứng thú nên dần dà chuyển sang back-end từ lúc nào không hay, và mình chỉ có một số lời khuyên dành cho lập trình website chứ bên ứng dụng thì mình không biết.

Kỹ năng cần học thì quá nhiều, mỗi công ty có mỗi yêu cầu và thay đổi theo thời gian. Kỹ thuật phát triển không ngừng nên một khi đã theo ngành này thì xác định là phải học cả đời.

Tới đây nhiều người sẽ có thể chém em rằng ôi chú em mới đi làm được một năm thì biết gì về kỹ thuật mà nói! Ahihi, cười trừ. Thực ra thì trình độ không chỉ cân đo đong đếm bằng số năm kinh nghiệm, chủ yếu là số vấn đề mình đã gặp qua và cách giải quyết nó, số dự án đã hoàn thành, bác tự học bao nhiêu giờ một ngày, từ đó rút ra kỹ năng của bác có cứng không. Chứ còn nói “Tôi có 5-6 năm experience nhưng trong 5-6 năm đó toàn làm xoàng xoàng, dự án thì xong nhưng kiểu đúng deadline không hơn không kém, và chiều chiều canh hết giờ làm rồi về”…. chấm hết, không thể đánh giá chính xác với trường hợp như vậy.

Thôi vô vấn đề chính, vậy để làm lập trình thì cần những gì, lộ trình thế nào….. Cái đó phụ thuộc vào hướng bạn đi.

screen-shot-2016-11-03-at-8-59-18-am

Hướng front-end developer

Hướng này có rất nhiều kỹ thuật, nhưng mình nghĩ các bạn nên học những kỹ thuật chắc chắn cần trước. Còn lại phụ thuộc vào công ty các bạn làm có yêu cầu học thêm không. Danh sách thì dài đằng đẳng như thế này đây: https://github.com/dypsilon/frontend-dev-bookmarks

Nhưng các skill sau đây nhất định phải có khi đi làm, ít nhất là để làm được việc:

  • HTML (HTML5 càng tốt)
  • CSS (CSS3 càng tốt)
  • Javascript cơ bản (jQuery). Nói trước là Javascript chuyên sâu rất hay và rất khó gặm.
  • Photoshop cơ bản
  • Illustrator cơ bản
  • Một số front-end framework như Twitter Bootstrap, AngularJS mới nổi….

Tham khảo các vị trí tuyển dụng front end lương cao tại Topdev

Hướng back-end developer

Hướng này thì kinh tởm hơn, theo mình nếu đã chọn con đường chông gai này thì chỉ nên chọn 1-2 ngôn ngữ lập trình mà theo (học sâu). Mình thà làm vua một nước chứ nước nào cũng thích thì dễ tẩu hỏa khi luyện công lắm. Các kỹ năng cần chủ yếu là nền tảng và phụ thuộc vào tư duy logic của bạn:

  • Các nền tảng cơ bản về ngôn ngữ bạn định làm, mấy kiến thức đơn giản này phải khắc cốt ghi tâm chứ đôi khi cũng có người quên và phải đọc lại từ Google. Vòng lặp, cách khai báo biến, hàm, hướng đối tượng….. Đặc biệt phỏng vấn bao giờ cũng có hướng đối tượng.
  • Kiến thức về database MySQL, Microsoft SQL.
  • Rộng hơn là Design Pattern (Singleton, Factory, Strategy, MVC, HMVC….).
  • Các framework hot tính tại thời điểm viết bài này, đơn giản nhất và dễ nhất là CodeIgniter.

Bạn nên học một framework sau đó đi làm và học tiếp theo để dễ thấm và có cơ hội làm nhiều hơn. Theo lời khuyên của mấy đàn anh đi trước thì 1 developer cần biết 2 framework và 1 CMS nếu muốn đi đánh dự án với các công ty outsource.

Tham khảo các vị trí tuyển dụng backend lương cao tại Topdev

Hướng full stack

Là full-stack developer có nghĩa là bạn phải cởi mở đối với các công nghệ mới, có hiểu biết sâu về một vài công nghệ và phải có sự hiểu biết về cách một ứng dụng web được thực hiện từ một khái niệm thiết kế cho đến khi các sản phẩm đã hoàn thành.

screen-shot-2016-11-03-at-9-00-03-am

Full-stack developer không có nghĩa là phải thông thạo mọi công nghệ mà chỉ cần có hiểu biết về các ngôn ngữ đang có, có thể giao tiếp một cách thông minh giữa các thành viên trong nhóm và là một nguồn lực tốt, sẵn sàng nếu dự án cần đến bạn.

Full-stack trên thế giới hiện nay có thể cần những kỹ năng sau (tham khảo):

  • Không giới hạn mình ở bất kỳ 1 language hay 1 framework hay 1 chuyên môn cụ thể nào.
  • Có kiến thức IT tổng quát và khả năng tìm hiểu sâu khi cần thiết bất kỳ vấn đề gì thuộc: (1) Server – Network (2) Database (3) Web frameworks (4) Mobile frameworks
  • Hiểu và ứng dụng được UI/UX vào trong projects
  • Nắm bắt nhanh Business Logics và chuyển được thành Technical Logics
  • Biết được khi nào cần hiểu rộng, khi nào cần hiểu sâu một vấn đề
  • Có thể lập trình được ít nhất 1 ngôn ngữ lập trình web và 1 ngôn ngữ lập trình mobile (iOS/Android)

Tham khảo các vị trí tuyển dụng full stack lương cao tại Topdev

Hiện nay khá nhiều người theo hướng này, một phần do cái danh full-stack khá là hay ho (cảm giác như super hero), một phần là hiện nay các nhà tuyển dụng cũng yêu cầu khá cao về skills của developer. Các công nghệ chết tiệt trong thế giới lập trình lỗi thời đủ nhanh để cuốn trôi bất kỳ 1 “nền tảng” vững chãi nào. Do đó nếu bạn chỉ biết 1 ngôn ngữ, biết 1 nền tảng nào đó, hiện tại bạn vẫn có thể kiềm tiền ngon ăn với nó, nhưng liệu 2 – 4 năm nữa thì không chắc chắn.

Do đó bạn có thể là 1 “super-code dạo” hiện tại, nhưng chưa chắc điều đó sẽ đảm bảo cho bạn một tương lai chắc chắn cho những năm tới đâu.

Đối với ai đi theo hướng này, nếu được nên học front-end trước rồi từ từ mò qua back-end bởi vì trong 1 năm bạn không thể nào trở thành full-stack đâu – cũng có nhiều người tự phong, ahihi. Và tất nhiên mình cũng khuyến khích (nếu được) các bạn nên đi theo hướng này (về lâu về dài) để đáp ứng nhu cầu công việc trong tương lai.

Tất cả những gì cần thiết mình đã nêu ở trên, nếu các bạn biết về chúng thì có thể đi code dạo và kiếm cơm được rồi. Sau này đi làm cố gắng trau dồi nhiều thật nhiều kỹ năng để tăng giá trị bản thân lên (tăng lương).

Techtalk via justfunny

Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev

Giải đáp những thắc mắc kĩ thuật quan trọng về Microservices

AMA (Ask Me Anything) là 1 sự kiện Q&A (Hỏi đáp trực tiếp) diễn ra đều đặn trên fanpage của TopDev vào thứ 6 hằng tuần. AMA đón nhận sự xuất hiện của anh Nguyễn Minh Khôi CTO – DKT Technology giúp các bạn trẻ đam mê IT giải đáp những thắc mắc liên quan đến Microservices & xây dựng kiến thức hệ thống.

Trước tiên, chúng ta hãy tìm hiểu 1 chút về quá trình công tác của anh Khôi nhé!

  • 8/2007 – 9/2009: anh là developer của FPT
  • 5/2009 đến nay: anh đồng hành cùng DTK trong vai trò CTO
  • Anh đã từng góp mặt tại các sự kiện công nghệ hàng đầu tại Việt Nam với vai trò Speaker, điển hình như sự kiện Vietnam Web Summit vừa qua.

Q: Chào anh, Anh có thể chia sẻ về việc sử dụng esb trong esb và các cách liên lạc giữa các service cũng như API Gateway được không a.

A: ESB là khái niệm trong SOA, microservice không dùng cái đó. Bản thân các service khi gọi nhau phải hiểu được giao thức & format dữ liệu của nhau. Đơn giản nhất là các microservice gọi nhau qua Rest API sử dụng Json.

Còn API Gateway đóng vai trò như 1 cửa ngõ chung để các ứng dụng bên ngoài gọi vào các microservice bên trong. Các microservice gọi trực tiếp nhau không thông qua API Gateway. Vấn đề là làm thế nào để các microservice (và cả API Gateway) biết được thông tin của microservice khác để gọi. Khi đó trong hệ thống cần có 1 thành phần gọi là Service Discovery.

Q: Câu hỏi của mình đây (và có thể là câu hỏi mong muốn của nhiều bạn): áp dụng microserver có điểm gì dở nhất cho việc phát triển một hệ thống phần mềm, và ngoài kiểu Rest call giữa các microservice, thì còn kiểu nào nữa? Mỗi kiểu áp dụng cho trường hợp nào?

A: Mình xin trả lời nhé:

Về điểm dở của Microservices đó là việc phát triển ứng dụng khó hơn, vận hành & xử lý lỗi cũng khó hơn nhiều. Stack công nghệ cũng thay đổi rất nhiều so với làm ứng dụng Monolithic.

Bạn cần xác định trước 1 số yếu tố khi triển khai microservice:
1. Đây có phải là sản phẩm phát triển lâu dài hay không?
2. Mức độ scale của hệ thống có lớn không (scale về lượng người dùng hoặc về dữ liệu)?
3. Team có sẵn sàng đối đầu với những khó khăn khi chuyển sang mô hình này không?

Khi bọn mình bắt đầu làm cho sản phẩm Bizweb thì 2 câu hỏi đầu đã xác định được luôn rồi. Câu số 3 thì cũng ko gặp vấn đề gì vì cả team đều rất máu chiến, mặc dù lúc đó chưa biết gì.

Microservice có một số mô hình phát triển:
1 là dùng Restful thuần túy, sử dụng format JSON (hoặc Protobuf, Avro…). Các service gọi service khác đồng bộ hoặc bất đồng bộ.
2 là theo mô hình message queue, sử dụng các hệ thống message như RabbitMQ, Kafka… để tương tác giữa các microservice. Cách này là bất đồng bộ hoàn toàn.
3 là dùng Event Sourcing Pattern, phân tách phần đọc & ghi. Mô hình này thì bên mình chưa triển khai.

Độ khó thì tăng dần từ mô hình 1 -> 3

Theo mình cái dở (ý không phải cái khó) có nghĩa khác. Cái dở – cũng là cái hay của microservice chính là vì nó tách rời dữ liệu và logic các module của hệ thống, lỏng lẻo hơn, chỉ liên quan đến nhau bởi các API được define để giao tiếp nhau theo quy tắc định trước, nó không đề cao tính integrity về dữ liệu lẫn đồng nhất chức năng của cả hệ thống, để có được tính uyển chuyển độc lập cao hơn giữa các module, ví dụ trong quản lý khách hàng và hợp đồng dịch vụ kiểu monolithic, thì thường cùng 1 DB, các entitty hay các bảng thường có ràng buộc bởi khoá ngoài với nhau để đảm bảo đồng nhất dữ liệu, và cũng gắn với nhau về quy trình, ví dụ không bao giờ có chuyện tạo ra hợp đồng dịch vụ web rồi mới tạo ra bản ghi khách hàng của hợp đồng đó, phải đúng thứ tự bởi mỗi bước sẽ bị kiểm tra tính chất này.

Với microservice thì có thể nếu module quản lý hợp đồng và module quản lý khách hàng là 2 service độc lập, hợp đồng có thể tạo trước, và gắn mã khách hàng sau đó 1 quy trình độc lập khác, chả có gì ngăn cản lập trình viên không làm điều đó cả, và người thiết kế phần mềm phải tính toán các trường hợp ngoại lệ như thế như là 1 đặc tính phải có.
Đây chính là đặc điểm khiến cho microservice không phù hợp để áp dụng cho một số bài toán cần sự đồng nhất cao của dữ liệu và cần chặt chẽ của logic, nếu nó quá phức tạp, như bài toán cần tính chất transaction chắc chắn như banking, hoặc hệ thống thanh toán điện tử.

Ý kiến vậy thôi.

Sorry mình giờ mới trao đổi tiếp. Đúng như bạn nói, bản thân kiến trúc microservices là tách thành các module nhỏ. Và theo nguyên lý CAP (Consistency, Availability, Partition tolerance) thì chỉ 2 trong 3 yếu tố trên là đc đảm bảo trong 1 ứng dụng. Microservices thường đáp ứng 2 yếu tố A & P, còn yếu tố C về tính nhất quán thì ko đảm bảo dc. Nhưng nếu yêu cầu nghiệp vụ hệ thống chấp nhận Eventual Consistency – tức là cho phép độ trễ trong việc đồng bộ dữ liệu thì microservices vẫn đáp ứng đc. Với cách giải quyết phù hợp thì mình nghĩ microservices vẫn có thể áp dụng được vào các bài toán banking hoặc thanh toán điện tử. Ngoài ra một số hệ thống banking mình biết còn áp dụng mô hình CQRS – tách biệt phần ghi & phần đọc dữ liệu, cho phép có độ trễ nhỏ khi hiển thị thông tin thanh toán cho ng dùng.

Q:  Em chào anh Khôi ạ, hiện tại em có một dự án về bán hoa online tuy nhiên bên client yêu cầu kích thước của ứng dụng siêu nhỏ, vậy làm sao để dữ liệu không bị phân tán quá mức cần thiết ạ.

A: Anh chưa rõ câu hỏi của em lắm. Ứng dụng của e là ứng dụng web hay mobile, dữ liệu hiện tại phân tán như thế nào (lưu cả ở client lẫn server)? Em bổ sung thêm a sẽ tư vấn đc

Q: Anh có thể chia sẻ về những kinh nghiệm gặp khó khăn cũng như những giải pháp mà anh đã từng trải trong suốt quá trình sử dụng microservice. Có bài học nào a nhớ nhất k?

A: Khó khăn thì có nhiều đó em, a chia sẻ lại mấy cái gặp phải khi phát triển Bizweb:
– Thay đổi tư duy từ close source sang open source: trước đó team chỉ làm ASP.NET + SQL Server + Windows Server, còn lại gần như không áp dụng công nghệ gì khác. Sau đó thay đổi 180 độ sang các giải pháp open source: Java Spring, Netflix OSS, MongoDB, Nginx, Linux, Kafka, Docker…Mà trước đó gần như cả team chưa biết gì, tự học từ đầu hết. Sau 6 tháng ra được bản demo sản phẩm, 8 tháng ra mắt phiên bản chính thức.

– Việc vận hành, phát hiện & xử lý lỗi khó hơn nhiều: trước kia mô hình đơn giản, vận hành rất dễ, chỉ cần monitor mỗi con máy chủ web + máy chủ db là xong. Nhưng khi chuyển sang microservices thì nó là 1 hệ thống phân tán, phải xử lý mấy chục service, chạy trên nhiều máy chủ (vật lý & ảo hóa) khác nhau. Nói thật là nhiều khi gặp lỗi mất nguyên 1 ngày mới tìm ra được nguyên nhân 😀 Việc xây dựng hệ thống monitor dịch vụ là cần thiết và nên được đầu tư sớm.

– Phải luôn luôn học hỏi, nâng cao kỹ năng của dev & test: món này ko dành cho bạn nào lười học hỏi, các bạn sẽ nản ngay vì nó khá phức tạp. Anh nhận thấy sau 2 năm các bạn trong team kỹ năng phát triển rất nhanh & giỏi.

Q: Chào anh, anh chia sẻ giúp e những tài liệu hay về Microservices vs anh. Thank anh nhiều

A: Có 1 số nguồn e có thể tham khảo nhé:
http://microservices.io/
https://martinfowler.com/articles/microservices.html
http://www.slideshare.net/juminchoi/bizweb-microservices-architecture
https://www.nginx.com/blog/introduction-to-microservices/

Kinh nghiệm của a khi triển khai là cứ làm mô hình ban đầu đơn giản rồi upgrade nó dần dần.

Q: Anh Khôi cho em hỏi, làm thế nào để quản lý việc cập nhật dữ liệu một cách đồng bộ với nhiều bảng trong cơ sở dữ liệu trung tâm ạ ?

A: Ý em muốn nói đến là thực hiện distributed transaction trong microservices hả? Bên anh hiện tại đang tránh việc đó, nói chung đó là 1 cái khó. Anh Nghĩa bên Tiki có 1 buổi chia sẻ về distributed transaction thứ 7 vừa rồi, slide đây em: http://www.slideshare.net/NghiaLeMinh1/distributed-transaction-lastest-version

Q: Anh ơi, muốn test 1 service nhỏ trong khối microservice thì đôi khi phải yêu cầu chạy các services khác vì các services phụ thuộc dây chuyền với nhau. Vậy nên việc test sẽ trở nên rất khó khăn và anh có thể chia sẻ 1 vài hướng giải quyết được không ạ? Và nếu 1 mắt xích trong khối microservice thay đổi thì các mắt xích khác có thay đổi theo không? Và đến đây việc testing có còn khả thi?

A: Đúng là việc test trong hệ thống microservices là khá khó khăn. Về vấn đề môi trường thì cần phải có đủ các service chạy mới test được nên để test trên máy của dev là khá phức tạp. Bọn anh có 1 máy chủ dev ở công ty, trên đó chạy đủ các service (service discovery, api gateway, redis, kafka…). Các bạn có thể cấu hình project trên máy của dev sử dụng lại các tài nguyên đó, hoặc nếu máy bạn nào cấu hình tốt thì chạy full service.

Khi 1 service thay đổi thì các service liên quan cũng cần update theo, nó không khác gì việc phát triển ứng dụng thông thường. Tuy nhiên trong thiết kế thì bên anh tránh tối đa việc gọi chéo giữa các microservices. Để làm được thế thì việc phân tách Bounded Context cần đảm bảo.

Bên a cũng đang áp dụng automation test để test API. Test từng API 1 thì dễ, nhưng để test theo quy trình (gọi service A, lấy kết quả làm tham số đầu vào gọi sang service B, C) thì chưa tìm ra được công cụ nào làm việc đó. Thế nên chỉ còn 1 cách là sử dụng Selenium Webdriver để lập trình automation test thôi.

Q: anh cho e hỏi là từ dev lên CTO, mình cần “update” bản thân những mảng nào hay kĩ năng nào đặc biệt quan trọng k anh?

A: Căn bản 1 công ty cũng chỉ có 1 ông gọi là CTO nên câu hỏi này khó trả lời quá😀. Từ ngày DKT mới thành lập thì a đã là CTO rồi.
Nhưng nếu nói về hướng phát triển của 1 dev thì có thể đi theo 2 hướng:
– Trở thành chuyên gia: ít nhất là của 1 lĩnh vực nào đó, ví dụ DB Expert (MySql, SQL Server, Oracle), Software Architect, Enterprise Architect, Cloud Solution Architect. Cái này a nghĩ cần cày cuốc nhiều & cũng cần có tố chất chút.
– Trở thành quản lý: trưởng nhóm, trưởng phòng. Cần có các kỹ năng mềm về quản lý & giám sát công việc, xây dựng team.

CTO ở VN có lẽ là tổng hòa của cả 2 cái trên (R&D, định hướng công nghệ, hỗ trợ các đội giải quyết các vấn đề khó cả nhân sự lẫn kỹ thuật, xây dựng quy trình, giải đáp thắc mắc tâm sinh lý)

Q: Anh có thể giải thích nếu các dịch vụ nhỏ thiết kế phục thuộc vào nhau theo chuỗi. A gọi B, B gọi C, C gọi D. Nếu một mắt xích có giao tiếp API thay đổi, liệu các mắt xích khác có phải thay đổi theo không vậy anh ?

A: Về thiết kế microservices thì đây là 1 việc nên tránh:
Thứ 1 là nó tăng sự phức tạp của hệ thống lên nhiều (khó phát triển, khó debug), tăng sự phụ thuộc giữa các microservices. Để tránh việc đó thì cần phân tích bài toán nghiệp vụ thật kỹ để chia hệ thống ra các domain khác nhau, gọi là Bounded Context. Mỗi 1 microservices là 1 Bounded Context, và hầu hết mọi thao tác xử lý sẽ nằm trong microservices đó, ko phải gọi qua thằng khác.
Thứ 2 là ảnh hưởng performance do gọi chéo nhiều quá (tăng network latency)
Thứ 3 là khi thay đổi 1 microservices e sẽ phải sửa những microservices có gọi đến nó. Như vậy là mất đi khá nhiều ý nghĩa của việc triển khai microservices (loose coupling)

Q: Anh ơi, liệu Microservices có đúng trong đa số trường hợp bài toán? Có ngoại lệ nào hay không?

A: Ko có cái gì gọi là “one size fits all” cả em. Thế nên microservices cũng chỉ phù hợp với 1 số bài toán & cần đội ngũ phát triển có kỹ năng tương đối.
Áp dụng microservices sẽ giúp ích nhiều khi cần quan tâm 1 số vấn đề như:
1. Sản phẩm phát triển lâu dài
2. Xử lý lượng người dùng hoặc dữ liệu lớn
3. Scale team phát triển
4. Bảo mật mã nguồn
5. Đảm bảo phát triển liên tục (CI/CD), update tính năng này ko làm downtime tính năng kia

Ngoài ra thì đội ngũ phát triển cũng cần có kỹ năng khá & ham học hỏi.

Q: Chào anh, hiện tại thì làm thế nào để kiểm soát danh tính người dùng trong Microservice một cách đơn giản mà không bị phân tán dữ liệu ?

A:  Dữ liệu danh tính người dùng thì chỉ lưu ở 1 nơi thôi em, khi nào cần xác thực thì truy vấn vào đó.

Có 2 cách xử lý authentication & authorization trong microservices.
1 là xử lý tập trung: có thể để ở API Gateway hoặc có 1 microservices thực hiện việc authentication/authorization, các service khác sẽ gọi đến service đó để kiểm tra quyền.
2 là authentication/authorization trên mỗi microservices. Khi đó sẽ viết nó thành 1 thư viện dùng chung giữa các microservices. Việc update thư viện này cũng ko thường xuyên nên không gặp phải vấn đề.

Và bên anh đang áp dụng cách thứ 2, nó tránh việc phải gọi đến service xác thực quá nhiều. Em có thể tìm hiểu chi tiết hơn về giải pháp trong slide anh có share ở mấy comment khác đó

Cảm ơn anh Minh Khôi đã rất nhiệt tình giải đáp cho các các bạn fan của Topdev những thắc mắc liên quan đến Microservices.

Chúc các bạn dev nhiều thuận lợi trong công việc và cuộc sống.

Bill Gates: 3 kỹ năng đảm bảo giúp bạn kiếm được việc!

Bill Gates, như chúng ta đều biết, là người đàn ông giàu có nhất thế giới! Bill Gates, tên thật là William Henry Bill Gates, 1 ông trùm kinh doanh, 1 doanh nhân, 1 nhà từ thiện, 1 nhà đầu tư và cũng là 1 lập trình viên.

Vì vậy, nếu bạn đang bâng khuâng lựa chọn ngành nghề, vì nhất định không thể bỏ qua lời khuyên của Bill Gates.

Theo Bill Gates, các công việc trong tương lai sẽ thuộc về những người giỏi trong các lĩnh vực như Khoa học, Engineering và Toán học. Dựa trên dữ liệu thu thập mà Bill Gates thu thập được thì background liên quan đến 3 ngành này sẽ được săn đón nhiều nhất.

“Bạn không chỉ biết viết code, mà còn phải hiểu các engineers có thể làm gì và không thể làm gì”

 

Doanh nhân tỷ phú cũng bổ sung thêm các nhân viên thành thạo Khoa học, Engineering và Toán học chính là “tác nhân thay đổi các tổ chức. Điều này bắt nguồn từ thực tế là Trí thông minh nhân tạo, IoT và Machine Learning sẽ có những bước tiến mạnh mẽ hơn trong những năm tới.

Nguồn: blog.topdev.vn via Techviral

7 cách giúp nhân viên làm việc năng suất trong mùa lễ

Mùa lễ Tết đang đến gần.

Đối với các nhân viên bán lẻ của Mỹ, Halloween kết thúc đánh dấu 1 cột mốc đáng sợ hơn: lễ Tết. Các hoạt động kinh doanh bùng nổ, nhân viên kiệt sức, áp lực và không có thời gian dành cho gia đình vì phải làm việc tăng ca. Là chủ 1 doanh nghiệp nhỏ, bạn sẽ nhanh chóng nhận ra đây chưa hẳn là thời điểm tuyệt vời nhất trong năm.

Giữ cho nhân viên của bạn có động lực và làm việc hiệu quả trong kỳ nghỉ lễ là điều khó khăn. Họ đang trải qua những nhu cầu liên quan đến kỳ nghỉ trong cuộc sống cá nhân của họ. Họ có những kỳ vọng về kỳ nghỉ của riêng họ, và đối với hầu hết họ, có lẽ là tận hưởng kỳ nghỉ chứ không phải làm việc 24/7.

Dưới đây là một số điều cần ghi nhớ trong kỳ nghỉ lễ nếu bạn muốn duy trì động lực cho cả nhóm của mình

Xem thêm Tại sao phải giữ chân nhân viên?

Hãy cho họ thời gian nghỉ

Với 1 tổ chức nhỏ, chỉ cần 2 nhân viên nghỉ thôi doanh nghiệp sẽ gặp khó khăn ngay. Bạn có thể đóng cửa vào ngày Giáng sinh nhưng không thể đóng cửa liên tiếp 4 ngày. Vậy làm cách nào để kiểm soát tình trạng PTO (Personal Time Off – Thời gian nghỉ cá nhân) vào ngày lễ  1 cách tốt nhất?

Đừng bủn xỉn quá.

Nếu muốn team của mình hoạt động với 100% công suất dù phải bỏ lỡ thời gian quý giá bên gia đình, bạn cần phải thể hiện rõ bạn trân trọng công việc của họ bằng các giá trị tương đương. Từ chối thời gian nghỉ của nhân viên trong thời gian lễ sẽ dẫn đến cảm giác giận dữ, mích lòng, đi kèm với việc nhân viên không còn động lực làm việc nữa.

Nên nhớ, làm việc hơn 40 giờ 1 tuần sẽ giảm hiệu suất công việc và mức 60 giờ/ tuần cũng sẽ ảnh hưởng đến doanh nghiệp về lâu dài. Tình trạng kiệt sức sau thời gian lễ là có thực và sau lễ Tạ ơn, nhân viên sẽ có nguyên 1 tháng để ra đi.

Thay vào đó, hãy cho nhân viên thời gian nghỉ. Bạn có thể bàn bạc với team về số lượng ngày nghỉ, và thiết lập 1 sơ đồ ngày nghỉ để họ chọn – theo mức độ thâm niên, xố số may mắn hoặc ai đặt lịch trước thì nghỉ trước. Càng làm thao tác này sớm, bạn càng quản lý được khoảng thời gian nào có nhiều yêu cầu xin, nên ưu tiên yêu cầu của ai trước và giải quyết các ngày nhiều người nghỉ ra sao. Nếu bạn bắt 1 vài nhân viên làm việc 1 tuần nghỉ lễ, hãy cân nhắc cho họ quyền ưu tiên được nghỉ vào đợt kế tiếp.

Tặng quà cho nhân viên của bạn

Tại sao không tặng nhân viên của bạn những món quà vật chất thực tế?

  • Cốc du lịch tùy chỉnh.
  • Áo phông hoặc áo khoác.
  • Bộ theo dõi bước.
  • Sách về lãnh đạo hoặc các chủ đề thú vị khác.
  • Các tạp chí có thương hiệu.
  • Một cái gì đó hoàn toàn không thực tế nhưng hoàn toàn vui vẻ.

Đặt mục tiêu cuối năm cho team (hoặc không)

Hãy quên đi những quyết tâm của Năm mới và thực hiện những mục tiêu vào cuối năm. Vào ngày 31/12, bạn muốn đạt được thành tựu gì cho doanh nghiệp của mình? Làm thế nào để bạn và nhân viên phối hợp cùng nhau để đạt được mục tiêu đó?

Dù mục tiêu là gì, cũng phải đảm bảo mọi thành viên đều có thể đóng góp vào đó. Mục tiêu có thể là đạt hạn ngạch cuối năm, số lượng đơn đặt hàng nhân đôi hoặc đạt thêm số X khách hàng mới. Bạn cũng có thể kéo giãn mục tiêu – 1 con số yêu cầu team nỗ lực hơn mới đạt được, nhưng không quá bất khả thi. Luôn tưởng thưởng xứng đáng với ai làm thêm việc. Đề xuất thêm ngày nghỉ, tiền thưởng để họ mua quà cho người thân hoặc trao cơ hội được nghỉ lễ cho lần tới.

Bằng email cập nhật hằng ngày hoặc cột mốc thời gian gắn ở nơi dễ thấy, bạn sẽ theo dõi mức độ tiến bộ dựa theo mục tiêu đã kéo giãn của bạn. Cổ vũ tinh thần của team khi gần đạt mục tiêu, tăng thêm động lực bằng 1 buổi coffee hoặc bữa trưa miễn phí.

Tuy nhiên, nếu các nhân viên của bạn đang “lầy lụa”, thì đây có thể không phải là ý tưởng tốt nhất vì sẽ tạo ra nhiều áp lực. Ngược lại, nếu nhân viên đang sục sôi tinh thần cạnh tranh mà không lo bị kiệt sức thì cứ thế mà tiến.

Có tổ chức

Rất khó để theo dõi tất cả mọi thứ. Thường thì giữa việc cân bằng công việc, cuộc sống và ngủ, những người chủ của các doanh nghiệp nhỏ chỉ chọn 2 mà thôi. Bí quyết để giữ được sự tỉnh táo của chính bạn và của team chính là: tính tổ chức.

Luôn đi trước deadlines. Biết rõ những gì cần hoàn thành và thời điểm nào cần hoàn thành. Bắt đầu vạch rõ ngày cuối cùng có sẵn các đơn đặt hàng từ khách hàng hoặc thời điểm cuối cùng để gửi hàng. Đảm bảo mọi người biết rõ về lịch nghỉ hoặc ai sẽ nghỉ thời gian nào hoặc ai sẽ làm thay phần việc của ai. Cập nhật danh sách về người chịu trách nhiệm thông báo khi thời tiết bất thường hoặc các tình huống trì hoãn chuyến bay…

Nếu đến cuối cùng, nhân viên lại muốn làm việc tại nhà, hãy đảm bảo hệ thống lưu trữ đám mây hoặc các files online và các hệ thống quản lý dự án luôn cập nhật. Giả như vào 10h tối đêm trước Christmas có 1 khách hàng gọi đến hỏi hàng hóa của họ ở đâu hoặc tại sao hàng vẫn chưa chuyển đi, bạn vẫn có thể biết chính xác điều gì đang xảy ra.

Nắm bắt tinh thần lễ hội

Mang tinh thần vui vẻ vào công việc với 1 vài cuộc thi hoặc trò chơi trao đổi quà. Cho phép nhân viên đội mũ hoặc mang lễ phục khi đi làm. Chụp các bức ảnh nhóm và ghép với nhau thành 1 tấm thiệp lễ hội để gửi đến khách hàng và nhân viên.

Dù không trực tiếp mang tinh thần lễ hội vào công việc đi nữa thì thái độ của bạn vẫn sẽ lay động nhuệ khí của nhân viên. Hãy nói cho họ biết bạn trân trọng họ ra sao. Nếu nhân viên của bạn (hoặc bạn) cần 1 không gian an toàn hoặc 1 cái gì đó để trì hoãn áp lực từ những người mua hàng, hãy sắp xếp 1 phòng riêng để giải tỏa căng thẳng. Đó có thể là 1 khu vực ít được sử dụng, kèm túi ngủ lớn, vài bánh snack hoặc bất cứ thứ gì nâng cao tinh thần của nhân viên.

Bạn cũng có thể yêu cầu team tải 1 ứng dụng luyện thiền như Headspace và dành ra vài phút đầu ngày để tập hợp các nhân viên lại thành 1 nhóm. Nghiên cứu đã cho thấy chỉ cần thiền trong vài phút là đủ để giảm mức độ stress. Ngoài ra bạn có thể thực hiện vài hoạt động team building như yêu cầu mỗi người trong team đi vòng quanh và nêu 1 thứ khiến họ yêu quý nhất ở các thành viên trong team. Hoạt động này sẽ kích thích tinh thần trò chuyện mở và tăng nhuệ khí của nhân viên, cùng tập trung vào hoàn thành công việc.

Đăng kí tham dự 1 sự kiện tình nguyên cho cả team

Điều gì sẽ xảy ra nếu bạn có thể nâng cao cảm giác hạnh phúc trong nhân viên, giảm nguy cơ trầm cảm và gia tăng vòng đời sống của họ? Đúng vậy, bạn không thể làm tất cả điều đó trong 1 ngày nhưng có 1 thứ mà bạn có thể bắt đầu: làm tình nguyện. Tham gia hoạt động tình nguyện trong cộng đồng sẽ tăng khả năng vận động, các kết nối xã hội và hạnh phúc cá nhân – 1 công thức hoàn hảo dành cho các nhân viên năng suất và có tinh thần cao. Thêm nữa, hầu như 75% nhân viên muốn công ty của họ hỗ trợ vấn đề xã hội nhiều hơn.

Các hoạt động mà team có thể tham gia như: phát đồ ăn từ thiện, hỗ trợ những gia đình gặp khó khăn hoặc thăm quan 1 trại thú nuôi. Đây là cơ hội để nhân viên dành thời gian bên nhau ngoài công sở.

Khuyến khích nhân viên vận động

Tập thể dục tại nơi làm việc là 1 phương pháp quan trọng giúp cho nhân viên hạnh phúc và năng suất hơn. Các bài tập thường xuyên sẽ mang đến nhiều năng lượng hơn xuyên suốt cả ngày và thậm chí là nhiều tế bào não hơn, so với những đồng nghiệp không tập thể dục, thể thao. Những người có nhiều khả năng luyện tập, đặc biệt ở cường độ cao hơn là khi họ luyện tập theo nhóm.

Nếu trong team của bạn đã có nhiềuthành viên thường xuyên luyện tập thì bạn có thể kêu gọi họ cùng nhau tham gia các cuộc thi thể thao mùa lễ hội. Hoặc thách thức các nhân viên đo lường mức độ tiến bộ của nhau trong 1 ứng dụng chung như dành khoảng 15 phút để tập yoga trong giờ làm việc… từ đó tạo động lực vận động cho nhân viên xuyên suốt những tháng mùa đông. Thêm nữa, hãy tưởng tưởng 1 phần quà lớn để kích thích nhân viên nỗ lực hơn vào năm tới.

Cuối cùng thì… hãy quẩy lên!

Dù cho bạn có đạt mục tiêu cuối năm hay chưa, dù có đạt doanh số trong ngày Black Friday hay không, cũng đừng quên dành thời gian để ăn mừng. Nhân viên thích các buổi tiệc lễ hội hơn cả việc kì nghỉ Giáng sinh bị hủy bỏ. 9 trên 10 người được phỏng vấn cho biết họ cảm thấy thất vọng nếu buổi tiệc lễ tại công ty bị hủy bỏ, và 9 trên 10 người cũng nói rằng các buổi tiệc này đóng vai trò quan trọng với tinh thần năng động của team.

Bạn có thể chỉ mời nhân viên hoặc mời cả gia đình đến để tham gia chơi trao đổi quà tặng. Nếu team của bạn hoàn thành các mục tiêu, bạn có thể mang đến vài bất ngờ như 1 địa điểm không ai nghĩ tới hoặc vài món quà thú vị.

Mùa lễ hội đã và đang bắt đầu. Hãy giúp nhân viên luôn làm việc tốt bằng cách trao cho họ khoảng thời gian nghỉ họ cần và xây dựng 1 lịch làm việc rõ ràng. Tìm mọi cách để giảm stress bằng các ứng dụng miễn phí, các hoạt động teambuilding, tập thể thao theo nhóm hoặc các sự kiện tình nguyện cộng đồng. Đừng quên tập trung vào những thành tựu đã đạt được và dành thời gian để cổ vũ kết quả công việc của nhân viên.

Nguồn wheniwork

Các công việc của tương lai & 2 kỹ năng bạn cần chuẩn bị

Bức tranh tương lai của việc làm là chủ đề nóng tại World Economic Forum Annual Meeting – Hội nghị thường niên của Diễn đàn Kinh tế thế giới.

Liệu robot có làm hết phần việc của bạn? Hàng triệu người từng không công nhận phong trào tự động hóa sẽ nhanh chóng phải chấp nhận câu trả lời “yes”.

Nghiên cứu Future of Jobs của Diễn đàn Kinh tế thế giới dự đoán sẽ có 5 triệu việc làm bị mất trước năm 2020 vì trí thông minh nhân tạo, robotics, công nghệ nano và các yếu tố kinh tế-xã hội sẽ thay thế nhu cầu tuyển dụng lao động là con người.

Tin tốt là cùng lúc đó, những tiến bộ công nghệ cũng tạo thêm 2,1 triệu việc làm mới. Người lao động chân tay và liên quan đến giấy tờ có thể không sở hữu kĩ năng cần thiết để cạnh tranh cho vị trí mới. Hầu hết những công việc mới sẽ rơi vào các lĩnh vực chuyên môn hơn như điện toán, toán học, kiến trúc và kĩ sư.

Các nhà quản lý và người lao động trong mỗi lĩnh vực đều đang được kêu gọi phải kiềm chế và rèn luyện lại kĩ năng cho nhân viên của mình để tránh 1 cuộc khủng hoảng.

“Nếu không có hành động nhanh chóng và chính xác ngay bây giờ, các nhà quản lý phải giải quyết với tình trạng thất nghiệp và bất bình đẳng tăng cao và các doanh nghiệp đang có nguồn khách hàng thu hẹp để quản lý giai đoạn chuyển giao ngắn hạn và xây dựng 1 lực lượng lao động với các kĩ năng bảo chứng cho tương lai (future-proof)” – Klaus Schwab, Nhà sáng lập kiêm Giám đốc điều hành của Diễn đàn Kinh tế thế giới cho biết.

Các kĩ năng mới cho những nền kinh tế mới

Vậy người lao động cần phải có những kĩ năng gì để chắc chắn rằng họ mang đến đủ giá trị cho doanh nghiệp khi 4.0 đang đến gần? Một số người ắt hẳn sẽ ngạc nhiên khi nhận ra các kĩ năng thu thập được ở thời mầm non được đánh giá rất cao.

David Deming, Phó Giáo sư Kinh tế và Giáo dục tại ĐH Harvard cho rằng các kĩ năng mềm như chia sẻ và thương thuyết đóng vai trò cực quan trọng. Theo đó, địa điểm làm việc hiện đại, nơi mọi người di chuyển giữa nhiều vai trò và dự án khác nhau sẽ tương tự như các lớp học mầm non – nơi chúng ta học các kĩ năng xã hội như đồng cảm và cộng tác.

Trong mô hình bên dưới, Deming đã phác thảo những nhu cầu đang thay đổi của nhân viên và các kĩ năng quan trọng để vươn lên được trên thị trường việc làm trong tương lai gần. Cùng với các kĩ năng mềm đó, kiến thức toán học cũng có ý nghĩa rất lớn.

Các công việc cần bộ kĩ năng đơn sẽ ít dần

Deming cho rằng trong những năm gần đây, rất nhiều công việc chỉ đòi hỏi các kĩ năng toán học đã được tự động hóa như giao dịch viên ngân hàng và nhân viên thống kê… Những vi trí đa phần đòi hỏi các kĩ năng xã hội (ví dụ: nhân viên chăm sóc trẻ) có khuynh hướng nhận lương thấp vì nguồn cung cấp nhân lực tiềm năng là rất lớn.

Nghiên cứu chỉ ra: các nhân viên – những người kết hợp thành công các kĩ năng toán học, giao tiếp, tạo lập mối quan hệ trong các nền kinh tế tri thức tương lai sẽ tìm kiếm được những cơ hội hữu ích, sinh lợi.

Tái tập trung vào giáo dục các kĩ năng

Theo Deming, thách thức đang đặt ra cho các nhà giáo dục để thực thi quy trình giảng dạy các kĩ năng kĩ thuật như toán học và khoa học máy tính, đảm bảo nhân sự tương lai có được các kĩ năng mềm để cạnh tranh trên thị trường việc làm mới.

Nguồn weforum 

Trưởng bộ phận tuyển dụng của Linkedin làm gì đầu tiên với ứng viên khi phỏng vấn?

Bài viết lý giải nguyên nhân tại sao mỗi khi phỏng vấn ứng viên, Trưởng bộ phận tuyển dụng của Linkedin – Brendan Browne – lại đưa cho họ 1 cây bút đánh dấu xóa được, yêu cầu họ đến thẳng chiếc bảng trắng treo trên tường.

Browne đã cầm lái đội ngũ tuyển dụng của kênh mạng xã hội nổi tiếng Linkedin từ năm 2010, và trong quá trình xây dựng đội ngũ của mình, anh đã tìm ra được 1 bài tập mới lạ, nhờ đó Browne biết được có nên tuyển ứng viên đó hay không.

Brendan Browne linkedin

Bất kể đang tuyển vị trí gì, Browne cũng sẽ hỏi ứng viên: “Điều bạn tâm huyết nhất trong cuộc sống là gì? Hãy sử dụng bảng trắng kia, giải thích cho tôi quy trình hoạt động của nó” 

“Vì đây là 1 tình huống khá mơ hồ nên các ứng viên có khuynh hướng trả lời 1 cách rất tự nhiên”

Ví dụ, nếu 1 ứng viên thích uống bia tự pha khi có thời gian rảnh, anh ta sẽ vẽ ra 1 quy trình pha bia và giải thích quy trình đó. Tương tự với 1 ứng viên có đam mê theo vai trò cụ thể (role-specific) như product management.

4 điều mà Browne học được từ bài tập này:

  1. Điều gì khiến các ứng viên quan tâm sâu sắc nhất?

2. Họ có thể giải thích về bản thân ở mức độ nào? 

3. Cách suy nghĩ về quy trình?

4. Cách giải quyết câu hỏi/ tình huống… mơ hồ? 

Tạo CV Online mới nhất tại đây

Nhờ có bài tậ trên, Browne đã thể hiện rõ quan điểm của CEO của LinkedIn CEO, Jeff Weiner về 1 nhân viên lý tưởng sẽ phù hợp với 3 mảng sau: mơ những điều lớn lao, biết cách có được niềm vui và hoàn thành công việc.

“Rất khó để đánh giá 1 buổi phỏng vấn vì tính thiếu sót sẽ rất cao, nhưng điều mà tôi thực sự muốn biết chính là bạn là ai, và mọi thứ sẽ như thế nào nếu bạn và tôi cùng nhau giải quyết 1 vấn đề khó nhằn và chúng ta phải làm việc tới mức… sút chỉ tụt quần?” – Browne chia sẻ.

Browne cũng cho biết các ứng viên thường bất ngờ bởi câu hỏi trên vì họ đang mong đợi 1 cái gì đó truyền thống hơn hoặc liên quan đến công việc họ đang làm hơn, nhưng cách họ phản hồi với cảm giác khó chịu sẽ xác định được liệu ứng viên có thể giải quyết những gì mà Browne mong đợi ở họ tại công sở hay không.

“Có thể chúng tôi sẽ quyết định loại bỏ 1 dự án mà chúng tôi đang làm hoặc thay đổi thứ gì đó – những chuyện thường xảy ra trong kinh doanh, nhất là tại Thung lũng Silicon – thì tôi muốn xem cách bạn giải quyết nó”. Đó là lý do tại sao anh nghĩ câu trả lời cho câu hỏi phỏng vấn yêu thích của anh ở trên sẽ là “dấu hiệu hàng đầu” cho thấy mức độ thành công trong các tình huống đã nêu.

Bạn cũng có thể xem thêm bài test trắc nghiệm tính cách cho các Dever tại đây nhé!

Nguồn: Business Insider