Khi bắt đầu có định hướng và bước chân vào con đường hoạt động nhân sự, chắc hẳn bạn sẽ gặp phải nhiều khái niệm/ thuật ngữ mới và học làm quen với chúng. Đôi khi bạn lại tự hỏi “Case study” hay “OT” là gì? Đừng lo lắng vì với bài viết sau đây, TopDev sẽ giúp bạn nắm trong tay 20 thuật ngữ chuyên sâu về ngành Nhân sự.
1. Administrator carde/High rank cadre – Cán bộ quản trị cấp cao:
Người tham gia hoạch định chiến lược nhằm phát triển đào tạo và lãnh đạo nhân viên. Đồng thời, trực tiếp tham gia vào quá trình đánh giá và chịu trách nhiệm cuối cùng trước kết quả của một tổ chức/doanh nghiệp. Cán bộ quản trị cấp cao là một trong những nhân sự nòng cốt trong hệ thống quản trị cấp cao.
2. Assessment of employee potential – Đánh giá tiềm năng nhân viên:
Thuật ngữ mô tả việc nhìn nhận và đánh giá năng lực tiềm ẩn của nhân viên từ những đóng góp ban đầu và khả năng phát triển lâu dài của họ. Việc đánh giá được theo dõi và quan sát bởi chính những người có mắt nhìn chuyên môn. Đánh giá tiềm năng giúp các lãnh đạo nhân sự/nhà quản lý có thể nắm bắt được năng lực và đó là cơ sở để thiết lập lộ trình phù hợp cho từng nhân viên.
3. Board interview/Panel interview – Phỏng vấn hội đồng:
Được hiểu là một hình thức tuyển dụng giúp các doanh nghiệp khai thác nhiều khía cạnh của một ứng viên. Việc phỏng vấn hội đồng cho thấy mức độ quan trọng của vị trí mà ứng viên mong muốn ứng tuyển. Phỏng vấn hội đồng không quá tập trung hay lặp lại những câu hỏi có logic nhằm nắm bắt thông tin cơ bản mà chủ yếu xoáy sâu vào những câu hỏi liên hệ thực tế thông qua những việc đề xuất các sáng kiến, giải pháp, cách thức vận hành công việc,…
4. Career planning and development – Kế hoạch và phát triển nghề nghiệp (Thăng tiến nghề nghiệp):
Đây là thuật ngữ mô tả kết quả diễn tiến của quá trình đánh giá tiềm năng. Kế hoạch thăng tiến nghề nghiệp được xây dựng dựa trên các chỉ tiêu về năng lực, khả năng thích ứng, tiềm năng phát triển,… Đó là một lộ trình phù hợp có ý nghĩa trong việc định hướng nhân viên trên con đường phát triển sự nghiệp. Và tất nhiên, kế hoạch thăng tiến được phân chia theo từng giai đoạn khác nhau và được theo dõi, xem xét cũng như thay đổi nếu có những phát sinh.
5. Case study – Nghiên cứu tình huống:
Nghiên cứu tình huống là nhiệm vụ mà mỗi nhân viên cần phân tích nhằm tìm ra nguồn thông tin, dữ liệu. Đồng thời, qua việc nghiên cứu tình huống, nhân viên có thể đánh giá được khả năng phát triển của một dự án và xác định được những điểm tích cực cũng như hạn chế cần phải khắc phục.
6. Contractual employee – Nhân viên hợp đồng:
Người làm việc theo hợp đồng lao động. Hợp đồng được xây dựng dựa trên các căn cứ giấy tờ có giá trị pháp lý được thể hiện dưới hình thức là một bản mẫu. Nhà tuyển dụng thường có quyền quy định cách thức tổ chức, thực hiện công việc và những mô tả cụ thể về hợp đồng lao động gắn với các căn cứ thực tế và căn cứ có thẩm quyền (thuộc căn cứ pháp lý).
7. Disciplinary action – Thi hành kỷ luật:
Thuật ngữ mô tả quá trình các nhân viên tuân thủ, chấp hành đúng các quy định chung của nội bộ tổ chức/doanh nghiệp đề ra. Nếu có sự sai phạm về các hành vi liên quan đến vấn đề kỷ luật, các hình thức xử lý sẽ được áp dụng tùy vào mức độ sai phạm của từng nhân viên. Có thể là nhắc nhở, viết báo cáo kiểm điểm, đánh giá tác phong, khiển trách, đình chỉ hoặc sa thải.
8. Entrepreneurial – Năng động, sáng tạo:
Đây là thuật ngữ dùng để chỉ tính cách của người làm trong lĩnh vực Nhân sự. Thuật ngữ chỉ cá nhân hoặc một tập thể luôn cố gắng tìm tòi, học hỏi những cái mới, luôn cập nhật và thích ứng nhanh với sự thay đổi chung trong mô hình phát triển nhân sự; có những ý tưởng, đóng góp hay cho tổ chức/doanh nghiệp.
9. Going rate/wage/Prevailing rate – Mức lương hiện hành trong xã hội:
Hiểu đơn giản là mức lương cơ bản phù hợp với các chỉ số tiền tệ ứng với tình hình phát triển chung trong xã hội tại một thời điểm nào đó. Tất nhiên, mức lương hiện hành sẽ thay đổi và các công ty cần có sự cập nhật và phân bổ hợp lý. Song, vẫn phải đảm bảo được tính ổn định về cơ chế vận hành lương bổng theo từng quy mô hoạt động của tổ chức.
Phần lương bổng không chỉ ghi nhận những thành quả, nỗ lực của nhân viên mà còn tạo ra giá trị nhằm gia tăng động lực, khích lệ và thúc đẩy tinh thần làm việc của nhân viên. Đây cũng được xem là một trong những cách thức hiệu quả để tăng năng suất lao động cho tổ chức/doanh nghiệp.
11. Insurance plans – Kế hoạch bảo hiểm:
Kế hoạch được thiết lập để tạo ra những chế độ đãi ngộ về sức khỏe cho nhân viên trong tổ chức/doanh nghiệp. Một kế hoạch bảo hiểm được đảm bảo là một kế hoạch với những công việc chi tiết.
12. Job specification – Bảng mô tả tiêu chuẩn chi tiết công việc:
Một bảng liệt kê các tiêu chuẩn cụ thể, được phân chia và sắp xếp theo trình tự khoa học nhằm mục đích mô tả các nhiệm vụ, công việc cần thực hiện.
13. Manpower replacement chart – Sơ đồ sắp xếp lại nhu cầu nhân lực:
Sơ đồ được thống kê theo hệ thống nhằm mục đích sắp xếp và phân bổ nguồn lực nhân sự sao cho hợp lý. Căn cứ vào sơ đồ sắp xếp, người quản lý cho thể dễ dàng cập nhật những thay đổi nếu có những phát sinh bất ngờ,
14. Overtime (OT) – Giờ phụ trội (làm thêm giờ):
Thuật ngữ mô tả việc một nhân viên làm quá giờ, ngoài giờ làm việc chính thức (hay có thể gọi là tăng ca). Ngoài ra, thuật ngữ OT còn được sử dụng để chỉ người làm được trả lương cho việc làm ngoài thời gian hợp đồng chính thức.
15. Performance appraisal – Đánh giá thành tích công tác/ khả năng hoàn thành công việc:
Thuật ngữ được sử dụng để mô ta việc nhân viên tự đánh giá lại các thành tích cá nhân và diễn giải nó thông qua các báo cáo, thuyết trình về các dữ liệu minh chứng hoặc việc nhà quản lý trực tiếp đánh giá các nhân viên thông qua kết quả, những đóng góp họ mang lại cho tổ chức.
16. Performance management – Quản lý hiệu quả công việc:
Đây là quy trình được thiết kế nhằm mục đích đánh giá, quản lý và cải thiện năng lực của nhân viên. Quá trình “quản lý hiệu quả công việc” hay cách gọi khác là “quản lý năng lực” là cho phép đưa ra những đánh giá chi tiết. Đó có thể là những cảnh báo về việc một nhân viên kém năng lực hay phân tích và khen thưởng nhằm tạo động lực cho những cá nhân nổi bật. Quản lý hiệu quả công việc cần có sự giám sát, theo dõi chặt chẽ và lâu dài của cấp quản lý nhân sự.
17. Probation – Thời gian thử việc:
Khoảng thời gian được thiết lập thành một lộ trình ngắn hạn (1 đến 3 tháng hoặc 3 đến 6 tháng tùy vào mô hình hoạt động của chủ tổ chức/doanh nghiệp). Thời gian thử việc được thiết kế với các mục tiêu cụ thể nhằm tạo cơ hội cho ứng viên bộc lộ được những kỹ năng, năng lực của nhân viên. Và dựa theo các tiêu chí đánh giá đi kèm, người lao động sẽ được xem xét về mức độ phù hợp với công việc, có đáp ứng nhu cầu của tổ chức hay không.
18. Principle “Equal pay, equal work” – Nguyên tắc công bằng lương bổng (theo năng lực):
Nhiều tổ chức/doanh nghiệp có chế độ lương khác nhau cho từng nhân viên tùy thuộc vào vị trí, năng lực và sự thể hiện lâu dài của họ theo quá trình. Vì thế, nguyên tắc này giúp đảm bảo tính công bằng và minh bạch trong vấn đề lương bổng (theo năng lực).
19. Retrenchment – Giảm biên chế:
Là sự chấm dứt hợp đồng lao động do sự dư thừa trong cơ chế quản lý, hoạt động của tổ chức/doanh nghiệp. Mức độ giảm biên chế có sự thay đổi khác nhau tùy thuộc vào quy mô hoạt động và các yếu tố xã hội tác động đến.
20. Salary advances – Lương tạm ứng:
Lương tạm ứng là lương được thụ hưởng theo hợp đồng lao động của tháng trước liền kề trước khi người lao động tạm thời nghỉ việc. Cơ chế quy đổi của lương tạm ứng được tính tương ứng với các hình thức trả lương theo tháng, theo tuần, theo ngày hoặc theo giờ.
Trên đây là 20 thuật ngữ chuyên sâu cho Nhân sự nội bộ mà các bạn có thể gặp khi tiếp xúc với ngành quản lý nhân sự. Hy vọng sẽ giúp các bạn có nhiều thông tin bổ ích hơn trong quá trình tìm hiểu về định hướng nghề nghiệp của mình.
Kambria Code Challenge là chuỗi cuộc thi và hackathon trực tuyến về lĩnh vực Trí tuệ nhân tạo được thiết kế để thu hút sự tham gia của các lập trình viên khắp nơi trên thế giới, kết nối họ trở thành một phần của cộng đồng các lập trình viên tại Kambria. Đây cũng là cơ hội để các bạn kiểm tra kiến thức về thuật toán AI, chứng minh các kỹ năng về lập trình của bạn, đồng thời nhận phần thưởng và phát triển cơ hội nghề nghiệp với các công ty công nghệ là đối tác của Kambria.
Kambria Code Challenge có tổng cộng 4 Quiz, trong đó Quiz 04 có giải thưởng lớn nhất. Mỗi Quiz sẽ xoay quanh từng chủ đề về AI, bao gồm:
🔹 Quiz 1: Multilayer Neural Network
🔹 Quiz 2: Convolutional Neural Network
🔹 Quiz 3: Recurrent Neural Network
🔹 Quiz 4: AI Projects
Riêng với Quiz 04, bạn phải tham dự ít nhất 2 Quiz bất kỳ trước đó để đủ điều kiện tham gia. Kambria Code Challenge hiện tại đang diễn ra Quiz 03. Bạn click vào link sau để tìm hiểu thêm thông tin! Hoặc đăng ký tham dự Quiz 03 theo hướng dẫn sau:
3️⃣ Sau khi click, bạn sẽ thấy 1 form đăng ký. Chỉ cần điền đầy đủ các thông tin cá nhân để tham gia cuộc thi.
4️⃣ Kambria sẽ gửi email tới các bạn để xác nhận việc đăng ký!
5️⃣ Quiz 03 sẽ diễn ra vào lúc 14h00 – 14h45 thứ 7, ngày 02/05/2020. Bạn có 30 phút để hoàn thành bài Quiz và nộp bài muộn nhất vào lúc 14h45.
Thử giải đề thi cũ, chuẩn bị cho Quiz 03!
Để có sự chuẩn bị tốt nhất cho Quiz 03, các bạn có thể luyện tập giải các đề thi về AI đã diễn ra trong các Quiz cũ của Kambria. Các vòng thi Quiz có những dạng đề bài tương tự nhau, nên việc luyện tập các vòng thi trước sẽ giúp bạn làm quen và nâng cao điểm số khi tham gia dự thi.
Bạn có thể luyện tập Quiz 01 và Quiz 02 ngay khi click vào các đường link dưới đây. Ngoài ra, bạn cũng có thể xem lại bài giải của các Quiz sau khi hoàn thành xong.
Git và GitHub — hai công cụ mà dân dev ai cũng nghe tên, thậm chí còn sử dụng hàng ngày. Thế nhưng, bạn có biết thế nào là một GitHub đủ “đẹp” để đưa vào CV? Hay làm thế nào để tối đa hoá hiệu suất công việc trên hai công cụ này?
Như đã hứa ở blog LinkedIn — vũ khí bí mật khi tìm việc online, hãy cùng đọc bài viết nóng hổi từ một chàng kỹ sư lập trình nhà Got It— người chuyên review GitHub cho các bạn ứng viên nhé!
1. Git
Khi viết code, sẽ có rất nhiều lúc bạn muốn, hoặc cần phải quay lại đoạn code mình đã viết tại một thời điểm trước đây. Một cách đơn giản, ta hoàn toàn có thể dùng tính năng undo/redo của trình biên soạn (editor) mình đang dùng. Tuy nhiên, editor có thể sẽ không lưu lại lịch sử sau khi đóng, và bạn cũng có thể nhấn nhầm sang một phím khác thay vì nhấn redo, và thế là lịch sử trạng thái được editor lưu lại đã bị ghi đè khiến bạn không thể redo được nữa.
Ngoài ra, khi nhiều người cùng làm việc trong một dự án, các thành viên cần tìm ra cách chia sẻ các thay đổi của mình để đảm bảo rằng tất cả mọi người đang làm việc trên cùng một phiên bản của dự án. Trước đây, lập trình viên thường chia sẻ các thay đổi code bằng cách xuất ra file patch và gửi cho nhau qua email. Khi nhận được một bản patch, các thành viên sẽ áp dụng nó vào trong phiên bản code hiện tại của mình trên máy cá nhân.
From 06f2790b5ca3fea45515e33c9660ad6265120a5a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C5=81ukasz=20Langa?= <lukasz@langa.pl>
Date: Wed, 4 Mar 2020 23:16:55 +0100
Subject: [PATCH] Rename FileMode into just Mode The mode was never just about files to begin with.There are no other modes in
Black, this can be the default one.
--- black.py | 40 +++++++++++++++++++---------------------
1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/black.py b/black.py
index 52096819..31859d1a 100644
--- a/black.py
+++ b/black.py
@@ -186,7 +186,7 @@ class Feature(Enum):
@dataclass-class
FileMode:
+class Mode:
target_versions: Set[TargetVersion] = field(default_factory=set)
line_length: int = DEFAULT_LINE_LENGTH
string_normalization: bool = True
@@ -209,6 +209,10 @@ def get_cache_key(self) -> str:
return ".".join(parts)
+# Legacy name, left for integrations.
+FileMode = Mode
+
+
def supports_feature(target_versions: Set[TargetVersion], feature: Feature) -> bool:
return all(feature in VERSION_TO_FEATURES[version] for version in target_versions)
Mỗi file patch chỉ biết đến hai trạng thái của dự án, là trước và sau khi được trích xuất ra. Như vậy, khi có nhiều file patch, ta cần phải biết thứ tự của chúng để có thể xây dựng lại chính xác một phiên bản của dự án tại bất kì thời điểm nào. Ngoài ra, vì file patch cũng chỉ là file thông thường được lưu trong ổ cứng, nên ta cần một cách để sao lưu lại chúng. Khi có nhiều người cùng làm việc trên một file, ta cần thêm một cơ chế đồng bộ các file patch với nhau, vì rất có thể sẽ có những thay đổi chồng chéo lên nhau.
Để giải quyết các vấn đề nêu trên, ta cần đến một hệ thống quản lý phiên bản. Phần một của bài viết này sẽ giới thiệu đến các bạn Git, một trong những hệ thống quản lý phiên bản phổ biến nhất hiện nay.
1.1.Git là gì?
Nguồn: https://xkcd.com/1597/
Git (https://git-scm.com/) là một hệ thống quản lý phiên bản phân tán (distributed version control system), được viết bởi Linus Torvalds (người tạo ra và phát triển chính của Linux kernel) vào năm 2005. Mục đích ban đầu của Git là để hỗ trợ việc phát triển Linux kernel. Ngoài Git còn có các hệ thống khác như Subversion và Mercurial. Các bạn có thể tham khảo bài viết sau về mức độ phổ biến của các hệ thống quản lý phiên bản vào năm 2016: https://rhodecode.com/insights/version-control-systems-2016; hoặc dữ liệu từ Google Trends: https://trends.google.com/trends/explore?date=all&q=git,svn,mercurial.
Để hiểu rõ hơn về Git, ta sẽ tìm hiểu về từng khía cạnh trong tên gọi hệ thống quản lý phiên bản phân tán.
Hệ thống quản lý phiên bản (version control system, VCS)
Nguồn: reddit
Trong cuốn sách kinh điển The Pragmatic Programmer [1], hai tác giả David Thomas và Andrew Hunt đã dành hẳn một phần (Topic 19) để nói về việc quản lý phiên bản. Còn trong một quyển sách khác nổi tiếng không kém [2], tác giả Robert C. Martin cũng đề cập đến việc sử dụng một hệ thống quản lý phiên bản ở ngay đầu phần phụ lục Tooling, và ông khuyên dùng Git để quản lý code.
Git hỗ trợ các lập trình viên bằng cách lưu lại toàn bộ các thay đổi với dự án, được chia nhỏ thành các commit. Mỗi commit là một đơn vị thay đổi, tương tự như một file patch. Tại mỗi commit, ta có một phiên bản của dự án. Bằng việc lưu lại toàn bộ thay đổi trong một hệ thống riêng biệt, ta hoàn toàn có thể quay lại bất cứ phiên bản nào tại thời điểm mà commit được tạo ra. Ngoài ra, Git cũng hỗ trợ làm việc nhóm thông qua tính phân tán.
Tính phân tán (distributed)
Khi làm việc với một dự án, ta sẽ tạo ra một Git repository (kho chứa), thường được gọi tắt là repo. Đây là nơi chứa toàn bộ các thông tin cần thiết để quản lý dự án, ví dụ như các thay đổi đã được nhắc đến ở trên.
Khi làm việc với một dự án được quản lý bởi Git, mỗi lập trình viên sẽ có một bản sao của Git repo trên máy cá nhân, và được đồng bộ với nhau thông qua một repo được lưu trữ trên máy chủ riêng biệt (remote repository). Thay vì chia sẻ các bản patch, lập trình viên sẽ tạo ra các commit, và gửi các commit này lên remote repository. Các lập trình viên khác có thể đồng bộ repo trên máy cá nhân với remote repo để thấy được các commit này, và thêm vào phiên bản của dự án hiện tại trên máy của mình nếu muốn.
1.2. Sử dụng Git như thế nào?
Khi bắt đầu sử dụng Git cho một dự án, ta cần khởi tạo một Git repository trên máy cá nhân, bắt đầu với câu lệnh git init. Sau khi được khởi tạo, mọi thay đổi sẽ được Git theo dõi và quản lý. Trong trường hợp bắt đầu làm việc với một dự án đã và đang sử dụng Git, và đã có một remote repository, ta có thể tạo ra một bản sao trên máy cá nhân bằng câu lệnh git clone.
Sau khi thiết lập môi trường làm việc, ta có thể bắt đầu thao tác với Git như sơ đồ bên dưới. Local repository chính là bản sao của Git repo trên máy cá nhân, được đồng bộ với những local repo khác thông qua remote repo. Cũng trên máy cá nhân, ta còn có hai môi trường nữa là thư mục làm việc (working directory) và khu vực chờ (staging area).
Nguồn: https://www.edureka.co/blog/git-tutorial/
Tất cả các thao tác thêm/sửa/xoá để thay đổi code sẽ được thực hiện trên thư mục làm việc. Khi muốn lưu lại những thay đổi này, ta sẽ dùng câu lệnh git add để thêm chúng từ thư mục làm việc sang khu vực chờ. Sau đó sử dụng câu lệnh git commit để lưu từ khu vực chờ vào local repository.
Khu vực chờ là nơi để chuẩn bị cho những thay đổi trước khi chúng được commit. Ví dụ như ta thay đổi ba file: a.py, b.py, và c.py. Tuy nhiên thay đổi ở file c.py tương đối độc lập với hai file còn lại nên ta muốn tách ra một commit riêng. Để làm được việc đó, đầu tiên ta thêm file a và b vào khu vực chờ và commit trước:
> git add a.py
> git add b.py
> git commit -m "Thay doi file a va b"
Sau đó mới thêm file c vào khu vực chờ và commit:
> git add c.py
> git commit -m "Thay doi file c"
Thao tác với Git sử dụng Fork: duyệt lại thay đổi ở khu vực chờ trước khi commit
Tuy nhiên lúc này, những thay đổi mới chỉ đang ở local repository, tức là những lập trình viên khác không biết đến sự tồn tại của chúng. Để đưa những thay đổi này lên remote repository, ta dùng lệnh git push. Và ngược lại, dùng lệnh git pull để cập nhật những thay đổi mới nhất của người khác từ remote repository về máy cá nhân.
Một tính năng rất quan trọng khi làm việc nhóm với Git là tách nhánh (branching). Tất cả Git repository đều có một nhánh mặc định là master, nơi các commit sẽ được lưu lại ở thời điểm ban đầu. Khả năng tách nhánh của Git giúp cho các thành viên của dự án có thể làm việc độc lập vì nếu mỗi người có một nhánh riêng, các thay đổi khi được push lên remote repository sẽ không gây ra xung đột. Ta có thể kiểm tra xem nhánh hiện tại đang làm việc là gì với câu lệnh git branch, và tạo một nhánh mới với câu lệnh git checkout.
Thao tác với Git sử dụng Fork: lịch sử commit và các nhánh
Sau khi đã tạo ra một nhánh mới, ta có thể bắt đầu commit những thay đổi lên nhánh này. Khi hoàn thành phần việc của mình trên nhánh cá nhân, ta cần tích hợp các thành phần lại với nhau thông qua việc hợp nhất các nhánh với câu lệnh git merge. Các thay đổi sau khi đã được hợp nhất lại sẽ được các thành viên pull về local repository của mình. Trong hình minh hoạ bên trên, ta có thể thấy các merge commit như Merge branch ‘release/v1.1.0’ into develop, hoặc Merge branch ‘release/v1.1.0‘.
1.3. Các nguyên tắc khi làm việc với Git
Có một số nguyên tắc nhất định giúp cải thiện hiệu suất và nâng cao khả năng làm việc nhóm khi sử dụng Git để quản lý phiên bản cho dự án.
Tách nhánh mới để làm việc. Như đã nói ở trên, việc tách nhánh mới giúp các thành viên có thể làm việc độc lập với nhau. Ngoài ra, bằng cách làm việc trên một nhánh riêng biệt, ta có thể đảm bảo rằng code trên nhánh mặc định (master) luôn là code ổn định và có thể được đưa lên môi trường production.
Viết commit message rõ ràng, dễ hiểu. Mỗi commit đều có một message, là nơi để lập trình viên tóm tắt những thay đổi được lưu lại trong commit này. Commit message rõ ràng và tường minh giúp cho các thành viên khác có thể dễ hình dung về những thay đổi hơn khi nhìn vào git log hoặc git tree. Conventional Commits là một quy ước viết commit message thường được dùng.
Nguồn: https://xkcd.com/1296/
Mỗi commit chỉ nên có một trách nhiệm duy nhất. Nguyên tắc Single Responsibility (S trong SOLID) là một nguyên tắc cơ bản trong thiết kế phần mềm. Tạo Git commit là một trong nhiều tính huống khác ta có thể áp dụng nguyên tắc này. Mỗi commit chỉ nên lưu lại những thay đổi nhỏ, có liên quan trực tiếp đến nhau. Thay vì tạo ra một commit với rất nhiều thay đổi (hàng trăm dòng code và hàng chục file được thay đổi), ta nên chia ra thành nhiều commit nhỏ. Điều này giúp dễ quan sát các thay đổi, và việc quay lại một trạng thái trước đây cũng dễ dàng hơn vì lịch sử đã được chia nhỏ.
Tránh commit những thay đổi không cần thiết, hoặc không nên được lưu lại. Giả sử rằng trong dự án của bạn cần lưu lại những cấu hình cho việc kết nối vào cơ sở dữ liệu, hoặc là khoá bí mật dùng trong việc mã hoá thông tin… Những thông tin này tuyệt đối không được lưu lại với Git, vì một khi bạn đưa những thông tin này lên một remote repository công khai, bất cứ ai cũng có thể xem được và truy cập vào cơ sở dữ liệu của bạn… Ngoài ra, còn những thông tin khác như các thành phần phụ thuộc của dự án cũng không nên được lưu lại, ví dụ như npm_modules khi làm việc với JavaScript, hoặc venv khi làm việc với Python.
1.4. Các tính năng khác của Git
hooks. Hooks là một tính năng rất mạnh mẽ của Git. Với tính năng này, ta có thể thêm các hành động tuỳ chỉnh vào từng giai đoạn làm việc với Git, ví dụ như trước và sau khi commit/push… Thường dùng nhất là pre-commit hook, được chạy trước mỗi commit. Thậm chí còn có một framework chuyên để quản lý chúng. Pre-commit hooks thường được sử dụng để format code theo một chuẩn chung (black/prettier), chạy các chương trình phân tích tĩnh (static analysis) như mypy, eslint… để giảm thiểu lỗi.
annotate/blame. Khi sử dụng câu lệnh này, với mỗi dòng trong một file, ta có thể biết được người gần nhất sửa dòng này là ai, và sửa vào lúc nào. Các kỹ sư ở Got It rất hay dùng để blame nhau, đúng như tên gọi của câu lệnh, ví dụ như: Chỗ này chú J, chú K viết khó đọc thế, chỗ này ai viết mà tinh tế thế, hoá ra là anh M.
Nguồn: reddit
cherry pick. Khi dùng câu lệnh git merge để hợp nhất hai nhánh lại làm một, ta sẽ mang tất cả commit của nhánh tính năng vào nhánh chính. Tuy nhiên, không phải lúc nào ta cũng muốn làm vậy, chẳng hạn như khi cần deploy và test trước một số thay đổi chọn lọc từ nhánh tính năng. Đây là lúc ta sử dụng đến câu lệnh cherry-pick để copy thay đổi từ những commit cần thiết sang một nhánh khác. Đơn vị nhỏ nhất có thể cherry pick là một commit, nên nếu commit quá lớn thì ta sẽ không thể chọn ra những thay đổi cần thiết.
Ngoài các tính năng kể trên, bạn đọc có thể tham khảo thêm các tính năng khác như submodule, stash, rebase, status, diff…
1.5. Tìm hiểu thêm vềGit
Trên đây chỉ là những hướng dẫn rất cơ bản về Git. Bạn đọc muốn tìm hiểu sâu hơn có thể tham khảo tại những liên kết sau:
Dựa vào tên gọi thì các bạn cũng có thể đoán được rằng Git và GitHub có liên quan đến nhau. Trong phần giới thiệu về Git bên trên, ta biết rằng các thành viên của một dự án đồng bộ code với nhau thông qua một remote repository được lưu trữ trên máy chủ riêng biệt. GitHub là một công ty cung cấp dịch vụ lưu trữ các dự án được kiểm soát phiên bản bởi Git, có trang chủ tại địa chỉ https://github.com/. Tất cả các dự án của Got It được kiểm soát phiên bản bởi Git và lưu trữ trên GitHub.
Ngoài mục đích chính là nơi để lưu trữ các dự án sử dụng Git, GitHub là một nơi có thể giúp các lập trình viên cải thiện kĩ năng của bản thân. Hiện nay, GitHub là một trong những dịch vụ phổ biến nhất để lưu trữ các dự án mã nguồn mở. Các lập trình viên khác có thể tham gia đóng góp vào các dự án này thông qua việc sử dụng Git và GitHub. Nếu như bạn chưa đủ khả năng để đóng góp vào dự án mà bạn muốn tham gia, thì bạn cũng có thể học hỏi kinh nghiệm từ các lập trình viên khác bằng cách theo dõi các đóng góp của họ. Ngoài việc theo dõi các dự án mà bạn đã biết, bạn cũng có thể khám phá các dự án mới đang được nhiều người chú ý đến thông qua các tính năng Explore và Trending. GitHub cũng rất thân thiện với người dùng mới bằng việc có những hướng dẫn rất rõ ràng và trực quan tại https://guides.github.com/.
2.2. GitHub và tuyển dụng
Không chỉ dừng lại ở việc cải thiện kĩ năng cá nhân, sử dụng GitHub hợp lý cũng là một cách để các lập trình viên có thể gây ấn tượng với nhà tuyển dụng. Sau khi tạo tài khoản GitHub, bạn có thể lưu trữ các dự án cá nhân của mình. Thông qua đó, nhà tuyển dụng sẽ có một hình dung rõ ràng hơn về khả năng của bạn, thay vì chỉ dựa vào những gì được viết trong CV.
Lịch sử hoạt động trên GitHub thể hiện nhiều điều về lập trình viên đó, ví dụ như các công nghệ đã sử dụng, khả năng cộng tác với các lập trình viên khác, khả năng quản lý dự án… Tại Got It, các ứng viên có tài khoản GitHub (hoặc các dịch vụ tương tự) “đẹp” sẽ được đánh giá cao trong bước CV Review (các bạn có thể tìm hiểu kĩ hơn về quy trình tuyển dụng của Got It tại đây. Có thể nói, Github của một lập trình viên cũng giống như portfolio của một designer.
Câu hỏi được đặt ra là: Làm thế nào để có một tài khoản GitHub “đẹp”? Vì GitHub là nơi để lưu trữ các dự án sử dụng Git, nên sử dụng Git đúng cách là một tiêu chí để đánh giá ứng viên. Các sai lầm thường gặp khi sử dụng Git có thể nhắc tới việc dồn quá nhiều thay đổi vào một commit, hoặc viết commit message không rõ ràng, thiếu nghiêm túc…
Dồn quá nhiều thay đổi vào một commit
hay…
Viết commit message thiếu nghiêm túc
Ngoài việc sử dụng Git hợp lý, những điều nên làm để có thể gây ấn tượng thông qua GitHub có thể kể tới:
Code rõ ràng và dễ đọc, theo quy chuẩn. Với các dự án mã nguồn mở, bất kì ai cũng có thể xem toàn bộ mã nguồn, qua đó có thể đánh giá chất lượng của dự án. Có thể nói rằng chất lượng code là tiêu chí quan trọng nhất khi đánh giá ứng viên thông qua các dự án cá nhân. Việc viết code dễ đọc có thể bắt đầu bằng cách làm theo các quy ước thông dụng như PEP8 với Python và ESLint với JavaScript. Cài đặt các pre-commit hooks để đảm bảo rằng các quy ước được tuân thủ cũng là một điểm cộng.
Sử dụng các công cụ hỗ trợ. Ngoài cách đảm bảo chất lượng code thông qua việc làm theo các quy ước, viết test giúp ta chắc chắn rằng code đã được viết đúng logic. Viết test đúng và đủ cũng là một phần không thể thiếu trong các dự án được đầu tư nghiêm túc. Ta có thể cài đặt sao cho test được tự động chạy mỗi khi push code lên GitHub với các công cụ như Travis CI, CircleCI, Azure Pipelines; cùng với đó là theo dõi tỉ lệ code đã được kiểm tra bởi test với các công cụ như Coveralls, Codecov… Thông qua khả năng sử dụng các công cụ một cách thích hợp, ta có thể đánh giá được xem tác giả có quan tâm và đảm bảo chất lượng của dự án hay không, cùng với đó là khả năng tìm hiểu và áp dụng các công nghệ, kĩ thuật phổ biến.
Một ví dụ về việc sử dụng các công cụ hỗ trợ như CI, coverage…
Cung cấp mô tả rõ ràng về các dự án. Các dự án cá nhân cần có một tiêu đề và mô tả ngắn gọn nhưng vẫn đầy đủ. Ngoài ra, mỗi dự án nên có một file README chứa những thông tin cơ bản về dự án. File README này sẽ được hiển thị tại trang chủ của dự án, ví dụ như https://github.com/psf/black, nó sẽ là ấn tượng đầu tiên khi truy cập vào dự án của bạn trên GitHub. Vì vậy, có một file README rõ ràng, dễ đọc, mô tả chi tiết về dự án là một điểm cộng rất lớn trong quá trình review GitHub. Các bạn có thể tham khảo các bài viết sau để tìm hiểu thêm về cách viết README: https://www.makeareadme.com/, https://github.com/kylelobo/The-Documentation-Compendium.
Quản lý dự án. GitHub cung cấp khả năng quản lý dự án với tính năng Issues. Với Issues, bạn có thể theo dõi bug và các yêu cầu tính năng mới cho mỗi dự án. Tận dụng hợp lý tính năng này là một cách để thể hiện kĩ năng quản lý dự án và làm việc nhóm.
Giấy phép (License). Có thể bạn chưa để ý đến license, nhưng đây là một điều rất quan trọng với các dự án mã nguồn mở. Chúng cho phép lập trình viên khác sử dụng, cũng như đóng góp các thay đổi, nâng cấp cho dự án của bạn. Một số loại giấy phép phổ biến phải kể đến MIT, Apache License 2.0… Bạn có thể tìm hiểu thêm tại https://choosealicense.com/, hoặc tham khảo một ví dụ về giấy phép MIT tại https://github.com/psf/black/blob/master/LICENSE.
Tạo trang cá nhân với GitHub. Có một trang web cá nhân là một trong những điều gây ấn tượng mạnh với nhà tuyển dụng. GitHub cho phép bạn tạo trang web cá nhân và trang web cho các dự án của bạn. Hướng dẫn chi tiết có tại https://pages.github.com/.
Bài viết bởi M.P – Kỹ sư của Got It Vietnam. Take out with full credit!
Tài liệu tham khảo
[1] D. Thomas and A. Hunt, The Pragmatic Programmer, 20th Anniversary Edition: your journey to mastery. Addison-Wesley Professional, 2019.
[2] R. C. Martin, The Clean Coder: A Code Of Conduct for Professional Programmers. Prentice Hall, 2011.
Trình duyệt web – Lần này chủ đề ít hardcore hơn một chút, nhưng bảo đảm sẽ giúp bạn cứu tiếp nhiều giây của cuộc đời, tích tiểu thành đại. Mỗi năm cũng tiết kiệm được cả vài tuần chứ không ít nhé các bạn.
Hôm nay chúng ta nói về trình duyệt Chrome, trình duyệt mà hầu hết các bạn dùng duyệt web hàng ngày, vậy các bạn có bao giờ nghĩ đến việc Chrome có thể trở nên tuyệt vời hơn như thế nào chưa?
Đây nhé …
1. Bạn hay xem Youtube phải không?
Thấy phiền vì quảng cáo, hãy cài ngay plugin Youtube AdBlocker, tiết kiệm bao nhiêu giây các bạn? (mỗi quảng cáo tối thiểu 5 giây, công sức canh me bấm nút “Bỏ qua quảng cáo”, rồi thỉnh thoảng bác Google tặng cho chúng ta cái video 30s coi chơi)
2. Bạn đã bao giờ lâm vào cảnh loạn xà ngầu vì mở quá nhiều Tab chưa?
$#^&@^#@&$#@*($)
Dĩ nhiên rồi.
Nó sẽ như thế này:
◎ Điếng người khi ráng đi tìm tab chứa nội dung mình cần
Đây là bí kíp mình học được từ giáo sư đáng kính thời còn làm việc ở Seoul – Hàn Quốc.
Mỗi khi cần tìm hiểu về vấn đề gì đó, giáo sư sẽ mở một cửa sổ mới hoàn toàn với một tab duy nhất. Sau đó nếu cần tìm hiểu thêm các vấn đề liên quan đến chủ đề đó thì cứ mở thêm trong cửa sổ đó.
Nếu có vấn đề khác nữa cần tìm hiểu, chúng ta lại mở cửa sổ mới và tương tự như thế. Bằng cách này, lúc chuyển cửa sổ, chúng ta có thể nhìn vào nội dung của Tab bất kì để đoán toàn bộ nội dung của cửa sổ đó, cũng như số lượng Tab / cửa sổ lúc này sẽ đủ ít để có thể nhìn thấy rõ tiêu đề từng Tab.
Nó sẽ trông như thế này cho từng cửa sổ (trong thực tế mỗi cửa sổ lúc dùng vẫn phóng to ra như thường)
Nhìn ví dụ, khi dùng cửa sổ bên trái, ta dễ biết là chúng ta đang làm việc trên blog, còn chuyển qua cửa sổ bên phải, dễ dàng biết ngay là đang nghiên cứu về deep learning / convolutional neuron network.
Cái này người ta gọi là giảm tải cho nhận thức, không bị overload nhận thức (cognitive overload). Thử làm theo xem sao, bạn sẽ thấy tư duy bạn trở nên trong suốt tỉnh táo hơn rất nhiều, đồng thời độ tập trung khi làm việc trên từng vấn đề được tăng lên đáng kể đấy! Làm xong nhớ báo cáo kết quả áp dụng với sếp!
3. Lưu trữ nội dung hay để đọc lại
Bạn có thể dùng bookmark của Chrome để lưu các link thường truy cập hoặc extension Pocket (lưu lại để đọc sau).
Điều quan trọng để tinh thần luôn sáng suốt là bạn luôn để ý sắp xếp Bookmark của Chrome được tổ chức theo cấu trúc rõ ràng, có thể phân chia theo concept, đặc điểm công việc … để lúc cần có thể tìm thấy nhanh chóng.
4. Cũng là chuyện Tab
Với bí kíp quản lý các link thường truy cập ở trên vào Bookmark, dần dần bạn sẽ thấy thật vẫn chưa tiện lắm khi cần mở link nào đó trong Bookmark.
Xin giới thiệu extension Quick Tabs. Bạn còn nhớ trong bài 1 mình nói về hotkeys chứ? Nào, chỉ với phím tắt Ctrl+Q, sẽ mở ra ngay giao diện tìm kiếm gần như google, và bạn có thể nhập vào một đoạn ngắn trong tiêu đề / đường dẫn để có thể nhanh chóng truy xuất, lưu ý là có nhiều link đã lưu ở lịch sử trình duyệt bạn cũng không cần phải lưu ở Bookmark mới có thể tìm kiếm!
5. Vâng, chắc Chrome chỉ có mỗi Tab là đáng nhớ 😀
Ví dụ hôm nay bạn đang nghiên cứu về chủ đề big data, bạn đang nghiên cứu dở chừng và mở chừng 5 tabs, mà tới giờ ngủ rồi phải tắt máy thôi. Ấy thế ngày mai mở máy lên lại không lẽ lại đi mò lại từng link, hay giờ phải lưu lại từng link vào bookmark?
Nó cho phép chúng ta dễ dàng lưu lại một nhóm các Tab đang mở lại và mở lại nguyên cả nhóm chỉ với một click chuột.
6. Lướt web kiểu dân công nghệ
Ý là dùng chuột có vẻ không ra dáng dân công nghệ lắm, nên cứ phải dùng bàn phím thôi các bạn ạ. Nói chơi thôi, các bạn có thể thử trải nghiệm cảm giác lạ khi lướt web có thể truy xuất các bài viết trên trang chỉ trong vòng vài nốt nhạc, nhanh hơn dùng chuột nhiều.
Hình minh họa bên dưới là đọc bào vnexpress.net, để bắt đầu, bạn bấm f, lúc này mỗi link trên web sẽ hiển thị một hoặc vài ký tự. Bạn muốn vào link nào chỉ cần bấm đúng các ký tự đó thì trình duyệt tự mở link. Rất smart.
Và như một thói quen của sự tối ưu hóa mọi thứ, chúng ta hãy cũng nhau đi tìm phím tắt của chương trình toàn phím tắt này nhé
7. Các plugins tuyệt vời khác
Khi lập trình web, sẽ có rất nhiều plugin hỗ trợ kèm theo Chrome, tiêu biểu là các plugin React / Redux khi các bạn code ReactJS, hay plugin hỗ trợ xem thông tin SEO metadata, SEO performance metrics, hay chỉnh sửa Cookie cho custom cookie trước khi gởi lên server, hay xem thông tin màu sắc, font chữ của các element trên web, … nói chung là vô vàng các thể loại plugin dành cho lập trình nhé các bạn. Phần này là bài tập cho các bạn tự đi tìm, như thường lệ, chỉ cần có câu hỏi, sẽ có câu trả lời!
Nếu bạn đọc có extension nào dành cho Chrome hay, đừng ngận ngại chia sẻ nhé.
Phù hợp cho các bạn thiết kế nào ko muốn làm code dạo, design dạo nữa, bạn muốn cái gì đó cao hơn ở tầng khái niệm
Nếu lập trình chúng ta có các nguyên tắc chung khi viết code như KISS, DRY, thì trong thiết kế cũng có những nguyên tắc chính khi làm việc. Những nguyên tắc này sẽ là kim chỉ nam, nếu có tranh cãi giữa các member trong team, thì cứ đè nguyên tắc này ra mà giải quyết (nghe hơi có mùi cứng nhắc, mình thì thích tùy cơ ứng biến hơn)
Nhất quán, nhưng không hòa tan (phải có chất riêng với thằng khác)
Cởi mở, mọi thứ tốt hơn
Bao trừu tượng luôn các bạn, trang Gov.uk này cũng có câu tổng quát rất hay
Thiết kế tốt là thiết kế có thể sử dụng. Phục vụ cho nhiều đối tượng sử dụng, dễ đọc nhất nhất có thể. Nếu phải từ bỏ đẹp tinh tế – thì cứ bỏ luôn. Chúng ta tạo sản phẩm cho nhu cầu sử dụng, không phải cho người hâm mộ. Chúng ta thiết kế để cả nước sử dụng, không phải những người đã từng sử dụng web. Những người cần dịch vụ của chúng ta nhất là những người đang cảm thấy khó sử dụng dịch vụ nhất. Luôn nhớ về họ ngay từ đầu.
Những nguyên tắc thiết kế trong sản phẩm sẽ giúp cá nhân người thiết kế, cả thành viên trong team, PM, product owner ra định hướng được những quyết định cần thiết trong những tình huống phải lựa chọn.
Nếu sản phẩm của bạn có mặt trên nhiều nền tảng khác nhau, chúng ta nên cân nhắc có 1 design system và 1 vài nguyên tắc chung cho nó. Chúng ta phải có sự khác biệt với những sản phẩm khác nhưng đồng nhất trên các hệ thống khác nhau, giữa các màn hình.
Một vài team đặt những nguyên tắc chung như thế này: rõ ràng, đơn giản, hữu dụng, không thể tạo được những sản phẩm tốt nếu chỉ có những nguyên tắc quá căn bản, chung chung như vậy. Cho nên, chúng ta cùng tham khảo những nguyên tắc của những ông lớn xem họ định nghĩa thế nào.
Airbnb
Đồng nhất
Mỗi một thành phần là một phần của hệ thống lớn hơn, đóng góp tích cực cho khi hệ thống lớn lên. Không có những tính năng đứng riêng một mình và nằm ngoài các phần còn lại.
Triệu người sử dụng
Airbnb được sử dụng bởi cộng đồng thế giới. Sản phẩm phải thể hiện sự hiếu khách và dễ dàng truy cập.
Biểu tượng
Trong cả thiết kế và tính năng đây là điều chúng ta muốn tập trung, sản phẩm phải mang tính biểu tượng, chuẩn mực cho dòng sản phẩm như vậy, phải được thể hiện rõ ràng nhất, mạnh mẽ nhất.
Ngôn ngữ tự nhiên, cởi mở
Mang hơi thở cuộc sống vào trong các sản phẩm, cho phép chúng ta trao đổi tốt hơn với user để cả 2 có thể hiểu nhau.
Là người bạn thân thiết
Không có cảm giác của thiếu tin tưởng, sản phẩm cho phép mọi người có thể hiểu về nhau hơn, như một người bạn, chúng ta sẽ có mặt ở đó khi họ cần
Thiết kế để có ấn tượng đầu tiên tốt đẹp
Mặc dù Airbnb yêu cầu một số thông tin của user, nhưng không cung cấp thông tin này cho bên thứ 3. Nên chúng ta hỏi khách thông tin của họ nhưng không bắt buộc.
Tin tưởng cần thời gian
Giống như cuộc sống này, bạn sẽ nhận càng nhiều từ Airbnb nếu bạn càng tin tưởng chúng tôi. Tin tưởng cần xuất phát từ cả 2 bên. Nếu khách càng tin tưởng vào chủ nhà, thì chủ nhà cũng sẽ sẵn sàng chia sẻ với khách nhiều hơn
Facebook
Triệu người sử dụng
Mục tiêu của chúng ta là làm cho thế giới cởi mở hơn, đi đến từng cá nhân ở mọi ngóc ngách trên thế giới. Design phải mà ai cũng có thể xài, dù ở văn hoá nào, ngôn ngữ gì, thiết bị nào, ở tầng lớp nào trong xã hội. Sản phẩm phục vụ cho 90% người sử dụng, bỏ qua những tính năng mà chỉ có một vài thiểu số người yêu cầu
Cho con người
User quay lại Facebook vì có bạn bè và những người họ quen biết. Đó là thứ chúng ta cung cấp như đã hứa, những người mà bạn quan tâm ở một nơi duy nhất. Lý do mà tiếng nói và những gì chúng ta muốn trình bài được ẩn đi phía sau, tiếng nói của những người user quan tâm, khuôn mặt, cảm xúc, suy nghĩ của họ được ưu tiên hàng đầu.
Sạch sẽ
Phần hiển thị phải thật sạch sẽ, tinh gọn. Sạch sẽ không phải là cách tiếp cận dễ dàng, tiết chế các khoảng trống, kích thước khác nhau, màu sắc, số lượng các định dạng điều phải giảm bớt đi.
Đồng nhất
Chúng ta không muốn lãng phí thời gian, tăng cường sử dụng pattern, những phần giống nhau khi được thể hiện một cách giống nhau sẽ mang tới sự gần gũi và dễ sử dụng. Mọi tương tác với user điều có một mục đích: tạo sự tin tưởng. Bỏ bớt, tái sử dụng, đừng thiết kế lại.
Hữu dụng
Sản phẩm của chúng ta là công cụ hữu dụng không phải công cụ giải trí, được sử dụng hằng ngày cung cấp giá trị hữu ích. Không có những khoảng trắng dư thừa, tương tác dưa thừa, mọi thứ thể hiện liền mạch, nhanh nhất.
Nhanh
Không chỉ tôn trọng thời giản của bản thân, chúng ta phải biết tôn trọng thời gian người khác. Chạy phải nhanh, hiệu quả, không tốn thời gian.
Minh bạch
User tin tưởng trao cho chúng nhận dạng, ảnh, suy nghĩ, hội thoại của họ. Chúng ta phải trung thực và rõ ràng về mọi thứ, tại sao và những gì đang diễn ra. (Sau vụ lùm xùm làm mất thông tin user mình hoan mang Hồ Quỳnh Hương với nguyên tắc này quá)
Apple (Cái này dành cho các bạn nhà iPhone)
Thẩm mỹ
Thẩm mỹ trên cả bộ mặt ứng dụng và tính năng, cách hoạt động.
Ví dụ ứng dụng giúp người sử dụng thực hiện các tính năng quan trọng, không sử dụng hình ảnh ko liên quan, nội dung rõ ràng, dùng control mặc định, hoạt động có thể lường trước kết quả. Ngược lại các ứng dụng như game phục vụ giải trí có thể cung cấp các giao diện vui nhộn.
Thống nhất
Ứng dụng đi theo chuẩn mực chung, các element được cung cấp bởi hệ thống, icon ai cũng hiểu, kiểu chữ chuẩn mực, các tính năng của ứng dụng vận hành theo cách mà user mong đợi.
Tương tác trực tiếp
Luôn nhớ thiết kế để user sử dụng trực tiếp thông qua màn hình, những gì thấy trên màn hình, user có thể xoay điện thoại, họ sẽ thấy được kết quả của việc đó ngay lập tức trên màn hình.
Phản hồi
User thực hiện 1 action nào đó, phản hồi lại kết quả action đó, để họ biết. Các element có thể tương tác được highlight rõ ràng khi user tab, các animation hiển thị ý nghĩa rõ ràng.
Ẩn dụ
Khi sử dụng các đối tượng mang tính ẩn dụ (như icon) cho tương tác, cần đảm bảo nó phải được nhiều người biết đến
User là người quyết định
Ứng dụng không phải là đứa quyết định, người sử dụng sẽ quyết định làm cái gì, ứng dụng cho biết hành động đó dẫn đến kết quả gì.
Google Material Design
Nổi bật, hình ảnh, mục đích rõ ràng
Cách thành phần chính trong thiết kế in ấn: typography, grid, space, scale, color, image không chỉ phục vụ cho mục đích nịn mắt, nó tạo ra trật tự, ý nghĩa, tập trung.
Chuyển động cung cấp một ý nghĩa
Mọi chuyển động cần có ý nghĩa và phù hợp, phục vụ mục đích tập trung sự chú ý và duy trì các thao tác đang thực hiện
Microsoft
Giữ mọi thứ đơn giản
Kim chỉ nam cho mọi thiết kế của Microsoft bây giờ. Nhằm mang đến cảm giác trung thực và không bị ảnh hưởng bởi thời gian.
Mang tính cá nhân
Tạo một cảm xúc kết nối với từng người sử dụng. Làm sao để user khi sử dụng có được cảm giác như sản phẩm được thiết kế cho mỗi mình mình.
Nghĩ toàn diện
Chúng ta không đơn thuần tạo ra sản phẩm, chúng ta đang xây dựng thế giới nơi chúng ta sống, một thế giới tốt hơn.
Tạo cảm giác hào hứng
Tạo ra những trải nghiệm cho user mà họ biết là người đằng sau thiết kế đó là một con người thực.
Cảm nhận cái này dễ thấy nhất là lúc chúng ta cài window, giờ chúng ta cảm giác như đang có người nói chuyện với mình í, không phải các thông báo đơn thuần, như có một AI đằng sau
Khi bạn dự thi Quiz 03, nếu bạn đạt bất kỳ hạng mục giải thưởng nào, Kambria đều sẽ quyên góp giá trị tương đương để hỗ trợ cộng đồng cùng đẩy lùi đại dịch COVID-19. Tất cả các khoản đóng góp sẽ được thanh toán bằng VND, và sẽ đóng góp vào quỹ phòng chống dịch Covid-19 của Bộ Thông tin và Truyền thông Việt Nam, Bộ Y tế Việt Nam, Ủy ban Trung ương Mặt trận Tổ quốc Việt Nam.
Quiz 03 của Kambria Code Challenge được tổ chức với chủ đề: Mạng hồi quy RNN (Recurrent Neural Network). Bounty sẽ bắt đầu vào thứ 7 ngày 2/5/2020. Các bạn tìm hiểu chi tiết ở link bên dưới, click vào “Join this Challenge” để tham gia!
Thưởng càng lớn cho các bạn tham gia nhiều cuộc thi. Quiz cuối cùng (Câu đố 04) sẽ có giải thưởng lớn nhất, nhưng sẽ yêu cầu các thí sinh đã thực hiện 2 quiz trước đó để có thể tham gia.
Môi trường Nhân sự luôn có những thách mới đòi hỏi bạn cần có một tác phong làm việc chuyên nghiệp, biết tận dụng những khả năng vào đúng thời điểm và quan trọng nhất là cách linh hoạt trong ứng xử, không ngừng học hỏi, cố gắng để vươn đến thành công.
Dù cho bạn là một nhân viên mới hay một người gắn bó lâu năm thì hãy ghi nhớ 10 kim chỉ nam sau đây vì nếu có trót quên, bạn có thể đã tự “thổi bay” sự nghiệp của mình trong phút chốc đấy!
Việc không biết thì hỏi là điều tốt. Thế nhưng, nếu hỏi mà thiếu thông suốt thì đó là lỗi của bạn. Một ứng viên tiềm năng nên suy nghĩ trước điều mình hỏi có thực tế hay không. Đây là sự cẩn trọng trong cách suy nghĩ và được thể hiện qua xu hướng hành vi. Không một ai thích thích một người đồng nghiệp hay một nhân viên chỉ loanh quanh mãi những câu hỏi mơ hồ, xáo rỗng cả. Vì vậy, một điều quan trọng cần nhớ, hãy hỏi trực tiếp các thắc mắc nếu trước đó bạn đã suy nghĩ thật kỹ lưỡng.
Hoặc cũng có những thường hợp, bạn đã suy nghĩ rất nhiều về vấn đề cần hỏi. Tuy nhiên, bạn cần tham khảo những ý kiến và đáp án thuyết phục hơn ,vì thế bạn lựa chọn cách hỏi người khác. Bạn nên nhớ rằng, một điểm chung mà hầu hết mà người tiếp nhận thông tin câu hỏi phản hồi bạn chính là họ chỉ gợi mở, quanh co mà khó tập trung vào việc đưa ra những cảm quan cá nhân mình. Đây là thủ thuật an toàn và thông minh trong giao tiếp.
Nếu bạn thật sự mong muốn những lời góp ý chân thành từ họ, hãy thu hẹp khoảng cách bằng việc loại bỏ đi tâm thái “đùn việc”, cho họ thấy bạn thật sự trân trọng những gì mà họ chia sẻ.
Dù thế nào, thắc mắc vẫn là của bạn và đơn giản, bạn đang muốn thảo luận thêm với nhiều người để mở rộng cách xử lý vấn đề mà thôi. Đừng bao giờ đẩy trách nhiệm giải quyết cho người khác nhé!
2. Kéo dài “deadline”
Việc tạo ra deadline (tức là đặt ra mức giới hạn cho sự hoàn thành một công việc nào đó) cũng thể hiện sự thông minh của người quản lý nhân sự hoặc tính liên kết, sự thấu hiểu giữa các nhân viên cùng một team. Vì thế điều quan trọng là nên đặt deadline một cách hợp lý (đã phòng trường hợp thời gian co dãn vì những phát sinh không mong muốn).
Dù cho lượng công việc ít hay nhiều, nhà quản lý nhân sự cần phân chia phù hợp với quỹ thời gian, phân tích kỹ càng những tiêu chí như năng lực, kỹ năng mềm và phẩm chất nhân viên để đặt ra những deadline phù hợp. Tuy vậy, nhiều nhân viên vẫn không đảm bảo được deadline và luôn đổ lỗi cho hoàn cảnh, viện cớ rất nhiều lý di như: quên – một lý do thiếu chuyên nghiệp, vì những sự cố khác, do quá nhiều đầu việc hoặc thậm chí là do cần thực hiện những việc khác quan trọng hơn.
Hoàn thành công việc đúng thời hạn là nguyên tắc cơ bản của một người đi làm. Và nếu có mong muốn có thể phát triển xa hơn trong nghề nghiệp, thì việc cam kết đúng deadline còn là trách nhiệm với đồng nghiệp, công ty và chính bản thân mình. Đừng để bị thổi bay chỉ vì việc kéo dài deadline mãi.
3. Thiếu chủ động để bắt nhịp với tiến độ phát triển chung
Chủ động và linh hoạt là những yếu tố quyết sự bạn sẽ phát triển nhanh hay sẽ dậm chân tại chỗ. Ngành Nhân sự chú trọng việc khai thác và phát triển tài năng của con người. Vì vậy, nếu đã có quá trình rèn luyện, song bản thân bạn chưa bứt phá ra khỏi vùng an toàn thì nhiều nguy cơ bạn buộc phải dừng lại. Nhà quản lý luôn mong muốn thấy được sự nỗ lực của bạn, dù ít hay nhiều, miễn là bạn trưởng thành hơn từng ngày. Đừng phải để ai phải nhắc, bạn phải tự mình tìm ra được sự kết nối trong công việc và giải quyết chúng. Đó là cách bạn đang dần khai thác sự sáng tạo và điều này cũng giúp bạn bắt nhịp với tiến độ công việc một cách tốt hơn.
Làm việc xong, quên viết báo cáo hay kiểm tra tiến độ nhưng lại quên thống kê số liệu. Điều đó không những thể hiện sự thiếu cẩn trọng mà còn cho thấy mức độ nhìn nhận một vấn đề tổng thể của bạn chưa tốt. Nếu cứ giữ mãi cái nhìn thiếu bao quát, bạn khó có thể đưa ra những góp ý chuyên môn thiết thực cho tổ chức của mình. Đồng thời, bạn như định vị mình trong một khuôn khổ riêng, khó lòng hợp tác và đồng nhất với sự phát triển chung của doanh nghiệp. Dần dần, chính bạn sẽ cảm thấy lạc lõng và không còn hứng thú với công việc nữa.
4. Làm việc qua loa, không vận dụng kĩ năng chuyên nghiệp
Tình trạng này dễ nhận thấy ở những nhân viên mới bắt đầu làm việc. Có thể do họ thiếu kinh nghiệm hoặc thậm chí là cố tình do cảm thấy không thật sự hài lòng với công ty.
Việc bạn thực hiện nhiệm vụ một cách qua loa. không vận dụng những kỹ năng cần thiết để xử lý thể hiện bạn là người thiếu cẩn trọng, chưa thật sự nhiệt huyết với công việc; kỹ năng giao tiếp, đơn xin nghỉ việc,… Một báo cáo sơ sài với những lỗ hổng chưa hợp lý, một bài thuyết trình với mô típ lặp đi lặp lại với các thông mình được copy & paste trên mạng thật khiến người tiếp nhận nó phải khó chịu.
Kiến thức chuyên môn bạn có, tại sao không vận dụng? Kỹ năng mềm bạn không thiếu, tại sao bạn không dùng nó để phân tích thông tin. Hãy gạt bỏ đi suy nghĩ tận dụng những thói quen cũ thuộc về bản năng để giải quyết công việc cho có. Như vậy, kết quả sẽ rất thất vọng và bạn có thể sẽ bị sa thải vì sự thiếu trách nhiệm và không chỉn chu trong công việc. Nhớ rằng, làm việc thì cần nghiêm túc, mọi sự đầu tư đều cho ra những thành quả và giá trị xứng đáng.
5. Lý do xin nghỉ “trường kỳ”
Một lý do về vấn đề sức khỏe luôn được chấp thuận, tuy nhiên đừng vì thế mà lạm dụng nó quá mức. Đôi khi bạn quá nhạy cảm đến mức chỉ một vài biểu hiện nhỏ của cơ thể bạn cũng cho rằng mình không khỏe và xin nghỉ. Điều này không công bằng vì những nhân viên khác cũng đang cố gắng làm việc, thậm chí là làm thay phần việc của bạn trong khi bạn lại nghỉ ngơi dù tình trạng không quá căng thẳng.
Những lý do không chính đáng thể hiện bạn là người thiếu sự kiên trì và dễ dàng từ bỏ một việc gì đó khi. Đã là nhân viên, bạn cần phải biết mình có có trách nhiệm giải quyết công việc được giao phó, chứ không đơn giản là lúc đầu thì hứng thú, làm được lưng chừng lại tùy hứng bỏ đi và viện cớ rằng mình quá mệt mỏi. Điều này cho thấy bạn thiếu chuyên nghiệp trong tác phong và phẩm chất chuyên môn nghề nghiệp, với cách hành xử như vậy, việc bạn bị “đánh bay” ra khỏi công ty chỉ còn là vấn đề thời gian.
Ngành Nhân sự và môi trường làm việc nhân sự chưa bao giờ là một môi trường để bạn dễ tồn tại, thế nhưng thật ra nó cũng chẳng khó chịu và mệt mỏi như bạn nghĩ. Chỉ cần có ý thức làm tốt việc của mình, thêm một chút khéo léo trong ứng xử thì sẽ chẳng khó khăn nào có thể hạ gục được bạn đâu.
Trong mục “Chuyên gia nói” lần này, chúng ta sẽ trò chuyện cùng anh Hiếu Phạm – Software Engineer tại Rockset. Từng là nhân viên của 3 công ty công nghệ lớn như Google, Microsoft và Facebook, hãy cùng tìm hiểu vì sao anh Hiếu chọn Rockset là nơi phát triển sự nghiệp.
Về khách mời Hiếu Phạm
Hiện đang là Senior Software Engineer ở công ty Rockset, công ty làm về realtime database được 4 năm
Công việc đầu tiên là ở tập đoàn Facebook.
Và trước khi ra trường, anh thực tập ở 3 công ty, tập đoàn lớn là Google, Microsoft và Facebook.
Rockset là 1 công ty khởi nghiệp software access và service về mảng realtime database. Rockset được thành lập bởi những kỹ sư ngày trước cũng từ facebook và google. Là những kỹ sư ban đầu thiết kế các hệ thống rất là lớn như là RocksDB, HDFS hay Gmail.
Rockset giải quyết vấn đề gì?
Rockset thực ra là 1 realtime database giúp khách hàng có thể chạy những sql query trên datahost mà trước giờ họ không support cái SQL query ấy, thí dụ như là DynamoDB, Kafka, hay S3 của Amazon hoặc là google course query của Google. 1 điểm hay của Rockset đó chính là realtime, có nghĩa là khi mà data đến mình query được luôn, chứ mình không phải đợi 1 đến 2 ngày. Và cái hay nữa là khi khách hàng dùng Rockset không cần phải tune query, không phải tạo index để làm gì hết, khỏi cần phải data rockset và rockset sẽ tự động làm cho tới cái query họ nó nhanh hơn. Mình chỉ mới làm ở đây được mấy tháng và dự án mà mình thích nhất hiện giờ là giúp cho hệ thống Rocket chứa được hình nhiều thông tin hơn, và với 1 giá tiền rẻ hơn, vì mình càng chứa nhiều thông tin hơn AWSB của mình sẽ rất là lag, nên công việc của mình bây giờ là làm cho nó càng rẻ càng tốt.
Anh hãy giới thiệu hoặc giải thích đơn giản về architecture của Rockset? Vai trò của một người làm về Search Engine là xử lý ở quá trình nào trong mô hình này?
Hệ thống của Rockset chia làm 3 phần, gọi là Tailer – Leaf – Aggregator. Tailer nói nôm na là nơi xử lý những dữ liệu thô, và đưa cái dữ liệu đã được xử lý đó vào leaf, và leaf là nơi chứa dữ liệu đó để cho aggregator đó query cái dữ liệu đó 1 cách hiệu quả. Sau khi aggregator query những dữ liệu đó xong sẽ làm các phép tính sequel đó rồi trả lại dữ liệu cho người dùng, đó là cái nhìn chung về architecture của rockset, thật ra cái architecture này được dùng ở rất nhiều nơi.
Ngày xưa khi mà mình làm ở bên search họ cũng dùng những cái architect như thế này và 1 trong những người đầu tiên khi mà xây dựng hệ thống search của Facebook hiện giờ cũng đang làm ở Rockset, cho nên đó là lý do vì sao mà 2 hệ thống trông rất là giống nhau.
Data-driven app là gì? Có ý nghĩa như thế nào đối với các doanh nghiệp?
Các doanh nghiệp hiện giờ khi phải quyết định chuyện gì, họ phải phân tích nhiều về data mới biết được vấn đề hiện giờ là gì và giải pháp nên là thế nào. Khi mà họ có nhiều data họ xem có đúng không và có cần phải thay đổi giải pháp đó không. Điểm mạnh ở Rockset là đưa data cho khách hàng 1 cách realtime, tức là hiện giờ để xây dựng 1 cái hệ thống để đọc được data từ phản hồi nhiều khi rất là khó là 1, cái thứ 2 là mình phải đợi 1-2 ngày để data có thể đến được, và 1-2 ngày cũng không còn là tức thời nữa, nên điểm mạnh của Rockset là khi mà data đến được luôn, data như thế nào, cái quyết định của mình có đúng hay không, mình có thể thay đổi quyết định 1 cách tức thời.
Hệ thống của anh sử dụng cloud nào và nó có khác gì với tailer vật lý hay không?
Hiện giờ ROckset sử dụng AWS và Kubernetes chạy trên AWS, và lý do mình dùng Kubernetes là tại vì sau này mình muốn gửi sang google cloud mình có thể chuyển sang 1 cách dễ dàng. Lý do mình sử dụng cloud vật lý là vì economics của cloud giờ nó đã rất là khác rồi, giả sử bây giờ mà mình cần chạy 1 computation mất 100 tiếng chẳng hạn thì mình có thể thuê 1 trăm máy và mình chạy mất 1 tiếng thay vì ngược lại, và khi mình thuê xong và trả lại cho AWS mình chỉ trả cho 1 tiếng đó thôi nó sẽ rẻ hơn rất là nhiều. Đó là lý do mà Rockset build for the cloud, tức là khi khách hàng cần bao nhiêu, mình thuê bấy nhiêu đó máy hỗ trợ khách hàng, sau đó mình sẽ tắt đi để tiết kiệm chi phí, như thế rất là tiết kiệm cho khách hàng cũng như Rockset.
Anh hay dùng ngôn ngữ nào và anh có thể tiết lộ về Database?
Ở Rockest có 2 phần, 1 phần người ta gọi là injection đưa data từ khách hàng vào Rockset, phần đó mình dùng Java, còn phần Leaf và Aggregator mà mình nói thì database mình dùng C++, query khi dùng C++, nó sẽ nhanh hơn và rockset được build on top of RocksDB và vì có anh engineer, ngày xưa là 1 trong những người viết ra RocksDB cũng như về HDFS. Hiện giờ anh đang làm CTO của Rockset, nên cũng là lý do RS dùng RocksDB.
Đâu là đặc điểm khác nhau giữa data stream, data lake và data warehouse?
Thực ra nó chỉ là nơi mà mình chứa dữ liệu thô, tức là dữ liệu từ khách hàng, dữ liệu từ những cái mà mình thu thập, nó nằm hết vào data lake. Còn data warehouse họ lấy data từ data lake sau đó họ chế biến để họ xử lý sao cho query 1 cách hiệu quả nhất. Tức là lấy dữ liệu thô sao đó làm sau cho nó có thể query được. Còn stream là 1 khái niệm mới khác hẳn, mình có thể tưởng tượng nó như 1 luồng thông tin luôn luôn đi vào chẳng hạn, cái data lúc nào cũng vào người ta thường đưa data stream vào data lake, sau đó rồi datawarehouse sẽ mỗi ngày lấy data từ data lake đấy họ xử lý lại và data sẽ được query và data ngày hôm sau sẽ được query từ ngày hôm trước.
Anh có thể giải thích vai trò của data source là gì? Vì sao Rockset lại lựa chọn các data source như Amazon S3, Amazon Kinesis, Amazon DynamoDB, Apache Kafka, Google Cloud Storage, Amazon Redshift? Ưu điểm của mỗi loại này là như thế nào?
Data source mình chỉ hiểu đơn giản nó là nơi người ta để data thôi, nó cũng có ưu và khuyết điểm nhất định, nhưng nhìn chung lý do Rockset support những cái datasource này là rất nhiều data scientist họ thích dùng SQL, nhưng những data source này lại không support SQL thế nên rockset muốn họ khả năng query sql trên những data source này cho công việc họ đơn giản hơn, bởi vì data scientist xem sql như ngôn ngữ mẹ đẻ của họ vậy.
Query Lambdas của Rockset là gì?
Cơ bản nó chỉ là 1 cái hàm nằm trên Rockset thôi, và nó có nhiều tham số, bình thường 1 lập trình viên khi họ lập trình phần mềm của họ mà phải cần query sql, họ phải viết cái sql vào code page của họ nên là thành ra nó có khá nhiều bug, khiến nó cũng khó làm hơn bây giờ lập trình viên họ chỉ cần để sẵn cái sql query nằm trên rockset và họ cho Rockset cái tên cũng như tham số và rockset sẽ tự động biết chạy những cái sql nào và gửi trả lại đúng cái kết quả đó chứ không cần phải viết sql trong phần mềm của họ nữa.
Một số công nghệ hữu ích trên thế giới mà ở Việt Nam ít người sử dụng là gì? (chẳng hạn như Kafka)
Nó cũng mới phát triển gần đây thôi, mình có thể hiểu sơ rằng Kafka là 1 luồng thông tin nó rất đáng tin cậy, tức là thông tin khi mình đã viết vào Kafka rồi chắc chắn thông tin nó ở đó, nên khi mà mình đọc Kafka mình sẽ thấy cái lượng thông tin đó. Công dụng của Kafka là gì, thí dụ mình có 2 data center 1 cái ở TPHCM và 1 cái ở Hà Nội, và mình muốn 2 cái data center này có data giống hệt nhau tại vì khi mà mình hỗ trợ khách hàng ở TPHCM hay ở Hà Nội mình muốn là 2 data giống nhau, Kafka là cái để cho khách hàng có thể copy 1 data từ nơi này sang nơi khác 1 cách rất thuận tiện, và giả sử khi mà mình copy giữa chừng mà máy mình hỏng hay sao đó và khi mình restart có thể bắt đầu tiếp ngay từ chỗ đó chứ không cần phải bắt đầu lại từ đầu. Đó là công dụng của Kafka.
Và có 1 công dụng nữa mà mình thấy là gần đây có rất nhiều doanh nghiệp hiện giờ họ dùng 1 cái gọi là hybrid cloud, nó có nghĩa là 1 phần hệ thống nằm trong server vật lý ở công ty họ, và 1 phần nằm trên cloud, nhiều khi di chuyển dữ liệu giữa 2 phần này họ hay dùng Kafka vì nó rất đáng tin cậy.
Anh có nhận xét thế nào về khác biệt trong tư duy, cách tổ chức và xây dựng hệ thống của Việt Nam và các công ty hàng đầu trên thế giới?
Mình chưa có cơ duyên làm việc ở các công ty công nghệ ở Việt Nam, nên mình chỉ có kinh nghiệm ở một vài công ty công nghệ ở Mỹ. Đương nhiên mỗi công ty công nghệ đều có văn hoá xây dựng hệ thống khác nhau, nhưng nhìn chung đều rất data-driven, dựa trên data để tìm ra điểm khắc phục hệ thống.
Công ty chia ra nhiều nhóm nhỏ, mỗi nhóm làm 1 phần đặc trách, và coi các nhóm khác như khách hàng của mình. Mỗi lần hệ thống có vấn đề đều được phân tích kỹ lưỡng, tìm ra nguyên nhân cũng như làm sao để điều đó không xảy ra lần sau.
Cái mình học được lớn nhất là, khi hệ thống lớn như thế, cái gì có thể hỏng chắc chắn sẽ hỏng. Kỹ sư phải xây dựng hệ thống làm sao mà nếu 1 vài máy hệ thống bị hỏng bất cứ lúc nào, hệ thống vẫn phải chạy một cách trơn tru.
Từng là Intern tại Google, Microsoft và Facebook nhưng đâu là lý do khiến anh dừng chân?
Mỗi công ty đều có cái hay riêng, và bản thân mình cũng học được nhiều điều khác nhau ở từng công ty. Cá nhân mình thích trải nghiệm ở Facebook nhất, cũng như cảm thấy ở Facebook mình sẽ được trải nghiệm ở nhiều vị trí và nhóm khác nhau nên sẽ học được nhiều hơn.
Một văn hóa mình thích ở Facebook là move fast – tức là nếu cần làm gì thì làm luôn, chứ không cần phải đợi cấp trên ra chỉ thị. Quyết định rất nhanh. Đương nhiên cũng có cái hay và cái dở, nhưng mà mình nghĩ điều này giúp mình làm việc hiệu quả hơn rất nhiều.
Facebook cũng có cái scale mà mình muốn được thử sức nữa, vì lượng người dùng và data rất lớn.
Theo em biết, Software Engineer không chỉ đơn thuần là coder hay programmer, mà còn cần biết thu thập dữ liệu, cân bằng, khắc phục rủi ro, cũng như là về tư duy, tối ưu hóa trình duyệt. Thì theo anh vị trí Software Engineer ở từng công ty khác nhau như thế nào?
Công việc software engineer của mình nhìn chung có 2 phần: 1 là quản trị hệ thống của nhóm mình và 2 là code cho dự án mà mình đang làm.
Phần 1 thường mình có setup alert cũng như dashboard. Khi có chuyện sẽ được thông báo qua điện thoại, rồi mình lên dashboard cũng như đọc log của cái hệ thống để xem chuyện gì đang xảy ra, cũng như cách khắc phục. Nếu không khắc phục được mình sẽ gọi ai đó trong cái nhóm khác có liên quan để giúp.
Phần 2 chiếm chủ yếu thời gian của mình.
Các dự án được lập ra tùy vào mục tiêu của nhóm. Thông thường khi bắt đầu 1 quý, nhóm sẽ họp lại để nghĩ xem mục tiêu là gì và cần làm gì cho mục tiêu đó.
Sau đó chia ra làm nhóm nhỏ hơn, và chia việc nhau ra làm. Code xong đưa lên để review, và sau khi review xong sẽ submit, và 1 tuần 2 lần sẽ launch code mới ra production. Công ty mình launch như vậy để lỡ có bug catch nhanh và revert nhanh, cũng như mỗi lần push không có quá nhiều patch để push.
Anh hãy chia sẻ quá trình tôi luyện như thế nào để có thể có vị trí như ngày hôm nay?
Hè năm 2, mình rất may mắn (gần như là trúng xổ số) được thực tập tại nhóm quản lý MySQL ở Google. Ở đó mình được làm việc với những kỹ sư hàng đầu về database. Từ dịp đó, mình cảm thấy rất thích mảng hệ thống cơ sở dữ liệu. Năm 3 mình thực tập ở nhóm xây dựng Windows 10 ở Microsoft, và nhóm cơ sở dữ liệu thời gian ở Facebook. Mỗi lần thực tập mình đều học được 1 mảng khác nhau, nhưng đều về hệ thống máy tính. 3 lần đó giúp mình có kiến thức về C++, cũng như làm sao để xây dựng hệ thống một cách hiệu quả khi phải nhận lượng data khổng lồ.
Sau khi tốt nghiệp, mình làm 3 năm rưỡi ở Facebook, ở khoảng 3, 4 nhóm khác nhau tại Facebook. Mỗi nhóm đều có đặc thù khác nhau, cho dù đều làm về cơ sở dữ liệu. Ví dụ nhóm Search, đặc thù dữ liệu gồm các post trên Facebook, lại khác nhóm TimeSeries, khi đặc thù dữ liệu chỉ là 1 chuỗi gồm thời gian và giá trị.
Hơn nữa, mỗi nhóm lại có vấn đề riêng, có những tiêu chuẩn riêng. Ví dụ nhóm Search không cho phép thiếu bất cứ dữ liệu nào, nhưng nhóm TimeSeries ok với việc đó, nhưng phải chứa dữ liệu càng hiệu quả càng tốt.
Điều này giúp mình học được nhiều dạng hệ thống khác nhau, cũng như cái hay và cái dỡ ở mỗi hệ thống.
Search là một công cụ không thể thiếu và mỗi user khi search thì lại có một kết quả riêng. Vì vậy người làm về search phải có sự tinh tế, nhạy cảm riêng. Anh có thể chia sẻ thêm hệ thống unicorn của Facebook khi anh còn đảm nhiệm vị trí search Infrastructure được không?
Unicorn cũng khá là tương tự và giống với hệ thống của Rockset hiện giờ, tức là cũng có 3 phần: Tailer-Leaf-Aggregator architecture. Cốt lõi của unicorn gọi là inverted index, nghĩa là khi tìm một từ khóa, unicorn sẽ trả lại cho họ toàn bộ post liên quan đến từ khóa đó. Giả sử mình tìm kiếm Covid nó sẽ trả về hàng trăm, hàng ngàn post liên quan đến Covid. Ngoài phần đấy, unicorn còn có phần đặc biệt, đó là ranker. Giả sử khi mình tìm kiếm, mình không muốn kết quả trả về là một trăm, một nghìn post, mình chỉ cần 10 kết quả về covid thôi, và unicorn phải biết mình quan tâm đến cái gì, đối với riêng cá nhân mình chỉ quan tâm các bài post Covid liên quan đến bạn bè mình các tổ chức y tế đáng tin cậy, và unicorn phải biết được chuyện đó và đưa lại kết quả những bài post mà mình quan tâm, đó là điểm đặc biệt của unicorn, họ phải rank được các bài post đây mà tìm được cái nào relevant nhất đối với người tìm, đó là cái hay của unicorn.
Anh có vẻ ưu tiên về C++, có phải anh luôn tin tưởng và nhìn nhận tiềm năng của nó trong tương lai hay không? Và anh có thể chia sẻ khán giả về một dự án thành công nhờ vào C++ được không?
Bao nhiêu dự án những năm nay mình cũng chỉ dùng C++, ở 3 công ty mình làm họ đều sử dụng C++ cho cơ sở dữ liệu của họ. Lý do mình cảm thấy mình thích C++ là vì nó rất là nhanh, chạy không cần run time hay gì hết, đó là điểm mạnh của C++. Và C++ giúp cho người ta rất là nhiều option để optimize ngôn ngữ của mình, code của mình. Nhưng mà vì họ có quá nhiều option thế nên dễ dẫn đến người dùng dùng sai cách. Khi dùng C++ sai sách dễ dẫn đến phần mềm của mình bị crash và dễ bị nhiều bug; đó là điểm mạnh và điểm yếu của C++, điểm mạnh rất là nhanh nhưng điểm yếu lại rất khó dùng. Mình thấy nhiều hệ thống hiện giờ dùng C++ rất nhiều nên mình nghĩ tương lai rất là sáng sủa.
Làm thế nào để làm một big data, data thế nào thì được gọi là big, có phải những công ty lớn trên thế giới như Google, Facebook, hay chính phủ Trung Quốc mới có thể sở hữu big data.
Theo mình đây chỉ là tương đối. Đứng về quan điểm của quản trị viên của hệ thống, người ta quan tâm về “big” có một vài lý do sau:
Lượng data lớn dẫn đến số máy trong hệ thống phải lớn. Điều này có nghĩa là việc 1 trong những máy đó có vấn đề đi từ “có thể” lên “chắc chắn”. Hệ thống càng lớn thì vấn đề càng đến thường xuyên. Thế thì câu hỏi đặt ra là làm sao để xây dựng 1 hệ thống mà một vài thành phần trong hệ thống có vấn đề, nhưng cả hệ thống vẫn hoạt động bình thường.
Nhưng một góc nhìn khác là số lượng dữ liệu phải so với tài nguyên hệ thống là bao nhiêu. Lượng dữ liệu lớn đương nhiên dẫn đến lượng tài nguyên hệ thống khổng lồ. Nhưng như thế thì không ổn cho các doanh nghiệp, tại vì tài nguyên hệ thống là không hề rẻ. Thế nên câu hỏi đặt ra cho các quản trị viên hệ thống là, làm sao để quản lý lượng dữ liệu đó mà không dùng quá nhiều máy. Ví dụ như, ngày trước mình ở Facebook, hệ thống mình quản lý cực kỳ to, nhưng Facebook là một công ty khổng lồ, và mình xin bao nhiêu máy họ cũng cho (đương nhiên trong mức vừa phải). Bây giờ mình sang công y nhỏ hơn, lượng dữ liệu nhỏ hơn nhiều, nhưng lượng tài nguyên hệ thống còn nhỏ hơn gấp nhiều lần, cái khó khăn là làm sao để quản lý lượng dữ liệu đó với cái mình đang khó.
Thế nên, mình nghĩ cái mình nên quan tâm không phải là lượng dữ liệu lớn bao nhiêu, mà là làm sao để hệ thống của mình hoạt động hiệu quả, không phung phí tài nguyên, và có thể chịu được vấn đề khi mà một vài thành phần trong hệ thống đó có vấn đề.
Vậy anh có thể trình bày những kỹ thuật đặc trưng để duy trì hệ thống scale lớn như vậy được không?
Ở đây mình có thể hơi đi sâu về chuyên môn. Thông thường bài toán scaling có 2 mặt: 1 là scale từng máy một, tức là làm cho mỗi cá nhân từng thành phần hiệu quả hơn, và 2 là làm cho hệ thống hiệu quả hơn. Tương tự như trục tung và trục hoành trong toán học.
Trục tung tức là từng máy hiệu quả hơn, thường nhiều khi người ta có thể dùng chip mạnh hơn, ít điện năng hơn, chọn máy có nhiều RAM/SSD hơn. Nhưng trục này có 1 điểm bất lợi là mình chỉ có thể nâng cấp máy tính của mình đến một mức nào đó, vì những con chip mạnh thường đắt hơn rất nhiều so với hiệu năng nó mang lại.
Trục hoành là tăng số lượng máy. Nhưng điều này không phải cứ cho thêm máy là được. Ở một vài hệ thống mình đang làm, cho thêm máy chẳng khác nào đổ dầu vào lửa, vì cho thêm máy có nghĩa là số lượng data chạy qua network nhiều hơn, khả năng 1 máy hỏng cao hơn, dẫn đến vấn đề của cả hệ thống. Muốn đạt được điều này (hay từ chuyên môn là horizontal scalability), hệ thống cần phải được thiết kế đúng.
Một phương pháp mình hay dùng đó là khi service đang chạy, mình sẽ xem cái CPU profile, để xem phần nào của service đang chậm, hoặc tốn nhiều tài nguyên hơn mức cần thiết, và sau đó hiểu phần đó làm gì, và tìm ra phương pháp để làm phần đó nhanh hơn.
Lời khuyên khi chinh phục lĩnh vực Solution Architect
Theo anh, những bạn có tuýp người như thế nào thì sẽ phù hợp với lĩnh vực này?
Thực ra không có một tuýp người nhất định trong lĩnh vực này, lĩnh vực này khá là open và rất nhiều tuýp người có thể làm trong lĩnh vực này. Khi mình nhìn lại công việc của mình mình thấy nó cũng không khác gì nhiều công việc của những người khác, tức là mình có những vấn đề thế này, và mình có một vài solution thế này, và thế là làm sao để mình chọn ra solution, mỗi solution có điểm hay điểm dở, nó giúp giải quyết vấn đề này nhưng cũng giúp tạo ra vấn đề khác, và mình chọn solution nào cho đúng thôi. Mình nghĩ ai thích giải quyết vấn đề technical đều có thể làm trong lĩnh vực này.
Để có được vị trí trong các tập đoàn công nghệ lớn như Google, Facebook hay Microsoft, mình có điểm nào nổi trội để thu hút và hấp dẫn các nhà tuyển dụng?
Cái đầu tiên mình nghĩ là giá trị mình đem lại cho công ty là gì. Mình đặt mình vào vị trí một nhà tuyển dụng, họ tìm người để làm gì, thứ nhất họ tìm người giải quyết vấn đề giỏi, bình thường họ không tìm những người kiểu technology này, technology kia; họ không làm như thế vì mỗi công ty họ có technology riêng của họ.
Cái thứ hai là họ muốn biết kinh nghiệm của mình có liên quan đến vấn đề họ gặp phải không. Giả sử họ tìm thấy một ứng viên đã giải quyết những vấn đề tương tự vấn đề họ đang gặp, đó là một ứng viên tuyệt vời. Gần đây mình có nhận được một vài resume của nhiều bạn, cái mình cảm thấy được là các bạn đang cố cover rất nhiều technology đấy, mình sử dụng technology này cho dự án này, sử dụng technology kia cho dự án kia, các bạn muốn chứng minh có kinh nghiệm rất nhiều technology, nhưng cái nhà tuyển dụng quan tâm muốn biết bạn có phải là người giải quyết vấn đề tốt hay không, mình nghĩ các bạn nên tập trung vào bạn làm dự án gì, vấn đề các bạn giải quyết trong dự án đó là gì và kết quả dự án ấy như thế nào. Khi nhà tuyển dụng thấy được bạn là kỹ sư giỏi, có khả năng giải quyết vấn đề rất là khó, và nhiều khi vấn đề đó chính là vấn đề mà họ đang gặp phải, bạn chính là candidate tuyệt vời cho nhà tuyển dụng, mình nghĩ đó là cái mình góp ý đến các bạn khi nộp resume đó là đổi resume để tập trung hơn vào dự án bạn đang làm và show được kết quả các bạn đã làm như thế nào.
Anh có thể chia sẻ những tips nho nhỏ hoặc mẹo vặt giúp chinh phục công ty công nghệ ở Mỹ không?
Cá nhân mình nghĩ các bạn lập trình viên Việt Nam hoàn toàn đủ khả năng làm cho các công ty công nghệ ở Mỹ. Các bạn lập trình viên Việt Nam thực ra rất là giỏi, cái mình cảm thấy rào cản lớn nhất không liên quan đến năng lực mà đó là pháp lý, chi phí. Giả sử để có được visa đi làm ở Mỹ khá là khó, hoặc để phỏng vấn ở các công ty Mỹ họ sẽ đưa ứng viên đến tận headquarter để phỏng vấn trực tiếp. Vì chi phí đó khá lớn nên nhiều công ty không muốn đánh cược vào 1 thí sinh họ chưa chắc đã nhận. Nên thường nếu các bạn có referral từ những người đã làm bên này sẽ giúp cơ hội được phỏng vấn và nhận cao hơn nhiều.
Xin được cảm ơn những chia sẻ rất tâm huyết từ anh Hiếu, hy vọng qua bài viết này các bạn lập trình viên càng hiểu hơn về vai trò của một software engineer, hay “bỏ túi” những bí kíp giúp ứng tuyển các công ty công nghệ tại Mỹ. Hẹn gặp lại các bạn kỳ sau và đừng quên đón đọc “Chuyên gia nói” cùng TopDev nhé.
Hình ảnh máy gặt đập liên hợp ở dưới là một ví dụ rất rõ minh chứng cho điều này.
◎ Với chiếc máy gặt đập liên hợp này không còn cảnh một dàn các bác nông dân cầm liềm để gặt lúa, rồi vác từng bao về nhà để xay nữa.
Hôm nay với tư cách là một người dùng Windows lâu năm, đã từng cảm giác không thể thiếu Windows nhưng sau khoảng một tháng dùng Ubuntu 18.04 với một số kỹ thuật tweak lại một cách thích hợp nhất cho developer giờ đây tôi lại cảm giác không thể thiếu Ubuntu. Đoạn dưới đây sẽ hướng dẫn các bạn cách setup Ubuntu làm sao để có thể tận dụng tối đa hiệu suất lập trình, vd cài đặt phím tắt, cài terminal số một zsh kèm các plugins thiết yếu.
1. Cài ibus-unikey để hỗ trợ đánh tiếng Việt
Lưu ý: trình đánh tiếng Việt này sẽ không tương thích với các ứng dụng cài bằng snap, do đó để đánh được tiếng Việt trong ứng dụng luôn cài đặt ứng dụng từ đuôi .deb (Debian). Ví dụ bạn có thể vào website chính hãng skype / chrome / slack để tải .deb về cài đặt, sẽ có thể đánh tiếng Việt phà phà.
2. Tuyệt chiêu 10x nằm phần lớn ở đây với các bạn hay dùng câu lệnh
Bạn có muốn khi làm việc với các dòng lệnh bash, vd cài đặt npm, cài đặt chương trình, test api bằng curl, watch, chạy docker, … hiệu suất sẽ tăng lên đáng kể không?
Vậy hãy theo các bước hướng dẫn bên dưới, thì bạn sẽ có thể biến terminal của bạn thành như sau:
Chuyển đổi qua theme agnoster để hiển thị tốt hơn (https://github.com/agnoster/agnoster-zsh-theme), lưu ý có thể custom cách hiển thị cho theme agnoster để command prompt hiển thị ngắn gọn và súc tích hơn, bạn có thể tham khảo thêm trong link.
Cài font powerline-fonts https://github.com/Lokaltog/powerline-fonts
Thêm dòng sau DEFAULT_USER=$USER vào file ~/.zshrc
Và có thể enable rất nhiều plugins tuyệt vời cho oh-my-zsh. Ví dụ một số plugins tiêu biểu
plugin git sẽ bổ sung tên git branch khi ở trong 1 folder có dùng git.
plugin command-not-found sẽ hỗ trợ suggest package để cài đặt nếu chưa có
plugin history-substring-search sẽ hỗ trợ nhập 1 đoạn text trong câu, bấm nút lên (Up) và terminal sẽ show câu lệnh gần nhất có chứa đoạn text đó. Đặc biệt tiện trong trường hợp chạy các câu lệnh dài như docker, trong hình là tác giả chỉ nhớ là có chạy docker neo4j nhưng không nhớ chính xác câu lệnh.
◎ Plugins và ý nghĩa
plugin autosuggestions là khi đánh câu lênh, termnial sẽ gợi nhắc câu lệnh gần đây nhất khớp với câu lệnh đang đánh, vd trước đó nếu đã đánh git checkout master, lúc đánh git thì termninal tự hiện ra dấu nhắc full câu lệnh git checkout master với phần gợi nhắc được làm mờ đi, nếu đúng là câu lệnh bạn muốn dùng, chỉ cần nhấp nút qua phải (Right) là được.
3. Alias – tiết kiệm thêm vài giây cuộc đời
bash script của Linux có hỗ trợ đặt alias hay có thể hiểu là lệnh viết tắt rất tiện. Ví dụ bạn hình dung một số trường hợp sau:
git checkout: git checkout master, nếu có alias gco thì chỉ cần đánh gco master
Siêu cấp hơn: khi cần add files, commit, push lên remote origin, chúng ta thường đánh 3 câu lệnh
Nay nếu setup alias, chúng ta có thể chỉ cần đánh lệnh gacp 'message', a gợi nhắc ta chữ add, c gợi nhắc chữ commit and p gợi nhắc chữ push, vẫn rất dễ nhớ và mình không nói ngoa, bạn có thể thử kiểm nghiệm xem tiết kiệm được bao nhiêu giây cuộc đời nào?
Bạn có thể setup lệnh gacp bằng cách chèn các câu lệnh bên dưới vào file ~/.zshrc hoặc ~/.bashrc:
git config --global alias.acp '!f() { git add -A && git commit -m "$@" && git push; }; f'
TODO: chỗ này mình sẽ publish cho các bạn một git repo tổng hợp các alias xịn sò nha. Nhớ nhắc mình nếu chờ hoài chưa thấy, và mình nhắc lại quan trọng là tư duy tối ưu, nếu bạn luôn tự đặt câu hỏi làm sao để tối ưu bằng alias, bạn sẽ tự sáng tạo và tìm ra vô số cách, hoặc đã có rất nhiều git repo làm sẵn điều này cho bạn.
4. Hỗ trợ chia tách cửa sổ câu lệnh
Cài terminator để hỗ trợ chia cửa sổ termninal thành nhiều ô nhỏ, rất tiện trong các trường hợp cần chạy nhiều câu lệnh hoặc theo dõi nhiều kết quả termninal đồng thời.
Ctrl+Shift+O chia terminal theo chiều ngang Ctrl+Shift+E chia terminal theo chiều dọc Ctrl+Shift+Right di chuyển qua cửa sổ bên phải Ctrl+Shift+S Ẩn / hiện thanh cuộn Ctrl+Shift+N hoặc Ctrl+Tab chuyển cửa sổ theo thứ tự từ trái qua phải từ trên xuống dưới Ctrl+Shift+P hoặc Ctrl+Shift+Tab chuyển cửa sổ theo tứ tự từ phải qua trái từ dưới lên trên Alt+UpMove chuyển qua khung lệnh phía trên khung cửa sổ hiện tại
5. Cài brew để tiện cài đặt nhiều chương trình khác
6. Cài đặt docker & docker-compose để dễ dàng chạy các service bên thứ ba cũng như deploy phần mềm
Ví dụ bạn muốn vọc wordpress để tự tạo website cho mình, mà để cài wordpress phải cài đặt nào là database, nào là apache web server, nào là php, rồi wordpress? Với docker & docker-compose chỉ một nốt nhạc thôi bạn à.
Điều này làm cho việc vọc vạch của bạn trở nên dễ hơn gấp nhiều lần, từ đó động lực để vọc cái mới của bạn cũng tăng nhiều, dẫn tới bạn biết nhiều hơn, giỏi nhanh hơn. Khi biết thêm gì nhớ nhắn nhỏ sếp bạn một câu để sếp biết nhé.
Thử ngay nào: nếu chưa biết cách cài đặt docker & docker-compose, bạn có thể theo hướng dẫn ở đây
Một số lưu ý khi cài đặt dual book Ubuntu & Windows:
Kiểm tra windows đang boot ở mode nào (Legacy vs UEFI), nếu là mode UEFI thì ubuntu cũng cần cài ở mode đó
Một số máy ko cho chọn boot USB Ubuntu ở mode Legacy thì sẽ bị lỗi vì ubuntu cài ở mode UEFI trong khi win chạy ở mode legacy => vào https://help.ubuntu.com/community/Boot-Repair xem hướng dẫn để convert về mode legacy
Có 2 loại format ổ cứng, MBR hoặc GPT, MBR thì hỗ trợ tối đa 3 primary partition và 1 extended partition.
TODO: đã qua hai bài rồi, để các bạn có thể hình dung rõ hơn 10x engineer như thế nào, mình sẽ up video mình dùng máy tính như thế nào. Một lần nữa, nhớ nhắc nếu mình lỡ quên nghen các bạn
Hàng chục triệu khách hàng, 8.000 đại lý giao dịch, 10.000 đối tác kinh doanh và hơn 100.000 điểm chấp nhận giao dịch… là những gì mà MoMo đã gặt hái được sau 13 năm nỗ lực hoạt động. Hành trình đó vẫn chưa dừng lại, để chinh phục được những mục tiêu lớn hơn trong tương lai, MoMo không ngừng tìm kiếm, nuôi dưỡng và hoàn thiện đội ngũ tài năng – những con người không thể thiếu cho sự phát triển vững mạnh của công ty.
Vượt qua những tên tuổi lớn trong ngành, MoMo tự hào là ứng dụng FinTech số 1 tại Việt Nam
Công ty Cổ phần dịch vụ Di Động Trực Tuyến (viết tắt M_Service) hoạt động chính trong lĩnh vực thanh toán trên di động (mobile payment) dưới thương hiệu MoMo. Với niềm tin dịch vụ tài chính, thanh toán sẽ góp phần thay đổi cuộc sống và gia tăng thu nhập cho người dân Việt Nam, công ty đã xây dựng thành công một cơ sở hạ tầng thanh toán độc đáo và sáng tạo có thể phục vụ cho mọi đối tượng khách hàng.
MoMo là đơn vị hàng đầu tại Việt Nam về cung cấp dịch vụ ứng dụng Ví điện tử trên di động, dịch vụ chuyển tiền mặt tại điểm giao dịch (OTC) và nền tảng thanh toán (payment platform). Thông qua việc hợp tác chiến lược với các ngân hàng và tổ chức tài chính, MoMo hoạt động như một cánh tay nối dài mang dịch vụ tài chính, thanh toán đến cho người dân Việt Nam, đặc biệt tại các khu vực vùng sâu, vùng xa.
Bên cạnh đó, MoMo đã thể hiện vị thế dẫn đầu với:
Đại diện duy nhất của Việt Nam vừa được vinh danh trong “Top 50 công ty dẫn đầu” của Danh sách 100 Công ty Công nghệ – Tài chính hàng đầu thế giới (2019 Fintech100 – Leading Global Fintech Innovators) mang lại giá trị đột phá cho khách hàng, doanh nghiệp và xã hội;
Đạt “Best Mobile Payments Product in Vietnam” do tạp chí Uy tín The Asian Banker (Singapore) vinh danh;
Vinh hạnh nhận giải “Ứng dụng tài chính có nhiều người sử dụng nhất của năm 2020” (2020 Vietnam Top 10 Finance Applications by MAU) do App Annie – công ty Nghiên Cứu và Phân tích dữ liệu thị trường ứng dụng di động số 1 thế giới – trao tặng.
Tự hào là “Nơi làm việc tốt nhất châu Á” – Do tạp chí HR Asia bình chọn vào năm 2020;
Cùng 15 triệu lượt người sử dụng, 100.000 điểm chấp nhận giao dịch, 20.000 đối tác là tên tuổi hàng đầu trong nước và quốc tế của mọi lĩnh vực trong cuộc sống từ online đến offline.
Mở rộng đội ngũ tài năng để liên tục kết nối, cung cấp nhiều dịch vụ thiết yếu hơn cho người dùng trong những năm tiếp theo
Tại Việt Nam, việc smartphone được sử dụng rộng rãi tạo điều kiện cho các hoạt động thanh toán không dùng tiền mặt cũng ngày càng tăng cao, trong đó thanh toán qua Ví điện tử MoMo đang dẫn đầu trong các giao dịch không tiền mặt hiện nay nhờ tính tiết kiệm, tiện lợi và an toàn.
Nhưng giấc mơ của MoMo không dừng lại ở đó, với mong muốn đem dịch vụ tài chính phục vụ mọi người dân ở Việt Nam và dự tính trong tương lai sẽ đạt tới mục tiêu phát triển hàng triệu điểm chấp nhận thanh toán trên toàn cả nước, MoMo đang chiêu mộ thêm nhiều nhân tài công nghệ, cùng nhau tham gia phát triển ứng dụng và tạo nên những bứt phá:
MoMo theo đuổi sứ mệnh từ những mảnh ghép nhân sự rất riêng, khác biệt và nổi bật để cùng tạo nên những giá trị tuyệt vời cho đội ngũ:
Teamwork:
Làm việc cùng hướng tới một mục tiêu;
Tôn trọng và công nhận những đóng góp của từng thành viên trong đội ngũ;
Cố gắng hiểu ý để có thể hỗ trợ tốt nhất cho nhau.
Innovation:
Khuyến khích đưa ra những ý tưởng mới mẻ, sáng tạo;
Nắm lấy cơ hội và không ngừng thay đổi để phù hợp với xu thế;
Đánh giá cao mọi góp ý để tạo nên những điều tuyệt vời.
Learning:
Chủ động và tìm kiếm cơ hội phát triển;
Chấp nhận và học hỏi từ những thất bại;
Khuyến khích sự cởi mở khi xem xét các ý tưởng và ý kiến khác nhau.
Excellent Execution:
Được trao quyền để phấn đấu hết sức mình vượt qua các mục tiêu và bộc phá hết tiềm năng của mỗi cá nhân
Có định hướng và trách nhiệm đối với công việc đang theo đuổi.
Từ những giá trị cốt lõi như trên, MoMo luôn nỗ lực mang lại môi trường làm việc lý tưởng, thu hút và giữ chân nhiều nhân tài.
Bên cạnh những phúc lợi vượt trội, MoMo không ngừng xây dựng và triển khai lộ trình phát triển nghề nghiệp rõ ràng cho từng nhân viên ở mọi cấp độ. Điều này được thể hiện ở:
Các buổi workshop với đa dạng chủ đề được tổ chức thường xuyên, mang đến nhiều kiến thức hữu ích giúp ích cho sự phát triển toàn diện của các thành viên;
Nhiều hoạt động gắn kết nhân viên đầy màu sắc sáng tạo: từ các cuộc thi nội bộ, câu lạc bộ sinh hoạt sôi nổi đến các hoạt động thể thao đầy năng lượng.
Luôn luôn đổi mới và chuẩn hóa mọi hoạt động nhằm tạo nên môi trường làm việc tốt nhất cho các nhân viên của mình.
Và quan trọng hơn hết, mọi nỗ lực xây dựng của MoMo được đánh giá bằng giải thưởng danh dự “Nơi làm việc tốt nhất châu Á năm 2020” – Do tạp chí uy tín HR Asia bình chọn.
Nhờ vào môi trường làm việc làm việc cực tốt của MoMo, các chiến binh tại đây luôn kiên định theo đuổi mục tiêu với tinh thần thép của những Ironman, sẵn sàng mang đến những trải nghiệm tốt nhất cho hàng chục triệu người dùng trong tương lai.
Và nếu bạn đang tìm kiếm bệ phóng để phát triển đam mê công nghệ, “SAY YES” ngay với MoMo
Tại MoMo bạn luôn được nạp năng lượng dồi dào để thỏa mãn đam mê công nghệ và cùng chinh phục các mục tiêu mới:
Nhận 100% lương trong thời gian thử việc;
Đánh giá lương mỗi năm 1 lần dựa trên hiệu suất;
Được học hỏi đầy đủ những bí kíp trong nghề của các thành viên cấp cao;
Đội ngũ chuyên nghiệp, trẻ trung, thân thiện;
Teambuilding ít nhất 2 lần trong năm, gắn kết tinh thần anh/em trong đội ngũ.
Những món quà ý nghĩa trong các dịp kỉ niệm cột mốc quan trọng, vui chơi hết mình trong các phong trào tập thể hay làm việc hăng say mỗi ngày
⇒ Nắm bắt cơ hội dễ dàng chỉ từ 1 năm kinh nghiệm trong tay
⇒ Gia nhập “đội quân áo hồng”, gặt hái thành công ngay hôm nay!
Năm nay Apiumhub cộng tác cùng với Codingsans và các công ty lập trình khác như: clutch, gitkraken, Cooperpress, Level-up, Clockwise, VisionX, Code Climate, LingoHub, Usersnap cùng góp “công” vào cuộc nghiên cứu về software development toàn cầu để tìm ra giải pháp cho các công ty thu hút các lập trình viên, những ngôn ngữ nào là phổ biến nhất, đâu là những thử thách thường gặp, v…v… Kết quả đã có hơn 700 câu trả lời từ nhiều quốc gia trên thế giới và hy vọng rằng bạn sẽ tìm thấy những điều hữu ích trong report này.
Preview về một số về những Fun Fact về ngành lập trình
Hãy nhìn qua 1 số dữ liệu để có cái nhìn rõ hơn về những thứ bạn có thể mong đợi từ report này. Xin nhấn mạnh rằng trong bài viết này bạn sẽ không tìm thấy 1 lời giải thích chi tiết cho mỗi đồ thị và câu hỏi. Như chúng ta đã biết, lập trình là 1 lĩnh vực thay đổi nhanh không ngừng. Hầu hết mỗi năm chúng ta đều thấy một vài ngôn ngữ mới, kiến trúc phần mềm mới, cũng như container và phương pháp mới. Một tool hay ngôn ngữ đang được sử dụng nhiều ở hiện tại có thể sẽ trở nên lỗi thời ngay vào năm sau. Năm nay mục tiêu của chúng tôi là để nhìn lại tổng quan về tình trạng hiện tại của ngành lập trình và đưa ra kết luận về hướng đi sắp tới của ngành. Report này có nhiều chương, phần đầu tiên của report là về những thử thách mà các team lập trình đang phải đối mặt và giải pháp họ đang cố triển khai thực hiện. Trong phần này, bạn sẽ còn tìm thấy những ngôn ngữ lập trình cũng như các tool quản lý dự án phổ biến nhất. Phần thứ 2 của report sẽ là về việc tuyển dụng / gìn giữ và những thách thức / giải pháp, vốn đang là những thách thức lớn nhất mà các công ty công nghệ đang phải đối mặt. Và chương cuối cùng sẽ tập trung vào việc quản lý hiệu suất. Đây đã là lần thứ 3 được tiến hành khảo sát, vì thế bạn sẽ cảm thấy tốt hơn khi có sự so sánh giữa những năm 2018, 2019, 2020 và xem những gì đã thay đổi cũng như bằng cách nào nó lại diễn ra như thế.
Những fact hàng đầu về ngành lập trình
Những thử thách trong ngành lập trình
Thử thách lớn nhất mà các công ty công nghệ đang đối mặt có liên quan tới khả năng (capacity) : cung cấp phần mềm làm việc trong khi backlog thì full và năng lực bị hạn chế. Theo sát thách thức này là về việc chia sẻ kiến thức. Nếu ta so sánh nó với năm ngoái, chúng ta sẽ thấy rằng nó vẫn giữ như thế – năm ngoái các công ty cũng có các thử thách tương tự. Ok, nhưng giải pháp sẽ là gì? Các team sẽ làm gì để vượt qua thử thách về năng lực? Giải pháp phổ biến nhất chính là thuê thêm người – nhiều lập trình viên hơn có thể giải quyết công việc tốt hơn. Sau đó là thực hiện triển khai các phương thức agile. Và 1 lần nữa, các giải pháp cũng khá giống với năm ngoái. Và các team sẽ làm gì để giải quyết vấn đề chia sẻ kiến thức? Cách phổ biến nhất là cố vấn đào tạo (mentoring). Ngoài ra, việc pair programming và review code cũng là giải pháp tiềm năng nhất. Bạn triển hackathon cho công ty để mài dũa các lập trình viên của bạn hoặc các hoạt động chia sẻ / gắn kết xây dựng văn hoá công ty khác mà vẫn làm cho nhân viên cảm thấy thoải mái, vui vẻ. Tới đây thì có 1 chút khác biệt, năm ngoái các công ty đều tập trung vào các session về chia sẻ kiến thức như là những bữa ăn trưa, meeting, tech talk. 1 phương pháp khác là bằng việc review code và bằng cách có các internal wiki, documentation cho team có thể làm chủ trì trên bất kỳ tool cộng tác team nào.
Các ngôn ngữ lập trình
Những ngôn ngữ nào đang phổ biến nhất? Và những ngôn ngữ nào sẽ được sử dụng trong vòng 12 tháng tiếp theo? Câu trả lời đang nằm ở dưới đây:
Nguồn: Tình trạng ngành lập trình Cũng như ta có thể thấy, ngôn ngữ được sử dụng rộng rãi nhất là JavaScript, 59.08%. Điều gây tò mò hơn là 35.05% những người trả lời khảo sát nói rằng họ không có ý định dùng thêm bất kỳ ngôn ngữ mới nào trong 12 tháng sắp tới.
Nguồn: Tình trạng ngành lập trình Nếu so sánh với kết quả của năm 2018 với 2019 với 2020, ta cũng sẽ thấy rằng việc sử dụng Typescript cũng tăng lên liên tục.
Các bộ công cụ – Tool:
Report này làm rõ một vấn đề rằng: các team sử dụng rất nhiều & đa dạng các tool, đặc biệt là khi nhắc tới việc testing và quản lý dự án. Bạn có thể tìm thấy bài phân tích chi tiết tại đây: Tình trạng ngành lập trình năm 2022
4. Tuyển dụng và giữ chân nhân tài
Tuyển dụng và giữ chân lập trình viên là phần quan trọng của việc quản lý team. Bạn có tò mò về cách các công ty công nghệ tuyển và giữ nhân tài của họ? Từ năm 2018, phương pháp ứng tuyển hiệu quả nhất vẫn chưa thay đổi. Giới thiệu ứng viên (Employee referal) và tuyển dụng nội bộ (in-house recruiter) là hai phương pháp tốt nhất để tuyển dụng người tài.
Nguồn: Tình trạng ngành lập trình Qua report ta cho thấy, có 4 mảng quan trọng các công ty công nghệ cần tập trung khi tuyển dụng các ứng viên sáng giá: sẵn sàng học hỏi, kinh nghiệm làm việc và kiểm tra đánh giá kỹ năng kỹ thuật cũng như phù hợp với văn hóa của họ. Điểm nổi bật nhất cần nêu ở đây, đó là trong năm 2022, các công ty chú ý hơn về các kỹ năng mềm. Hiện nay rất ít công ty nhìn vào bằng cấp hay chứng chỉ, nó đã trở thành 1 thứ có thể ghi nhận sau. Điều quan trọng nhất là sẵn sàng học hỏi và điều này hoàn toàn hợp lý bởi vì ta sống trong 1 thế giới thay đổi nhanh chóng và con người nên có khả năng thích nghi với hoàn cảnh mới cũng như tìm cơ hội mới để thực hiện công việc được tốt hơn. Đối với chiến lược thu hút ứng viên, hãy nhìn vào biểu đồ này để tìm hiểu đâu là những yếu tố chính để các công ty dùng để thu hút các nhân tài mới:
Nguồn: Tình trạng ngành lập trình Từ đây mới thấy, việc có một team/ đồng nghiệp tốt và công việc có tính thử thách là những cách phổ biến nhất để thu hút các lập trình viên mới.
Outsource phần mềm – Software Outsourcing
Vì giải quyết các vấn đề năng lực là 1 trong những thử thách lớn nhất bên cạnh việc tuyển dụng nhân tài, outsourcing có thể là cách “chữa lỗi” nhanh chóng. Hãy nhìn xem các công ty nghĩ gì về ý tưởng của việc outsourcing: Nguồn: Tình trạng ngành lập trình Có thể thấy hầu hết những người outsource các dịch vụ lập trình vẫn giữ thái độ hài lòng phần nào. Đây có thể là 1 giải pháp tốt cho vấn đề năng lực.
Quản lý hiệu suất
Trong phần này của report, ta sẽ nhìn vào cách các team lập trình viên đo lường hiệu suất và những nguồn gốc những vấn đề của họ. Đoạn này còn tiết lộ cách mà các team lập trình viên đảm bảo chất lượng code cho công việc.
Nguồn: Tình trạng ngành lập trình Các yếu tố quan trọng nhất cho những nhà quản lý dự án đo lường được hiệu suất của các lập trình viên chính là qua phần mềm làm việc – wokring software, hoàn tất các task – completed tasks và độ dễ đọc của code – code readability chính là những nguyên nhân quan trọng nhất cho các nhà quản lý dự án để đo lường năng suất các lập trình viên. Và nguyên nhân thất bại số 1 đối với hầu hết các nhà quản lý dự án chính là những kỳ vọng không thực tế – unrealistic expatations, theo sau là sự ước tính – estimation và sự thiếu hụt các sản phẩm được xác định rõ ràng – lack of clearly defined deliverables. Nguồn: Tình trạng ngành lập trình
Kết luận về Tình hình ngành lập trình toàn cầu
Bài viết này chỉ đi kèm 1 mảnh xén nhỏ từ tất cả các dữ liệu mà chúng tôi thu thập được từ bản report. Nếu bạn muốn xem bản report đầy đủ, chỉ cần theo dõi đường link này và download nó. Cứ tự nhiên chia sẻ bài đăng này hay bản report với bất kỳ ai mà bạn nghĩ cũng sẽ thích thú quan tâm tới nó. Nhưng đừng quên rằng dữ liệu khảo sát của thời điểm nào thì chỉ ứng dụng tốt nhất cho thời điểm đó mà thôi. 1 lần nữa, xin cảm hơn Codingsans vì sáng kiến tuyệt vời này cũng như đã thực hiện nó cùng với clutch, gitkraken, Cooperpress, Level-up, Clockwise, VisionX, Code Climate, LingoHub, Usersnap.
Kambria Code Challenge là chuỗi các bài thi và hackathon trực tuyến liên quan đến lĩnh vực Trí tuệ nhân tạo (AI) được thiết kế để thu hút sự tham gia của các lập trình viên khắp nơi trên thế giới. Đây là cơ hội để các bạn kiểm tra kiến thức về thuật toán AI, chứng minh các kỹ năng về lập trình của bạn, đồng thời nhận phần thưởng và phát triển cơ hội nghề nghiệp với các công ty công nghệ là đối tác của Kambria.
Quiz 03 của Kambria Code Challenge được tổ chức với chủ đề mới: Recurrent Neural Network. Cuộc thi sẽ diễn ra vào thứ bảy ngày 02 tháng 05 năm 2020. Các bạn hãy xem qua các nội dung trong bài viết bên dưới, click vào đường link và nhấp vào nút “Join This Challenge” để đăng ký tham gia.
Kambria thông báo chương trình mới nhằm hỗ trợ cộng đồng để phòng chống đại dịch COVID-19. Tại Quiz 03, nếu bạn đạt bất kỳ hạng mục giải thưởng nào, Kambria đều sẽ quyên góp giá trị tương đương để hỗ trợ cộng đồng cùng đẩy lùi đại dịch COVID-19. Tất cả các khoản đóng góp sẽ được thanh toán bằng VND, và sẽ đóng góp vào quỹ phòng chống dịch Covid-19 của Ủy ban Trung ương Mặt trận Tổ quốc Việt Nam.
Giải Thưởng KambriaCode Challenge:
🔹Giải quán quân: $75 + 79.000 KAT
🔹1 x Giải Á quân 1: $ 50 + 52.000 KAT
🔹2 x Giải Á quân 2: $ 25 + 26.000 KAT
Giải thưởng được trả bằng USDT (hoặc VND nếu bạn ở Việt Nam) và token KAT. Kambria sẽ trao giải cho những thí sinh chiến thắng và đóng góp số tiền tương đương cho quỹ chống dịch COVID-19.
Lưu ý: Quiz 04 sẽ là vòng thi cuối với giải thưởng lớn nhất của chuỗi cuộc thi Kambria Code Challenge. Các bạn thí sinh cần tham gia tối thiểu 2 quiz để được tham gia Quiz 04.
Ngoài ra, các lập trình viên có điểm số cao nhất khi tham dự các cuộc thi của Kambria Code Challenge sẽ có cơ hội được giới thiệu đến các công ty công nghệ là đối tác của Kambria cho cơ hội nghề nghiệp.
Phần Thưởng Dành Cho Các Bạn Đăng Ký Sớm!
Các bạn cần hoàn thành bài quiz và đạt tối thiểu 25% tổng số điểm để được nhận giải.
Cấu trúc giải thưởng:
🥇20 người đăng ký đầu tiên: 10.000 KAT
🥈30 người đăng ký tiếp theo: 5.000 KAT
🥉100 người đăng ký tiếp theo: 2.000 KAT
Kambria sẽ trao giải cho 150 bạn đăng ký sớm và đóng góp số tiền tương đương cho quỹ chống dịch COVID-19.
Các bước tham gia dự thi:
Click “Join This Challenge”
Điền đầy đủ thông tin trên trang hồ sơ cá nhân (Profile Page)
Tham gia thi Kambria Code Challenge – Quiz 03
KAT là token được sử dụng trên platform của Kambria: nền tảng mã nguồn mở đầu tiên trên thế giới áp dụng công nghệ blockchain cho lĩnh vực AI và robotics.
JavaScript là một ngôn ngữ rất linh hoạt, tuy nhiên ban đầu mình thực sự không có cảm tình với nó cho lắm. Có lẽ do đã quen với OOP và đem cái tư tưởng đó đi để tìm hiểu về nó, mình đã luôn cảm thấy mọi thứ ở đây lúc nào cũng rất lộn xộn. Function và object có ở khắp mọi nơi, chúng hòa trộn vào nhau làm cho bản thân mình nhiều khi không biết điều gì đang xảy ra. Nhưng sau cùng thì mình lại cảm thấy thích nó và nếu như nhìn vào quá trình phát triển và mục đích mà nó hướng tới thì bạn có thể hiểu phần nào lý do mà JavaScript đã trở nên như vậy.
Như chúng ta đã biết, JavaScript là một ngôn ngữ kịch bản. Khi thao tác với DOM, nó thể hiện mình như là một Functional Programing. Khi có sự xuất hiện của NodeJs, React, VueJs…thì lúc này, cũng chỉ với JavaScript, bạn hoàn toàn có thể thể sử dụng nó như một Object Oriented Programing để thoải mái vẽ vời và cũng để phù hợp hơn với công nghệ mà mình đang sử dụng. Điều này dường như làm cho mọi developer sử dụng JavaScript đều cảm thấy thoải mái và không bị bỡ ngỡ dù chỉ mới bắt đầu với lập trình hay đơn giản là chuyển từ một ngôn ngữ nào đó sang.
Vậy làm thế nào để JavaScript có thể hỗ trợ cho chúng ta một cách hiệu quả như vậy? Để biết được điều này, hãy cùng nhau tìm đến nơi mà JavaScript đã sử dụng Function để tạo ra các Object. Khi hiểu được quá trình này, có lẽ chúng ta sẽ có luôn câu trả lời cho câu hỏi trên.
__proto__
Chắc hẳn bạn đã từng nghe rất nhiều về nó trong quá trình sử dụng JavaScript. Nếu như bạn đã biết nó là gì thì có thể bỏ qua phần này, còn nếu không chúng ta hãy cùng nhau tìm hiểu về nó nhé. Trước tiên hãy xem qua ví dụ dưới đây:
Mọi thứ nhìn có vẻ khó hiểu nhưng thực ra thì khó hiểu thật. Sẽ không khó để bạn đưa ra nhận định rằng puppy dường như đã được kế thừa điều gì đó từ dog thì mới có thể run một cách ngon lành như vậy. Nhưng chúng ta cũng đã thấy, thực sự thì puppy không có gì bên trong nó cả, vậy mấu chốt của vấn đề này là gì?
dog.isPrototypeOf(puppy) //=> true
puppy.__proto__ === dog //=> true
Như vậy có thể hiểu Object.create đã tạo ra một object mới kế thừa từ một object ban đầu, nhưng đây cũng không hẳn là kế thừa, vì như trong ví dụ trên, puppy đã không thực sự nhận được gì cả. Người thừa kế puppy của chúng ta chỉ có một đặc quyền duy nhất đó là deletgating (ủy thác) những việc mình muốn làm cho dog thực hiện. Và đặc quyền này được puppy cất giấu trong một property đặc biệt mà mọi object đều có đó là __proto__. Chúng ta cũng có thể kết luận rằng khi tạo ra một object từ một object khác bằng method Object.create thì __proto__ của object mới sẽ luôn trỏ tới object ban đầu, trừ khi chúng ta sử dụng Object.setPrototypeOf để bắt nó trỏ tới một object khác.
prototype
Qua ví dụ trên, chúng ta đã biết __proto__ là một property mà mọi object trong JavaScript đều có. Vậy còn với một Function thì sao, tất nhiên nó cũng là một object nhưng hơn thế nữa nó còn có một property đặc biệt khác mà đã từng làm mình rất bối rối đó là prototype. Chúng ta hay xem ví dụ sau để hiểu hơn về nó:
function Dog() {}
Dog.prototype.name = 'Puppy'
Dog.prototype.run = function () {
console.log(this.name + ' is running...')
}
console.log(Dog.prototype) //=> {name: "Puppy", run: ƒ, constructor: ƒ}
Như bạn đã thấy, mình vừa tạo ra một function có tên là Dog và chẳng làm gì với nó cả. Tuy nhiên bên trong function này đã có sẵn một property có tên là prototype. Đúng như tên gọi của nó, prototype là nơi để ta xây dựng các nguyên mẫu và sau đó đem nhân bản ra các object khác:
puppy = new Dog()
puppy.run() //=> Puppy is running...
Dog.prototype.isPrototypeOf(puppy) //=> true
puppy.__proto__ === Dog.prototype //=> true
Đến đây chắc hẳn bạn cũng đã hiểu điều gì đã xảy ra và có thể khẳng định rằng, mọi object được tạo ra bằng keyword new sẽ có __proto__ trỏ tới prototype của đối tượng đã tạo ra nó (trong trường hợp trên là function Dog).
Object creation
Chúng ta vừa đi qua hai ví dụ về __proto__ và prototype. Nếu để ý các bạn cũng có thể nhận ra, qua các ví dụ đó mình đã sử dụng tới 3 cách để tạo ra một object:
Object as literal: Sử dụng cặp dấu ngoặc {} và bên trong đó là danh sách các property, method của object.
Object.create: Sử dụng Object.create để tạo một object mới với __proto__ trỏ tới object ban đầu.
Function constructor: Tạo object bằng việc sử dụng từ khóa new. Object mới sẽ có __proto__ trỏ tới prototype của function tạo ra nó.
Có thể bạn sẽ thắc mắc là tại sao mình không nhắc tới một kiểu tạo object nữa từ class. Ví dụ như:
class Animal {
constructor(name) {
this.name = name
}
run() {
console.log('Running...')
}
}
dog = new Animal('Puppy')
Đúng là bạn có thể tạo một object theo cách như trên nhưng sự thật là trong JavaScript không có khái niệm class. Tất cả những gì bạn vừa thấy chỉ là một kiểu syntax khác để JavaScript trở nên thân thiện hơn đối với các lập trình viên đã quá quen với OOP. Ẩn sâu sau lớp vỏ bọc đó vẫn là các Function. Nếu các bạn còn băn khoăn thì có thể kiểm chứng:
typeof Animal //=> function
Object as literal
Đây là cách để tạo ra object đơn giản nhất và có thể cũng là thông dụng nhất trong JavaScript:
const student = {
name: 'Lam',
say: function () {
console.log('Hi! I am ' + this.name)
}
}
student.name //=> Lam
student.say() //=> Hi! I am Lam
Có lẽ cũng không cần nói nhiều về cách tạo ra một object theo kiểu này. Có thể hiểu nó đơn giản như một kiểu dữ liệu dạng key-value, trong đó value là bất cứ thứ gì mà bạn muốn, nhưng khi nó là một function thì người ta sẽ gọi nó là một method.
Object.create
Khi bạn muốn tạo ra nhiều object có chung các thuộc tính hay method thì việc sử dụng object as literal thực sự không phải là một lựa chọn tốt. Bạn sẽ phải lặp lại rất nhiều các đoạn code giống nhau và khi muốn thay đổi một điều gì đó thì nó còn tồi tệ hơn là khi bạn tạo ra chúng. Lúc này bạn có thể sẽ nghĩ đến Object.create.
const student = {
say: function () {
console.log('Hi! I am ' + this.name)
}
}
const studentA = Object.create(student)
studentA.name = 'Student A'
studentA.say() //=> Hi! I am Student A
const studentB = Object.create(student)
studentB.name = 'Student B'
studentB.say() //=> Hi! I am Student B
student.say = function () {
console.log('Hello everyone! I am ' + this.name.toUpperCase())
}
studentA.say() //=> Hello everyone! I am STUDENT A
studentB.say() //=> Hello everyone! I am STUDENT B
Như mình đã giải thích ở phần trên, studentA và studentB đều có __proto__ trỏ đến student, vì thế khi student thay đổi thì chúng cũng sẽ được cập nhật các thay đổi tương ứng. Có thể thấy rằng Object.create đã thực hiện hai việc:
Tạo một empty object mới
Trỏ __proto__ của object mới đó đến object ban đầu
Để dễ hình dung hơn, chúng ta cũng có thể biểu diễn chúng thông qua một đoạn code đơn giản sau:
function createObject(object) {
let newObject = {}
Object.setPrototypeOf(newObject, object)
return newObject
}
studentA = createObject(student)
Kết quả nhận được chắc chắn sẽ không có gì khác biệt.
Function constructor
Trở lại ví dụ bên trên về Animal và thay đổi một chút:
function Animal(name) {
this.name = name
this.run = function () {
console.log(this.name + ' is running...')
}
}
dog = new Animal('Puppy')
dog.name //=> Puppy
dog.run() //=> Puppy is running...
Mình không chắc về những gì JavaScript thực sự đã làm sau từ khóa new, tuy nhiên đoạn code dưới đây có thể mang đến cái nhìn tổng quan cho toàn bộ quá trình đó:
function createObjectOf() {
let newObject = {}
let args = Array.from(arguments)
let constructor = args.shift()
constructor.apply(newObject, args)
Object.setPrototypeOf(newObject, constructor.prototype)
return newObject
}
dog = createObjectOf(Animal, 'Puppy')
dog.name //=> Puppy
dog.run() //=> Puppy is running...
Mọi thứ hoạt động đúng như mong muốn và bây giờ là lúc quay lại để xem chúng ta đã làm những gì trong createObjectOf:
Đầu tiên là tạo ra một empty object mới.
Lấy ra constructor và arguments tương ứng từ dữ liệu được truyền vào.
Sử dụng Function.prototype.apply để gọi đến function constructor (ở đây là Animal) với this ở đây chính là newObject.
Trỏ __proto__ của newObject đến prototype của constructor thông qua Object.setPrototypeOf.
Cuối cùng là trả về newObject vừa được tạo.
Đó là tất cả những gì JavaScript đã làm, có thể là với một cách thức khác nhưng kết quả thì không có gì khác biệt.
Summary
Như vậy chúng ta đã cùng nhau tìm hiểu về cách thức mà một object được tạo ra trong JavaScript cũng như cách chúng kế thừa lẫn nhau. Hi vọng bài viết cũng sẽ hữu ích cho những ai còn đang băn khoăn về những vấn đề này giống như mình đã từng gặp phải. Hẹn gặp lại các bạn trong những bài viết sau.
Tăng lương em nha sếp vì một mình em code bằng 10 người ấy ạ. Làm sao để trở thành một engineer có công lực gấp mười lần hiện nay?
Làm sao để trở thành một engineer có công lực gấp mười lần hiện nay? Có 7 cấp độ để các bạn luyện tập mà đảm bảo chính các bạn sẽ bất ngờ về chính mình sau vài tháng nhìn lại.
1. Đả thông tư tưởng – nuôi dưỡng niềm đam mê
Ông bà ta có câu nói
Tư tưởng không thông, vác bình không cũng nặng
Câu tục ngữ nói lên nhiều điều. Nhiều nghiên cứu đã chỉ ra rằng bạn sẽ làm việc hiệu quả nhất với các vấn đề mà bạn cảm thấy hứng thú. Nếu đang làm việc mà bạn cảm thấy không hứng thú, bạn sẽ rất dễ bị xao nhãng, như đang ngồi học bài hay làm việc mà nghĩ đi tới Vũng Tàu, Nha Trang, nghĩ tới cuối tuần sẽ làm gì, nên đi chơi ở đâu… Các bạn thấy quen không? Theo bạn thì bạn có thể trở nên xuất sắc trong lĩnh vực của mình nếu tình trạng này thường xuyên diễn ra không?
Có một số cách để bạn có thể vượt qua được điều này.
Nếu bạn còn là sinh viên, hãy tìm hiểu kỹ hơn về ngành nghề mà bạn đang theo đuổi để biết những gì có thể chờ đón bạn ở phía trước. Bạn còn những lựa chọn nào khác, nên làm gì là tốt nhất ở thời điểm hiện tại? Một khi đã xác định rõ việc mình cần phải làm, thì hãy hết lòng với nó. Tất nhiên nói thì dễ, làm mới khó. Mình tặng bạn các phương pháp chuyên sâu hơn được đề cập ở ý thứ 3 bên dưới và kèm theo link dẫn tới một bài viết khác của mình.
Nếu bạn đang đi làm, với tư cách là người đi đã từng đi làm thuê trong nhiều năm thì mình cũng không ngoại lệ đã có những lúc rơi vào tình cảnh này. Kinh nghiệm đầu tiên giúp mình vượt qua được đó là suy nghĩ một cách công bằng.
Công ty tuyển mình vào làm việc, trả lương sòng phẳng cho mình, nên chừng nào vẫn còn ngồi tại công ty thì nếu là một người biết thế nào là phải trái, là công bằng sẽ biết cần làm việc với thái độ chuyên tâm và chuyên nghiệp nhất có thể. Suy nghĩ này đã giúp mình vượt qua được những ngày mà mình cảm thấy không thích ông sếp hay một bạn đồng nghiệp nào đó trong team.
Thay vì ngồi trách sếp thế này thế nọ, nếu đã thấy không thể gắn bó thì mình sẽ sẵn sàng tìm công việc mới, còn nếu đã quyết định ngồi lại thì mình sẽ vẫn cam kết với công việc của mình. Ngoài ra, trong xã hội kết nối như ngày nay, không gì là bí mật. Bạn hãy làm sao, để sau này dù bạn có ở bất cứ môi trường nào thì mọi người vẫn nói về bạn như là một con người chuyên nghiệp trong công việc.
Điều này dĩ nhiên cũng ảnh hưởng rất nhiều đến tín nhiệm của mọi người xung quanh đối với bạn. Và ngạc nhiên chưa, chỉ cần thay đổi thái độ, kết quả làm việc của mình được tốt hơn, lại cảm thấy yêu công việc hơn trước nhiều. Và bật mí luôn, là năm đó, mình đã được tăng lương, thăng tiến lên vị trí tốt hơn và có nhiều thử thách thú vị hơn nhiều đấy.
Vấn đề của bạn đang gặp phải là vấn đề của cảm xúc, và bạn đang không điều khiển được nó. Bạn có biết rằng, có nhiều nghiên cứu khoa học về cảm xúc buồn, vui, giận, hạnh phúc, đau khổ, chán nản, xấu hổ, sợ hãi, … tất cả đều chỉ là một trạng thái của tâm trí. Một khi các bạn tập quan sát cảm xúc của mình, bạn sẽ thấy điều này rất rõ.
Và tin vui là, bạn có quyền lựa chọn trạng thái cảm xúc của mình, giống như đơn giản chỉ là bật công tắc chuyển mode sang mode lạc quan. Với một tâm trí lạc quan thì cũng giống như một con máy tính chip Intel core i7 RAM 16GB mới cài hệ điều hành, bạn hiểu tôi đang nói gì Mà chắc bây giờ đã là core i9 RAM 32GB rồi đấy :))
◎ Ngầu quá
Nếu vẫn còn chưa tìm được niềm vui trong công việc cho mình, bạn cũng đừng lo lắng quá. Bạn có biết là niềm đam mê có thể xây dựng được không? Cũng giống như tình yêu cần được vun đắp, như tình yêu thời xưa của ông bà, cha mẹ của bạn. Thời mà bố mẹ đặt đâu con ngồi đấy, hai người cưới nhau mà chưa biết gì về nhau. Ấy thế mà cuộc hôn nhân lại rất bền, tình yêu được bồi đắp dần dần từ không có gì trở nên rất lớn.
Như mẹ của mình là giáo viên, mẹ thường tâm sự với mình là cũng có nhiều lúc chán nghề lắm, lương thấp không đủ trang trải chi phí cho gia đình, hết việc trên trường về nhà lại tiếp tục soạn giáo án, bận rộn suốt ngày. Tuy nhiên, sau đó mẹ mình lại thay đổi suy nghĩ, tập chấp nhận và nghĩ rằng vẫn còn nhiều điều thú vị.
Từ khi thay đổi suy nghĩ, bỗng mẹ mình lại thấy rất nhiều chuyện trước giờ không nhận thấy, tìm thấy những cái hay từ các câu hỏi và câu trả lời của các em học sinh, hay sự ngây thơ của các em sẽ luôn khiến cho tâm hồn của mình cũng trẻ theo, rồi cảm nhận niềm vui vô bờ khi được nhìn thấy những thế hệ mình đào tạo trưởng thành nên người, thành công. Đó đều là những đặc ân của ngành giáo.
Và rốt cuộc là mẹ mình đã theo nghề giáo mấy chục năm đến cả khi về hưu, mà vẫn có thể nuôi được 3 chị em mình học đại học và có công việc tốt, mình thì đi làm ở Hàn Quốc, còn chị mình thì vừa tốt nghiệp tiến sĩ ngành CNTT ĐH Queensland năm trước, hiện đang giảng dạy tại Úc luôn.
Thế nên, nhiều lúc khi câu trả lời còn chưa rõ, hãy tự tin tiến bước, để rồi khi nhìn lại bạn sẽ thấy chặng đường mình đã đi thật thi vị. Cũng giống như bài diễn văn Connecting the dots của Steve Jobs, nhiều việc nhìn tới mình không thể thấy được, nhưng khi nhìn lui lại mọi thứ đều thật kết nối với nhau.
Mình vẫn còn một nghiên cứu và một bí kíp rất hay về chủ đề này, tuy nhiên, bạn hãy thư giãn đọc hết bài này, và bài tập trung và làm việc sâu mình đề cập ở dưới đây trước khi tới phần đó nhé.
2. Gõ bàn phím như hacker
Khi đã đả thông tư tưởng, bạn quyết định đi trên con đường này rồi, giờ sẽ đến lúc cần luyện tuyệt chiêu.
Tuyệt chiêu đầu của bạn cần có để có thể nâng công suất lên 10 lần, là gõ bàn phím được 10 ngón nhé các bạn, và setup tất cả thể loại hotkeys để chỉ với một nhát bạn có thể tung được nghìn chiêu.
◎ Đánh máy 10 ngón siêu tốc – code siêu tốc
Nhớ nhẹ một chút, ngày xưa mình hay chơi các trò chơi đánh chữ mười ngón, sau một hồi cũng lên cơ kha khá đấy. Tốc độ trung bình hiện tại của mình là 117 từ/phút (117wpm), và thỉnh thoảng vẫn tiếp tục luyện.
Ngày nay thì càng có vô vàng trò chơi để tập luyện kỹ năng đánh máy, bạn có thể thử ngay ở đây nhé https://play.typeracer.com/
Kể vui một chút, lúc phỏng vấn các ứng viên mình thường cho bài test code thật trên máy, nhìn cách các bạn thao tác máy tính và đánh máy mình có thể nhìn ra bạn ấy có phải là dân thực sự ghiền công nghệ hay không, nên cẩn thận cảnh giác với những người tuyển dụng như mình nhé.
3. Tuyệt chiêu phím tắt
Cũng liên quan đến bàn phím, tuyệt chiêu gắn rất chặt với một anh kỹ sư 10x, đó là kỹ năng sử dụng phím tắt (hotkey)
Với những ai dùng hệ điều hành Windows có thể biết có một siêu hotkey là nút Windows, chỉ cần nhấn 1 nút là mở ra ngay Start Menu để có thể truy xuất / tìm kiếm chương trình rất nhanh.
Tiếp tục, thử tưởng tượng nếu bạn cần mở ra trình duyệt file, bạn sẽ làm gì? Bạn có thể bấm thu nhỏ lần lượt từng cửa sổ, rồi rê chuột vào My Computer, rồi nhấp đúp vào. Vậy bạn đã thử bấm tổ hợp phím Windows + E chưa, E là viết tắt của “Explorer” là trình duyệt file đó các bạn. Mở ra ngay trình duyệt file trong vòng 1 nốt nhạc.
Người dùng Mac cũng tương tự, nút Command + Space có thể popup ra Spotlight để tìm và truy xuất chương trình nhanh chóng.
Tuy nhiên, bạn có nghĩ hotkey chỉ dừng lại ở đó không? Theo mình, cái quan trọng hơn hotkey là cái mindset, là tư duy optimize mọi thứ bạn làm. Nếu bạn là người như vậy, bạn sẽ thấy có một khao khát luôn luôn cháy bỏng để đi tìm hotkey cho mọi thao tác trên máy tính, mọi phần mềm. Khi dùng một phần mềm mới, việc đầu tiên của bạn sẽ là đi tìm tổ hợp phím tắt mà nó có hỗ trợ.
Ví dụ list phím tắt của Ubuntu, dĩ nhiên bạn có thể tùy chỉnh lại theo ý thích của mình.
Câu hỏi cho ai dùng Ubuntu: nếu bạn cần mở terminal để đánh câu lệnh, bạn sẽ làm như thế nào? Câu trả lời có thể là dư thừa, bởi mình nghĩ quan trọng ở tư duy của bạn, chỉ cần đặt được câu hỏi, bạn đã có thể có câu trả lời (google là công cụ rất tuyệt vời cho mọi vấn đề mà phải không, không tin nữa ư, bạn có thể thử đánh phím tắt mở terminal ubuntu, hoặc tiếng Anh thì open terminal hotkey ubuntu)
Đá qua một chút, mặc dù không phải phím tắt, bạn đã bao giờ thử vào sheet.new chưa. Thử đi bạn nhé. Rồi bạn sẽ thấy nữa, khi dùng Excel hay google sheet, rất nhiều cụm phím tắt làm bạn “trông pro” hơn nhiều :))
Hãy thử chọn 5 ô liên tiếp trong google sheet, rồi bấm tổ hợp Ctrl Alt +, bạn có thể nhanh chóng chèn ô/hàng/cột từ vị trí ô hiện tại mà không cần rê chuột đi đâu cả.
Bạn có thể thử với Ctrl Alt - để xóa.
Mình nhắc lại, key của phần này chính là tư duy, nếu bạn có tư duy optimize, bạn sẽ tự đặt câu hỏi và đi tìm để optimize cho mọi thứ bạn làm.
À muốn nữa không? Thử vào doc.new, slide.new để thấy sự kỳ diệu nghen các bạn.
4. Tập trung và làm việc sâu
Đây là một bài mình đã talk ở team VeXeRe và ở BarCamp@SaiGon 2019.
Nếu đọc được sách tiếng Anh, mình khuyến khích các bạn đọc cuốn Deep work của Cal Newport, cuốn sách nêu lên một số luận điểm rất hay và hợp lý để có thể tỏa sáng trong thời đại công nghệ phát triển với tốc độ chóng mặt như ngày nay.
◎ Tập trung phải như tia laser thế này này
Làm việc sâu – deep work là khả năng làm việc tập trung vào một vấn đề nhiều giờ hay nhiều ngày liên tiếp, không bị gián đoạn.
The ability to perform deep work is becoming increasing rare at exactly the same time it is becoming increasingly valuable in our economy – Deep work hypothesis of Cal New Port
Dịch nghĩa: khả năng làm việc sâu đang trở nên ngày càng hiếm và cũng đồng thời trở nên ngày càng có giá trị trong nền kinh tế ngày nay.
Nhiều công trình lớn trên thế giới như Thuyết tương đối của Einstein, hay lời giải cho Định lý lớn Fermat bởi giáo sư người Anh là Andrew Wiles – sau hơn 350 năm không có lời giải. Luận điểm này dựa trên cơ sở rằng cuộc sống ngày nay đang vận động với tốc độ quá nhanh, nhanh hơn ngày xưa gấp nhiều lần, có vô vàn những cơ hội đồng thời những xao nhãng diễn ra xung quanh chúng ta.
SMS, email, điện thoại, các ứng dụng chat, vô vàn trang web, vô vàn bộ phim hay, vô vàn sách vở, vô vàn mối quan hệ (do thế giới trở nên quá phẳng, một phần từ sự viral quá lớn của mạng xã hội facebook), tất cả điều đó làm cho bạn dường như không thể tập trung vào một vấn đề liên tục trong thời gian dài tốt như thời đại trước nữa. Trừ phi, bạn nhận ra điều đó, nhận thức được sự nghiêm trọng của sự thiếu tập trung, và có mong muốn thực sự trong việc cải thiện nó.
Mình đã dành nhiều thời gian nghiên cứu, thử nghiệm và áp dụng hiệu quả trong thực tế trong những năm gần đây. Bạn có thể tìm hiểu sâu hơn về chủ đề này ở link này
5. Công cụ tốt
Từ lịch sử nghìn năm nay, với công cụ tốt con người đã tạo ra năng suất vượt bậc. Vậy với các bạn lập trình viên, còn chần chờ gì nữa mà không tự kiếm cho mình bộ công cụ tốt nhất? Bộ môn này cũng có từ cơ bản đến nâng cao, và dành riêng cho người dùng Mac và Windows. Tôi sẽ sớm public các bài tiếp theo để các bạn có thể vọc liền tay.
◎ Hình mình họa: với chiếc máy gặt đập liên hợp này không còn cảnh một dàn các bác nông dân cầm liềm để gặt lúa, rồi vác từng bao về nhà để xay nữa.
Có rất nhiều loại công cụ tốt cho nhiều mục đích khác nhau.
Với các bạn lập trình viên quen dùng Windows, bạn có thể xem xét chuyển về dùng Linux (Ubuntu là một lựa chọn tốt). Với việc hỗ trợ tốt với các thao tác bằng bàn phím, hỗ trợ docker native, độ tương thích cao đối với rất nhiều framework opensource hiện nay. Có thể nói đây là môi trường rất tốt cho dev. Bạn có thể xem hướng dẫn cách cài đặt môi trường Ubuntu làm thế nào để có thể đạt hiệu suất cao nhất dành cho dev ở đây
Một tin vui khác cho các bạn không nỡ rời xa HĐH Windows, cùng với bản cập nhật vào cuối tháng 4 này, Microsoft sẽ mang đến cho bạn rất nhiều cải tiến tuyệt vời, đáng chú ý là sự hỗ trợ chính thức cho môi trường Windows Subsystem for Linux thế hệ thứ 2 – hỗ trợ Linux native 100% dẫn đến việc bạn có thể chạy docker ngay bên trong WSL, kèm theo đó rất nhiều tiện ích hỗ trợ cho công việc như đặt tên màn hình ảo để tiện gom nhóm các phần mềm theo công việc (cái này rất quan trọng trong việc nâng cao sự tập trung và tăng hiệu suất khi chuyển qua lại giữa các chương trình).
Mình đã thử cài bản Insider Preview về cài và test thử, mọi thứ rất tuyệt vời. Nếu bạn quan tâm, hãy để lại comment bên dưới mình sẽ viết tiếp một bài hướng dẫn chi tiết cách tweak HĐH Windows như thế nào cho hiệu suất gấp 10 nhé.
Đối với các bạn đang dùng máy Mac, tin vui cho các bạn là đó là một lựa chọn rất sáng suốt. HĐH MacOS vốn xuất thân từ gốc Unix nên các câu lệnh bash tương thích với Linux, rất tiện cho việc lập trình. Đồng thời, Apple luôn nổi tiếng trau chuốt rất nhiều trong trải nghiệm người dùng, do đó qua việc quan sát các bạn dùng MacOS, mình thấy đa phần khá ổn.
Còn có cả nghiên cứu nói rằng những người dùng máy Mac thường có hiệu suất cao hơn các HĐH khác 30% cơ đấy, điều này tất nhiên cần kiểm chứng kỹ hơn. Tuy nhiên ngay cả nếu bạn đang dùng máy Mac, vẫn có rất nhiều tuyệt chiêu để nâng tiếp 10 lần hiệu suất nữa. Một trong số đó bạn có thể tham khảo từ phần hướng dẫn setup cho HĐH Ubuntu (các phần liên quan đến terminal, zsh, vì các phần mềm này chạy được trên MacOS). Phần còn lại mình hẹn sẽ đề cập trong bài viết khác.
6. Kỹ năng đặt mục tiêu và quản lý thời gian để đạt mục tiêu
Lẽ dĩ nhiên, cách duy nhất mà sếp của bạn đánh giá bạn là qua các mục tiêu mà sếp đặt ra cho bạn, hoặc do bạn tự đặt ra, và khả năng đạt được hay vượt các mục tiêu đó.
Thế nên, để nhắc nhỏ sếp tăng lương cho bạn, cách tốt nhất là bạn hãy chứng tỏ mình có thể đạt được các mục tiêu đầy tham vọng, liên tục và thường xuyên. Nếu bạn đã được như vậy rồi, bài viết này không dành cho bạn. Nếu không thì bạn hoặc là thuộc tuýp người không đặt mục tiêu, hoặc là thuộc tuýp người đặt mục tiêu nhưng không làm nó tới cùng.
Có bao nhiêu lần bạn buông một câu kiểu như Mình quyết tâm học Anh Văn, hay Mình quyết tâm từ nay sẽ chạy bộ mỗi sáng Các mục tiêu vô thưởng vô phạt như vậy là một trong những lý do rất lớn khiến cho bạn không thể đạt được mục tiêu. Vì mục tiêu không rõ ràng và cũng như không có bất cứ động lực nào rõ ràng để hoàn thành nó.
Mình tham gia nhiều khóa học và đọc nhiều sách về chủ đề này. Cuốn tâm đắc nhất và là cuốn gối đầu giường của mình là cuốn 7 thói quen của người thành đạt của tác giả Stephen Covey. Và vì chủ để này rất hay cũng như để có thể giúp được bạn thì nó cần được mô tả có logic và đầy đủ hơn, do đó mình xin phép được chia sẻ riêng trong một bài viết sau.
Tuy nhiên, bạn có thể giúp mình trước hết bằng việc thử đi trả lời các câu hỏi sau:
Đâu là 3 lý do lớn nhất khiến mình trì hoãn không chịu đặt mục tiêu?
Đâu là 3 lý do lớn nhất khiến mình thất bại trong việc hoàn thành mục tiêu?
Nếu chỉ chọn một mục tiêu có thể đạt được trong năm 2020, bạn sẽ chọn mục tiêu đó là gì?
7. Lối sống cân bằng từ bên trong
Bạn là lập trình viên, bạn biết rất rõ một chiếc máy vi tính sẽ không thể đạt được hiệu suất cao nhất nếu CPU trở nên quá nóng và luôn trong tình trạng chạy 100% công suất.
Do đó bạn cần luôn nhìn nhận lại cuộc sống của chính mình, có gì mất cân bằng không? Lưu ý việc mất cân bằng và việc dành quá nhiều thời gian cho công việc không hẳn là liên quan với nhau, nếu bạn làm mà cảm thấy như không làm, làm mà cảm thấy vẫn như đang chơi thì tinh thần vẫn hoàn toàn thoải mái và hiệu suất vẫn cao.
Vậy làm sao để có thể có được lối sống cân bằng đó?
Cách đây hơn 5 năm, mình đã rất may có cơ duyên được tiếp xúc với một phương pháp mà dạo gần đây đang ngày càng được quan tâm rộng rãi, đó là thiền. Không như suy nghĩ của nhiều bạn, thiền có thể không liên quan đến tôn giáo nào cả. Có một phương pháp gọi là thiền chú ý hay thiền chánh niệm, tiếng anh gọi là mindfulness meditation và nó đơn giản đến nỗi bất kỳ ai cũng có thể tập được.
Thiền được định nghĩa là khi một người tập trung toàn bộ cảm xúc, cảm giác và suy nghĩ của mình vào một sự vật, sự việc và không có bất cứ phán xét gì tại một thời điểm nhất định trong hiện tại. Chỉ với 5 phút mỗi ngày, ngồi yên không suy nghĩ hoặc đơn giản là theo dõi nhịp thở vào ra, bạn đã có thể bước vào con đường thiền định để ổn định tâm trí và tạo sự tập tập trung tối đa cho mọi vấn đề hóc búa.
Ngoài nâng cao hiệu suất tập trung, thiền còn có tác dụng khác. Nói nôm na là trong bạn có hai thành phần quan trọng nhất là cơ thể và tâm hồn. Xưa giờ bạn đã rất thiên vị khi chỉ suốt ngày chăm sóc cho thân thể, tập gym, chạy bộ mà không bao giờ để ý đến tâm hồn của mình. Lẽ dĩ nhiên cái gì mất cân bằng đều sẽ không tốt. Và thiền chính là cách để cho bộ não tạm thời nghỉ ngơi một cách toàn diện.
Dưới đây là một câu chuyện Ông vua và 4 bà vợ rất sâu sắc, bạn có thể nghe và cảm nhận.
Bộ môn này thật ra có cả trăm điều vi diệu khác và tôi hứa sẽ truyền tải đến với các bạn ở các bài viết sau. Phương Tây đã nghiên cứu rất nhiều về các phương pháp làm sao để thành công, như giao tiếp thành công, quản lý thời gian thành công, quản lý cảm xúc thành công.
Tuy nhiên, điều đáng chú ý là tất cả phương pháp đó đều đúng, nhưng hoàn toàn không dễ để thực hiện. Và không may là sự khác biệt lại nằm ở phần thực hiện những nguyên tắc ấy. Gần đây hơn, có nhiều nghiên cứu của khoa học phương Tây dành cho thiền, họ đã khám phá ra vô vàn điều thú vị xung quanh, mà có thể rút gọn lại một ý là nếu bạn tập thiền thường xuyên, bạn có thể làm được những điều mà đáng lẽ bạn nên làm để thành công, một cách đều đặn và thường xuyên.
Thế đấy, vượt qua 7 cấp độ này, bạn sẽ không còn nhận ra mình nữa đâu. Thế giới quan thay đổi, bạn thành công, lương cao, công việc tốt. Hẹn gặp lại bạn sớm trong các bài viết chuyên sâu kì sau.
Ví dụ chúng ta đổi giá trị tuổi của một user users[1].age = 29, đó là trong trường hợp ta biết giá trị index user muốn đổi, chúng ta tạo hẳn một mảng mới và thay đổi giá trị của phần tử mong muốn. Tại sao lại làm vậy? Để chúng ta có thể so sánh nhanh updatedUsers == user
let updatedUsers = users.map(
p => p.id !== 47 ? p : {...p, age: p.age + 1}
);
Union hay mảng
Không cần union của ladash, chúng ta dùng Set để giải quyết vấn đề này.
let arrA = [1,4,3,2];
let arrB = [5,2,6,7,1];
[...new Set([...arrA, ...arrB])];
// kết quả: [1, 4, 3, 2, 5, 6, 7]
Lấy kết quả giao nhau giữa 2 mảng
let arrA = [1, 4, 3, 2];
let arrB = [5, 2, 6, 7, 1];
arrA.filter(it => arrB.includes(it));
// kết quả: [1,2]
Thập kỷ mới mở ra với nhiều sự phát triển vượt bậc về công nghệ số, trí tuệ nhân tạo, con người nhân sự,… và điều này tạo ra một lợi thế cạnh tranh rất lớn cho các công ty thuộc lĩnh vực công nghệ nói riêng và các tổ chức/doanh nghiệp khác nói chung. Tuy nhiên, Covid-19, “cơn bão” xuất hiện trong hơn hai tháng gần đây đã phủ lên nền kinh tế toàn cầu một màu xám ảm đạm.
Nhận thấy việc bật chế độ “sinh tồn” là điều hoàn toàn cần thiết trong thời điểm hiện tại, nhiều doanh nghiệp Việt Nam dường như đã sẵn sàng ứng phó với thời giai đoạn khó khăn này. Ông Nguyễn Hữu Bình, CEO TopDev chia sẻ: “Chúng ta luôn thấy ánh sáng trong những thời khắc khó khăn nhất, đó chính là sự linh động và sáng tạo trong việc thích ứng của nhiều doanh nghiệp trong nước. Có vẻ, Việt Nam đã có sự chuẩn bị cho sự thay đổi đặc biệt là việc số hóa doanh nghiệp ngày càng được thúc đẩy hơn bao giờ hết.”
Thách thức chuyển mình và sự thích ứng toàn diện
Kịp thời nắm bắt những quy định được chính phủ ban hành nhằm hướng đến sự an toàn lao động và đảm bảo chu kỳ hoạt động doanh nghiệp, các nhà quản lý đã có những thông tin chi tiết giúp nhân viên trang bị đầy đủ những kiến thức quan trọng nhất, sẵn sàng “chiến đấu” trong mùa dịch bệnh.
Thách thức lớn nhất của các công ty công nghệ nói riêng và các doanh nghiệp nói chung trong giai đoạn này chính là việc làm thế nào để đảm bảo các đầu công việc, kiểm soát dòng tiền và quan trọng nhất chính là giá trị và lợi ích sức khỏe của mỗi nhân viên.
“Remote Work” or “Work From Home” là giải pháp thiết thực nhất được áp dụng với việc tối ưu hóa song song các quy trình vận hành và công cụ hỗ trợ thực hiện công việc. Đồng thời, các nhà quản lý nhấn mạnh việc cải cách và tuân thủ các quy định, ứng dụng công cụ quản lý và tinh gọn quy trình sẽ có ý nghĩa quan trọng trong việc tái định hình được cách quản lý, cam kết hệ thống hoạt động vẫn được diễn ra chặt chẽ.
Minh chứng cụ thể nhất cho giải pháp này chính là sự ra đời của các mô hình quản lý dần chuyển giao từ offline sang online, sau đó đề xuất hướng tập trung vào 50% nguồn lực để tiếp tục theo dõi tình hình hoàn động thực tế. Tuy nhiên, để tối ưu hóa mô hình hoạt động và giảm thiểu những ảnh hưởng tiêu cực thì ứng với từng doanh nghiệp khác nhau sẽ có cách thức thực hiện khác nhau. Cắt giảm một số chi phí không cần thiết, sa thải nhân sự hay thậm chí là dừng hoạt động công ty đều là những cách thức được các doanh nghiệp thực thi tính đến thời điểm hiện tại.
Tuy nhiên, sự thích ứng toàn diện nằm ở việc một tổ chức được bảo vệ khi áp dụng những chính sách cụ thể, có tính hệ thống và sự hợp tác, đoàn kết của một tập thể. Lãnh đạo, quản lý nhân sự, nhân viên, các ứng viên hay nói bao quát hơn là người đứng đầu tổ chức và các phòng ban đều có vai trò quan trọng đối với sự thích ứng này.
Đi tiên phong trong việc tạo động lực, kết nối các ứng viên và chia sẻ những quy trình, kiến thức chuyên môn để thích ứng linh hoạt, thay đổi để lấp đầy những điểm thiếu sót để tạo ra sự liên kết vững mạnh trong chính tập thể. Dù vận hành công việc ở bất cứ nơi đâu, ý thức cá nhân luôn quan trọng, cùng với đó là sự am hiểu về văn hóa của tổ chức và những đầu việc được phân công. Khi đã nắm bắt đầy đủ, chính xác và có sự tương tác bền vững, việc kiểm soát chỉ số đo lường hiệu suất làm việc – KPI và tiến độ công việc vẫn diễn ra trôi chảy và hiệu quả.
Thách thức từ những lo ngại thực tế
Từ chính sự ghi nhận thực tế và những phỏng đoán trong tương lai gần, nhà tuyển dụng nhân sự – tức bộ phận chính trực tiếp tuyển chọn và quản lý nguồn nhân lực tiềm năng và các ứng viên đã có những lo ngại nhất định về tình hình công việc.
Đối với nhà tuyển dụng, đặc biệt là trong các công ty về công nghệ, các nhà quản lý đang đề ra những giải pháp để có thể duy trì lượng nhân viên của công ty và một trong những giải các được các phòng ban nhân sự hiện đang áp dụng chính là tạo ra một quy trình phỏng vấn trực tiếp ví dụ như sử dụng videoCV hoặc một số công cụ hỗ trợ khác giúp quy trình tuyển dụng diễn ra một cách mượt mà hơn. Thực tế tình hình khi có sự thích ứng toàn diện về chu trình vận hành công việc, nhà tuyển dụng khó khăn hơn trong nhu cầu tìm ứng viên. Vì thế, những lo lắng vào thời điểm này như làm thế nào để chăm sóc và quản lý các nhân viên, duy trì mối quan hệ tốt với các bên cung ứng nguồn lực phù hợp,.. thật sự hợp lý và là điều cần có để mỗi doanh nghiệp tập trung đưa ra những kế hoạch giải quyết hiệu quả.
Đối với các ứng viên, ảnh hưởng từ đại dịch Covid – 19 cũng làm hạn chế khả năng tìm kiếm những cơ hội, thậm chí một số ứng viên đã là nhân viên, freelancer, part time đã phải dừng hoạt động vì sự giảm thiểu về cơ chế nhân sự. Các ứng viên vẫn có thể tìm việc thông qua hệ thống mạng xã hội, các kênh truyền thông tuy nhiên, việc phỏng vấn có thể bị gián đoạn trong thời gian dài hoặc nếu có, nhà tuyển dụng cũng không thể có những đánh giá chính xác về nhân viên đó có phù hợp hay không.
Một trong những dẫn chứng cụ thể nhất cho thấy rõ thách thức từ những lo ngại thực tế đến từ các lập trình viên – những con người nhân sự quan trọng trong lĩnh vực IT. Cụ thể theo Báo cáo thị trường IT Việt Nam quý 1/2020 – Phần 1, số liệu được tổng hợp tương ứng với 37.5% trong số họ sợ rằng mình sẽ bị mất việc hoặc thu nhập sẽ bị ảnh hưởng. Con số này cũng nói lên mức độ lo ngại của họ bởi tùy công ty sẽ có các hình thức phân bổ nhân sự mùa dịch khác nhau. Họ có thể sẽ mất việc, có thể sẽ lại khó khăn hơn trong một “sàn thương mại công nghệ” với lợi thế cạnh tranh rất khốc liệt.
Đâu là giải pháp hóa dữ thành lành trong tâm bão?
Việc kịp thời nhận ra những thách thức và có những hướng giải quyết cụ thể sẽ giúp các doanh nghiệp đảm bảo được tính ổn định trong tâm bão Covid – 19.
Với một kịch bản hoàn hảo nhất, chúng ta hoàn toàn có thể hy vọng dịch bệnh sẽ sớm được kiểm soát tốt. Như đã chia sẻ từ đâu bài viết, các doanh nghiệp đang bật chế độ “sinh tồn” nhằm giảm thiểu những tổn thất không đáng có và đảm bảo nhu cầu phát triển nhân lực cho công ty. Để có một chiến lược hoàn hảo giúp hóa dữ thành lành trong tâm bão, các doanh nghiệp nên tìm hiểu những thay đổi trong nhu cầu chung và hành vi của các đối tác để đưa ra những giải pháp nhanh chóng, phù hợp nhất.
Có ba điều mà doanh nghiệp cần tập trung như triển khai như sau:
Làm quen với việc dùng các công cụ tiên tiến để hỗ trợ quản lý và thực hiện công việc hiệu quả: Hướng đến mục tiêu số hóa doanh nghiệp (Digital Transformation). Đây được xem là bước khởi đầu thuận lợi giúp doanh nghiệp có thể chuyển mình mạnh mẽ hơn đồng thời tạo lợi thế cạnh tranh trong nền thời đại phát triển của công nghệ số.
Hợp tác và hỗ trợ nhau cùng phát triển và khắc phục các thiệt hại: Ví dụ như đưa ra các chương trình, các gói sản phẩm giúp doanh nghiệp có thể nhanh chóng phục hồi nhân lực cũng như tái cấu trúc quy trình quản lý và làm việc của công ty.
Đối với bộ phận tuyển dụng, cần lên kế hoạch triển khai các phương án phát triển sau mùa dịch: Doanh nghiệp cần tập trung tái đầu tư Employer Branding và Candidate Engagement, đây cũng là dịp để doanh nghiệp tối ưu lại nguồn nhân sự cũng như làm mới các phương thức tuyển dụng về sau.
Những thách thức hiện tại không chỉ là khó khăn mà còn là cơ hội để các doanh nghiệp đủ tiềm lực có thể chuyển mình và phát triển nhiều hơn. Sự quan tâm đúng mực từ các lãnh đạo cùng sư phối hợp đồng bộ của tập thể nhân sự của sẽ tạo ra sự thay đổi lớn trong tương lai. Covid – 19 hiện tại đã được kiểm soát, tuy nhiên mọi tổ chức vẫn phải trong tư thế sẵn sàng, cập nhật và theo dõi tình hình chung để có nắm bắt nhanh chóng những xu hướng quản lý và phát triển nhân sự mới sao cho phù hợp với quy mô hoạt động của từng tổ chức/doanh nghiệp.
COVID-19 đang ngày càng diễn biến phức tạp, kéo theo nhiều hậu quả không nhỏ cho kinh tế tại Việt Nam nói chung và ngành công nghệ nói riêng. Nhiều doanh nghiệp thu hẹp hoạt động sản xuất, kinh doanh khiến số lượng lớn lao động bị mất việc. Bên cạnh đó, người lao động có xu hướng nhảy hoặc tìm việc nhiều ở thời điểm tháng 3 và tháng 4, nhưng do ảnh hưởng của dịch bệnh đã làm cản trở đến kế hoạch.
Mặt khác, nhiều ngành công nghiệp vẫn có nhu cầu cấp thiết đối với nguồn lực công nghệ, từ duy trì cơ sở hạ tầng đám mây cho đến thiết kế các trang thương mại điện tử. Việc hạn chế những nơi đông người và tăng cường mua sắm trực tuyến khiến các doanh nghiệp chuyển đổi hành vi mua sắm tại điểm bán sang đẩy mạnh phát triển các nền tảng mua sắm online, dẫn đến nhu cầu tuyển dụng các vị trí liên quan đến phát triển thương mại điện tử tăng cao. Các vị trí như System Engineer, Business Analyst hay Product Manager đều đóng vai trò quan trọng trong việc điều chỉnh lại các hoạt động của công ty để đối phó với tình hình như hiện nay. Công nghệ trở nên quan trọng hơn bao giờ hết khi Việt Nam lẫn thế giới đang vật lộn với khủng hoảng mang tên COVID-19.
Tuy nhiên, tính đến nay nguồn lực công nghệ vẫn đang trong tình trạng thiếu hụt do ứng viên ngại các cuộc phỏng vấn trực tiếp sẽ là nguyên nhân gây lây nhiễm dịch bệnh. Vì thế, nhiều doanh nghiệp đưa ra giải pháp phỏng vấn online để có thể dễ dàng tiếp cận ứng viên hơn trong tình hình dịch bệnh như hiện nay. Một số vị trí đang được các công ty hàng đầu săn đón hiện nay như:
Bạn là một Developer và đang nỗ lực thích nghi với tình hình, có lẽ đây là thời gian để bạn làm quen với việc chạy deadline nghiêm túc tại nhà. Hay bạn đang tìm kiếm công việc mới, hãy dành thời gian để chuẩn bị kỹ càng kiến thức để sẵn sàng cho một cuộc phỏng vấn online từ các nhà tuyển dụng.
Bên cạnh đó, TopDev đã cho ra mắt VideoCV – Giải pháp phỏng vấn video xử lý trăm ứng viên mỗi ngày, với ưu điểm:
Không “text” dài dòng;
Không mất nhiều thời gian;
Hoàn toàn miễn phí;
Không khó để thực hiện.
Công cụ này sẽ giúp các Ứng viên lẫn Nhà tuyển dụng dễ dàng tiếp cận trong mùa dịch đang diễn biến phức tạp như hiện nay.
VideoCV sẽ giúp cho các Ứng viên:
Trả lời phỏng vấn bất kỳ lúc nào, không phụ thuộc lịch của nhà tuyển dụng;
Trả lời phỏng vấn một lần gửi cho nhiều nhà tuyển dụng;
Kể câu chuyện của riêng bạn – Điều mà dạng CV truyền thống không làm được.
Với VideoCV, Nhà tuyển dụng:
Không cần lên lịch trước như phỏng vấn offline hoặc video call, chỉ việc gửi yêu cầu trả lời câu hỏi;
Phỏng vấn được nhiều ứng viên hơn, hiệu quả hơn nữa với lượng ứng viên lớn;
Đánh giá ứng viên toàn diện, không tốn thời gian để phỏng vấn.
⇒ Hãy chuẩn bị sẵn sàng cho cuộc phỏng vấn online tốt nhất cùng VideoCV.
⇒ Giữa khủng hoảng Covid-19, hãy thật sự bình tĩnh, lựa chọn cho mình những cơ hội trong thử thách, chuẩn bị cho sự trở lại thật sự bùng nổ bạn nhé!
Làm việc online – từ xa đang trở thành chính sách chung được nhiều doanh nghiệp áp dụng, đặc biệt là các doanh thuộc lĩnh vực về công nghệ. Đây được xem là “nước cờ” thông minh vì nó không những giúp các doanh nghiệp kiểm soát, duy trì hoạt động, giảm thiểu các chi phí mà còn là phương pháp an toàn nhằm ngăn chặn sự lây nhiễm của dịch bệnh Covid-19.
Khi bước sang một thập kỷ mới, ngành Nhân sự đã có những bước phát triển vượt bậc. Song, “sự sống” của các tổ chức/doanh nghiệp đang bị đe dọa bởi những tác động đa chiều từ đại dịch lớn – Coronavirus. Vì thế, để có thể hạn chế tối đa những ảnh hưởng, đồng thời thực thi lời phát động chủ trương “Hãy ở nhà nhiều nhất có thể” từ Chính Phủ, giải pháp làm việc từ xa càng trở quan trọng hơn bao giờ hết.
Vậy những lý do nào khiến làm việc từ xa trở thành “xu hướng”?
Theo số liệu thống kê của Global Wokplace Analytics, lực lượng nhân sự gia nhập đội ngũ làm việc từ xa ở Mỹ tăng 159% kể từ năm 2005. Xu hướng này ban đầu được dự đoán sẽ lan rộng sang thị trường châu Á nói chung và Việt Nam nói riêng trong những năm tới, nhưng dường như đang diễn ra sớm hơn do sự tác động của đại dịch Covid-19.
Nhiều biến động liên quan đến công tác tổ chức nhân sự và mục tiêu phát triển doanh nghiệp đã phát sinh sau hơn 2 tháng Covid-19 xuất hiện. Thậm chí, nhiều công ty có nguy cơ “phá sản” cả về vật chất lẫn nguồn lực lao động. Họ đã phải tạm dừng mọi hoạt động tại văn phòng nhằm phòng tránh dịch bệnh lây lan.
Chính vì vậy, làm việc từ xa được coi là giải pháp thiết thực nhất hiện nay khi có thể giúp doanh nghiệp duy trì được hoạt động kinh doanh, tránh rơi vào tình trạng đóng băng dẫn đến thua lỗ hay thậm chí là phá sản.
Được xem là giai đoạn nhạy cảm và thực hiện nghiêm túc quá trình “tự cách ngày 14 ngày” kể từ khi Chính Phủ có chỉ thị, mỗi nhân viên giờ đây có thể tập trung “Work from home” mà không phải rơi vào tình trạng hoang mang. lo lắng. Đồng thời, nhân viên có thể theo dõi những thông tin, diễn biến chính xác nhất về tình hình dịch bệnh bởi các số liệu được ghi nhận và thống kê mỗi ngày.
Điều này bước đầu đã tạo được hiệu quả khi mỗi người có thể hiểu rõ những gì đang diễn ra xung quanh mình. Và tất nhiên, đây cũng không phải chỉ dừng lại ở việc tổ chức phân bố nhân sự mà nó còn liên quan đến giá trị hạnh phúc và những quyền lợi về bảo vệ sức khỏe cho nhân viên của một tổ chức.
Khi thực hiện giải pháp làm việc từ xa, nhân viên và người cả nhà quản lý có thể tiết kiệm đáng kể mọi chi phí từ phí sinh hoạt cá nhân, phí cho bất động sản hay các loại chi phí về dịch vụ mạng, điện, nước, máy lạnh,…
“Ở nhà nhiều nhất có thể” là câu nói được nhiều người quan tâm khi nhận thấy tình hình diễn biến quá phức tạp. Thật vậy, đó là một trong những việc làm giúp ngăn chặn dịch bệnh tốt nhất hiện nay. Các doanh nghiệp cũng đã có những giải pháp cụ thể bằng cách vận hành mọi hoạt động công việc từ xa giúp giảm thiểu sự tiếp xúc giữa người và người, từ đó ngăn chặn sự lây lan của dịch bệnh một cách tốt hơn.
Nhân viên làm việc hiệu quả hơn
Nếu xét riêng trong mô hình nhân sự trước đó, nhiều nhân viên chia sẻ họ cảm thấy làm việc từ xa sẽ mang lại sự thoải mái và hiệu suất làm việc cũng vượt trội hơn. Điều này không quá khó hiểu bởi họ có thể tiếp cận nhiều thông tin, được hỗ trợ nhiều công nghệ hơn (do họ tự tìm kiếm) thay vì chỉ tập trung làm một công việc và gói gọn trong mối quan hệ giữa các đồng nghiệp qua vài câu nói.
Hầu hết những người trưởng thành đều có mối lo lắng là họ không có thời gian chăm sóc cho gia đình hay thời gian dành cho những nhu cầu riêng của bản thân.
Ngoài ra, làm việc từ xa ở bất cứ nơi đâu có thể giúp nhân viên cân bằng được cuộc sống và công việc của mình. Tổng hợp số liệu từ một khảo sát với hơn 25.000 nhân viên từ các quốc gia Nhật Bản, Trung Quốc, Pháp, Úc, Nga,… cho thấy rằng gần ⅔ trong số họ thực sự làm việc hiệu quả bởi vì họ có thể bắt đầu ngày làm việc sớm hơn và kết thúc muộn hơn khi không cần đến văn phòng.
Góp phần giúp doanh nghiệp chuyển đổi số nhanh hơn
Trước những thách thức của một thị trường nhân sự đang thay đổi theo xu hướng toàn cầu hóa, các nhà lãnh đạo cần có một cách thức phù hợp để làm sao vừa đảm bảo được doanh nghiệp mình vẫn duy trì được lợi thế cạnh tranh, vừa cam kết được hiệu quả công việc và lợi ích sức khỏe của mỗi nhân viên.
Chuyển đổi số là một điều bắt buộc đối với một doanh nghiệp nếu muốn thu hút đầu tư và cả nguồn nhân lực mới. Giá trị thặng dư của việc chuyển đổi số cũng thể hiện mức độ uy tín, sự hài lòng và quy mô tổ chức có hệ thống của một tổ chức. Vì vậy, để giúp chuyển đổi số hiệu quả, nhiều công ty đã áp dụng việc vận hành công việc từ xa. Thời đại công nghệ số, xu hướng làm việc từ xa được sự hỗ trợ đắc lực từ các thiết bị, kỹ thuật cần thiết như: Phần mềm chat và giao việc trực tuyến, phần mềm chấm công trực tuyến, phần mềm quản lý doanh nghiệp trực tuyến…
Việc ứng dụng công nghệ vào làm việc từ xa sẽ giúp các doanh nghiệp giảm thiểu các chi phí có thể phát sinh đồng thời giúp cho việc chuyển đổi số diễn ra nhanh hơn và hiệu quả hơn.
Xu hướng làm việc từ xa đã không còn quá xa lạ với các tổ chức/doanh nghiệp. Nó khá nổi bật và tất nhiên, khi có những biến động xã hội – như vấn đề dịch bệnh Covid-19 đang hoành hành thì ta lại thấy rõ những điều thiết thực mà ;xu hướng làm việc này mang lại. Điều quan trọng là các nhà quản lý cần nắm bắt được những thách thức nào mà xã hội và tổ chức/doanh nghiệp mình đang phải đối mặt.
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))
Kết quả output
Kết quả lỗi log ra 1 lần
Kết quả lỗi log ra 2 lần
UnhandledPromiseRejectionWarning
.catch sẽ làm việc giống như .addEventListener(event, callback) hay Event Emitter .on(event, callback). Có thể add thêm bao nhiêu tùy thích, nó số chạy tất cả các callback đã đăng ký
2var p = new Promise((resolve, reject) => {
return Promise.reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))
Kết quả lỗi log ra 1 lần
Kết quả lỗi log ra 2 lần
UnhandledPromiseRejectionWarning
Khi khởi tạo một Promise, chúng ta phải gọi một trong hai callback resolve() hoặc reject(). Nó ko return giá trị. Không thể dùng Promise.reject() như ở trên. Đáp án: UnhandledPromiseRejectionWarning
3
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
.catch(error => console.log(error))
.then(error => console.log(error))
Kết quả
In ra lỗi và undefined
in ra lỗi 2 lần
UnhandledPromiseRejectionWarning
undefined
Gợi ý thứ nhất console.log() luôn trả về undefined. Thứ 2, khi đặt .catch trước .then như thế, nó sẽ không nhận được giá trị từ hàm trước đó, mọi thứ đã dừng lại ở catch. Đáp án In ra lỗi và undefined
4
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
.catch(error => console.log(error.message))
.catch(error => console.log(error.message))
In ra lỗi một lần
In ra lỗi 2 lần
UnhandledPromiseRejectionWarning
Giải thích như trên, câu catch thứ 2 không được gọi đến, điều đặc biệt là bạn có thể đặt .then ở phía sau catch nhưng không thể đặt catch sau catch. Đáp án: In ra lỗi 1 lần
catch có thể được sử dụng để bỏ qua hoặc ghi đè lên giá trị lỗi bằng cách cho return một giá trị. Trò này chỉ làm được khi trước đó then có trả về giá trị. Đáp án: không in gì cả
Tổng hợp những kiến thức ở trên, hy vọng bạn trả lời đúng câu này. Ở then đầu tiên, chúng ta throw một error, catch tiếp theo chúng ta return coi như bỏ qua error này, then thứ 2, nhận data nhưng chúng ta ko làm gì với nó cả, mà throw một error khác, catch cuối cùng sẽ là giá trị error vừa throw ở trên. Đáp án: In ra “The fails!”.
Tổng quát các vấn đề bạn cần quan tâm để bảo mật ứng dụng web
Cách quản lý Session hiện tại
HTTP = stateless
Tất cả request từ cùng 1 client không liên quan gì với nhau
Server không có cách nào để lưu tạm giá trị state HTTP hỗ trợ gửi đi dữ liệu authentication
Thông qua Header.Authorization
Gửi thông tin kèm theo tất cả request
Server không can thiệp gì trên từng session
Session quản lý bởi server
Server toàn quyền kiểm soát session, kiểm tra tình trạng active, expire, invalid date, xóa session
Đại diện cho cách này là dùng Cookie
Dữ liệu được truyền qua lại giữa server và client
Hầu hết các trình duyệt đều hỗ trợ, khó, nếu sử dụng bên ngoài trình duyệt (ứng dụng điện thoại chẳng hạn)
Bị tấn công CSRF
Theo mặc định các request sẽ không nên gửi kèm thông tin xác thực tài khoản (ví dụ cookie), nếu cần gửi thêm thông tin này bằng thiết đặt withCredentials thủ công, phía server đồng thời cũng gửi lại trong response header giá trị Access-Control-Allow-Credentials: true
Session quản lý ở client
Đưa toàn bộ thông tin session xuống phía client Server không kiểm soát session nào đang active Dữ liệu session được gửi đi trên mỗi request
Đại diện cho kiểu này là dùng Token (JWT đang là phổ biến nhất)
Dữ liệu session được lưu xuống token, server gửi token này qua HTTP header hoặc body của response
Ứng dụng tự quản lý chuyện gửi server token này
Trên mỗi request gửi đi nó không tự chèn token vào, do đó nó không thể tấn công bằng CSRF
Mồi ngon của tấn công XSS
Một số kiểu tấn công
CSRF (Cross-Site Request Forgery)
Kiểu tấn công rất phổ biến, nếu thông tin session được gửi qua Cookie. Đại khái là nếu bạn đăng nhập vào facebook.com, sau đó truy cập vào trang web nào đó bị hack rồi, trang bị hack này sẽ gửi một trang có nội dung html bên trong đó nó dùng một thẻ nào đó (như <img />, <iframe/>, <link/>, <bgsound/>, <background />) để gửi một request thay đổi email lên trang facebook.com
Khi ứng dụng gửi đi một request, javascript sẽ copy cookie và đưa vào header X-CSRF-Token chỉ javascript trên trang hiện tại mới truy xuất được thông tin này