Home Blog Page 38

Top 3 lý do lựa chọn MSB là nơi vươn tầm sự nghiệp cho nhân tài số

MSB

MSB tự hào là Ngân hàng Thương mại Cổ phần đầu tiên được thành lập vào năm 1991. Trải qua hơn 32 năm phát triển, nhờ sức mạnh tập thể và tinh thần tiên phong của các cổ đông sáng lập, MSB đã không ngừng đạt được dấu mốc đột phá mới trong lĩnh vực tài chính – ngân hàng và là nơi vươn tầm sự nghiệp của gần 8,000 Cán bộ nhân viên.

Tập trung mạnh mẽ vào đào tạo và phát triển tài năng

Với sứ mệnh là “đối tác phát triển sự nghiệp” của CBNV, mỗi MSBers luôn được cung cấp các chương trình đào tạo được thiết kế chuyên biệt theo từng nhóm chức danh cùng cơ hội học hỏi với các chuyên gia hàng đầu trong và ngoài nước. Bên cạnh đó, yếu tố Training on Job luôn được ưu tiên song hành giúp các nhân sự rút ngắn được khoảng cách giữa lý thuyết và thực tiễn.

Chính sách Người bạn đồng hành chính là ví dụ điển hình của Training on Job. Mỗi nhân sự mới khi gia nhập MSB, ngoài các khóa đào tạo được cung cấp theo lộ trình, sẽ có một người bạn đồng hành là những nhân sự dày dặn kinh nghiệm để hướng dẫn và hỗ trợ trong 2 tháng đầu tiên.

Như một kim chỉ nam trong chính sách nhân sự, MSB đặc biệt quan tâm, đầu tư xây dựng các chương trình đào tạo và quy hoạch đội ngũ nhân sự kế cận với sự đồng hành của các đối tác tư vấn uy tín trong và ngoài nước như: McKensey, Dale Canergie, BCG. Hoạt động đào tạo & quy hoạch đội ngũ nhân sự kế cận được triển khai đa dạng các cấp độ với một số chương trình điển hình như: Talent Pool và Management Trainee.

MSB

Thu nhập và đãi ngộ hấp dẫn

MSB xây dựng cơ chế lương thưởng minh bạch, rõ ràng, tương xứng với năng lực và sự cống hiến. Trong bối cảnh phải đối diện với những thách thức bất ổn của nền kinh tế dưới sự tác động của đại dịch covid 19, MSB luôn nỗ lực đảm bảo lợi ích tài chính cho nhân viên trong thời kỳ đại dịch. Vượt qua khó khăn và thách thức, trong năm 2021, mức lương bình quân của các MSBer năm 2021 tăng gần 12% so với năm 2020.

Bên cạnh đó, chính sách phúc lợi cho cán bộ nhân viên rất đa dạng, bao gồm phúc lợi tài chính (trợ cấp, bảo hiểm, ưu đãi sản phẩm dịch vụ tài chính, …) và phi tài chính (tiêm vacxin phòng chống Covid-19, teambuilding, quà tặng đội ngũ nhân sự và gia đình vào những dịp đặc biệt). Đây được coi là nền tảng để MSB kiến tạo một môi trường làm việc ý nghĩa, để nhân viên luôn “khỏe” cả về thể chất lẫn tinh thần.

Đặc biệt, từ năm 2021, MSB đã triển khai chương trình ESOP cho 1.045 CBNV thuộc đối tượng áp dụng với khối lượng 18 triệu cổ phiếu được phát hành. Chương trình ESOP giúp MSB thu hút, khuyến khích và giữ cán bộ nhân viên giỏi, có năng lực, tiếp tục làm việc, cống hiến lâu dài, đóng góp vào sự phát triển của MSB và tạo điều kiện cho nhân viên cùng chia sẻ với sự phát triển và thành công của MSB thông qua việc hưởng cổ tức và cơ hội được sở hữu cổ phần của MSB. 

Ông Nguyễn Ngọc Cương – Giám đốc Nhân sự MSB cho biết: “Nhân sự nói chung và nhân tài số nói riêng là nguồn lực giá trị với bất cứ tổ chức nào. Vì vậy, chúng tôi không chỉ tuyển dụng, đào tạo, cùng vươn tầm sự nghiệp mà còn phụng sự đội ngũ của mình. Mục tiêu của ngân hàng là nhân viên “khỏe” cả về thể chất và tinh thần, chung tay đưa văn hóa chuyển đổi số trở thành ADN của MSB”.

Văn hoá doanh nghiệp hướng tới sự gắn kết 

MSB được Tạp chí HR Asia vinh danh là một trong những “Nơi làm việc tốt nhất Châu Á “hai năm liên tiếp 2021 – 2022. Sự công nhận này chứng tỏ MSB đã có những chính sách nhân sự vượt trội và chế độ đãi ngộ hấp dẫn, đồng thời tạo ra một môi trường làm việc hiệu quả, năng động và văn hóa nội bộ gắn kết cán bộ nhân viên.

Ngoài giờ làm việc, MSB đẩy mạnh các hoạt động gắn kết nội bộ như câu lạc bộ chạy, âm nhạc và các hoạt động giải trí khác. Điều này giúp tạo ra một môi trường lành mạnh, năng động và cởi mở, nơi mọi nhân viên có thể tận hưởng và phát triển tối đa khả năng của mình

Nhờ chính sách nhân sự và văn hoá làm việc khác biệt, MSB đã giữ chân và thu hút nhiều nhân tài. Trong cơ cấu nhân sự của Ngân hàng này có tới 30% cán bộ nhân viên gắn bó trên 10-15 năm. Thời gian tới, MSB sẽ tiếp tục tổ chức nhiều chương trình, hoạt động tuyển dụng để thu hút nhiều hơn nữa Nhân tài số để cùng nhau hoàn thành các kế hoạch kinh doanh đã đặt ra. 

>>> Tìm hiểu về những vị trí MSB đang tuyển dụng ngay tại: https://jobs.msb.com.vn/

MSB

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

Xem thêm tuyển dụng việc làm IT hấp dẫn trên TopDev

NuxtJS là gì? Hướng dẫn xây dựng web app với Nuxt.JS framework

NuxtJS là gì? Làm thế nào để xây dựng web app với Nuxt.JS framework?

Bài viết được sự cho phép bởi tác giả Sơn Dương

Bạn đã bao giờ xây dựng ứng dụng web bằng VueJS chưa? Bạn đã từng nghe nói tới 2 khái niệm Server Side Rendering (SSR) và Client Side Rendering (CSR) chưa? Bài viết này, chúng ta sẽ cùng nhau tìm hiểu và làm rõ hai khái niệm này, cũng như giải pháp để render VueJS app phía server.

Trước khi bắt tay vào tìm hiểu Nuxtjs, chúng ta cùng xem qua hai cơ chế render ứng dụng web nhé.

So sánh Client-side rendering (CSR) vs Server-side rendering (SSR)

Theo truyền thống, khi xây dựng các trang web hay ứng dụng web đều có chiến lược chung là đó là server sẽ chuẩn bị sẵn các nội dung HTML để gửi xuống trình duyệt. Các nội dung này sẽ được trình duyệt kết hợp với CSS để tạo thành tranh web cho bạn sử dụng.

Sau này, xuất hiện các Javascript framework hiện đại như ReactJS, VueJS… đã làm thay đổi cách tiếp cận khi phát triển ứng dụng web, cách tiếp cận mới mang tới khả năng giảm gánh nặng cho server, xây dựng mô hình phân tán thay vì tập trung tại server.

Đến đây, rất nhiều diễn đàn lại nảy sinh tranh luận gay gắt xem cách tiếp CSR hay SSR, cái nào tốt hơn, cái nào tối ưu!?

Server Side rendering (SSR) là gì ?

Đây là cơ chế cổ điển, được dùng rất phổ biến từ xưa đến nay rồi. Gọi là server side rendering vì mọi thứ sẽ được xử lý tập trung ở phía server.

Về cơ bản thì luồng của cơ chế này như hình bên dưới đây:

Server-side rendering (SSR)

Có thể tóm gọn lại gồm các bước như sau:

  • Khi trình duyệt gửi một request tới server, server sẽ xử lý logic, lấy dữ liệu trong database, làm bla bla… cuối cùng tạo sẵn nội dung HTMl và trả lại cho trình duyệt.
  • Trình duyệt nhận được nội dung HTML, dựa vào nội dung HTML mà nó có thể tải thêm các file javascript hay CSS để hiển thị nội dung trang HTML

Có lẽ phần lớn các trang web kiểu như vnexpress, dantri, vntalking… đều đang sử dụng cách tiếp cận này.

  Giới thiệu cấu trúc dự án tạo bằng Vuejs CLI

  Vuejs Design Pattern – Dăm ba pattern phổ biến

Client Side rendering (CSR) là gì ?

Cách tiếp cận này thì hoàn toàn khác với cách SSR. Hiểu đơn giản với cách tiếp cận này thì việc render HTML, CSS sẽ được thực hiện ở client. Khi trình duyệt gửi yêu cầu tới server, máy chủ sẽ gửi một loạt tài nguyên cần thiết để khởi tạo và chạy ứng dụng web, từ đó việc render nội dung sẽ thực hiện trên trình duyệt.

Kiểu tiếp cận này khá phổ biến với các ứng dụng web kiểu Single Page (SPA – Single Page Application), ứng dụng sẽ lấy dữ liệu thông qua REST API.

Client-side rendering (CSR)

Các ứng dụng kiểu SPA sẽ không phải tải lại trang mỗi khi nội dung thay đổi. Với các JS framework hiện đại như React, Vue, Angular… đều hỗ trợ để xây dựng ứng dụng kiểu như vậy.

Xem thêm nhiều tuyển dụng VueJS hấp dẫn trên TopDev

Vậy khi nào sử dụng SSR hay CSR?

Client-side rendering

  • Ứng dụng có giao diện phức tạp, tương tác nhiều với người dùng
  • Dữ liệu lớn và động
  • Tập trung vào các trang web phục vụ lượng lớn người dùng

Server-side rendering

  • Đồ họa phức tạp, chuyên sâu vào tính toán, cần sức mạnh xử lý của server.
  • Dữ liệu nhỏ, ít thay đổi

Ok, bạn đã hiểu cơ bản hai cơ chế render này rồi đúng không? Phần tiếp theo, chúng ta sẽ bắt tay vào tìm hiểu NuxtJS, một framework giúp bạn tạo ứng dụng SPA nhưng chạy trên server thay vì trên client. Thế mới hay chứ J

NuxtJS là gì?

Như các bạn đã biết, các JS framework như Vue, React, Angular… giúp bạn nhanh chóng tạo các ứng dụng web app theo cơ chế Client Side Rendering. Điều này có thể tốt cho trải nghiệm người dùng nhưng nó lại không tốt cho SEO, các con bot của Google có lẽ vẫn còn hơi “ngu”, chưa crawl được nội dung các ứng dụng kiểu Single page như vậy. Đó cũng là điểm cộng của cơ chế Server side rendering, và là nguyên nhân chính để cho ra đời các framework như Nuxt.JS.

Nuxt.JS là một Javascript framework để tạo các ứng dụng VueJS. Mục tiêu là để chúng ta có thể tạo một ứng dụng linh hoạt nhưng được render phía máy chủ, tương tự một trang web tĩnh giống như các website thông thường (điều mà có lợi cho SEO).

NuxtJS tập trung vào khía cạnh render giao diện người dùng. Ngoài ra, Nuxt.js có rất nhiều tính năng giúp bạn phát triển giữa phía client và server như Dữ liệu bất đồng bộ (Asynchronous Data), Middleware, Layouts, v.v.

Bài viết này, chúng ta sẽ cùng nhau tìm hiểu NuxtJS, cách cài đặt và cũng cách nó hoạt động để xây dựng ứng dụng được hỗ trợ bởi Vue phía server.

NuxtJS hoàn toàn tương tự với NextJS framework, cũng là một framework được xây dựng để tạo các ứng dụng React phía máy chủ.

Tại sao nên sử dụng NuxtJS

Nuxt.JS có rất nhiều tính năng hữu ích, giúp bạn nhanh chóng xây dựng các ứng dụng web, có thể kể tới như:

  • Automatic Code Splitting
  • Hỗ trợ Vue hoàn hảo
  • Static File Rendering
  • Hỗ trợ phiên bản HTTP/2
  • Hệ thống router và dữ liệu bất đồng bộ dễ sử dụng
  • Hỗ trợ tính năng Hot reloading (rất hữu ích cho các bạn developer)
  • .v.v…

Khởi tạo một dự án với Nuxt.JS

Để bắt đầu một dự án Nuxt.JS vô cùng đơn giản, chỉ đôi dòng lệnh là bạn đã khởi tạo xong và chạy được hello world rồi.

Giống với React, bạn có công cụ create-react-app thì Nuxt.JS cũng có công cụ tương tự, có tên là create-nuxt-app (Hay là các nhóm phát triển bắt chước ý tưởng của nhau nhỉ!? )

Câu lệnh đơn giản như sau:

npx create-nuxt-app <project-name>
Hoặc
yarn create nuxt-app <project-name>
Lưu ý: Bạn nhớ cài đặt công cụ create-nuxt-app trong máy tính đã nhé. Câu lệnh cài đặt: npm install -g create-nuxt-app. Và cả npx nữa nhé: npm i npx

Với câu lệnh create-nuxt-app, bạn còn có nhiều tùy chọn nâng cao khác nữa, như bạn muốn tích hợp sẵn server-side frameworks, UI frameworks, testing frameworks… hay không? Trong khuôn khổ bài viết, chúng ta chỉ tìm hiểu cơ bản thôi.

Ok, sau khi tạo dự án xong thì chạy thử thôi.

npm run dev

Sau khi chạy ứng dụng thành công, bạn vào trình duyệt gõ: http://localhost:3000. Kết quả thu được là giao diện trang web mặc định như dưới đây:

Nuxt.JS

Chúc mừng bạn đã có khởi đầu thành công.

Cấu trúc thư mục dự án Nuxt.JS

Cấu trúc mặc định được tạo gồm các thư mục và các tệp như hình dưới đây. Chúng ta sẽ cùng nhau xem xét ý nghĩa và công dụng của chúng.

Nuxt.JS

Assets: Chứa những tài nguyên phục vụ hiển thị trang web như ảnh, fonts chữ, hay CSS…

Components: Cũng giống như ứng dụng Vue thông thường, các component là các thành phần được tạo ra để bạn tái sử dụng trong ứng dụng như: Button, Input, Card, Dialog…

Layouts: thư mục layouts là nơi chứa các thành phần tạo nên layout của ứng dụng như layout dọc, layout ngang. Đây là nơi hợp lý nhất mà bạn có thể để các thành phần như Header, Footer, Theme…

Middleware: Middleware là nới bạn dùng để tạo các function mà chạy trước khi render trang.

Pages: Thư mục này chứa các view của ứng dụng cũng như định nghĩa routes cho ứng dụng luôn.

Plugins: Chứa các javascript plugin  mà bạn muốn chạy trước khi khởi tạo root vue.js application.

Static: Tương tự như thư mục assets nhưng mà nó cho phép truy cập trực tiếp, được map tự động với domain từ client mà không cần phải qua router hay biến môi trường. Ví dụ: /static/robots.txt sẽ được truy cập trực tiếp: http://localhost:3000/robots.txt

Store: Chứa các tệp của vuex, dùng quản lý state của ứng dụng. Vuex Store được cài đặt kèm với Nuxt nhưng mặc định thì lại bị disable. Muốn enable chúng, bạn chỉ cần tạo một tệp index.js trong thư mục store là được.

nuxt.config.js: Cấu hình ứng dụng Nuxt

package.json: Tương tự như dự án  react, vue, nodejs… là nơi cấu hình build, và chứa các dependencies và scripts

Routing

Cách thức hoạt động của router trong Nuxt là nó tự động tạo cấu hình vue-router dựa trên cây các tệp .vue trong thư mục pages.

Để dễ hình dung hơn, chúng ta sẽ xem xét ví dụ dưới đây:

pages/
--|index.vue
--|product.vue
 --|index.vue
 --|one.vue

Với cấu trúc các tệp .vue như trên, khi generate ra route, bạn sẽ thu được kết quả như sau:

router: {
  routes: [
    {
      name: 'index',
      path: '/',
      component: 'pages/index.vue'
    },
    {
      name: 'product',
      path: '/product',
      component: 'pages/product/index.vue'
    },
    {
      name: 'product-one',
      path: '/product/one',
      component: 'pages/product/one.vue'
    }
  ]
}

Bạn nên nhớ là việc tạo route là hoàn toàn tự động.

Route lồng nhau

NuxtJS cho phép bạn tạo các route lồng nhau bằng cách sử dụng các route con của vue-router.

Để định nghĩa component cha của một route lồng nhau, bạn cần tạo một file vue với tên trùng với thư mục chứa các tệp vue con.

pages/
--| products/
-----| _id.vue
-----| index.vue
--| products.vue

Giờ generate ra route, bạn sẽ thu được kết quả:

router: {
  routes: [
    {
      path: '/products',
      component: 'pages/products.vue',
      children: [
        {
          path: '',
          component: 'pages/products/index.vue',
          name: 'products'
        },
        {
          path: ':id',
          component: 'pages/products/_id.vue',
          name: 'products-id'
        }
      ]
    }
  ]
}

Khi navigate giữa các page, Nuxt khuyến khích chúng ta sử dụng nuxt-link component thay vì dùng router-link.

Triển khai ứng dụng Nuxt.JS

Đây là công đoạn cuối cùng của quá trình phát triển bất kỳ ứng dụng nào. Sau khi bạn phát triển, kết quả cuối cùng sẽ là triển khai lên server thật của khách hàng để chạy thật. Người ta gọi đây là “lễ trưởng thành của một thanh niên”

Nhìn vào file package.json, bạn sẽ thấy 4 câu lệnh sau:

nuxt-deploy

Mình sẽ giải thích chi tiết từng câu lệnh:

Câu lệnh Công dụng
dev Chạy một development server trên localhost:8080, hỗ trợ hot-reloading
build Build ứng dụng với Webpack và minify các tệp CSS, JS
start Chạy server ở chế độ production (sau khi chạy nuxt build)
generate Build ứng dụng và generate tất cả cá route tương ứng với các HTML files (sử dụng cho các static hosting)

Như vậy, khi bạn muốn deploy ứng dụng Nuxt, bạn có thể chọn một trong 3 chế độ deploy:

Server-Side Rendering (Câu lệnh: npm run build)
Static Generated (Câu lệnh: npm run generate)
Single Page Applications

Riêng với chế độ Single Page Application, bạn cần thêm tham số này vào trong nuxt.config.js

export default {
  mode: 'spa'
}

Sau đó, quay trở lại package.json để thêm vào trong scripts.

"scripts": {
     "dev": "nuxt --spa",
     "build": "nuxt build --spa",
     "start": "nuxt start --spa",
     "generate": "nuxt generate --spa",
},

Vậy là xong rồi đấy.

Tạm kết

Qua bài viết này, chúng ta đã hiểu cơ bản NuxtJS là gì, cấu trúc dự án Nuxt cũng cách để deploy một ứng dụng Nuxt. Về cá nhân mình, mình rất thích Javascript, từ việc code web app với Vue, React rồi mobile với React Native… Giờ đây, với NuxtJS, mình lại có thêm một công cụ tuyệt vời nữa để tiếp tục gắn bó lâu dài với JS.

Bài viết gốc được đăng tải tại vntalking.com

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

Xem thêm các việc làm IT hấp dẫn trên TopDev

Tôi vừa lỡ commit sai, làm sao để sửa lại ngay lập tức?

Lỡ commit sai, làm sao để sửa lại ngay lập tức?

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Commit code là việc làm thường ngày của các developer, nhưng đôi khi vì một lý do nào đó mà bạn lỡ commit thiếu nội dung hay commit xong mới phát hiện ra còn chỗ quên chưa sửa lại thì phải làm thế nào?

Nhiều người có thể sẽ chọn cách tạo một commit khác để sửa chữa lỗi lầm nhưng điều đó sẽ làm cho cây git của chúng ta xuất hiện những commit dài lê thê hay thậm chí còn có thể bị đánh giá là làm ẩu, thiếu chuyên nghiệp…

Sửa lại commit

Git cho phép chúng ta sửa đổi nội dung của commit cuối cùng bằng lệnh git commit --amend --no-edit. Bạn có thể sử dụng để giải quyết vấn đề nêu ở trên.

Ví dụ commit cuối cùng của tôi là “release version 1.0.1” và ngay khi vừa commit xong tôi phát hiện ra mình quên chưa add file README.md, do đó tôi có thể làm:

$ git log
commit 56da84715291dbb683269c085fe9a4b42aafb1e7
Author: hoaitx <tonghoai.tnn@gmail.com>
Date:   Sun Jun 20 15:31:35 2021 +0700

    release version 1.0.1

$ git add README.md
$ git commit --amend --no-edit
$ git log
commit ac48bc383726cfaaf4032b68ef6e6bece6cec368
Author: hoaitx <tonghoai.tnn@gmail.com>
Date:   Sun Jun 20 15:32:35 2021 +0700

    release version 1.0.1

Sau đó hãy thử kiểm tra lại lịch sử commit, bạn sẽ thấy file README.md đã được add vào.

  Tiết kiệm thời gian commit bằng WhatTheCommit

  Hãy commit code có tâm như Senior Developer

Sửa lại nội dung commit vừa xong

Git cũng cho phép bạn sửa lại message của commit cuối cùng bằng lệnh git commit --amend -m <message>.
Ví dụ tôi muốn sửa lại message “release version 1.0.1” -> “release v1.0.1” thì:

$ git commit --amend -m "release v1.0.1"
$ git log
commit dbdd6c3844a01b3d03bbc777516fba16ba07d64d
Author: hoaitx <tonghoai.tnn@gmail.com>
Date:   Sun Jun 20 15:33:35 2021 +0700

    release v1.0.1

Xem thêm các việc làm PHP lương cao trên TopDev

Xoá commit mà không cần revert

Cách này chỉ áp dụng cho trường hợp bạn mới chỉ commit ở local chứ chưa push lên remote. Khi commit chưa push lên remote thì bạn có thể xoá chúng ở local bằng lệnh git reset --hard <remote/branch>.

Lệnh này sẽ reset lại HEAD ở local bằng với HEAD ở remote, nôm na là nó đồng bộ những commit ở remote về local nên là sẽ xoá hết những commit chưa push ở local.
Lưu ý rằng việc này cũng đồng nghĩa với những commit chưa push ở local sẽ bị mất hết và bạn sẽ phải viết lại.

Ví dụ tôi reset lại branch develop ở remote name là origin:

$ git reset --hard origin/develop

Kết luận

Trên đây là một số câu lệnh git xử lý một số trường hợp liên quan đến việc commit “ẩu”. Dù sao trước khi commit thì mọi người cũng nên kiểm tra lại tất cả nội dung thật kĩ nhé!

Bài viết gốc được đăng tải tại 2coffee.dev

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

System Scheduler: Turn On/Off cloud application automatically (Bộ lập lịch hệ thống: Tự động bật/tắt ứng dụng đám mây)

System Scheduler: Turn On/Off cloud application automatically

Bài viết đến từ anh Lê Văn Tám – Senior Cloud Engineer 

Cloud Architect team @Techcombank

Như các bạn đã biết, tại Techcombank, đã có rất nhiều ứng dụng được di chuyển lên Cloud. Mỗi ứng dụng phục vụ các nhóm đối tượng mục tiêu khác nhau bao gồm nhân viên nội bộ ngân hàng (internal users)  hoặc khách hàng sử dụng sản phẩm dịch vụ của Techcombank (external users).

Trên AWS cloud, các nguồn lực như EC2, RDS… sẽ tính phí dựa theo thời gian hoạt động.  Đối với môi trường production, các ứng dụng này sẽ chạy liên tục 24/7. Tuy nhiên, đối với môi trường non-production (dev, sit, uat, pre-prd …), tùy theo mục đích sử dụng, chúng sẽ được bật/tắt trong khoảng thời gian nhất định để giảm chi phí.

System Scheduler: Turn On/Off cloud application automatically

Thời gian đầu, quá trình bật/tắt các ứng dụng được thực hiện thủ công. Tức là, khi đội ngũ phát triển cần kích hoạt ứng dụng, sẽ truy cập vào AWS Console để bật lần lượt từng nguồn lực (EC2, RDS…). Việc này sẽ gây tốn khá nhiều thời gian vì tính lặp lại của một thao tác nhiều lần.

Về sau, đội ngũ phát triển của Techcombank đã tìm ra một giải pháp cải tiến hơn cho vấn đề trên bằng cách sử dụng các Lambda tự động.

Chi tiết của giải pháp này như sau:

  • Đầu tiên, EventBridge Scheduler sẽ được thiết lập để chạy (theo lịch phù hợp với nhu cầu của tổ chức) và sẽ kích hoạt Lambda có tên là “Start app”: Lambda này sử dụng Python boto3 lib để gửi yêu cầu tới API của AWS nhằm khởi động các EC2, RDS và cập nhật các thông số của autoscaling group như min/max/desire size.
  • Tiếp theo, EventBridge Scheduler khác sẽ được thiết lập để chạy (theo lịch phù hợp với nhu cầu của tổ chức) và sẽ kích hoạt Lambda “Stop app. Lambda này cũng sử dụng Python boto3 lib để gửi yêu cầu đến API của AWS nhằm dừng hoạt động EC2, RDS và điều chỉnh các thông số của autoscaling group như min/max/desire size về 0.

Mặc dù giải pháp này hiệu quả, nhưng vẫn còn một số hạn chế:

  • Khi các phiên bản EC2, RDS được khởi động cùng một lúc, một số ứng dụng yêu cầu database (RDS) được khởi động trước.
  • Khi các phiên bản EC2, RDS dừng lại cùng một lúc,  một số ứng dụng sẽ cần database (RDS) được dừng lại sau.
  •  Hơn nữa, mỗi hệ thống đều cần thiết lập một bộ Lambda riêng.

Do đó, để giải quyết các thách thức này, team CloudOps đã nghiên cứu và đưa ra một giải pháp gọi là System Scheduler, giúp bật/tắt ứng dụng một cách đồng bộ và tự động.

Để cải thiện quá trình bật/tắt các AWS resources (EC2/RDS), đội ngũ Techcombank đã đưa ra một giải pháp mới như sau: 

  • Đầu tiên, tạo một tài khoản AWS gọi là “master” để điều khiển quá trình bật/tắt AWS resources (EC2/RDS) của các tài khoản AWS khác (gọi là tài khoản ứng dụng).  Tài khoản AWS này bao gồm các thành phần sau:
  • DynamoDB: Lưu trữ thông tin của tài khoản ứng dụng (app account) bao gồm ID tài khoản AWS, IAM cross role,  lịch bật/tắt instance.
  • EventBridge Scheduler: Kích hoạt chức năng Lambda. Lambda lấy thông tin từ DynamoDB trên (AWS account ID, IAM cross role, lịch bật/tắt instance), sử dụng IAM cross để truy cập vào application account và gọi AWS API để bật/tắt EC2/RDS instance.
  • Trong mỗi tài khoản ứng dụng: tạo ra các AWS resources bằng cách sử dụng mẫu SAM (Serverless Application Model). Điều này giúp tự động tạo resources tag và tiếp tục/tạm ngừng các hoạt động của AutoScaling group.

System Scheduler: Turn On/Off cloud application automatically

Cụ thể, SAM sẽ tạo ra các AWS resources như sau:

1. Những tài nguyên phục vụ việc tự động đánh nhãn

– EventBridge: Khi một phiên bản EC2 hoặc RDS được tạo, chức năng Lambda “Tự động đánh nhãn” sẽ được kích hoạt.

– Chức năng Lambda “Tự động đánh nhãn”: Tự động đánh nhãn cho tất cả các tài nguyên EC2, RDS, AutoScalingGroup, với các nhãn sau:

  • Schedule: Biểu thị khung thời gian áp dụng cho việc bật/tắt phiên bản.
  • DoNotStop: Gắn nhãn này nếu không muốn áp dụng lịch trình (schedule).
  • Reason: Lý do áp dụng lịch trình (schedule).

Chức năng Lambda này có tác dụng này giúp các nhà phát triển ứng dụng của mỗi tài khoản biết khung thời gian bật/tắt và cũng như các trường hợp ngoại lệ khi không muốn ứng dụng được bật tắt tự động (ví dụ: khi thực hiện PT test, chuẩn bị triển khai tính năng mới yêu cầu nhiều tài nguyên hơn thường lệ…)

2. Những tài nguyên phục vụ việc tự động tạm ngừng/tiếp tục hoạt động của AutoScalingGroup

  • EventBridge Scheduler sẽ kích hoạt Lambda tự động tiếp tục hoạt động của AutoScalingGroup (ASG).
  • EventBridge Scheduler sẽ kích hoạt Lambda tự động tạm ngừng hoạt động của AutoScalingGroup  (ASG).

Bằng cách áp dụng các phương pháp mới này, Techcombank đã thành công trong việc giải quyết được các vấn đề sau:

  • Quá trình bật/tắt hệ thống được tập trung, quản lý thống nhất từ một nguồn duy nhất
  • Nhà phát triển của mỗi ứng dụng có thể biết được khung thời gian bật/tắt hệ thống dựa trên nhãn tài nguyên.
  • Team CloudOps dễ dàng quản lý lịch trình bật/tắt tài nguyên của tất cả các ứng dụng và dễ dàng tiếp nhận/xử lý khi có yêu cầu thay đổi lịch trình phía nhà phát triển ứng dụng.

 


Thuộc dự án Inside GemTechnology do TopDev hợp tác cùng Techcombank triển khai, chuỗi nội dung thuần “Tech” độc quyền được chia sẻ bởi đội ngũ chuyên gia Công nghệ & Dữ liệu tại Techcombank sẽ được cập nhật liên tục tại chuyên mục Tech Blog | Techcombank Careers x TopDev. Cùng theo dõi & gặp gỡ các chuyên gia bạn nhé!

 

Các cơ hội việc làm tại Techcombank

Bài viết liên quan

Xây dựng hệ thống giám sát (Monitoring) tập trung cho workload trên Cloud

Bài viết đến từ anh Lê Văn Tám - Senior Cloud Engineer Cloud Architect team @Techcombank Bối cảnh: Ở Techcombank, bộ phận Dịch vụ Hạ tầng (ITO - Infrastructure Services) đang vận hành rất nhiều ứng dụng (application) khác nhau để phục vụ người dùng nội bộ và khách hàng bên ngoài như quản lý nợ (Debt Management), tra cứu tín dụng (ICS), tra cứu và thu hộ thuế nhà nước (TCS), quản lý đặt chỗ (QMS)… Theo chiến lược chuyển đổi số theo định hướng “Cloud First”, Techcombank đã thực hiện di dời (migrate) được gần 30 ứng dụng (application) từ on-prems lên cloud từ giữa năm 2021 tới nay. Việc di dời thành công các ứng dụng đã bước đầu đã chứng minh được lợi ích của chiến lược “Cloud first”. Tuy nhiên, trong quá trình chuyển đổi “nóng” đó, Techcombank nói chung và đội ngũ ITO nói riêng cũng gặp phải một số vấn đề do chưa đủ nguồn lực để triển khai, đặc biệt là vấn đề giám sát (monitor) các ứng dụng này. Thời điểm đó, mỗi ứ [...]

Triển khai Cloud tại Digital Banking: Đâu là yếu tố để đảm bảo chuyển đổi thành công?

Công nghệ Đám mây (Cloud) đã trở thành một phần không thể thiếu trong các nền tảng lớn hiện nay. Với vai trò ngày càng quan trọng và phức tạp, điện toán đám mây đặc biệt được chú trọng trong lĩnh vực tài chính. Không nằm ngoài cuộc chơi, các ngân hàng lớn tại Việt Nam cũng đang tiến hành quá trình chuyển đổi số cho toàn bộ hệ thống của mình. Chị Elizabeth Nguyễn, một Quản lý Dự án Cao Cấp - Dự án Cloud tại Techcombank, sẽ mang tới những chia sẻ giúp chúng ta hiểu được tầm quan trọng của công nghệ Cloud trong công cuộc chuyển đổi số của lĩnh vực tài chính ngân hàng. Dịch vụ Cloud giải quyết gì cho bài toán kinh doanh (business) nói chung & bài toán nghiệp vụ ngân hàng (banking) nói riêng?  Một trong những lý do quan trọng nhất cho việc chuyển đổi sang Cloud của Techcombank là [...]

Là một developer có cần biết cách “làm sản phẩm”?

Tạo sao developer có cần biết cách

Vấn đề

Học code từ những năm tháng còn là sinh viên, được tiếp xúc với nhiều ngôn ngữ lập trình và chúng ta biết chọn cho mình một ngôn ngữ tốt nhất để sau này sẽ dùng nó như một kĩ năng chính của mình. Lúc đi làm nghe đồng nghiệp, anh em bạn bè bàn tán về ngôn ngữ này tốt hơn ngôn ngữ kia, ngôn ngữ này đáng học hơn… khiến bạn càng khát khao chinh phục những thứ đó.

Tôi từng có suy nghĩ sẽ code cả đời, bởi vì ngoài code ra tôi không biết còn có thể làm gì nữa thế nên tôi cố gắng trau dồi kĩ năng code ngày một tốt hơn bằng cách không ngừng tìm kiếm tài liệu nói về điều đó. Bỗng một ngày chân ướt chân ráo nộp hồ sơ vào làm cho một công ty chuyên cung cấp sản phẩm dưới dạng SaaS tại đây tôi đã được học hỏi thêm nhiều điều mới, những kiến thức mà tôi thấy như chân trời mới. Một trong số đó là khả năng tư duy sản phẩm.

Tư duy sản phẩm là gì?

Bạn có thể tìm kiếm Google để biết được khái niệm, còn đối với tôi hiện tại nó là biết cách tạo ra sản phẩm có giá trị cho người dùng. Thế nào là có giá trị?

Là sản phẩm giải quyết được một vấn đề gì đó cho nhiều người và họ thích sử dụng sản phẩm của bạn. Để làm được điều đó đòi hỏi bạn phải “thấu hiểu” người dùng, luôn luôn phải cập nhật kiến thức bởi vì khách hàng của bạn luôn luôn đổi mới.

Tôi là một developer, tôi thấy nhiều người rất thích đọc blog. Bản thân tôi lại là người thích viết lách thế nên tôi bắt đầu với nền tảng viết bài Blogger. Trải qua một thời gian sau đó, tôi nhận thấy Blogger quá nặng nề và phức tạp, khó có thể tuỳ biến mọi thứ theo cách mình muốn. Vì thế tôi quyết định tự code cho mình một trang blog để giải quyết hết những vấn đề trên. Nhưng mọi thứ không hề dễ dàng chút nào, tôi mất rất nhiều thời gian để phân tích xem tôi muốn gì và người dùng muốn gì, mất rất nhiều thời gian để phát triển và thời gian để thu thập dữ liệu, cũng như phân tích chúng. Bù lại tôi đã học hỏi được nhiều điều khi tự làm blog.

  Đừng chỉ cứ code! Hãy dành thời gian khai phá tư duy lập trình

Một developer có tư duy sản phẩm sẽ suy nghĩ về tính năng và sản phẩm theo hướng có thể khác với developer thuần. Họ quan tâm đến người dùng hơn, tò mò về hành vi cũng như suy nghĩ của người dùng. Quan trọng hoá cách làm sao để người dùng hài lòng khi sử dụng sản phẩm. Cẩn trọng khi thêm một tính năng mới bởi vì họ biết một tính năng mới được thêm đồng nghĩa với độ phức tạp của sản phẩm cũng tăng lên theo. Với họ thái độ của người dùng sản phẩm là quan trọng hơn kĩ thuật để tạo ra sản phẩm.

Một tính năng gửi email, người dùng chỉ quan việc tâm họ gửi được email và bên kia nhận được một cách nhanh chóng chứ không cần biết đằng sau đó là cả một hệ thống logic phức tạp mà bạn phải làm ra rất vất vả. Nếu như hệ thống gửi email có vấn đề gì đó, bạn không thể giải thích cho họ hiểu lý do lỗi là gì, còn họ cũng chỉ quan tâm khi nào email được gửi đi bình thường. Hay nếu như một tính năng quá phức tạp, quá nhiều bước để hoàn thành thử hỏi xem có mấy ai kiên nhẫn để thao tác hết trước khi họ thoát hẳn ứng dụng của bạn? Đối với tôi một tính năng hay là không buộc người dùng phải suy nghĩ quá nhiều để quyết định bấm vào nó.

Xem thêm việc làm Agile lương cao trên TopDev

Tại sao developer nên biết làm sản phẩm?

Có rất nhiều lý do để bạn cần quan tâm đến tư duy sản phẩm cũng như làm sản phẩm. Dưới đây là một số quan điểm của tôi về lợi ích của việc này:

  • Tiếp cận sản phẩm theo một cách mới. Trong vai một người dùng, bạn thấu hiểu được họ. Kĩ thuật lúc này không còn quá quan trọng nữa. Đó là một hướng tiếp cận khác lạ so với những người developer thuần code, khi họ luôn luôn cố gắng tối ưu những dòng code và kĩ thuật mà đôi khi quên mất trải nghiệm không tốt cho người dùng. Suy cho cùng các sản phẩm bạn làm ra là để phục vụ người dùng, trừ khi người dùng chính là bạn.
  • Quan tâm đến doanh nghiệp, về hành vi người dùng và dữ liệu đó. Lúc này bạn cần quan tâm đến mô hình và tình hình kinh doanh doanh nghiệp của bạn để biết đến tập khách hàng mà doanh nghiệp đang hướng đến. Đó là tiền đề cho tính năng và sản phẩm mà bạn chuẩn bị phát triển. Nhóm người dùng khác nhau sẽ có những hành vi khác nhau và dữ liệu thu thập được sẽ nói lên chúng khác nhau như thế nào. Hơn nữa điều đó sẽ giúp bạn thấu hiểu doanh nghiệp hơn để đưa ra quyết định cống hiến hay đến lúc phải tìm một môi trường mới.
  • Luôn là tại sao? Tại sao phải thêm tính năng này, tại sao phải bỏ tính năng kia… nhiều câu hỏi tại sao và bắt buộc bạn phải tìm ra câu trả lời. Để làm được điều đó, bạn cần dựa vào rất nhiều thứ một trong số đó là dữ liệu thu thập được. Hay là feedback của người dùng khi họ sử dụng những tính năng mới.
  • Mở rộng domain, nghiệp vụ. Bạn nhận ra Developer không chỉ còn quan tâm đến code mà còn nhiều thứ khác nữa để tạo nên sự thành công cho bạn cũng như cho sản phẩm mà bạn đang phát triển. Điều này mở ra những hướng đi mới cho bạn trong sự nghiệp phát triển của mình. Biết đâu bạn sẽ không còn thích ngồi code nữa mà lại làm một công việc khác thì sao.
  • Kỹ thuật không còn là trên hết, cân bằng kĩ thuật với trải nghiệm người dùng. Thông thường khi đón nhận một vấn đề thì chúng ta thường suy nghĩ luôn giải pháp mà quên mất việc đánh giá vấn đề đó. Liệu trải nghiệm người dùng có gặp vấn đề gì khi giải quyết vấn đề đó thiên về giải quyết kĩ thuật hơn không? Có gây khó khăn hay mang lại trải nghiệm tồi cho họ chỉ vì muốn áp dụng kĩ thuật tiên tiến nhất? Một sản phẩm khó sử dụng chắc chắn không phải là một sản phẩm xuất sắc, lúc đó buộc bạn phải cân bằng giữa kĩ thuật và trải nghiệm người dùng.
  • Có những suy nghĩ về sản phẩm như một người dùng. Trong vai người dùng sản phẩm bạn biết cách để tạo ra những tính năng làm sao “đáng giá” nhất cho người dùng. Để đạt được điều đó phải trải qua rất nhiều thời gian học hỏi, sử dụng những sản phẩm khác. Hình thành một thói quen phân tích, đánh giá khi sử dụng một sản phẩm mới. Đó là kho dữ liệu rất có ích cho bạn sau này trên con đường sự nghiệp.
  • Phát triển bản thân. Tạo ra một sản phẩm tốt không phải trong ngày một ngày hai, cũng không phải chỉ cần biết mỗi code. Đó là cả một quá trình nỗ lực học hỏi không ngừng nghỉ và buộc bạn phải luôn luôn đổi mới bản thân. Nhiều kiến thức phải học thêm đồng nghĩa với việc bạn biết là hoá ra bấy lâu nay mình không biết gì cả.

  Thay đổi tư duy về kiểm thử theo Nguyên lý Agile

Tổng kết

Trên đây là những quan điểm của tôi về việc developer có thể phát triển hơn nữa thông qua tư duy sản phẩm. Tôi là một developer với hy vọng sau này có thể làm ra một cái gì đó có thể giúp ích cho cuộc sống này, nhưng có lẽ trước mắt tôi chỉ có thể chia sẻ kinh nghiệm, dù đúng dù sai vẫn mong nhận được phản hồi của tất cả mọi người.

Bài viết gốc được đăng tải tại 2coffee.dev

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

Xem thêm việc làm Developers hàng đầu tại TopDev

Vượt ải interview với top 5 câu hỏi phỏng vấn Manual Tester

Vượt ải interview với top 5 câu hỏi phỏng vấn Manual Tester

Phỏng vấn Manual Tester cần chuẩn bị những kiến thức gì? Bài viết này sẽ cung cấp một số kiến thức tổng quan giúp bạn chuẩn bị tốt hơn trước khi bước vào buổi phỏng vấn Manual Tester.

Manual Tester nói riêng và tester nói chung là những vị trí không thể thiếu trong team development. Bản thân họ là người chịu trách nhiệm cũng như góp phần đóng góp cho sự thành công của product.

Nhiều bạn QC/QA dễ thương lắm chứ bộ.

câu hỏi phỏng vấn Manual Tester

Không phí phạm thời gian nữa, giải trí chút xíu và giờ là bắt đầu bộ câu hỏi phỏng vấn ngay là luôn.

1. Sự khác biệt giữa quality assurance, quality control và software testing

Câu hỏi đầu tiên phỏng vấn Manual Tester là câu hỏi cơ bản. Đầu tiên là Quality Assurance (đảm bảo chất lượng).

QA là vị trí đề cập đến công việc theo dõi và lập kế hoạch để đảm bảo hệ thống kiểm tra kiểm soát chất lượng được tuân theo để tạo ra một sản phẩm chất lượng. QA theo dõi các test report và sửa đổi quy trình để đáp ứng việc giữ cho hệ thống hoặc sản phẩm ở trạng thái tốt.

Kiểm soát chất lượng (QC) có liên quan đến chất lượng của sản phẩm. QC không chỉ tìm ra các lỗi mà còn đề xuất các cải tiến cho sản phẩm nếu có. Có thể hiểu rằng các quy trình được đề ra bởi QA sẽ được đề xuất bởi QA được thực hiện bởi QC. QC có trách nhiệm hoàn thành những chiến lược và phương án của QA đề ra.

Phỏng vấn manual tester

Kiểm thử phần mềm là quá trình đảm bảo rằng sản phẩm do nhà phát triển phát triển đáp ứng yêu cầu của người dùng. Mục đích của việc thực hiện kiểm thử là tìm lỗi và đảm bảo những lỗi đó đã được sửa. Nhờ đó giúp duy trì chất lượng sản phẩm tốt cho đến khi tới tay khách hàng.

Một số câu hỏi:

  • Bạn hãy cho biết danh sách mức độ nghiêm trọng của bug?
  • Sự khác biệt giữa bug, defect và error?

Khởi động với câu hỏi dễ dàng và giờ là lúc thử sức với câu hỏi số 2

  Một số test automation framework thường gặp

2. Bạn nghĩ sao về automation test?

Câu hỏi thứ hai phỏng vấn Manual Tester là câu hỏi khá hay khi nói về automation. Cho dù bạn đang apply vị trí manuel test. Mấy ông phỏng vấn chắc chắn cũng sẽ hỏi về automation.

Rõ ràng mà nói thì mọi người ai cũng đều thích tự động, automation test nằm trong số đó. Chỉ cần viết bộ testcase, sau đó cho thực thi. Vậy là toàn bộ hệ thống xem như đã được test kỹ càng.

Đứng ở góc độ là một Manuel Tester, bạn có cái nhìn gì về automations. Tất nhiên quan điểm thuộc về cá nhân mỗi người, nhưng tuyệt đối tránh đánh giá thấp automation test

Những automation test phổ biến hiện nay, nếu có kinh nghiệm hoặc ít nhất là có định hướng học. Bạn có thể nêu ra trong buổi phỏng vấn.

Phỏng vấn manual tester

Ngoài ra cũng có thể nói thêm về các benefit của automation test. Tất nhiên automation cũng có những điểm yếu, ví dụ như thời gian viết code sẽ nhiều hơn. Không thể nhanh chóng như Manual Test.

Một số câu hỏi có thể chuẩn bị thêm:

  • STLC (Software testing life cycle là gì?)
  • Những automation test framework nào bạn đã sử dụng? Bạn đánh giá cao framework nào và tại sao?

Tham khảo việc làm Automation Tester hấp dẫn trên TopDev!

3. Những yếu tố nào bạn thấy là quan trọng khi viết bug report?

Câu hỏi thứ 3 phỏng vấn Manual Tester liên quan tới công việc thường ngày. Viết bug report. Tuy là công việc mà hầu như tester nào cũng làm, nhưng không phải ai cũng biết những yếu tố được cho là quan trọng.

Danh sách các thông tin quan trọng cần có trong bug report

  • Mô tả lỗi: Mô tả ngắn gọn về lỗi gặp phải (cái này có thể viết chung chung)
  • Các bước tái hiện: Bao gồm các bước kiểm tra chi tiết để mô phỏng hoặc tái hiện lại bug
  • Dữ liệu test
  • Môi trường test và các thông tin liên quan
  • Mức độ nghiêm trọng của bug -> cái này để cân nhắc đem vào priority
  • Thời gian và hoàn cảnh nào dẫn tới bug này. Phần này càng nêu cụ thể càng tốt
  • QA nào đã post bug này

Tiêu chí viết bug report là sao cho khi development team nhận được bug report thì không cần phải hỏi lại Tester. Có thể fix dựa trên expect tư bug report đã có.

Phỏng vấn manual tester

Với step produce, development sẽ có đủ thông tin và tự tái hiện lại được bug. Ngoài ra bạn cũng có thể trình bày thêm về kinh nghiệm cá nhân của riêng mình trong trường hợp vẫn cần giải thích cho developer. Bạn sẽ giải thích như thế nào?

Trường hợp mô tả chưa đúng, bạn sẽ khắc phục và giải thích lại như thế nào về bug này. Đồng thời cũng cần ôn lại cách thức verify khi bug đã được fix xong.

Một số câu hỏi có thể chuẩn bị thêm:

  • Functional testing có bao nhiêu loại?
  • Nếu bug lặp đi lặp lại trong quá trình test, bạn sẽ làm thế nào?

4. Sự khác biệt giữa performance testing và monkey testing

Câu hỏi thứ 4 phỏng vấn Manual Tester liên quan tới phân biệt hai loại kiểm thử. Đầu tiên là performance (hiệu năng).

Performance Testing checks the speed, scalability, maybe even the stability characteristics of a system. Performance is identified with achieving response time, throughput, and resource-utilization levels that meet the performance objectives for a project or a product. Performance testing là kiểm tra tốc độ, khả năng mở rộng, cả sự ổng định của cả hệ thống. Performance ở đây có thể được hiểu là thời gian phản hồi, kết quả và yêu cầu ở các bậc cho dự án hoặc sản phẩm

Phỏng vấn manual tester

Đối với performance testing, kỹ năng đòi hỏi ở Manual Tester cao hơn. Kĩ năng và mức độ hiểu biết cách thức test performance cũng ở mức cao. Ví dụ như test gửi nhiều request, bản thân tester phải biết sử dụng một số công cụ như Jmeter.

Đối với Monkey testing, đúng như tên gọi, phương thức test này nhập random các ký tự vào field (nhấn mạnh là không có mục đích cụ thể).

Việc test này tương tự như hành động của khỉ, ấn lung tung để tìm crash của application. Thông thường các nhà tuyển dụng sẽ hỏi anh em câu này vì cho vị trí Manual Tester.

Một số câu hỏi có thể chuẩn bị thêm:

  • Sự khác biệt giữa test driver và test stub là gì?
  • Unit testing và integration testing khác nhau như thế nào?

5. Manual Tester có cần hiểu về business không?

Câu hỏi cuối cùng phỏng vấn Manual Tester liên quan tới kinh nghiệm làm việc. Tất nhiên công việc của Manual Tester không giống như Monkey Testing.

Nếu chỉ vào application hoặc web bấm loạn xạ lên thì đó không còn là Manual Tester đúng nghĩa. Manual ở đây bao gồm việc hiểu business, hiểu về yêu cầu của khách hàng. Chỉ khi hiểu rõ về business, các bước test được thực hiện ở Manual Tester mới có giá trị.

Ví dụ ở màn hình đăng ký, bản thân tester cần hiểu đăng ký sẽ như thế nào. Sau khi đăng ký các hạng mục nào dưới DB sẽ thay đổi. Thời gian có đúng hay không?

Việc bấm lung tung chỉ để hiện lỗi là việc làm không thực hiện theo test case. Chỉ gây thất thoát và lãng phí thời gian. Hiệu quả của việc làm này cũng không hề cao.

  Automation testing: Một số công cụ hữu ích cho tester

Phỏng vấn manual tester

Chính vì vậy việc Manual Tester hiểu về business, hiểu về ứng dụng mà mình đang test là điều vô cùng quan trọng.

Để đạt được yếu tố này, bản thân Manual Tester cần làm việc cùng với BA và PO, tham các buổi meeting như Spring Planning. Đồng thời cần nói chuyện và hiểu các API document đã publish từ phía developer.

Một số câu hỏi có thể chuẩn bị thêm

  • Bạn hiểu gì về test coverage?
  • Black box testing là gì?

6. Tham khảo thêm về phỏng vấn Manual Tester

Cảm ơn anh em đã đọc bài – Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

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

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

Project Manager – Người “nhạc trưởng” thúc đẩy tổ chức tiến lên phía trước

Project Manager

Quản lý dự án công nghệ ở Techcombank

Khác với các hoạt động thường ngày để đảm bảo công việc vận hành tại Techcombank, “dự án” là một tập hợp các hoạt động được thực hiện trong một khoảng thời gian có hạn, với nguồn lực được giới hạn để đạt được mục tiêu cụ thể và rõ ràng mà tổ chức hướng đến. Nói cách khác, dự án là công cụ để thúc đẩy tổ chức tiến lên phía trước, tạo ra sự khác biệt giúp đạt được các mục tiêu chiến lược trong tương lai.

Tại Techcombank, nơi luôn luôn có hàng trăm dự án lớn nhỏ được thực hiện, quản lý dự án trở thành một công việc vô cùng quan trọng. Nằm trong Khối Công Nghệ, bộ phận Portfolio Capability Management (PCM) là nơi tập trung các Project Managers (PM) – những người áp dụng kiến thức, công cụ và kỹ năng để đảm bảo một dự án công nghệ tại Techcombank hoàn thành đúng thời gian, nằm trong phạm vi ngân sách, đảm bảo chất lượng, đạt được mục tiêu và các mục đích đề ra.

Trao đổi cùng TopDev ngày hôm nay là anh Phạm Tân Anh Khoa – Director, Project Management thuộc bộ phận PCM. Anh hiện đang quản lý hai danh mục dự án công nghệ lớn của Techcombank: các dự án thuộc Công nghệ Ngân hàng Bán Lẻ (Retail Banking Technology) và Công nghệ Nền Tảng (Shared Platform Technology). 

Project Manager

Anh Khoa với nền tảng là Khoa học Máy Tính, đã có hơn 12 năm làm việc tại Singapore trải qua các vị trí từ kỹ sư đến quản lý dự án tại các tập đoàn công nghệ đa quốc gia. Anh về Techcombank từ cuối năm 2019 để bắt đầu đảm nhiệm vị trí Quản lý dự án, Quản lý cao cấp và cho đến hiện tại là Giám Đốc quản lý dự án trong bộ phận PCM thuộc khối Công Nghệ.

Project Manager

Nếu ví Project Manager như một vị nhạc trưởng, anh có thể bật mí một số bí quyết trong công việc để có thể “trăm trận trăm thắng”

Trong mỗi lần đi nghe nhạc giao hưởng, mình đều có suy nghĩ người nhạc trưởng luôn là người thầm lặng nhất, khi bản thân người đó không chơi một nhạc cụ nào trong dàn nhạc. Vậy nhưng, một bản nhạc giao hưởng có thể dễ dàng biến thành “tiếng ồn” nếu như không có sự điều phối của vị nhạc trưởng này. Và điều đó làm mình có liên tưởng: đây đúng là một người quản lý dự án đang làm việc! 

Vậy, có một số bài học mà mình rút ra được từ đây:

Thiết lập thành viên dự án

Khi bắt đầu một dự án, chúng ta luôn muốn có thể “chọn mặt gửi vàng” thành viên và đưa những người giỏi nhất vào nhóm của mình. Nhưng liệu việc nhồi nhét những “siêu sao” vào dự án của có thực sự khiến cuộc sống của một PM dễ dàng hơn không? Có lẽ là không (và khả năng cao bạn sẽ thành kẻ thù số 1 trong danh sách của các PM khác )

Vậy liệu một dàn nhạc được xây dựng bởi những nghệ sĩ độc tấu siêu sao có bao giờ hoạt động lâu dài không? Có lẽ là không, họ sẽ luôn cố gắng đòi người ta lắng nghe những lời giải thích của họ. Đối với dự án cũng vậy: quá nhiều siêu sao sẽ tạo ra bè phái, xích mích và cuối cùng là một mớ hỗn độn khó quản lý cho người quản lý dự án. 

Vậy một người quản lý dự án cần thực sự làm gì? Chúng ta cần đảm bảo các thành viên có thái độ làm việc nhóm tốt và các năng lực cơ bản, có thể không cần bề dày kinh nghiệm, một số trưởng nhóm dày dặn và bắt đầu từ đây.

Nhiều tin tuyển dụng Project Manager lương cao trên TopDev, ứng tuyển ngay!

Trao quyền cho các thành viên

Người nhạc trưởng là người đảm bảo tổng thể dàn nhạc được phối hợp nhịp nhàng, với mỗi thành viên đều hiểu rõ mức độ ưu tiên công việc, nhịp độ công việc cho từng sản phẩm được giao. 

Người nhạc trưởng có thể không biết chơi tất cả các nhạc cụ tạo nên dàn nhạc của mình (và không bao giờ chúng ta thấy nhạc trưởng cầm cây violin để chỉ cho các thành viên của mình cách chơi). Một PM có thể cũng không phải là một chuyên gia trong tất cả các lĩnh vực của các thành viên dự án, và cũng không cần thiết phải như vậy. 

PM, giống như nhạc trưởng, là người lãnh đạo phải hiểu công việc mà mỗi cá nhân hoặc nhóm cần phải thực hiện, điều phối các kết quả đầu ra và hợp nhất vào một dự án tổng thể (một bản nhạc giao hưởng).

Các thành viên trong dự án cần được trao quyền thiết lập kế hoạch và chịu trách nhiệm thực hiện nhiệm vụ của họ từ đầu đến cuối. Người PM không có nhiều thời gian để tập trung nhiều vào các chi tiết kỹ thuật khi triển khai, đặc biệt trong các dự án quy mô lớn. Rất nhiều người quản lý dự án đã từng là một kỹ sư giỏi và dễ bị đi vào con đường “chỉ cho team cách thực hiện”. Các tốt nhất, một PM cần học cách ủy thác, tin tưởng (hoặc thay thế thành viên nếu cảm thấy không đủ tin tưởng), và đặt câu hỏi “Tôi có thể giúp gì?” 

Project Manager

Một trong những thách thức lớn nhất ở vị trí này là yêu cầu về Kỹ năng quản lý giao tiếp (Communication Management) và Quản lý stakeholder (Stakeholder Management) 

Đặc biệt trong môi trường lớn như Techcombank, một dự án sẽ có rất nhiều stakeholders quan tâm và yêu cầu người PM cập nhật bằng cách hình thức giao tiếp khác nhau. Các stakeholders có thể được chia theo các nhóm với mức độ ảnh hưởng đến dự án khác nhau, cũng như mức độ quan tâm đến dự án khác nhau. Dựa trên hai chỉ số này, PM có thể đưa ra chiến lược phù hợp để đảm bảo các thông tin dự án được thông suốt. Một “từ khóa” để thành công trong các dự án ở Techcombank đó là “Alignments”.

Techcombank có một môi trường làm việc vô cùng quốc tế hóa cùng với một bộ phận lớn Quản lý cao cấp là các chuyên gia nước ngoài (Expats), các anh/chị Việt Kiều và các chuyên gia địa phương. Mỗi đối tượng đều có một phông văn hóa riêng, đòi hỏi phong cách làm việc phù hợp. Vậy bài toán là làm sao để mọi người có thể cùng align với những yêu cầu/update từ dự án. Một PM giỏi là người có các cách giao tiếp phù hợp để đảm bảo việc trao đổi thông suốt và kịp thời

Ngoài ra, một thách thức tiếp theo có lẽ không chỉ riêng ở Techcombank, đó là Kỹ năng quản lý phạm vi công việc (Scope Management). Do tính chất thị trường thay đổi rất nhanh, có rất nhiều yêu cầu nghiệp vụ có thể được thay đổi hoặc thêm mới trong quá trình triển khai dự án. Điều này có thể dẫn đến dự án thực hiện vượt quá phạm vi (scope creeps), từ đó trễ tiến độ và vượt ngân sách ban đầu. Để quản lý tốt phạm vi dự án, một PM cần nắm rõ các công việc ngắn hạn và dài hạn của dự án, cũng như luôn luôn làm việc cùng nghiệp vụ để đưa ra các thứ tự ưu tiên cho các yêu cầu của mình. Trước khi một yêu cầu thay đổi được thực hiện, PM cần đảm bảo sự đồng thuận của nghiệp vụ về các “trade-offs” trong thứ tự ưu tiên hoặc nguồn lực/budget.  

Project Manager

Hiện tại Quy mô dự án công nghệ tại Techcombank như thế nào, và cách phân chia dự án ra sao?

Hiện tại, quy mô các dự án công nghệ tại Techcombank đang được chia ra các mảng lớn bao gồm Retail Banking Technology là toàn bộ các dự án cũng như công việc trong khối Ngân hàng bán lẻ. Corporate Banking Technology là các dự án và công việc trong các khối Ngân hàng bán buôn. Shared Platform Technology là tất cả các hệ thống nền tảng, dữ liệu, vận hành trong nội bộ doanh nghiệp. Ngoài ra còn có các dự án nằm trong An Ninh thông tin (IT Security) và Vận hành công nghệ (IT Operations)

Toàn bộ có tổng cộng hơn 100 dự án nằm trong các danh mục kể trên, với quy mô và thời gian triển khai khác nhau. 

Anh cho thể chia sẻ quy trình lên kế hoạch và phát triển một tính năng/ dịch vụ mới cho hàng triệu user được triển khai như thế nào? 

Với một tính năng hay dịch vụ mới nằm trong một nền tảng có sẵn (ví dụ, Mobile Banking), yêu cầu nghiệp vụ có thể xuất phát từ bất kỳ thời điểm nào. Tất cả các yêu cầu nghiệp vụ này sẽ được đưa vào backlog của nền tảng, được làm rõ về yêu cầu chi tiết (refinement) và đưa ra ước tính (effort estimation). Sau khi yêu cầu được đưa vào backlog của một sprint, developer team sẽ tiến hành thực hiện tuần tự các công việc dựa trên vòng đời phát triển phần mềm (Software Development Life Cycle – SDLC).

Với một yêu cầu mang tính thay đổi lớn hoặc đòi hỏi xây dựng các nền tảng mới, các công việc này sẽ được nhóm vào để hình thành một dự án mới. Quy trình quản lý dự án tại Techcombank bắt đầu từ giai đoạn lên ý tưởng và lên kế hoạch năm:

  • Lên kế hoạch năm (Annual Planning): Từ phía nghiệp vụ sẽ có những ý tưởng về mặt kinh doanh, những nhu cầu hay đề bài. Các yêu cầu đó sẽ được đưa vào tổng hợp các dự án và đưa vào danh mục kế hoạch năm. 
  • Business Case: Tổ dự án trình bày kế hoạch phạm vi, thời gian, nguồn lực và các lợi ích mang lại cho ngân hàng. Các bạn tưởng tượng nó sẽ giống như shark tank: phải làm 1 business case, trình bày với hội đồng để được phê duyệt và để có ngân sách bắt đầu triển khai dự án.
  • Triển khai thực hiện & giám sát dự án: Sau khi được chính thức phê duyệt & cấp ngân sách từ hội đồng, dự án sẽ được bắt đầu xây dựng (implementation), sẽ được giám sát (monitoring and controlling) cho đến lúc triển khai (commercialize) ra thị trường và vẫn sẽ tiếp tục giám sát những lợi ích đạt được.

Dưới góc độ của “Technical guy”, để trở thành 1 PM “xịn” chúng ta cần thay đổi điều gì?

PM cần trau dồi kỹ năng Quản lý dự án thông qua các chứng chỉ quốc tế, ví dụ như PMP hay Prince2. Các chứng chỉ quốc tế sẽ giúp PM có thể hệ thống hóa được họ sẽ cần tiếp cận vấn đề như thế nào. Rất nhiều các câu hỏi và vấn đề gặp phải trong dự án đều có thể tìm thấy câu trả lời trong các tài liệu chuẩn như PMBOK. Tất nhiên, việc áp dụng lý thuyết vào thực hành sẽ phụ thuộc vào thực tế từng dự án, nhưng việc tuân theo các best-practice sẽ cung cấp cho PM một “bộ khung” vững chắc để dự án có thể được thực thi một cách ít rủi ro nhất.  

Ngoài ra, muốn trở thành một PM giỏi trong mảng Công nghệ chắc chắn cần đi đầu và nắm bắt các công nghệ mới. Điều này có thể được thực hiện bằng cách tham gia các nền tảng e-learning như PluralSight, Linkedin Learning để liên tục học hỏi, cập nhật các kiến thức mới nhất. Trao đổi chi tiết để hiểu các công việc và khía cạnh kỹ thuật của dự án cũng là một cách để PM luôn có cái nhìn bao quát về công nghệ, nhưng vẫn có đủ chiều sâu để đảm bảo chất lượng dự án.

Cuối cùng, một “Project Manager” giỏi cũng là một “People Manager” tốt. Yếu tố quan trọng nhất và định đoạt thành công của dự án chính là Con người (People). Để thành công, một PM cần chú ý rèn luyện các kỹ năng mềm liên quan đến làm việc nhóm, xây dựng niềm tin, các kỹ năng giao tiếp, lãnh đạo và quản lý hiệu quả.   

Vậy để trở thành một PM kỹ thuật “xịn”, chúng ta cần chú ý đến các kỹ năng cơ bản của Quản lý dự án, sau đó cho mình một phông kiến thức công nghệ vững chắc. Và điều quan trọng cần đặc biệt chú ý, đó là trở thành một nhà quản lý con người và đội nhóm hiệu quả. 

Anh nhận xét như thế nào về “dàn nhạc” kỹ sư của mình?

Mình khá tự hào về “dàn nhạc” của mình hiện nay tại Techcombank. Mình có thể thấy những đầu tư rất lớn và bài bản của Ngân hàng vào yếu tố con người – 1 trong 3 trụ cột chính trong chiến lược phát triển 5 năm 2021-2025. Mỗi cá nhân trong khối Công Nghệ đều được Ngân hàng khuyến khích và tài trợ để có thể học tập và thi các chứng chỉ quốc tế như AWS Certificates, PMI-PMP, v.v. Điều này đã củng cố năng lực cơ bản của mỗi thành viên công nghệ, và mình hoàn toàn tự tin mọi người luôn được cập nhật các kiến thức mới nhất, cạnh tranh một cách sòng phẳng ở sân chơi khu vực. 

Ngoài ra, Techcombank cũng đẩy mạnh tuyển dụng các nhân tài là các chuyên gia trong lĩnh vực IT, Data từ nước ngoài để xây dựng, định hướng và đem về các best practice trên thế giới. Không chỉ vậy, tại Việt Nam, Techcombank cũng mở các chương trình Fast Track cho các bạn trẻ có nhiều tiềm năng được lựa chọn để tham gia vào các dự án lớn của ngân hàng và ươm mầm các tài năng trẻ này.

Tất nhiên sẽ không bao giờ có một đội nhóm “hoàn hảo”, nhưng mình tự tin với chất lượng và định hướng về con người của Techcombank. Đây chắc chắn là một yếu tố bền vững giúp Techcombank tiếp tục phát triển trong thời gian tới.

Nếu muốn trở thành một Project Manager/ Business Analyst/ Product Management

Không riêng gì Techcombank, dù làm việc ở bất kỳ nơi đâu, một PM giỏi và hiệu quả cần trang bị cho mình bộ 3 nhóm kỹ năng như sau:

  • Kỹ năng cứng: một nhà quản lý dự án thành công nên nắm bắt kiến ​​thức tốt về tất cả các lĩnh vực quản lý dự án (phạm vi, lịch trình, chi phí, tài nguyên, v.v.). Ở Techcombank, chúng tôi đặc biệt tập trung vào quản lý rủi ro, trong đó một PM giỏi phải luôn tìm kiếm mọi rủi ro/vấn đề tiềm ẩn có thể khiến dự án đi chệch hướng. Chúng tôi đánh giá cao PM có thể lên tiếng và nêu ra những hỗ trợ cần thiết càng sớm càng tốt.
  • Kỹ năng mềm: một nhà quản lý dự án thành công tại Techcombank phải có kỹ năng giao tiếp tốt (cả tiếng Việt và tiếng Anh, cả đọc và viết). Các kỹ năng giao tiếp có thể không giới hạn trong bối cảnh công việc mà còn để thiết lập kết nối cá nhân và niềm tin với các thành viên trong nhóm/ các bên liên quan. Kỹ năng Quản lý các bên liên quan cũng rất quan trọng để thành công trong một mạng lưới phức tạp. Một PM giỏi ở Techcombank cần xác định rõ cách đúng tiếp cận cho đúng đối tượng.
  • Kiến thức về lĩnh vực: kiến ​​thức về lĩnh vực sẽ mang lại cho PM một lợi thế cạnh tranh, để trở thành PM từ “giỏi” đến “giỏi hơn”. Có kiến ​​thức về lĩnh vực, một PM có thể đặt những câu hỏi phù hợp, đi sâu vào việc lập kế hoạch và thấy trước những rủi ro/vấn đề có thể xảy ra.

Project Manager/ Business Analyst/ Product Management

 


Thuộc dự án Inside GemTechnology do TopDev hợp tác cùng Techcombank triển khai, chuỗi nội dung thuần “Tech” độc quyền được chia sẻ bởi đội ngũ chuyên gia Công nghệ & Dữ liệu tại Techcombank sẽ được cập nhật liên tục tại chuyên mục Tech Blog | Techcombank Careers x TopDev. Cùng theo dõi & gặp gỡ các chuyên gia bạn nhé!

 

Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Pure Function trong Javascript: Hiểu thế nào cho đúng?

Pure Function trong Javascript: Hiểu thế nào cho đúng?

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Tôi năm nay đã 26 tuổi, maintain cũng dăm ba dự án rồi mà đôi lúc tôi cũng hay gặp những trường hợp mà một số bạn trong team hay làm thế này:

function convertBirthdayToAges (person) {
  const year = new Date().getFullYear(); // 2021
  return person.map(p => p.age = year - p.year);
}
...
const persons = [{name: 'Nguyễn Văn A', year: 2000}];
convertBirthdayToAges(persons);
console.log(persons); // [{name: 'Nguyễn Văn A', year: 2000, age: 21}]

Thoạt nhìn cách viết hàm như trên có vẻ bình thường nhưng bạn hãy để ý sau khi persons đi qua hàm convertBirthdayToAges thì nó đã bị gắn thêm một attribute age.

Hay một ví dụ khác kiểu như là:

let year = 2020;
function afterManyYear(num) {
  return year + num;
}
afterManyYear(5) // 2025;

....

year = 2025;
afterManyYear(5) // 2030;

Ở ví dụ trên, ban đầu khi gọi hàm afterManyYear(5) kết quả là 2025 nhưng sau đó, do year bị thay đổi thành 2025 thì afterManyYear(5) lúc này lại trả về 2030.

Điều này có vẻ cũng bình thường nhưng hãy tưởng tượng trong giai đoạn bảo trì khi bạn không biết year bị thay đổi ở đâu thì quả là tai hại. Bạn cũng có thể nói thế thì sao không khai báo const với yearconst year = 2020;? Thì tôi nghĩ khi đã khai báo với let thì trong đầu họ đã nghĩ sẽ sẵn sàng thay đổi year bất kì lúc nào rồi.

Nếu bạn là người thường xuyên làm những điều trên & thấy sự bất tiện của nó thì cũng là lúc các bạn nên biết về khái niệm Pure Function.

  6 thư viện Machine Learning Javascript giúp học AI nhanh hơn

  Sự khác biệt giữa encodeURI và encodeURIComponent trong JavaScript

Pure function là gì?

Pure function đúng như tên gọi của nó: “Hàm thuần khiết”.

Đó là một hàm JS & thoả mãn hai điều kiện:

  • Các đầu vào giống nhau luôn trả về đầu ra giống nhau.
  • Không có side-effects.

Các đầu vào giống nhau luôn trả về đầu ra giống nhau

Quá rõ ràng. Ví dụ như:

function add(x, y) {
  return x + y;
}
add(1, 2); // 3
add(1, 2); // 3

Với mỗi cặp x,y truyền vào thì giá trị trả về không bao giờ thay đổi.

Hàm này sẽ không thoã mãn:

let x = 1;
function add(y) {
  return x + y;
}
add(1); // 2
x = 2;
add(1); // 3

Khi một hàm đảm bảo điều kiện này thì chắn chắn việc đọc hiểu & gỡ lỗi sẽ dễ dàng hơn rất nhiều.

Tham khảo việc làm JavaScript tại Hồ Chí Minh trên TopDev

Không có side-effects

Side-effects là những “hiệu ứng” đi kèm trong hàm như:

  • Thay đổi giá trị của đầu vào.
  • console.log
  • HTTP calls (fetch/AJAX).
  • Thay đổi một file (fs).
  • Query DOM.

Nhìn chung thì ngoài những điều liệt kê ở trên thì side-effects còn bao gồm cả những công việc có trong hàm mà không liên quan đến kết quả tính toán cuối cùng.

Ở ví dụ 1 phần mở đầu ta đã thấy convertBirthdayToAges đã làm biến đổi giá trị của đầu vào là persons. Nếu chẳng may persons bị xoá mất một attribute nào đó thì chẳng phải là một điều rắc rối hay sao!

Để giải quyết vấn đề trên, thay vì chỉnh sửa trực tiếp persons, chúng ta hãy trả về một đối tượng mới:

function convertBirthdayToAges (person) {
  const year = new Date().getFullYear();
  return [...person.map(p => p.age = year - p.year)];
}

const persons = [{name: 'Nguyễn Văn A', year: 2000}];
const newPersons = convertBirthdayToAges(persons);
console.log(persons); // [{name: 'Nguyễn Văn A', year: 2000}];

Ví dụ trên tôi đã sử dụng toán tử spread syntax (…) để tạo ra một đối tượng mảng mới. Lưu ý rằng nó chỉ có thể sao chép “nông” (shallow copy) một đối tượng, để có thể sao chép “sâu” (deep copy) tôi khuyến nghị nên dùng package clone có sẵn trên npm.

Một ứng dụng không thể nào là không có side-effect

Đúng vậy, ứng dụng của bạn không thể nào hoạt động mà không bao gồm các “hiệu ứng” như đã liệt kê ở bên trên trừ chúng quá mức đơn giản. Chúng không thể hoạt động nếu như không đọc – ghi vào database hay select một phần tử trong DOM. Nhưng quan trọng là nên giảm thiểu tối đa hoặc cấu trúc những đoạn mã side-effects một cách độc lập nhất có thể.

Ví dụ như một hàm cập nhật dữ liệu:

// Ví dụ này giả sử Person là một sequelize model

// Hàm update này mới là hàm trực tiếp có side-effect
function update(payload) {
  return Person.update(payload);
}

function updatePerson(body) {
  const name = body.name.trim();
  const year = +body.year;
  return update({ name, year });
}

Tổng kết

Pure function không phải là khái niệm mới nhưng những lợi ích mà pure function mang lại trong quá trình phát triển & bảo trì sản phẩm là cực kì tốt dựa trên kinh nghiệm làm việc của tôi.

Qua những ví dụ trên tôi mong rằng các bạn sẽ nhận ra được những lợi ích khi áp dụng pure function vào các dự án trong hiện tại & tương lai. Chỉ cần thay đổi cách diễn đạt một chút sẽ mang lại nhiều lợi ích trong việc bảo trì code sau này.

Bài viết gốc được đăng tải tại 2coffee.dev

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

Xem thêm việc làm công nghệ hấp dẫn trên TopDev

Top 5 câu hỏi phỏng vấn System Admin và cách trả lời ghi điểm

Câu hỏi phỏng vấn System Admin và cách trả lời ghi điểm

System Admin hay quản trị viên hệ thống là những người chịu trách nhiệm thiết lập và bảo trì hệ thống máy tính, đặc biệt là máy chủ trong mạng của công ty; đảm bảo hệ thống hoạt động, vận hành một cách trơn tru và an toàn. Với vai trò quan trọng đó thì các nhà tuyển dụng luôn ưu tiên những ứng viên có kinh nghiệm và kiến thức tốt, với đòi hỏi cao khi phỏng vấn. Bài viết hôm nay chúng ta cùng tìm hiểu về những câu hỏi phỏng vấn vị trí System Admin thường gặp để có thể chuẩn bị tốt nhất nhằm chinh phục được nhà tuyển dụng nhé.

Công việc và trách nhiệm của một System Admin

System Admin

System Admin có vai trò quan trọng trong một tổ chức/công ty không hề thua kém bất kỳ vị trí nào khác. Nói vui thì nếu System Admin đang làm việc thì lúc đó tất cả các bộ phận khác phải dừng lại để chờ hoạt động của hệ thống được khắc phục. Cụ thể thì trách nhiệm và công việc của quản trị viên hệ thống gồm:

  • Bảo đảm an ninh mạng và internet
  • Bảo đảm hệ thống vận hành trơn tru, hiệu quả
  • Hỗ trợ kỹ thuật trong quá trình vận hành
  • Khắc phục, sửa chữa lỗi hệ thống
  • Nghiên cứu và đề xuất phương án phát triển các hệ thống mạng

  System Admin là gì? Mô tả công việc vị trí System Administrator

Top 4 câu hỏi thường gặp khi phỏng vấn vị trí System Administrator và câu trả lời chi tiết

VPS là gì? Nên chọn Hosting hay VPS cho công ty/ doanh nghiệp sử dụng

VPS Virtual Private Server là máy chủ riêng ảo được phân tách và chia sẻ tài nguyên từ server vật lý, nhờ công nghệ ảo hóa, VPS hoạt động giống máy chủ độc lập nhưng với lượng tài nguyên nhỏ hơn máy chủ chính. So với hosting (Shared Hosting) thì VPS có tính năng độc lập giống như một máy chủ riêng biệt, không phải chia sẻ tài nguyên cho nhiều tài khoản khác; nhờ đó tốc độ xử lý, hiệu năng, bảo mật của VPS cao hơn so với hosting.

Để lựa chọn cho công ty/doanh nghiệp sử dụng thì sẽ phụ thuộc vào nhu cầu, mục đích cũng như kiến thức của đội quản trị hệ thống; cụ thể thì VPS sẽ phù hợp cho:

  • Các hệ thống website có lượng truy cập lớn, cần sự ổn định, bảo mật và tối ưu tốt.
  • Đòi hỏi đội quản trị server có kiến thức và kỹ thuật quản lý

Ngược lại, lựa chọn hosting trong trường hợp bạn muốn nhanh chóng vận hành website, khả năng tài chính hạn chế và nhu cầu website có lượng truy cập thấp. 

  Kiến thức cần có về System Quality Attributes

High Availability (HA) là gì? Lợi ích khi sử dụng giải pháp này

High Availability (HA) là gì? Lợi ích khi sử dụng giải pháp này
Nguồn: https://www.stackscale.com/blog/high-availability/

High Availability (HA) hiểu một cách đơn giản là quy trình/giải pháp/công nghệ có chức năng đảm bảo cho cơ sở dữ liệu và ứng dụng có thể truy cập 24/7 trong mọi điều kiện. Để làm được điều này thì HA cần tối thiểu 2 server chạy song song, hoạt động liên tục để nếu một trong các server gặp sự cố thì các server còn lại sẽ thay thế để đảm bảo cho hệ thống có thể hoạt động bình thường, luôn trong trạng thái sẵn sàng phục vụ, đồng thời giảm thiểu tình trạng gián đoạn của hệ thống.

Lợi ích khi sử dụng HA là việc dữ liệu trong server được lưu ở các vị trí khác nhau, tất cả đều được bảo mật đảm bảo an toàn. Các bản sao VPS được lưu trữ tại nhiều cụm khác nhau, nếu 1 VPS xảy ra sự cố thì dữ liệu sẽ không bị ảnh hưởng.

Tham khảo việc làm System Admin hấp dẫn trên TopDev!

Liệt kê các file log trên VPS trong Linux

Trong Linux, toàn bộ log file của server được lưu trong thư mục var/log, để kiểm tra các file log chúng ta sử dụng lệnh di chuyển đến thư mục trên; sử dụng ls -l để liệt kê danh sách files trong thư mục. Để xem file log, chúng ta sử dụng lệnh tail hoặc lệnh less.

Các loại file log chính gồm:

  • auth.log: log về xác thực
  • boot.log: log về hoạt động khởi động hệ thống
  • cron: log các lịch hoạt động tự động
  • dmesg: log bộ đệm
  • message: log thông tin chung hệ thống
  • httpd: thư mục chứa log của Apache
  • maillog: log hoạt động mail
  • secure: log bảo mật
  • wtmp: log đăng nhập
  • yum: log của Yum

VPN là gì? Ưu và nhược điểm khi triển khai VPN cho công ty

Virtual Private Network

VPN là viết tắt của Virtual Private Network hay mạng riêng ảo là một công nghệ cho phép tạo ra một kết nối mạng riêng ảo giữa thiết bị của người dùng và mạng Internet, đóng vai trò như một lớp bảo vệ thông tin cá nhân và duy trì sự riêng tự trên mạng. Về cơ bản, VPN chuyển tiếp tất cả lưu lượng (network traffic) của bạn tới hệ thống – nơi có thể truy cập từ xa các tài nguyên mạng cục bộ và vượt qua khỏi việc kiểm duyệt Internet.

Ưu điểm của VPN là khả năng bảo mật, lưu lượng cá nhân của người dùng được mã hóa và truyền an toàn qua Internet giúp bạn tránh được các mối đe dọa. Đối với một tổ chức, doanh nghiệp thì việc thiết lập VPN có đầy đủ chức năng và cấu hình mạnh đòi hỏi chi phí ngân sách không nhỏ, đây cũng là nhược điểm của VPN.

Nêu một số sai lầm mà System Admin thường gặp phải

Một số lỗi mà System Admin thiếu kinh nghiệm hoặc không cẩn thận để xảy ra trong quá trình làm việc thực tế có thể gây ra hậu quả rất lớn đối với công ty/ doanh nghiệp như sau:

  • Chia sẻ tài khoản quản trị với các thành viên trong team System, sau đó có người quản trị nghỉ việc, mật khẩu không được đổi kịp thời
  • Quên gia hạn SSL khiến các hệ thống không đảm bảo an toàn, người dùng cũng mất tin tưởng khi truy cập vào website của công ty
  • Không theo dõi log files thường xuyên khiến không phát hiện ra sớm lỗi hệ thống có thể xảy ra và ngăn ngừa trước.
  • Thực thi lệnh với quyền root hoặc trao quyền root cho người dùng khác ngoài team System, điều này tạo ra lỗ hổng lớn khi một người dùng có nguy cơ can thiệp sâu vào hệ thống máy chủ.
  • Không chấm dứt các tài khoản ngừng hoạt động khi có nhân viên trong công ty/ doanh nghiệp nghỉ việc. Điều này không chỉ khiến nguy cơ mất an toàn thông tin mà còn làm lãng phí tài nguyên của công ty.

Một số chứng chỉ System Admin phổ biến

Một số chứng chỉ dành cho System Admin dưới đây giúp bạn ghi điểm với nhà tuyển dụng:

  • Red Hat Certified System Administrator/ Red Hat Certified Engineer
  • CompTIA Server+/ CompTIA Security+
  • ServiceNow Certified System Administrator
  • Linux Professional Institute LPIC-1 Linux Administrator
  • Cisco Certified Network Associate
  • Microsoft Certified: Azure Administrator Associate
  • VMware Certified Professional – Data Center Virtualization

Kết bài

Trên đây là danh sách những câu hỏi phỏng vấn thường gặp dành cho vị trí System Admin. Quản trị hệ thống là công việc đòi hỏi kinh nghiệm và kiến thức về hệ thống mạng, máy chủ, phần cứng; vì thế các bạn hãy bổ sung thêm và học hỏi trong quá trình làm việc nữa nhé. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm: 

Xem thêm các công việc ngành CNTT hấp dẫn trên TopDev

Chuyện phỏng vấn: “Em đang ở level nào?”

Chuyện phỏng vấn:

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Lần gần đây nhất tôi đi phỏng vấn tìm việc là khoảng 4-5 tháng trước. Như bao người khác, đi nhiều nơi, mỗi nơi là một trải nghiệm thú vị và nhận thấy một điều là không ai hỏi giống ai. Tôi chuẩn bị cho mình một tâm lý thoải mái và đặt ra những tiêu chí về môi trường làm việc mới, không quá quan trọng lý thuyết mà sẽ trả lời dựa trên kinh nghiệm làm việc thực tế của mình.

Một ngày nọ, có một anh CTO hỏi tôi một câu “Em tự nhận thấy mình đang ở level nào?”. Tôi không chần chừ mà trả lời luôn: “Thực ra em chưa để ý nhiều đến level của mình, mục tiêu trước mắt là không ngừng học hỏi…”. – “Em chưa xác định được level của mình thì cũng cần phải xem xét lại nhé!”

Dễ nhận thấy là người phỏng vấn đang muốn tôi lựa chọn giữa 3 mức Junior, Mid-Level và Senior. Với một người có hơn 5 năm kinh nghiệm, có thể tôi sẽ lựa chọn mình ở mức Senior, bởi vì đây là một điều có thể chấp nhận được khi thị trường tuyển dụng trong nước thường hay cho rằng người có từ 5 năm kinh nghiệm trở lên có thể coi là Senior. Nhưng tôi nghĩ, hiện tại mình vẫn chưa đạt được cấp độ này, có thể mình chỉ đang ở mức Mid-Level. Nhưng vì quan niệm và thị trường đang có mâu thuẫn về sự phân biệt các cấp độ, hay nói cách khác 3 cấp độ này còn phụ thuộc vào suy nghĩ của mỗi người, cho nên tôi phân vân và không đưa ra được câu trả lời chính xác cho mình.

Lời của anh CTO nói là đúng, việc không xác định được Level của mình thì quả là nguy cấp, nhưng do không nói ra suy nghĩ cho nên bị hiểu nhầm là không xác định được mình ở đâu. Vì thế, bài viết ngày hôm nay chúng ta hãy thử bàn luận về 3 cấp độ Junior, Mid-Level và Senior để xem thực chất phải làm thế nào thì mới có thể coi là một Senior “xịn” nhé!

  Sự khác biệt giữa senior developer và developer with seniority

  Lập trình viên, liệu bạn đã đủ “hấp dẫn” trong mắt nhà tuyển dụng?

Junior, Mid-Level và Senior

Hãy thử tìm kiếm Google với từ khóa “Junior, Mid-Level và Senior developer” sẽ có rất nhiều kết quả được tìm thấy, chứng tỏ đây là một chủ đề được rất nhiều người quan tâm. Đa phần chúng ta vào đọc để xem mình đang ở đâu và cần phải làm thêm gì thì mới có thể đạt được cấp độ tiếp theo.

Trong số đó, nhiều bài liệt kê ra số năm kinh nghiệm để đánh giá được một người đang ở cấp độ nào. Ví dụ, mới ra trường sẽ là Junior, 3-5 năm sẽ là Mid-Level, từ 5 năm trở đi thì thành Senior…!? Quả thật mà nói trước kia tôi cũng từng tin sái cổ vào những con số này. Cho rằng càng làm lâu thì “bậc” của mình cũng sẽ tự tăng.

Hoặc cũng có bài viết chỉ ra rằng số năm không hoàn toàn quyết định level của một người, mà dựa vào khả năng giải quyết vấn đề của người đó. “Họ biết cách tổ chức mã, quan tâm đến khả năng bảo trì sau này, cách đặt câu hỏi và cách giải quyết…” Nghe thì hợp lý, nhưng có lẽ vẫn chưa đủ. Đối với tôi, một lập trình viên không chỉ biết mỗi code. Do đó để đạt được cấp cao nhất trong lập trình thì phải vượt qua cả việc code và làm được nhiều điều hơn nữa.

Tham khảo việc làm Senior Developer hấp dẫn trên TopDev

Tình cờ tôi tìm thấy một bài viết nói rất chi tiết về những thứ có thể đạt được ở cả 3 cấp độ. Hơn nữa nó còn rất đầy đủ và chi tiết cũng như đưa ra lời khuyên làm sao để tăng được level. Bạn đọc có thể xem tại Levels of Seniority.

Để tóm tắt, bài viết tập trung nhất vào cấp độ Junior, nêu ra khái niệm, biểu hiện và những điều cần làm để tiến bộ hơn. Một vài ý nổi bật như là:

  • Câu thần chú chính của họ là “làm cho nó hoạt động” mà không chú ý nhiều đến giải pháp. Đối với họ, một phần mềm hoạt động được và một phần mềm tốt là tương đương nhau.
  • Họ không biết về khía cạnh kinh doanh của công ty, tức là không quan tâm hoặc không biết mình làm việc này cho công ty để làm gì.
  • Đổ lỗi cho người khác (Somebody else’s problem) khi cho rằng ai đó phải chịu trách nhiệm cho vấn đề của bạn.
  • Họ không tham gia thảo luận nhóm.

Sau đó, tác giải đưa ra những lời khuyên cho Junior như sau:

  • Đọc nhiều mã, không chỉ mã trong các dự án mà bạn đang làm việc, mà cả mã nguồn của các thư viện, Framework, mã nguồn mở…
  • Tự làm các dự án cá nhân.
  • Ngừng đổ lỗi.
  • Đừng để bản thân bị giới hạn bởi chức danh mà bạn có. Làm nhiều việc và chủ động hơn.
  • Tránh nói “nó hoạt động trên máy của tôi”, ý chỉ hãy đi tìm hiểu nguyên nhân tại sao ứng dụng không hoạt động ở đâu đó, vì chắc chắn người khác đang gặp phải vấn đề chứ không phải là bạn. Câu nói trên chẳng khác nào phủ nhận trách nhiệm vậy.
  • Tiếp xúc với các nhà phát triển cấp cao hơn, xem họ làm việc, nếu có thể thì tìm một người hướng dẫn mình. Không ai thích một người biết tất cả mọi thứ, nhưng hãy kiềm chế cái tôi của mình và khiêm tốn để tiếp thu những bài học từ những người có kinh nghiệm.

Một Mid-level bao gồm tất cả những yếu tố của Junior, kèm theo đó là khả năng tự giải quyết vấn đề. Họ có nhiều hiểu biết hơn Junior tuy nhiên còn lúng túng trong việc áp dụng chúng. Tác giải nhấn mạnh rằng Mid-level là rất phổ biến và đôi khi họ bị nhầm với “Senior”. Tuy nhiên, họ cần được cố vấn thêm để trở thành một Sernior “chính hiệu”.

Senior là cấp độ tiếp theo sau Mid-Level developer. Họ là những người có thể tự mình hoàn thành công việc mà không cần bất kỳ sự giám sát nào và không tạo ra bất kỳ vấn đề nào trong quá trình thực hiện. Một số điều mà một Senior làm được như:

  • Họ thực dụng trong công việc, không bị ảnh hưởng bởi một công cụ tốt nhất.
  • Họ có một bức tranh toàn cảnh về lĩnh vực này, biết đâu là công cụ tốt nhất cho công việc trong hầu hết các trường hợp.
  • Họ biết họ đang ở trong một đội. Họ coi đó là một phần trách nhiệm của họ trong việc hướng dẫn người khác.
  • Họ có hiểu biết sâu sắc về lĩnh vực đang làm.
  • Họ nghĩ nhiều hơn là chỉ viết mã.
  • Họ biết cách đưa ra phản hồi mà không làm tổn thương bất cứ ai…

Hay nói tóm lại, ngoài việc viết mã, một Senior có thể hướng dẫn, làm cố vấn cho người khác, hiểu biết sâu sắc về doanh nghiệp, lĩnh vực kinh doanh và cả yếu tố con người.

Tổng kết

Junior, Mid-Level và Senior là ba cấp độ của một lập trình viên, cấp độ Junior là thấp nhất cho đến Senior là người có hiểu biết sâu rộng. Việc xác định được mình đang ở cấp độ nào cũng như cần làm gì để đạt được Level tiếp theo là một điều hết sức quan trọng trong con đường sự nghiệp của mỗi người.

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

Xem thêm tuyển dụng IT tại TopDev!

7 sai lầm thường gặp khi học Nodejs

7 sai lầm thường gặp khi học Nodejs

Bài viết được sự cho phép của tác giả Sơn Dương

Kể từ thời điểm Node.js được công bố chính thức, nó đã chứng minh được giá trị của mình. Cũng vì có nhiều người quan tâm nên luôn có những cuộc tranh luận về Node.js. Có người khen, có người chê. Nhưng bạn có công nhận với mình là càng nhiều người ghét thì càng nhiều người sử dụng không? Càng nhiều người đâm đầu vào học Nodejs ^_^

Có một điều rằng, Node.js đang ngày càng phổ biến, được sử dụng ở nhiều ứng dụng lớn, hoặc rất lớn.

Tuy nhiên, để ứng dụng Node.js tốt theo đúng nghĩa thì nó phụ thuộc vào tài năng của người viết ra nó. Chứ một mình Node.js dù có tốt đến đâu thì cũng không thể “gánh team” được. Yếu tố con người luôn là yếu tố tiên quyết tới chất lượng sản phẩm.

Để sản phẩm có chất lượng kém thì dưới đây là 7 sai lầm khi học nodejs mà bạn nên mắc phải!

Sai lầm thường gặp khi học Nodejs

#Tạo vòng lặp dữ liệu lớn làm treo ứng dụng

Javascript trong Node.js (cũng giống như trong trình duyệt) là ngôn ngữ đơn luồng. Hay nói cách khác, ở cùng một thời điểm, chỉ có một luồng được thực thi, một task được thực hiện. Thay vào đó, để tăng hiệu suất ứng dụng, Node.js sẽ xử lý theo kiểu bất đồng bộ.

Ví dụ, truy xuất vào cơ sở dữ liệu từ ứng dụng Node.js để lấy dữ liệu. Trong lúc chờ cơ sở dữ liệu trả về kết quả thì Node.js có thể tranh thủ làm các task khác.

// Trying to fetch an user object from the database. Node.js is free to run other parts of the code from the moment this function is invoked..

db.User.get(userId, function(err, user) {

    // .. until the moment the user object has been retrieved here

})

Tuy nhiên, không phải mã nào cũng bất đồng bộ, bản thân Javascript là ngôn ngữ đồng bộ, nên cũng giống như các ngôn ngữ khác.

Nếu một đoạn code mà cần thời gian dài để thực hiện có thể làm treo ứng dụng. Đặc biệt là các vòng lặp. Bạn có thể xem đoạn code bên dưới đây:

function sortUsersByAge(users) {

    users.sort(function(a, b) {

        return a.age < b.age ? -1 : 1

    })

}

Đây là hàm dùng để sắp xếp một mảng các users. Đây là hàm thuần túy đồng bộ, tức là phải làm xong hàm này thì mới thực hiện các hàm khác. Nếu mảng users có số lượng ít thì không sao. Nhưng nếu mảng users mà có rất nhiều phần tử thì sao?

Đấy là chưa kể ứng dụng Node.js còn phải phục vụ hàng ngàn khách truy cập nữa?

Đây chính là vấn đề, có thể làm sập server như chơi.

Để khắc phục vấn đề này thì có nhiều giải pháp, tùy vào hoàn cảnh ứng dụng. Ví dụ, nếu mảng users được lấy từ cơ sở dữ liệu (CSDL)  thì tốt nhất nên để CSDL tự sắp xếp trước khi trả về cho ứng dụng Node.js.

Về nguyên tắc là không nên để ứng dụng Node.js (ứng dụng trực tiếp xử lý request từ người dùng) phải thực hiện một tác vụ quá lâu.

  Xử lý ERROR trong NodeJS sao cho đúng?

  NodeJS version manager: Quản lý đa phiên bản NodeJS trên máy tính

#Sử dụng Return rỗng với Callback

Callback có lẽ là khái niệm mà chắc hẳn ai học Nodejs đều phải biết. Tuy nhiên, cách sử dụng như nào cho đúng thì mỗi người một cách. Trong Node.js, callback là cách để cách thành phần bất đồng bộ tương tác với nhau.

Một vấn đề phổ biến của Node.js mà các bạn developer ít kinh nghiệm hay mắc phải đó chính là gọi  Callback nhiều lần.

Thông thường, một API bất đồng bộ sẽ có một tham số cuối cùng là một hàm, được sử dụng task được thực hiện bởi API hoàn thành.

module.exports.verifyPassword = function(user, password, done) {
    if(typeof password !== ‘string’) {
        done(new Error(‘password should be a string’))
        return
    }

    computeHash(password, user.passwordHashOpts, function(err, hash) {
        if(err) {
            done(err)
            return
        }

        done(null, hash === user.passwordHash)
    })
}

Bạn nhìn đoạn code trên có thấy điều gì lạ không?

Tại sao lại phải sử dụng từ khóa return dưới mỗi callback vậy? Lý do họ làm như vậy vì khi gọi callback không làm kết thúc hàm, chương trình vẫn tiếp tục thực hiện các lệnh bên dưới. Đó là điều không đúng logic.

Tuy nhiên, nhìn việc return không có giá trị trả về cứ thế nào ấy. Mặc dù, trong các hàm kiểu bất đồng bộ thì việc return giá trị không có nhiều ý nghĩa lắm, ngoại trừ việc dùng return để kết thúc hàm.

Thay vào đó, chúng ta có  thể return chính hàm callback, nhìn code sẽ đẹp hơn nhiều.

if(err) {
    return done(err)
}

Tham khảo tuyển dụng nodejs lương cao trên TopDev

#Sử dụng Callback lồng nhau

Sử dụng Callback lồng nhau tới mức mất kiểm soát, người ta gọi là “callback hell”. Đây là một bad smell cực tệ với các ứng dụng Node.js, làm cho việc bảo trì mã nguồn trở nên vô vàn khó khăn. Mình cũng đã có hẳn một bài viết riêng về Callback hell và cách xử lý. Các bạn có thể tham khảo:  6 cách “trị” callback hell trong javascript

Ví dụ một callback lồng nhau:

function handleLogin(..., done) {
    db.User.get(..., function(..., user) {
        if(!user) {
            return done(null, ‘failed to log in)
        }
        utils.verifyPassword(..., function(..., okay) {
            if(okay) {
                return done(null, ‘failed to log in)
            }
            session.login(..., function() {
                done(null, ‘logged in)
            })
        })
    })
}

Có nhiều cách để xử lý callback lồng nhau, trong bài viết ở trên, mình có giới thiệu 6 cách để xử lý callback lồng nhau.

Nhân tiện bài viết này, mình giới thiệu thêm một cách nữa. Đó là sử dụng tiện ích Async.js:

function handleLogin(done) {
    async.waterfall([
        function(done) {
            db.User.get(..., done)
        },
        function(user, done) {
            if(!user) {
            return done(null, ‘failed to log in)
            }
            utils.verifyPassword(..., function(..., okay) {
                done(null, user, okay)
            })
        },
        function(user, okay, done) {
            if(okay) {
                return done(null, ‘failed to log in)
            }
            session.login(..., function() {
                done(null, ‘logged in)
            })
        }
    ], function() {
        // ...
    })
}

#Sử dụng Callback để chạy đồng bộ

Kỹ thuật bất đồng bộ với Callback tuy không phải là kỹ thuật chỉ có trên Javascript hay Node.js. Nhưng dường như sự phổ biến đã biến nó trở thành “tiêu chuẩn”. Giống như việc nói tới lập trình hướng đối tượng là người ta nghĩ ngay tới java vậy.

Với nhiều developer quen với các ngôn ngữ chạy đồng bộ như PHP, Java… Thì có xu hướng viết code đồng bộ trong Node.js. Và họ sử dụng Callback như một công cụ để viết code đồng bộ.

Tuy nhiên, Callback trong Javascript có thể không hoạt động như ý muốn của bạn.

Tham khảo đoạn code bên dưới:

function testTimeout() {
    console.log(“Begin”)
    setTimeout(function() {
        console.log(“Done!)
    }, duration * 1000)
    console.log(“Waiting..)
}

Như đoạn code trên thì màn hình sẽ in log theo thứ tự như sau, có vẻ không đúng thứ tự phải không?

'Begin'
'Waiting..'
'Done!'

Bất kể điều gì bạn muốn thực hiện sau callback đều phải được gọi bên trong hàm đó.

#Nhầm lẫn giữa “exports” và “module.exports”

Node.js coi mỗi một file javascript là một module nhỏ, độc lập với các file khác. Người ta gọi là tính đóng gói. Để một hàm trong file javascript có thể được sử dụng bởi file thì bạn cần phải export nó ra.

Giả sử trong package của bạn có 2 file javascript: one.js và two.js

Để two.js có thể gọi một hàm verifyPassword(...) trong one.js thì nó phải được export.

// one.js
exports.verifyPassword = function(user, password, done) { ... }

Khi bạn làm điều này, bất kể file nào require('one.js') đều có thể sử dụng hàm verifyPassword(...).

// two.js
require('one.js') // { verifyPassword: function(user, password, done) { ... } } 

Tuy nhiên, làm thế nào để export trực tiếp hàm verifyPassword() mà không phải định nghĩa nó như một thuộc tính của one.js? Câu trả lời là sử dụng module.export

// one.js
module.exports = function(user, password, done) { ... }

Nhìn có vẻ đơn giản vậy thôi nhưng sự khác nhau giữa exports và module.exports đang trở thành chủ đề bàn tán của rất nhiều Node.js developer.

#Throwing Errors bên trong Callbacks

Javascript cũng có Exception như bao ngôn ngữ khác như Java, C++. Bạn hoàn toàn có thể “Throw” hoặc try-catch một Exception.

Ví dụ như đoạn code dưới đây, try-catch sẽ bắt được Exception.

function slugifyUsername(username) {
    if(typeof username === ‘string’) {
        throw new TypeError(‘expected a string username, got '+(typeof username))
    }
    // ...
}

try {
    var usernameSlug = slugifyUsername(username)
} catch(e) {
    console.log(‘Oh no!)
}

Tuy nhiên, try-catch lại hoạt động không như mong đợi trong trường hợp của hàm bất đồng bộ.

Ví dụ, bạn muốn đoạn code an toàn, không bị crash khi có Exception, nên bạn thêm try-catch cho cả một đoạn code lớn. Mà trong đó có nhiều hàm bất đồng bộ. Thì try-catch sẽ không hoạt động đúng.

try {
    db.User.get(userId, function(err, user) {
        if(err) {
            throw err
        }
        // ...
        usernameSlug = slugifyUsername(user.username)
        // ...
    })
} catch(e) {
    console.log(‘Oh no!)
}

Như trong trường hợp này, khi callback b.User.get(...) có lỗi mà bạn lại throw lỗi thì các Exception của các hàm tiếp theo sẽ không thể catch được nữa.

#Sử dụng Console.log một cách bừa bãi

Trong Node.js, Console.log cho phép bạn in tất cả mọi thứ ra màn hình console. Không giống như Java, bạn chỉ có thể truyền vào một String. Với Console.log, bạn có thể truyền vào một Object, nó sẽ in ra dưới dạng một Object theo đúng nghĩa đen.

Chính vì Console.log tiện lợi như vậy nên nhiều bạn developer sử dụng console.log ở khắp mọi nơi. Tuy nhiên, bạn nên tránh việc đặt console.log ở tất cả mọi nơi để debug. Sau này không cần thì comment nó lại.

Thay vào đó, bạn nên sử dụng một thư viện hỗ trợ đặt log. Tùy thuộc vào hình thức bạn release sản phẩm như: release chính thức, hay debug… mà bật/tắt việc in các log một cách tự động thay vì phải đi xóa console.log thủ công.

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

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

Top 10 Trường đào tạo ngành Công nghệ thông tin tốt nhất

Những trường Đại học đào tạo Công nghệ thông tin tốt nhất hiện nay

Với sự bùng nổ của cuộc cách mạng công nghiệp 4.0 ngày nay, các nhu cầu liên quan tới lĩnh vực Công nghệ cũng ngày càng tăng lên chóng mặt. Trường đại học là nơi đào tạo ra các lập trình viên tương lai, bạn có đang phân vân khi lựa chọn các trường Đại học đào tạo ngành IT – Công nghệ thông tin tốt và phù hợp với mình?

Trong bài viết này TopDev sẽ giới thiệu đến các bạn học sinh, sinh viên các trường Đại học công nghệ thông tin với chất lượng đào tạo tốt và uy tín ở TPHCM, Hà Nội và một số tỉnh thành khác để bạn có thêm nhiều lựa chọn khi quyết định theo đuổi con đường trở thành lập trình viên của mình.

Bài viết chỉ mang tính chất tham khảo và liệt kê, thứ tự trong bài không mang tính chất xếp hạng các trường nhé. Còn bây giờ chúng ta bắt đầu thôi!

Top 10 trường đào tạo ngành công nghệ thông tin tốt nhất hiện nay

Cùng TopDev tìm câu trả lời cho câu hỏi: Công nghệ thông tin học trường nào ngay bây giờ.

Đại học Bách Khoa Hà Nội

trường đại học đào tạo công nghệ thông tin tốt nhất - Đại học Bách Khoa Hà Nội
Một trong các trường đại học công nghệ thông tin top đầu Việt Nam – Đại học Bách Khoa Hà Nội

Được đánh giá là 1 trong top trường đào tạo công nghệ thông tin Hà Nội và là đại học kỹ thuật đa ngành trọng điểm của Việt Nam, là thành viên của Hiệp hội các trường đại học kỹ thuật hàng đầu của Châu Á – Thái Bình Dương AOTULE (Asian-Oceania Top University League on Engineering) cũng đủ khẳng định chất lượng giảng dạy của Đại học Bách Khoa Hà Nội.

Khoa Công nghệ Thông tin (tiền thân của Viện Công nghệ Thông tin và Truyền thông ngày nay) – Đại học Bách khoa Hà Nội được thành lập vào tháng 3 năm 1995, trên cơ sở sáp nhập 03 đơn vị thuộc Trường: Khoa Tin học, Phòng thí nghiệm chuyên đề xử lý tin (Khoa điện tử – viễn thông), và Trung tâm máy tính và tin học ứng dụng. Tại thời điểm thành lập, là một trong bảy khoa công nghệ thông tin trọng điểm được thành lập tại Việt Nam.

Trường đã đầu tư cơ sở vật chất tiện nghi, hiện đại phục vụ cho công tác dạy học và nghiên cứu khoa học
Trường đã đầu tư cơ sở vật chất tiện nghi, hiện đại phục vụ cho công tác dạy học và nghiên cứu khoa học

Bởi độ hot cũng như chất lượng giảng dạy tốt, ĐH Bách Khoa Hà Nội lấy điểm chuẩn khá cao: 28.29 điểm ngành Khoa học máy tính và 29.42 điểm ngành Khoa học máy tính (năm 2023), có thể thấy tỉ lệ cạnh tranh hết sức khắc nghiệt.

Ở cả hai bảng xếp hạng danh giá THE và QS, lĩnh vực Khoa học Máy tính, Đại học Bách khoa Hà Nội đều đứng thứ nhất Việt Nam và top 1000 đại học tốt nhất thế giới, sánh vai với một số trường đại học uy tín ở các nước phát triển tiên tiến, như: The University of Georgia (Mỹ), Technische Universität Braunschweig (Đức), Université de Bordeaux (Pháp), Université Laval (Canada), La Trobe University (Úc)…

Mức học phí cập nhật mới nhất năm 2024 của ĐH Bách khoa Hà Nội là từ 24 – 30 triệu đồng/năm cho chương trình chuẩn và tăng không quá 10% mỗi năm.

Thông tin liên hệ:

  • Địa chỉ: Số 1 Đại Cồ Việt, Hai Bà Trưng, Hà Nội
  • Điện thoại: 024 3869 4242
  • Website trường: https://www.hust.edu.vn/

Tham khảo thêm các vị trí tuyển dụng việc làm IT Fresher tại Hà Nội

Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP.HCM

trường đại học đào tạo công nghệ thông tin tốt nhất Đại học Công nghệ Thông tin - Đại học Quốc gia TP.HCM

Một trong các trường đào tạo công nghệ thông tin tại Tp. Hồ Chí Minh, không thể không nhắc đến trường ĐH Công nghệ thông tin – Đại Học Quốc Gia TPHCM. Thành lập từ năm 2006, Trường Đại học Công nghệ thông tin đã sớm khẳng định vị thế của mình trong công tác giảng dạy và đào tạo về IT. Với cơ sở vật chất thuộc hàng khủng và cập nhật theo xu hướng mới cùng với việc đào tạo kết hợp nghiên cứu, Nhà trường hướng đến việc phát huy năng lực của từng sinh viên.

“Toàn diện, sáng tạo, phụng sự” – Đây cũng là giá trị cốt lõi trong vận hành và phát triển của nhà trường, giúp xác lập vị trí là trường Đại học hàng đầu trong lĩnh vực CNTT tại Việt Nam. Khẳng định là nơi đào tạo sinh viên phát triển toàn diện cả về kiến thức, kỹ năng chuyên môn lẫn thái độ sống tích cực phục vụ cộng đồng, năng động – bản lĩnh – tự tin hội nhập quốc tế.

Đại học Công nghệ thông tin còn liên kết với các tập đoàn hàng đầu như IBM, Microsoft, SunJava… nên rất chú trọng việc dạy tiếng Anh với những chương trình học theo chuẩn quốc tế. Sau khi tốt nghiệp, sinh viên sẽ nhận được chứng chỉ quốc tế, giúp việc ứng tuyển vào các tập đoàn, công ty nước ngoài được dễ dàng hơn.

Nếu bạn muốn theo chuyên ngành Kỹ thuật phần mềm, An toàn thông tin, Thương mại điện tử và nhất là Khoa học máy tính thì nhất định không thể bỏ qua Đại học Công nghệ Thông tin của Đại Học Quốc gia TP. HCM.

Tổng thể khuôn viên rộng rãi của Đại học Công nghệ Thông tin
Tổng thể khuôn viên rộng rãi của Đại học Công nghệ Thông tin

Không gian tự học tại Thư viện của UIT
Không gian tự học tại Thư viện của UIT

Năm 2024, Nhà trường tuyển sinh các ngành với bốn hình thức: Tuyển thẳng và ưu tiên xét tuyển (25% chỉ tiêu); xét tuyển dựa trên điểm thi (thi đánh giá năng lực, thi tốt nghiệp THPT, 60% chỉ tiêu); xét tuyển chứng chỉ quốc tế uy tín (15% chỉ tiêu); xét tuyển theo tiêu chí riêng (chương trình liên kết với Đại học Birmingham City, Anh). 

Về điểm chuẩn thì trường ở mức khá cao, từ 2021 – 2022 – 2023, ngành Công nghệ thông tin lấy lần lượt là 27.3 – 27.9, 26.9 ngành An toàn thông tin là 27 – 26.95, 26.3 và ngành Kỹ thuật phần mềm với 27.7 – 25.55 – 26.9. Nhưng bù lại cách cửa cơ hội việc làm cho các bạn sau khi ra trường sẽ rất rộng mở.

Hiện trường Đại học CNTT chưa công bố học phí chính thức năm 2024, bạn có thể tham khảo học phí của trường vào năm 2023 là khoảng từ 30 triệu đến 150 triệu và tăng không quá 10%, học phí sẽ phụ thuộc vào chương trình đào tạo mà bạn chọn (đại trà, hệ tiên tiến,…)

Thông tin liên hệ:

  • Địa chỉ: Khu phố 6, P.Linh Trung, Tp.Thủ Đức, Tp.Hồ Chí Minh
  • Điện thoại: (028) 372 52002
  • Website trường: https://www.uit.edu.vn/

Tham khảo thêm các vị trí tuyển dụng IT fresher HCM

Trường Đại học Sư phạm Kỹ thuật TP.HCM

Trường Đại học Sư phạm Kỹ thuật TP.HCM - top trường cntt
Ngành công nghệ thông tin học trường nào? Trường Đại học Sư phạm Kỹ thuật TP.HCM

Trường Đại học Sư phạm Kỹ thuật TP.HCM (HCMUTE) là một trong những trường đại học hàng đầu tại Việt Nam về đào tạo ngành Công nghệ Thông tin. Được thành lập năm 1962, HCMUTE không chỉ nổi tiếng với các ngành sư phạm kỹ thuật mà còn là địa chỉ tin cậy cho các bạn trẻ yêu thích và muốn theo đuổi ngành Công nghệ Thông tin. Với những ưu điểm nổi bật như:

  • Chương trình đào tạo chất lượng: HCMUTE cung cấp chương trình đào tạo hiện đại, liên kết chặt chẽ với các doanh nghiệp hàng đầu trong và ngoài nước, giúp sinh viên có cơ hội tiếp cận với công nghệ mới nhất và được thực hành thực tế.
  • Đội ngũ giảng viên: Trường sở hữu đội ngũ giảng viên có trình độ cao, nhiều kinh nghiệm và nhiệt huyết trong giảng dạy và nghiên cứu.
  • Cơ sở vật chất hiện đại: HCMUTE đầu tư mạnh mẽ vào cơ sở vật chất với các phòng thí nghiệm, thực hành hiện đại, đáp ứng tốt nhu cầu học tập và nghiên cứu của sinh viên.
  • Hợp tác quốc tế: Trường có nhiều chương trình hợp tác quốc tế, trao đổi sinh viên với các trường đại học uy tín trên thế giới.

trường đại học đào tạo công nghệ thông tin
Bên trong các dãy phòng học trường SPKT TPHCM

Học phí trường Đại học Sư phạm kỹ thuật TP.HCM được chia thành 3 hệ đào tạo như sau:

  • Hệ đại trà: 17.500.000-19.500.000/năm
  • Hệ chất lượng cao (tiếng Việt): 28.000.000-30.000.000/năm
  • Hệ chất lượng cao (tiếng Anh): 32.000.000/năm

Đối với hệ đại trà, học phí sẽ tăng mỗi năm 10%, với hai hệ chất lượng cao còn lại, thì học phí sẽ cố định qua mỗi năm.

Điểm chuẩn nhóm ngành Công nghệ thông tin năm 2023 của trường ĐH Sư phạm Kỹ thuật TPHCM là 25.98 – 26.64 tùy thuộc vào chương trình đào tạo.

Thông tin liên hệ:

  • Trụ sở chính: 1 Võ Văn Ngân, Phường Linh Chiểu, TP. Thủ Đức, TP.HCM.
  • Điện thoại: (028) 3896 1333
  • Website: www.hcmute.edu.vn

Tham khảo các vị trí tuyển dụng Fresher IT mới ra trường

Trường Đại học Bách khoa – Đại học Quốc gia TP.HCM

Công nghệ thông tin trường nào? Trường Đại học Bách khoa - Đại học Quốc gia TP.HCM
Công nghệ thông tin trường nào? Trường Đại học Bách khoa – Đại học Quốc gia TP.HCM

Để tiếp tục trả lời câu hỏi được nhiều bậc phụ huynh và học sinh quan tâm: Học công nghệ thông tin, trường nào tốt? Cùng TopDev giải mã ẩn số tiếp theo…

Là 1 trong những trường đại học trọng điểm, Đại học Bách Khoa TP.HCM luôn nằm trong top những đại học kỹ thuật và công nghệ hàng đầu tại miền Nam Việt Nam. Ngoài tuổi đời và danh tiếng của mình, trường còn là nơi đào tạo ra rất nhiều tài năng cho đất nước với hàng loạt giải thưởng lớn nhỏ trong và ngoài nước.

Nếu bạn muốn có cơ hội lớn khi học tập và làm việc trong môi trường quốc tế, đại học Bách khoa TP.HCM sẽ giúp bạn khi trường liên kết với nhiều đại học giảng dạy trong lĩnh vực công nghệ thông tin trên thế giới.

Cơ sở vật chất siêu hiện đại của HCMUT
Cơ sở vật chất siêu hiện đại của HCMUT

Nhà Thi đấu thể dục thể thao Bách khoa với diện tích 3.000 m2
Nhà Thi đấu thể dục thể thao Bách khoa với diện tích 3.000 m2

Vì chất lượng giảng dạy và học thuộc hàng đầu tại Việt Nam, nên điểm chuẩn cũng thuộc top cao nhất khu vực miền Nam. Năm 2023 ngành Khoa học Máy tính là 28; ngành Kỹ thuật máy tính 27,35.

Nếu bạn cảm thấy mình thực sự đam mê với ngành công nghệ thông tin thì hãy chọn đại học Bách khoa làm bến đỗ của mình. Tuy nhiên, chương trình đào tạo của trường khá nặng, nhưng không sao, ‘có công mài sắt có ngày nên kim’ mà. Sau khi tốt nghiệp bạn sẽ dễ dàng tìm được công việc phù hợp theo mong muốn của mình vì tấm bằng của đại học Bách khoa TP.HCM thực sự rất có trọng lượng.

Học phí dự kiến năm 2024 của trường Đại học Bách khoa TP HCM là 40 – 80 triệu đồng một năm.

Thông tin liên hệ:

  • Địa chỉ:
    • Cơ sở 1: 268 Lý Thường Kiệt, Quận 10, TP.HCM
    • Cở sở 2: Khu đô thị Đại học Quốc Gia TP. HCM, Thành phố Thủ Đức, TP.HCM
  • Điện thoại: 028 3864 7256
  • Website: https://www.hcmut.edu.vn/

Có thể bạn quan tâm: Top 7 trường ĐH đào tạo Công nghệ thông tin tốt nhất tại TP.HCM

Trường Đại học Khoa học tự nhiên – Đại học Quốc gia TP.HCM


trường đại học đào tạo công nghệ thông tin tốt nhất - Đại học Khoa học tự nhiên - Đại học Quốc gia TP.HCM

Được tách ra từ Đại học Tổng hợp TP. HCM từ năm 1996, Đại học Khoa tự nhiên TP.HCM (HCMUS) là đơn vị hàng đầu trong việc nghiên cứu và phát triển lĩnh vực Công nghệ thông tin.

Xem thêm Tuyển dụng IT TPHCM

Với Khoa Công nghệ thông tin và các ngành liên quan như Khoa toán tin, các sinh viên của trường sẽ luôn được trang bị vốn kiến thức vững chắc cũng như được rèn luyện khả năng tư duy phân tích dựa trên chương trình bài bản và chuyên sâu. Trải qua hơn 25 năm hoạt động, Khoa đã phát triển vững chắc và được Chính phủ bảo trợ để trở thành một trong những khoa CNTT đầu ngành trong hệ thống giáo dục đại học của Việt Nam.

Cũng giống như các trường CNTT hàng đầu, trường cũng được tài trợ khá nhiều bởi các doanh nghiệp và tập đoàn lớn bên cạnh các chuyên gia quốc tế đến để trực tiếp đánh giá nên chất lượng các chương trình học luôn thuộc hạng tiên tiến nhất trong khu vực.

Ngoài ra khi học tại Đại học Khoa học tự nhiên, bạn sẽ luôn tìm thấy những sân chơi bổ ích để nâng cao năng lực và bản lĩnh của mình qua các cuộc thi về CNTT trong và ngoài nước.

Nếu bạn muốn theo học các chuyên ngành hot nhất của Công nghệ thông tin như trí tuệ nhân tạo AI, nghiên cứu chế tạo robot, lập trình điều khiển tự động hóa thì chắc chắn Đại học Khoa học tự nhiên sẽ là nơi rất tuyệt cho bạn.

Hiện nay, trường còn thành lập các phòng nghiên cứu chuyên về mảng Trí tuệ nhân tạo với AILab hay câu lạc bộ Robotics cực tiên tiến đảm bảo bạn sẽ có khoản thời gian đầy thú vị khi tham gia bên cạnh những giờ học tập.

Điểm chuẩn tham khảo 2023: 26 – 28.05 điểm tùy thuộc vào chuyên ngành và chương trình đào tạo

Học phí tham khảo: 20 – 50 triệu đồng/năm

Thông tin liên hệ:

  • Địa chỉ:
    • Cơ sở 1: 227 Nguyễn Văn Cừ, Phường 4, Quận 5, TP.HCM
    • Cơ sở 2: Linh Xuân, Phường Linh Trung, Quận Thủ Đức, TP.HCM
  • Điện thoại: (028) 62884499
  • Website: https://www.hcmus.edu.vn/

Học viện Công nghệ Bưu chính Viễn thông

IT học trường nào? Học viện Công nghệ Bưu chính Viễn thông
IT học trường nào? Học viện Công nghệ Bưu chính Viễn thông

Học viện Bưu chính viễn thông được thành lập từ năm 1997, là một trong các trường có ngành công nghệ thông tin đáng cân nhắc và lựa chọn, hiện trường có 3 cơ sở tại Hà Nội, TP. HCM và Thái Nguyên.

Với đội ngũ giảng viên nhiều năm kinh nghiệm thực tế tại học viện, bạn sẽ được đào tạo một cách bài bản. Tuyệt vời hơn, hệ thống mạng lưới viễn thông và công nghệ thông tin phủ sóng cả nước của VNPT là môi trường hoàn hảo cho các hoạt động đào tạo và khoa học công nghệ gắn liền với thực tiễn với các giáo viên giảng dạy và sẽ truyền đạt cho các bạn những bài học thực tế.

Học viện Công nghệ Bưu chính Viễn thông
Samsung Lab được đánh giá là một trong những phòng Lab xịn nhất Học viện.

Danh tiếng của Học viện Bưu chính viễn thông cũng được nhiều người biết đến khi các tân cử nhân luôn được đánh giá cao và bạn sẽ có nhiều cơ hội xin việc khi ra trường. Do đó điểm chuẩn của trường cũng khá cao. Năm 2022, khu vực phía Bắc của trường lấy điểm chuẩn ngành Công nghệ thông tin là 27.25, An toàn thông tin là 26.70. Ở khu vực phía Nam năm 2022, ngành Công nghệ thông tin lấy 25.85 điểm, An toàn thông tin lấy 25.05 điểm.

Nếu bạn có thành tích học tập khá và có đam mê với các ngành nghề liên quan với Công nghệ thông tin, đây sẽ là nơi để bạn yên tâm phát triển cho tương lai vững chắc của mình.

Thông tin liên hệ:

  • Địa chỉ:
    • Trụ sở chính: 122 Hoàng Quốc Việt, Q.Cầu Giấy, Hà Nội.
    • Học viện cơ sở tại TP.HCM: 11 Nguyễn Đình Chiểu, P. Đa Kao, Q.1 TP Hồ Chí Minh
    • Cơ sở đào tạo tại TP.HCM: Đường Man Thiện, P. Hiệp Phú, Q.9 TP Hồ Chí Minh
    • Cơ sở đào tạo tại Hà Nội: Km10, Đường Nguyễn Trãi, Q.Hà Đông, Hà Nội
  • Điện thoại: 024 3756 2186
  • Website: https://portal.ptit.edu.vn/

Đại Học FPT

ĐH FPT TP HCM là một trong những công trình có kiến trúc xanh bậc nhất Sài Thành
ĐH FPT TP HCM là một trong những công trình có kiến trúc xanh bậc nhất Sài Thành

Nhận giải thưởng trường Đại học đào tạo Công nghệ Thông tin xuất sắc tại Châu Á năm 2018 do ASOCIO Award trao tặng, đại học FPT đã nhanh chóng trở thành 1 trong những nơi hàng đầu về giảng dạy ngành Công nghệ Thông tin khi chỉ mới được thành lập hơn 10 năm.

Ngoài việc được các giảng viên giàu kinh nghiệm & chuyên gia từ các doanh nghiệp trong lĩnh vực trực tiếp giảng dạy, các bạn sinh viên còn có nhiều cơ hội được đi xuất ngoại để tham gia các thực tập nước ngoài (On-The-Job Training hay OJT) rất hữu ích. Các bạn còn được đào tạo kỹ về ngoại ngữ từ rất sớm để có thể làm việc ở những công ty nước ngoài.

Thêm nữa, toàn bộ sinh viên sẽ được thực tập ngay tại doanh nghiệp để cọ xát. Tốt nghiệp xong, bạn còn có thể làm việc luôn tại các công ty của tập đoàn FPT như FPT Software chẳng hạn.

Nếu bạn muốn theo chuyên ngành Kỹ thuật phần mềm, Hệ thống thông tin, Trí tuệ nhân tạo AI, An toàn thông tin, Internet of Things hay Thiết kế mỹ thuật số, FPT rõ ràng là 1 lựa chọn rất thích hợp.

Đặc biệt, bên cạnh các hình thức xét tuyển truyền thống, FPT còn đưa ra hình thức xét kết quả xếp hạng học sinh THTP dựa vào xếp hạng SchoolRank (công cụ xếp hạng năng lực học tập của học sinh THPT toàn quốc do Đại học FPT xây dựng và phát triển). Theo đó, điểm chuẩn của Đại học FPT là TOP40 Schoolrank theo học bạ (40% học sinh THPT có năng lực học tập tốt nhất cả nước) và TOP40 Schoolrank theo điểm thi THPT (40% học sinh có kết quả thi Đại học tốt nhất cả nước).

Địa chỉ:

  • Cơ sở Hà Nội: Khu Giáo dục và Đào tạo – Khu Công nghệ cao Hòa Lạc – Km29 Đại lộ Thăng Long, H. Thạch Thất, TP. Hà Nội
  • Cơ sở TP. HCM: Lô E2a-7, Đường D1 Khu Công nghệ cao, P. Long Thạnh Mỹ, TP. Thủ Đức, TP. Hồ Chí Minh
  • Cơ sở Đà Nẵng: Khu đô thị công nghệ FPT Đà Nẵng, P. Hoà Hải, Q. Ngũ Hành Sơn, TP. Đà Nẵng
  • Cơ sở CẦN THƠ: Số 600 Đường Nguyễn Văn Cừ (nối dài), P. An Bình, Q. Ninh Kiều, TP. Cần Thơ
  • Cơ sở QUY NHƠN: Khu đô thị mới An Phú Thịnh, Phường Nhơn Bình & Phường Đống Đa, TP. Quy Nhơn, Bình Định

Website: https://daihoc.fpt.edu.vn/

Học viện Kỹ thuật Quân sự (Đại học Kỹ thuật Lê Quý Đôn)


trường đại học đào tạo công nghệ thông tin tốt nhất - đại học kỹ thuật quân sự

Giống như Đại học Bách Khoa Hà Nội, đại học Kỹ thuật quân sự cũng đào tạo với hệ 4 và 5 năm, được đánh giá cao trong top đầu cả nước, đảm bảo khi tốt nghiệp sẽ có việc làm và mức lương cao.

Đại học Kỹ thuật Lê Quý Đôn là viện đại học kỹ thuật tổng hợp, đa ngành, đa lĩnh vực trực thuộc Bộ Quốc phòng Việt Nam. Sứ mạng của nhà trường là đào tạo nguồn nhân lực chất lượng cao, nghiên cứu phát triển, sản xuất chế thử, chuyển giao công nghệ tiên tiến và hội nhập quốc tế, góp phần đắc lực vào sự nghiệp xây dựng và bảo vệ Tổ quốc, phát triển ngành khoa học công nghệ quân sự Việt Nam.

Phòng huấn luyện thực hành bộ môn An toàn thông tin.
Phòng huấn luyện thực hành bộ môn An toàn thông tin.

Đội ngũ giảng viên của trường cũng rất hùng hậu với nhiều phó giáo sư và tiến sĩ, chương trình giảng dạy các chuyên ngành Công nghệ thông tin được trường sử dụng cũng theo chuẩn kiểm định quốc tế, các bạn có thể yên tâm học tập những kiến thức thiết  thực để yên tâm đi làm khi ra trường.

Trong Cuộc đua số 2017 do FPT tổ chức cho sinh viên các trường Công nghệ thông tin toàn quốc, Học viện còn giành chức vô địch khẳng định chất lượng giảng dạy rất tốt, ngang ngửa với trường Đại học Bách Khoa về việc đào tạo.

Thông tin liên hệ:

  • Địa chỉ : 236 Hoàng Quốc Việt, Bắc Từ Liêm, Hà Nội
  • Điện thoại: 069.515200
  • Website: https://mta.edu.vn/

Đại học Công Nghệ (UET) – Đại Học Quốc Gia Hà Nội

trường đại học đào tạo công nghệ thông tin tốt nhất - Đại học Công Nghệ - Đại Học Quốc Gia Hà Nội

Đại học Công nghệ dù chỉ mới được thành lập vào năm 2004 nhưng sớm đã trở thành 1 trong những trường đại học công nghệ thông tin Hà Nội hàng đầu tại Việt Nam về công tác đào tạo , nghiên cứu về công nghệ, kỹ thuật hàng đầu cả nước và từng bước tiếp cận chuẩn mực quốc tế. 

Các bạn học tập tại Đại học Công nghệ có thể khá là yên tâm cho tương lai sự nghiệp của mình. Trường đang hợp tác với nhiều trường, viện nghiên cứu lớn trên thế giới giúp các chương trình đào tạo cũng như hỗ trợ phát triển đội ngũ giảng dạy chất lượng cao: Đại học Bang Arizona, Mỹ với dự án BUIL-IT; Đại học Công nghệ Sydney, Úc với  Trung tâm Hợp tác nghiên cứu giữa VNU-UTS, chương trình học bổng toàn phần cho nghiên cứu sinh đạt trình độ quốc tế; Chương trình đào tạo IT định hướng thị trường Nhật Bản; Viện nghiên cứu Viettel với chương trình Cử nhân Hàng không Vũ trụ…

Đại học Công nghệ cũng là nơi có nhiều học bổng khuyến khích học tập bởi trường là đối tác tin cậy của những tập đoàn lớn như Samsung, Toshiba,… đó là nguồn động lực không nhỏ để thúc đẩy các bạn sinh viên nỗ lực hết mình, cũng là phấn đấu cho tương lai phía trước.

Ngoài ra việc hợp tác với các doanh nghiệp như Samsung, Viettel, FPT, Toshiba, VNPT cũng giúp các phòng thực hành đặt tiêu chuẩn, phòng nghiên cứu hợp tác về IoT, thiết kế vi mạch, hệ thống nhúng…

Điểm trúng tuyển ngành Công nghệ thông tin những năm gần đây ngày càng tăng. Năm 2022 và 2023, điểm chuẩn ngành Công nghệ thông tin lần lượt là 29.15 và 27.85 nên đây chắc chắn cũng là 1 thách thức không nhỏ cho các bạn học sinh có mong muốn được theo học tại trường.

Thông tin liên hệ:

  • Địa chỉ: E3, 144 Xuân Thủy, Cầu Giấy, Hà Nội
  • Điện thoại: 024.37547.461
  • Website: https://uet.vnu.edu.vn/

Học phí năm 2023: 851 000 đồng/tín chỉ

196 Việc làm IT Fresher, sinh viên IT cho bạn

Trường Đại học Quản lý và Công nghệ TP.HCM

Trường Đại học Quản lý và Công nghệ TP.HCM

Trường Đại học Quản lý và Công nghệ TP.HCM (UMT) được Chính phủ cho phép thành lập vào tháng 3/2021 và đặt mục tiêu trở thành một hình mẫu đại học kiểu mới, chuẩn quốc tế, và biểu tượng của giáo dục đại học mang thông điệp “Hạnh phúc và Thành công”. Trong tầm nhìn đó, UMT tập trung đặt sinh viên lên hàng đầu và vượt ra khỏi giới hạn của giảng đường hay những thành công chỉ đo bằng điểm số. Trường đáp ứng hầu hết các mong muốn chọn trường đại học của thế hệ trẻ bằng môi trường giáo dục cởi mở, kết nối toàn cầu, thực tế năng động, trải nghiệm thú vị, tôn trọng sự khác biệt, cơ sở vật chất hiện đại và tương lai tươi sáng.

UMT có sáu ngành đào tạo chủ lực, trong đó Công nghệ thông tin là một ngành rất quan trọng. Khoa Công nghệ thông tin được dẫn dắt bởi PGS. TS. Trần Đan Thư – một nhà giáo ưu tú có nhiều kinh nghiệm trong lĩnh vực công nghệ từ khi còn trên giảng đường đại học. Với sự dẫn dắt của PGS. TS. Trần Đan Thư, Khoa Công nghệ thông tin tại UMT trở thành gương mặt sáng giá trong top các trường đào tạo ngành công nghệ thông tin tốt nhất hiện nay.

Hội trường UMT với sức chứa gần 500 người, được đầu tư âm thanh ánh sáng, sân khấu chuyên nghiệp.
Hội trường UMT với sức chứa gần 500 người, được đầu tư âm thanh ánh sáng, sân khấu chuyên nghiệp.

Chương trình Công nghệ thông tin của UMT được tối ưu hóa cho từng sinh viên trong quá trình học, đảm bảo đào tạo chuẩn xác, thành công và chất lượng tốt nhất. Khoa CNTT đáp ứng yêu cầu về nghiên cứu phát triển cũng như ứng dụng công nghệ thông tin trong thực tiễn. Sinh viên được trang bị kiến thức và kỹ năng cần thiết để làm việc trong môi trường công nghệ thông tin đa dạng và thúc đẩy sự phát triển bền vững của ngành này.

Năm nay, UTM tuyển sinh với 4 hình thức là: Xét học bạ THPT; Xét tuyển thẳng theo quy định của trường; Xét kết quả thi đánh giá năng lực của ĐHQGHCM năm 2023; Xét tuyển thẳng theo quy chế tuyển sinh của Bộ Giáo dục và Đào tạo.

Thông tin liên hệ:

  • Địa chỉ: Đường 60CL, Khu đô thị Cát Lái, Phường Cát Lái, TP. Thủ Đức, TP.HCM
  • Điện thoại: +84 28 3636 9119
  • Website: https://www.umt.edu.vn/

Lời Kết

Trên đây là một số thông tin về các trường đại học có ngành công nghệ thông tin và có được đánh giá tốt nhất hiện nay. Tuy nhiên, vẫn còn rất nhiều các đơn vị đào tạo IT khác đang ngày càng đổi mới công nghệ và chất lượng giảng dạy, mang đến nhiều sự lựa chọn cho các bạn học sinh mong muốn theo lĩnh vực này.

Ngoài các trường đại học, các bạn cũng có thể theo học tập ở các trường cao đẳng hay trung tâm dạy nghề, tùy vào năng lực và khả năng của mình. Có rất nhiều con đường để thành công trên sự nghiệp, chỉ cần siêng năng, chăm chỉ và luôn cập nhật những cái mới trong thời đại công nghệ, chắc chắn sớm hay muộn các bạn cũng sẽ đạt được thành tựu cho riêng mình.

Hy vọng qua bài viết trên sẽ giúp các bạn tham khảo về các trường đại học đào tạo CNTT tốt và phù hợp với bản thân. Chúc các bạn lập trình viên tương lai có 1 kết quả thi thật tốt và sớm đạt được nhiều thành tựu nhé!

Bạn cũng có thể tham khảo các vị trí tuyển dụng IT Parttime, Việc làm IT Intern cho các sinh viên đang muốn học hỏi nâng cao trình độ thực chiến ngành Dev tại đây. Hoặc vào web TopDev, tìm các vị trí cho sinh viên đều có hết nhé!

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

Xem thêm việc làm ngành IT hấp dẫn tại TopDev

Điều gì khiến Bun.sh trở nên đáng gờm với Node.js

Bun.sh quá nhanh! Liệu có thể thay thế được Node.js hay không?

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Node.js nổi tiếng với vai trò là môi trường chạy mã Javascript trên máy chủ. Nhắc đến Node không thể không nhắc đến V8 Engine cho khả năng xử lý JS mạnh mẽ, cộng với sức mạnh của C++ vốn là ngôn ngữ tạo nên nó. Node.js được cung cấp miễn phí, dễ dàng cài đặt và triển khai. Cộng đồng dùng Node rất đông cũng góp phần tạo nên sự nổi tiếng và tin tưởng.

Tuy nhiên gần đây một cái tên khác nổi lên như một hiện tượng “đe doạ” đến Node.js chính là Bun.sh. Vậy thì Bun.sh là gì và tại sao lại khiến Node.js phải dè chừng thì mời các bạn hãy đọc tiếp bài viết dưới đây.

Bun.sh là gì?

Trước tiên phải nói rằng Bun.sh cũng chính là môi trường chạy mã Javascript tương tự như Node.js. Mục tiêu của Bun là chạy được hầu hết mã JavaScript “bên ngoài trình duyệt”, mang lại những cải tiến về hiệu suất và độ phức tạp cho cơ sở hạ tầng tương lai, cũng như năng suất của các nhà phát triển thông qua một công cụ tốt hơn, đơn giản hơn.

  Bạn có suy nghĩ như thế nào khi tôi nói rằng Node.js rất nhanh?

Bun.sh có gì mới và khác biệt so với Node.js?

Bun.sh không sử dụng V8 làm Javascript Engine như Node mà nó dùng JavascriptCore vốn là Engine của trình duyệt Safari. Ngoài ra Bun được viết bằng Ziglang mà họ giới thiệu là một ngôn ngữ bậc thấp (low-level) với quản lý bộ nhớ thủ công. Điều này giúp cho chi phí sử dụng tài nguyên của Bun thấp và hiệu năng cũng tăng thêm đáng kể.

Bun.sh triển khai lại hầu hết các thứ như trình biên dịch JSX/TypeScript, npm client, bundler, SQLite client, HTTP client, WebSocket client… Và tất cả đều là cây nhà lá vườn do họ tự tay phát triển.

Ngoài ra Bun cũng triển khai thuật toán phân giải modules của Node bao gồm cả node_modules nên bạn có thể cài đặt và sử dụng các gói có trên npm giống như Node. ESM và CommonJS đều được hỗ trợ tuy nhiên Bun sử dụng ESM làm mặc định.

Bun triển khai đến 90% các API của Node (N-API) nên hầu như các module hoặc native module viết cho Node đều sẽ hoạt động với nó.

Xem thêm việc làm Node.js developer hấp dẫn nhất tại TopDev

Tại sao Bun.sh đáng gờm so với Node.js

Bun trở nên đáng gờm bởi tốc độ. Ngoài việc tận dụng được hầu hết các tính năng giống như của Node nên Bun giúp bạn gần như có thể chạy được hầu hết ứng dụng viết bằng Node, nhưng Bun còn cho tốc độ tốt hơn cả.

Theo lời nhà phát triển Bun, sử dụng lệnh bun run thay cho npm run sẽ tiết kiệm được 160ms cho mỗi lần chạy. bun install cũng nhanh hơn 20x lần so với yarm là do Bun sử dụng “the fastest system calls” mà họ tự triển khai.

  Xử lý ERROR trong NodeJS sao cho đúng?

Bun.sh benchmarks

Ngoài ra là một vài hình ảnh Benchmarks so sánh tốc độ HTTP request Bun với hai môi trường chạy mã JS thông dụng là Node và Deno thì nó cũng cho con số ấn tượng.

Điều hạn chế của Bun đó là một công cụ mới đang còn trong giai đoạn phát triển, chưa có bản phát hành ổn định nên việc sử dụng Bun trong môi trường Production là hoàn toàn có thể xảy ra rủi ro. Tuy nhiên với những lợi ích mà Bun mang lại thì nó rất đáng giá để trải nghiệm. Hãy thử dùng Bun biết đâu bạn sẽ lưu được thêm một công cụ đáng giá cho mình thì sao?

Kết luận

Tuy là một công cụ mới tuy nhiên Bun.sh đã và đang gây sự chú ý trong cộng đồng phát triển Node.js. Hy vọng rằng vào một ngày không xa Bun sẽ phát hành phiên bản ổn định, đồng thời giữ vững tốc độ này thậm chí là hơn nữa để cộng đồng ngày càng lớn mạnh hơn.

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

Xem thêm Top Việc làm Developer trên TopDev

Nên học Front-end hay Back-end? Sự khác biệt là gì?

Nên học Front-end hay Back-end? Sự khác biệt là gì?

Với những bạn đang chập chững bước vào nghề lập trình, việc lựa chọn học Front-End hay Back-End là một quyết định khó khăn. Bởi mỗi lựa chọn khác nhau sẽ dẫn đến những thứ cần học khác nhau. Vì vậy, bạn phải hiểu rõ hai lĩnh vực này để xem thử đâu là thứ mình phù hợp nhất rồi mới đưa ra quyết định chính xác. Bài viết này sẽ tổng hợp những thông tin bạn cần về Front-End và Back-End, giúp làm sáng tỏ những thắc mắc của bạn.

Front-end là gì? Back-end là gì?

Front-end là gì?

Front-end là một lĩnh vực trong phát triển web tập trung vào giao diện người dùng. Nhiệm vụ chính của front-end là tạo ra các trang web hấp dẫn, đảm bảo trải nghiệm tốt cho người dùng. Lập trình Front-end sẽ sử dụng các ngôn ngữ như HTML, CSSJavaScript để xây dựng và tối ưu hóa các thành phần như layout, hình ảnh, màu sắc và hiệu ứng. Front-end đóng vai trò quan trọng trong việc đem lại giao diện thân thiện và hấp dẫn cho người dùng.

Trong lập trình Front-end, có nhiều framework phổ biến được sử dụng để tăng cường hiệu suất và hiệu quả trong quá trình phát triển. Đây là một số framework thường được sử dụng: ReactJS, Angular, VueJS, jQuery, EmberJS,… Bên cạnh đó, bạn cần phải biết một số kỹ năng về thiết kế đồ họa, UI/UX, cách thiết kế giao diện responsive,…

Front-end là gì? Back-end là gì?

Back-end là gì?

Back-end là một phần quan trọng trong phát triển web, chịu trách nhiệm xử lý 3 nhóm công việc chính là tương tác với cơ sở dữ liệu, xử lý dữ liệu và giải quyết các vấn đề liên quan đến sever. Bên cạnh đó, back-end đảm bảo việc tương tác xử lý dữ liệu và tạo ra API để giao tiếp với front-end. Nó đóng vai trò quan trọng trong việc xây dựng ứng dụng web chất lượng và bảo mật. Một lập trình viên Back-end có thể sẽ làm việc với các ngôn ngữ như PHP, Python, Ruby, Node.js và cơ sở dữ liệu như MySQL, MongoDB.

Ngoài ra, để thực hiện tốt công việc backend, bạn cần có kiến thức về các framework như Django, ASP.NET MVC, Spring,… Kiến thức về một số CMS như WordPress, Umbraco, Joomla,…

  Tiêu chuẩn Coding Backend hiệu quả là gì

  Những projects giúp nâng hạng Front-end Developer

Lập trình Front-end hay Back-end sẽ phù hợp với bạn?

Bạn phù hợp với lập trình Backend hơn hay Frontend, đây là một câu hỏi rất khó để trả lời. Mỗi lĩnh vực này đều có những đặc điểm riêng và cung cấp những cơ hội phát triển đáng giá. Dưới đây là một số khía cạnh cần được xem xét giúp bạn đưa r quyết định chính xác hơn.

Xem xét mục tiêu và định hướng của bản thân

Xem xét mục tiêu và định hướng của bản thân

Để xác định rõ liệu nên học lập trình Frontend hay Backend, hãy cân nhắc theo đam mê và sở thích của bạn, và nhận biết thế mạnh của bản thân để chọn lĩnh vực phù hợp.

Nếu bạn là một lập trình viên mới tốt nghiệp, Frontend là lựa chọn hợp lý để bắt đầu. Lĩnh vực này đơn giản hơn, dễ bắt đầu và có thể làm việc hiệu quả mà không gặp quá nhiều khó khăn. Bạn có thể bắt đầu từ HTML và CSS để xây dựng một trang web tĩnh đơn giản, sau đó học thêm JavaScript hoặc các framework như jQuery để làm cho trang web tương tác hơn.

Sau khi bạn đã có nền tảng kiến thức cơ bản về Frontend, bạn có thể học các ngôn ngữ lập trình Backend hoặc học Fullstack như PHP, .NET hoặc Java. Điều này sẽ giúp bạn xây dựng và quản lý hệ thống phức tạp, xử lý dữ liệu và cung cấp các chức năng mạnh mẽ cho ứng dụng web của bạn.

Cân nhắc về thu nhập của Front-end và Back-end

Cân nhắc về thu nhập của Front-end và Back-end

Theo báo cáo thị trường IT Việt Nam của TopDev 2022, mức thu nhập của lập trình viên back-end khá chênh lệch so với front-end. Cụ thể lập trình viên front-end 3 năm kinh nghiệm có mức lương khoảng 954 USD/tháng, trong khi đó lập trình viên back-end có mức lương đến 1.338 USD/tháng.

Sự chênh lệch về mức lương này là do tính chất công việc của back-end có độ phức tạp hơn hẳn so với front-end. Vậy nên, bạn có thể cân nhắc lựa chọn học Back-end hoặc Full-stack để nhận được mức thu nhập cao sau này.

Front-end và Back-end, cái nào dễ tìm việc hơn?

Nhìn tổng thể, Back-end có thể sẽ có lợi thế hơn trên thị trường bởi yếu tố phức tạp trong công việc, nhiều doanh nghiệp sẵn sàng bỏ ra mức lương cao để chiêu mộ nhân tài. Thêm nữa, lập trình viên back-end yêu cầu phải biết đa dạng các ngôn ngữ lập trình cộng thêm các framework như React, Regular nên cơ hội việc làm sẽ rộng mở hơn.

Tuy nhiên, trong một số trường hợp, việc tìm việc Frontend có thể dễ dàng hơn. Frontend đóng vai trò quan trọng trong trải nghiệm người dùng, do đó, có nhiều công ty và dự án đang tìm kiếm các chuyên gia Frontend để cải thiện giao diện và khả năng tương tác với người dùng cuối.

Điều quan trọng là trang bị cho mình kỹ năng và kiến thức chuyên môn vững vàng trong lĩnh vực mà bạn lựa chọn. Có một portflio hay dự án thực tế sẽ tăng khả năng tìm việc thành công. Ngoài ra, theo dõi xu hướng công nghệ mới và làm việc với các công nghệ phổ biến cũng là yếu tố quan trọng để tăng cơ hội tìm việc trong lĩnh vực Frontend hoặc Backend.

Tóm lại

Việc lựa chọn nên học front-end hay back-end không chỉ dựa trên tiêu chí dễ tìm việc mà còn phụ thuộc vào mục tiêu và đam mê cá nhân. Cả hai lĩnh vực đều có cơ hội việc làm tốt như nhau. Quan trọng nhất là chọn lĩnh vực phù hợp với sở thích và mục tiêu phát triển của bạn sau này. Hãy duy trì đam mê, sẵn sàng học hỏi và luôn nỗ lực để phát triển kỹ năng và thành công trong ngành công nghệ thông tin.

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

Xem thêm các vị trí Front End Jobs hot nhất trên TopDev

Xcode là gì? Các tips sử dụng Xcode hiệu quả cho lập trình viên

Xcode là gì? Các tips sử dụng Xcode hiệu quả cho lập trình viên

Lập trình viên làm việc trên hệ sinh thái của Apple chắc hẳn không còn xa lạ gì với Xcode, một IDE với đầy đủ các SDK độc quyền dành cho việc xây dựng, phát triển ứng dụng dành cho iPhone, Macbook, iMac, Apple Watch,… Mới đây thì phiên bản mới Xcode 15 được Apple cho ra mắt version beta 2 với nhiều cải tiến nâng cấp đáng giá; bài viết hôm nay chúng ta cùng nhau tìm hiểu về IDE này cũng như một số tips giúp anh em Dev sử dụng Xcode một cách hiệu quả nhất nhé.

Xcode là gì?

Xcode là một IDE (Integrated Development Environment) hay môi trường phát triển tích hợp của Apple được sử dụng để phát triển phần mềm cho macOS, iOS, iPadOS, watchOS và tvOS. Xcode được Apple phát hành vào năm 2003, trải qua hơn 20 năm phát triển, phiên bản mới nhất hiện nay là 15.0 beta 2 được Apple giới thiệu vào 21/6/2023 (phiên bản ổn định chính thức là 14.3.1 phát hành ngày 1/6/2023).

Xcode là gì?

Xcode là một ứng dụng chứa các chương trình cơ bản cho phép người dùng dễ dàng tùy chỉnh để phù hợp với các công việc của mình như trình soạn thảo, trình biên dịch, tài liệu lập trình, công cu tạo máy ảo,… hỗ trợ cho việc phát triển các ứng dụng được thực hiện mạnh mẽ và hiệu quả nhất. Apple cung cấp Xcode hoàn toàn miễn phí thông qua AppStore hoặc bạn cũng có thể tải xuống các phiên bản cũ hơn thông qua website https://xcodereleases.com/

  Cách làm việc với Storyboard trong Xcode

  Tạo thư viện bằng Swift Package Manager trong Xcode

Tính năng chính của Xcode

Xcode hỗ trợ nhiều ngôn ngữ lập trình khác nhau như C, C++, Objective-C, Objective-C++, Java, AppleScript, Python, Ruby, ResEdit (Rez) và Swift với nhiều mô hình lập trình khác nhau như Cocoa, Cacbon hay Java. Xcode có thể xây dựng các files nhị phân chứa mã cho nhiều kiến trúc với định dạng Mach-O gọi là universal binary files; nó giúp ứng dụng dễ dàng chuyển đổi từ PowerPC (kiến trúc máy tính Apple) 32-bit sang 64-bit, từ PowerPC sang Intel x86 (kiến trúc máy tính dòng vi xử lý Intel), từ Intel 32-bit sang 64-bit hay từ Intel x86 sang Apple SoC (kiến trúc trên các chip M1, M2 mới nhất của Apple).

Điều này giúp các nhà phát triển phân phối 1 ứng dụng duy nhất cho người dùng và cho phép hệ điều hành tự động chọn kiến trúc phù hợp khi chạy.

Xcode là gì?

Xcode sử dụng bộ công cụ phát triển phần mềm (SDK) iOS, SDK tvOS, SDK watchOS để biên dịch và gỡ lỗi (debug) ứng dụng cho các nền tảng hệ điều hành tương ứng. Nói cách khác, Xcode là công cụ đầy đủ và duy nhất cho việc phát triển ứng dụng cho toàn bộ hệ sinh thái của Apple.

Xcode cũng cung cấp các công cụ tích hợp hỗ trợ để quản lý source code sử dụng Git, có thể kết nối lưu trữ trên các hệ thống phổ biến như GitHub, Bitbucket hay GitLab; lập trình viên có thể sử dụng command-line (dòng lệnh) hoặc thao tác trực tiếp trên UI với các chức năng Xcode cung cấp sẵn cho việc pull, push code một cách nhanh chóng.

Xem thêm tuyển dụng iOS hấp dẫn trên TopDev

Có gì mới trong phiên bản Xcode 15

Xcode 15 được Apple cho ra mắt phiên bản beta 2 vào ngày 21/6/2023 vừa rồi với nhiều cải tiến đáng chú ý:

  • Dung lượng cài đặt của Xcode được tối ưu nhỏ hơn 50% trên Mac App Store
  • Cải tiến trình biên dịch (compiler) và trình liên kết mới (brand-new linker) được tối ưu hóa cho kiến trúc đa lõi của Apple SoC (Silicon)
  • Trình điều hướng dấu trang mới (Bookmark navigator) giúp bạn theo dõi các mốc trong source code của dự án
  • Tài liệu mô tả (Documentation) trong Xcode 15 được thiết kế lại đẹp mắt và có chế độ preview theo thời gian thực
  • Xcode Previews hỗ trợ macro Swift mới dễ sử dụng hơn và hoạt động trên cả SwiftUI, UIKit và AppKit
  • Cải thiện chế độ debug với việc output (đầu ra) sử dụng bảng điều khiển có cấu trúc

Các tips sử dụng Xcode hiệu quả

Những plugin hữu ích

  • Cocoapods Xcode: quản lý các thư viện được cài bằng cocoapods trong project
  • ColorSense: hỗ trợ chọn màu trong Xcode
  • RTImageAssets: tự động sinh ra các ảnh @2x, @1x từ ảnh @3x
  • GitDiff: công cụ hỗ trợ check source code thay đổi trong Git
  • Lin: hỗ trợ autocomplete cho NSLocalizedString
  • VVDocumenter-Xcode: giúp viết comment cho các function, class thuận tiện hơn

Phím tắt thông dụng

Ký hiệu phím: ⌘ (Command), (Shift), (Control), (Option), ← (Arrow Left)

  • Build project: + B
  • Chạy project: + R
  • Clean project: + + K
  • Mở nhanh 1 file: + + O
  • Thu gọn code (Code Folding): + + ←

Breakpoints

Breakpoints là một công cụ hỗ trợ được tích hợp trong Xcode để giúp chúng ta ngưng việc xử lý của chương trình tại một thời điểm. Việc tạm thời dừng xử lý giúp chúng ta có thể đánh giá, kiểm tra, đảm bảo code của chương trình chạy đúng, đồng thời hỗ trợ điều tra dấu vết của bug khi có lỗi xảy ra ngoài ý muốn; chúng ta gọi việc này là Debug.

Xcode là gì?

Bất kỳ đầu dòng nào của Xcode (khi đang mở file) đều có thể đặt breakpoint bằng cách click vào số dòng phía bên trái của khu vực code.

Snippet

Snippet là một tiện ích trong Xcode chứa danh sách các đoạn code có sẵn được Apple đưa vào hoặc do chính lập trình viên chúng ta thiết lập trong project để có thể kéo thả vào và sử dụng. Điều này giúp bạn vừa tiết kiệm được thời gian viết code, lại có thể chuẩn hóa được source code trong dự án một cách dễ dàng hơn.

Xcode là gì?

Kết bài

Như vậy chúng ta đã cùng nhau tìm hiểu về Xcode, những cập nhật mới trên phiên bản Xcode 15 sắp ra mắt cũng như một số gợi ý giúp bạn sử dụng, khai thác IDE này một cách hiệu quả nhất. Còn rất nhiều tính năng và công cụ hữu ích khác được tích hợp trong Xcode mà bạn nên tìm hiểu và khám phá trong quá trình lập trình và làm việc trong dự án. Hy vọng bài viết hữu ích dành cho bạn và hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

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

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

Đừng chỉ cứ code! Hãy dành thời gian khai phá tư duy lập trình

Đừng chỉ cứ code! Hãy dành thời gian khai phá tư duy lập trình

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Chúng ta chắc hẳn ai cũng mong muốn kĩ năng code của mình ngày một tốt hơn. Bằng cách học nhiều hơn, làm nhiều hơn để tích luỹ thêm nhiều kinh nghiệm trong xử lý vấn đề. Sau này khi đối mặt với một vấn đề cũ thì có thể giải quyết nó một cách dễ dàng, đơn giản vì khi đó chúng ta đã có kinh nghiệm xử lý chúng.

Nhiều người thường dựa vào số năm kinh nghiệm để đánh giá một người code giỏi hay không. Điều này cũng khá hợp lý trong trường hợp chúng ta có quá ít thời gian để tiếp xúc và đánh giá họ, hay cũng có khả năng là không đủ năng lực để đánh giá. Thực tế vẫn có những người ít tuổi hơn nhưng vẫn có khả năng xử lý vấn đề rất giỏi. Số năm kinh nghiệm lúc này cũng chỉ mang tính tham khảo vì không chắc chắn rằng cứ code lâu hơn sẽ giỏi hơn người code ít hơn.

Như Malcolm Gladwell đã viết trong cuốn sách “Những kẻ xuất chúng” của ông về “10.000 giờ là con số kỳ diệu của sự vĩ đại” tức là bạn sẽ trở nên thực sự giỏi một vấn đề nào đó khi làm việc với nó ít nhất 10.000 giờ. Đến nay con số 10.000 giờ vẫn còn đang gây nhiều tranh cãi, liệu cứ phải trải qua một mốc thời gian đã định thì bạn sẽ giỏi lên hay là còn cách nào khác để vượt qua nỗi ám ảnh của con số này không?

Tư duy lập trình là gì?

Đơn giản đó là cách giải quyết vấn đề bạn gặp phải một cách hiệu quả. Nhưng thế nào là hiệu quả? Điều đó phụ thuộc vào vốn kiến thức và kinh nghiệm của mỗi người.

Nếu cho bạn lựa chọn giữa 3 thứ dao, kéo và liềm để mở một gói Snack bạn sẽ chọn cái nào? Chắc chắn bạn sẽ chọn kéo vì bạn biết kéo là cách đơn giản nhất để mở gói. Nhưng liệu một đứa trẻ sẽ biết lựa chọn thứ tốt nhất trong số chúng? Về cơ bản deo, kéo hay liềm đều có thể mở được gói snack nhưng bạn đã quá rõ về chúng nên bạn biết cách để sử dụng chúng sao cho hiệu quả.

  5 cuốn sách hay dẫn lối tư duy phản biện

Quay về thế giới của lập trình viên, việc bạn biết cách áp dụng một công cụ, phương pháp… để giải quyết một vấn đề sao cho phù hợp và chính xác nhất đó chính là tư duy lập trình của bạn.

Có một sai lầm phổ biến của những người mới học code là chăm chút vào học (thuộc) mã mà không rèn luyện khả năng tư duy. Có rất nhiều ngôn ngữ mà mỗi ngôn ngữ có rất nhiều cú pháp khiến bạn không thể nhớ hết được. Nhưng khả năng tư duy lại tồn tại xuyên suốt trong các ngôn ngữ.

Để đạt được điều đó đòi hỏi bạn phải bỏ ra một cơ số giờ để tìm hiểu và thực hành hết tất cả kiến thức. Điều đó sẽ mang đến cho bạn tư duy lập trình. Con số 10.000 giờ kia chỉ mang tính tham khảo khi bạn biết mình nên tập trung vào đâu để đến đích nhanh nhất.

Những người có tư duy lập trình tốt thường sẽ có suy nghĩ về cách giải quyết một vấn đề khá giống nhau. Ai cũng từng là thực tập sinh và khi nghe những người có kinh nghiệm hơn nói chuyện với nhau về cách giải quyết một vấn đề nào đó, trông họ có vẻ trao đổi rất trơn tru nhưng mình lại chẳng hiểu gì cả, đơn giản vì bạn chưa đạt đến trình độ của họ để có tư duy lập trình đó.

  Bài học về kỹ năng giải quyết vấn đề - Hãy tư duy như một Lập trình viên!

Làm sao để rèn luyện tư duy lập trình?

tư duy lập trình

Lời khuyên: Cứ làm và làm cho đến khi bạn tìm ra được cách tốt nhất để giải quyết. Không bao giờ hài lòng với cách cách giải quyết vấn đề của bạn vì mỗi cách luôn luôn tồn tại những ưu nhược điểm khác nhau.

Để đạt được điều đó, chung quy có 4 bước để mô phỏng quá trình này đó là:

Hiểu

Đầu tiên bạn cần phải hiểu được chính xác yêu cầu là gì. Hầu hết các vấn đề khó là vì bạn chưa hiểu chúng. Vậy làm sao để bạn hiểu được? Hãy thử giải thích chúng, điều đó cũng góp phần hình thành nên phương pháp “vịt cao su” nổi tiếng. Mấu chốt của phương pháp là bạn giải thích vấn đề đó với vịt cao su, nếu hiệu quả bạn sẽ phát hiện ra những lỗ hổng trong kiến thức của bạn.

Vịt cao su là một phương pháp nổi tiếng trong ngành lập trình trên thế giới. Về cơ bản việc bạn giải thích cho vịt cao su cũng chính là cách để kiểm tra xem bạn có thực sự hiểu vấn đề, vì chỉ khi hiểu bạn mới có thể giải thích lại được. Hơn thế trong quá trình giải thích bạn sẽ nhận ra được nhiều vấn đề mới phát sinh để từ đó tìm ra cách giải quyết chúng.

Có một câu nói nổi tiếng trong trường hợp này là “Nếu bạn không thể giải thích điều gì đó bằng những thuật ngữ đơn giản, bạn thực sự không hiểu nó”. Khi nhận một yêu cầu hãy dành thời gian để “hiểu” chúng trước khi bắt tay vào làm. Đó cũng chính là nội dung của bước 2 dưới đây.

Lập kế hoạch

Đừng vội bắt tay vào code ngay lập tức mà hãy dành thời gian vạch ra cho mình một kế hoạch giải quyết vấn đề. Bạn có thể hiểu vấn đề nhưng nếu ghi ra từng bước giải quyết sẽ giúp bạn nhìn nhận vấn đề một cách rõ ràng hơn, có thể phát hiện ra được những trường hợp không ngờ tới.

Hãy lặp lại câu hỏi “Với đầu vào X, các bước cần thiết để trả về đầu ra Y là gì?” trong khi lên kế hoạch. Xác định được từng đầu vào với từng đầu ra đồng nghĩa với việc bạn biết mình đang cần gì để từ đó biết cách giải quyết chúng bằng cách nào.

Chia nhỏ vấn đề

Hãy chia nhỏ vấn đề càng bé càng tốt. Một vấn đề lớn nhìn qua có vẻ rất phức tạp nhưng khi chia nhỏ ra nó lại trở về những vấn đề đơn giản đến mức có khi bạn đã quá quen thuộc với chúng. Nếu chưa từng gặp một trong những vấn đề đó là một cơ hội cho bạn tìm hiểu.

Cuối cùng khi giải quyết được hết vấn đề nhỏ tự khắc vấn đề ban đầu sẽ được giải quyết. Hãy nhớ phương pháp chia để trị luôn hữu hiệu ở mọi mặt trong cuộc sống.

Bế tắc

Những vấn đề nhỏ ở trên có lúc bạn không hoàn toàn làm chủ được chúng. Đừng lo lắng, bất kì ai cũng từng gặp điều này. Sự khác biệt giữa người giải quyết vấn đề giỏi và người bình thường là tò mò về sự xuất hiện của lỗi hơn là khó chịu về chúng. Về cơ bản việc cần làm trong giai đoạn này là thực hành khả năng gỡ lỗi của bạn từ đó rút ra được kinh nghiệm khi đối mặt với những lỗi tương tự. Hiểu được bản chất của lỗi cũng là hiểu được cách tránh khỏi lỗi đó.

Giải quyết được bế tắc chưa phải là tất cả. Hãy áp dụng phương pháp “đánh giá quy lui” – Tức là lùi về bước trước đó xem có còn cách nào giúp bạn giải quyết được vấn đề nhanh hơn không? Kể cả khi bạn đã giải quyết được vấn đề thì hãy dành thời gian nhìn lại để đánh giá xem liệu chúng có thực sự hiệu quả? Có thể làm lại được gì để giúp giải quyết tốt hơn không.

Kết luận

Tư duy lập trình là thứ luôn tồn tại trong chúng ta. Bạn hoàn toàn có thể làm chủ được tư duy của mình bằng cách rèn luyện mỗi ngày. Hiểu được tầm quan trọng của tư duy lập trình giúp bạn tập trung hơn vào con đường phát triển bản thân và sự nghiệp sau này.

Bài viết gốc được đăng tải tại 2coffee.dev

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

ESLint là gì và cách dùng ESLint để phát hiện, sửa chữa mã cho dự án Javascript

Sử dụng ESLint để phát hiện, sửa chữa mã cho dự án Javascript

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Phát triển dự án là một quá trình dài không phải code một lần mà dùng mãi mãi được. Trong một dự án thời gian phát triển có khi chỉ chiếm một phần nhỏ so với thời gian kiểm thử và bảo trì (maintain) dự án.

Với một thời gian dài như vậy, dự án có nhiều khả năng phải luân chuyển nhân sự thường xuyên. Điều đó làm cho trong dự án có thể có rất nhiều người tham gia viết mã và mỗi người thì lại có một phong cách (style) viết mã riêng. Chúng ta không nên cấm tiệt điều đó, nhưng với những quy định về cú pháp như ngắt dòng, dấu móc, dấu chấm phẩy… thì hoàn toàn có thể tạo ra một quy định chung và yêu cầu mọi người tuân thủ.

ESLint là gì

ESLint là một công cụ phân tích tĩnh mã của bạn để nhanh chóng tìm ra sự cố. Nó được tích hợp vào hầu hết các trình soạn thảo văn bản và bạn có thể chạy ESLint như một phần của quy trình tích hợp liên tục (CI/CD) của mình.

Để làm được điều này ESLint có một tập hợp các quy tắc mà bạn sẽ cấu hình để phát hiện và ngăn chặn các đoạn mã vi phạm những quy tắc (rules). Hơn nữa ESLint còn có thể sửa chữa (fix) hay định dạng (format) lại chúng theo cấu hình tích hợp.

ESLint cung cấp extension cho các trình soạn mã khác nhau, bạn chỉ cần cài đặt extension của ESLint thì nó sẽ tự động thông báo lỗi realtime. Để xem danh sách các trình soạn mã hỗ trợ các bạn bấm vào ESLint Integrations.

  Setup Eslint và Prettier cho dự án React theo chuẩn coding style guide của Airbnb

  Code ví dụ typescript, cấu hình eslint với prettier

Cài đặt

Bạn có thể cài đặt ESLint thông qua npm ở dạng global.

$ npm i -g eslint

Sau đó chạy init để khởi tạo cấu hình ESLint cho project. Lưu ý là chạy init ở trong thư mục chứa project muốn sử dụng ESLint.

$ eslint --init

Khi chạy --init, ESLint sẽ hỏi bạn một số câu hỏi để tạo cấu hình phù hợp, bạn chỉ cần trả lời theo đúng những gì mà dự án đang sử dụng. Sau đó một file .eslintrc.js sẽ được tạo ra có chứa các cấu hình mà ESLint sẽ sử dụng cho dự án của bạn. (Lưu ý nếu bạn chọn cấu hình dưới dạng file json hoặc yaml thì ESLint sẽ tạo file cấu hình tương ứng).

Một cấu hình mặc định lúc --init ra sẽ trông như thế này:

module.exports = {
    "env": {
        "browser": true,
        "es2021": true
    },
    "extends": "eslint:recommended",
    "overrides": [
    ],
    "parserOptions": {
        "ecmaVersion": "latest",
        "sourceType": "module"
    },
    "rules": {
    }
}

Tham khảo việc làm ReactJS hấp dẫn trên TopDev!

Sử dụng cơ bản

Cú pháp cơ bản để bắt đầu chạy Lint là:

$ eslint [options] [file|dir|glob]*

Ví dụ chạy Lint cho file index.js

$ eslint index.js

ESLint sẽ tự động tìm tệp cấu hình .eslintrc trong dự án và Lint theo cấu hình đó. Bạn cũng có thể chỉ định tệp cấu hình cho ESLint thông qua dòng lệnh.

Giả sử tất cả mã của bạn nằm trong thư mục /src và bạn muốn chạy Lint toàn bộ dự án:

$ eslint src

Nhưng tôi chỉ cần chạy Lint với các tệp .js thôi và hãy bỏ qua các file trong thư mục src/dist:

$ eslint src --ignore-pattern 'src/dist' --ext .js

Còn nhiều lệnh CLI hữu ích khác nữa bạn đọc tham khảo tại trang tài liệu ESLint.

ESLint còn có thể tự động sửa lỗi vi phạm các rule bằng cách chạy --fix:

# Sửa lỗi nhưng không lưu lại
$ eslint src --fix-dry-run

# Sửa lỗi và lưu lại
$ eslint src --fix

ESLint Rule

Như tôi đã nói ESLint có một tập hợp các rule để bạn cấu hình cho dự án. Danh sách các rule có thể xem tại ESLint rule.

Để đặt một rule vào cấu hình rất đơn giản, hãy thêm một thuộc tính vào trong mục “rules” với value:

  • “off” hoặc 0 – tắt rule
  • “warn” hoặc 1 – bật rule ở chế độ warning
  • “error” hoặc 2 – bật rule ở chế độ báo lỗi

Ví dụ tôi muốn áp dụng rule no-extra-semi ở chế độ báo lỗi mỗi khi chạy Lint thì làm như sau.

...
    "rules": {
        "no-extra-semi": "error"
    }
...

Tham khảo tuyển dụng javascript lương cao trên TopDev

Các bộ quy tắc được khuyến nghị

ESLint đưa ra rất nhiều rule và việc lựa chọn áp dụng rule nào rule nào là cả một quá trình tốn thời gian lẫn công sức thế nên đã có khá nhiều những bộ quy tắc được ra đời.

Nổi tiếng nhất là 2 bộ quy tắc của Airbnb và Google.

Để sử dụng chúng rất đơn giản bạn chỉ cần chạy npm install dưới cấu hình package develop (–save-dev), sau đó khai báo tên của cấu hình muốn sử dụng trong file cấu hình ESLint.

...
    "extends": "google",
    // hoặc
    "extends": "airbnb",
...

Airbnb và Google có mô tả rõ cách sử dụng & các quy tắc mà họ áp dụng tại Airbnb Style hoặc Google Style.

Còn không bạn cũng có thể sử dụng bộ quy tắc do chính ESLint khuyến nghị bằng cách đặt "extends": "eslint:recommended".

Kết hợp với Githook

Đặt ra các quy tắc để tạo một style xuyên suốt trong dự án, vì thế bạn cần ngăn chặn những hành vi “push” code do vô tình hay cố ý hoặc quên chạy Lint. Bằng cách kết hợp với Githook bạn có thể ngăn chặn được những commit như thế.

Tổng kết

ESLint là một công cụ phân tích và sửa đổi mã Javascript hiệu quả, ESLint giúp cho code style của dự án bạn luôn được xuyên suốt. Việc áp dụng ESLint vào dự án hết sức đơn giản, ngoài ra còn có extension tích hợp cho nhiều trình Code Editor hay IDE để bạn có thể dễ dàng làm việc nữa.

Bài viết gốc được đăng tải tại 2coffee.dev

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

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

6 thư viện Machine Learning Javascript giúp học AI nhanh hơn

Học AI nhanh hơn với 6 thư viện Machine Learning Javascript

Bài viết được sự cho phép của tác giả Sơn Dương

Để học Machine Learning, chúng ta có rất nhiều cách, trong đó có một cách mà nhiều người đã áp dụng. Đó là tham khảo các thư viện Machine Learning mã nguồn mở, chạy thử và ứng dụng vào một bài toán thực tế.

Nói đến AI, Machine Learning, hầu hết mọi người đều được khuyên nên học Python. Nhưng vấn đề là mình lại chỉ thích mỗi Javascript. Thế là thử tìm trên Google, mình mới phát hiện ra mọi người dùng Javascript cho Machine learning cũng rất nhiều, không kém Python là mấy.

Trong thời gian gần đây, hệ sinh thái web đã có những tiến bộ rất lớn. Mặc dù, Javascript và NodeJS vẫn bị coi là có hiệu năng kém hơn so với Python và Java. Đặc biệt là các tác vụ nặng như Machine Learning. Tuy nhiên, Javascript lại có lợi thế là dễ học, dễ tiếp cận . Tất cả những gì bạn cần để chạy một dự án Javascript Machine Learning là một trình duyệt.

Hầu hết các thư viện Javascript dành cho Machine Learning đều khá mới và vẫn đang giai đoạn phát triển. Nhưng chúng rất đáng thử nghiệm và ứng dụng vào các bài toán thực tế của bạn.

Bài viết này, mình sẽ giới thiệu một số thư viện machine learning bằng Javascript, cũng như một số ứng dụng minh họa thú vị để bạn có thể tham khảo và giúp ích cho việc học Machine Learning trực quan hơn.

1. Brain

Brain là một thư viện JS cho phép bạn dễ dàng tạo mạng Nơron và sao đó trainning chúng để tạo ứng dụng AI/ML. Vì quá trình trainning chiếm rất nhiều tài nguyên máy tính, nên ưu tiên chạy thư viện trong NodeJS thay vì như một ứng dụng client chạy trên trình duyệt. Mặc dù, phiên bản trình duyệt (tải qua CDN) cũng có thể làm được.

thư viện Machine Learning Javascript giúp học AI nhanh hơn

Có một bản demo nhỏ trên trang web chính thức của nhà phát hành mà bạn có thể tham khảo.

  Deep Learning? Machine Learning? Học như thế nào?

  Quy trình 3 bước trong Machine Learning và hàm chi phí

2. Deep playground

Deep playgroud là một mô hình trực quan mạng Nơron được viết bằng TypeScript trên nền thư viện d3.js

thư viện Machine Learning Javascript giúp học AI nhanh hơn

Deep playgroud có giao diện UI đẹp mắt, cho phép bạn kiểm soát dữ liệu đầu vào, số lượng nơron, thuật toán sử dụng và nhiều số liệu khác để bạn “nhào nặn” cho ra kết quả cuối cùng như ý.

Ngoài ra, bạn còn rất nhiều code mẫu được nhà phát hành cung cấp để bạn có thể tham khảo và nhanh chóng biết cách sử dụng thư viện này.

Điểm cuối cùng là tài liệu chính thức của nhà phát hành cũng rất đầy đủ, nên bạn hoàn toàn có thể yên tâm mà nghiên cứu.

Xem thêm tuyển dụng Machine Learning hấp dẫn trên TopDev

3. FlappyLearning

Nghe tới tên Flappy khiến bạn liên tưởng ngay tới game “Flappy bird” đình đám một thời đúng không!? Bạn liên tưởng đúng rồi đấy. Bạn từng chơi dòng game này chưa? Điểm tối đa mà bạn đạt được là bao nhiêu? Bạn nghĩ sao nếu bạn có khả năng phản xạ như máy tính, chơi đạt tới hàng ngàn điểm trong game này?

thư viện Machine Learning Javascript giúp học AI nhanh hơn

FlappyLearning là một dự án machine learning bằng Javascript chỉ có 800 dòng code để tạo một thư viện machine learning và ứng dụng nó trong bản demo thứ vụ giúp học cách chơi FlappyLearning  như một nghệ sĩ điêu luyện.

Kỹ thuật AI được sử dụng trong thư viện này được gọi là Neuroevolution, và ứng dụng các thuật toán lấy cảm hứng từ các hệ thống thần kinh được tìm thấy trong tự nhiên, có khả năng tự học hỏi từ những thất bại hay thành công sau mỗi lần chơi.

Bản demo của thư viện này rất dễ chạy, chỉ cần mở index.html bằng trình duyệt và trải nghiệm.

4. Synaptic

Đây có lẽ là dự án được maintain tích cực nhất trong danh sách thư viện Machine learning này. Synaptic là một thư viện dành cho NodeJS và trình duyệt có kiến trúc agnostic, cho phép các nhà phát triển có thể xây dựng bất kỳ loại mạng nơron nào họ muốn.

thư viện Machine Learning Javascript giúp học AI nhanh hơn

Synaptic có một kiến trúc nơron được xây dựng sẵn, giúp bạn nhanh chóng có thể kiểm tra và so sánh các thuật toán machine learning khác nhau.

Về phần tài liệu hướng dẫn, Synaptic cũng khá đầy đủ , có nhiều guide khá chi tiết giúp bạn nhanh chóng hiểu được ý tưởng của Synaptic.

Tham khảo tuyển dụng javascript lương cao trên TopDev

5. Thing Translator

ThingTranslator là một giải pháp web cho phép điện thoại có thể nhận ra các đối tượng trong đời thực và đặt tên cho chúng bằng những ngôn ngữ khác nhau.

thư viện Machine Learning Javascript giúp học AI nhanh hơn

Ứng dụng được xây dựng hoàn toàn t rên công nghệ web và sử dụng hai API Machine learning của Goole:

  • Cloud Vision để nhận dạng hình ảnh
  • API translater để dịch kết quả ra các ngôn ngữ khác nhau

6. DeepForge

Phải nói, DeepForge tạo ra một môi trường phát triển deep learning rất thân thiện với developer. Nó cho phép bạn thiết kế mạng nơron bằng giao diện đồ họa, hỗ trợ các mô hình traning trên các máy tính từ xa (remote machines) và được tích sẵn các trình quản lý phiên bản như git, svn.

thư viện Machine Learning Javascript giúp học AI nhanh hơn

Dự án được xây dựng chạy trên trình duyệt và trong môi trường NodeJS + MongoDB, nên quá trình cài đặt rất quen thuộc với hầu hết các bạn web developer.

Tạm kết

Mặc dù hệ sinh thái dành cho machine learning bằng Javascript vẫn còn khá mới mẻ và còn cần thêm thời gian để cộng đồng phát triển thêm. Lời khuyên của mình là nên sử dụng những tài nguyên miễn phí ở trên như một bước đầu để đi vào thế giới machine learning đầy “mê hoặc”.

Bài viết gốc được đăng tải tại vntalking.com

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

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

Bạn có suy nghĩ như thế nào khi tôi nói rằng Node.js rất nhanh?

Bạn có suy nghĩ như thế nào khi tôi nói rằng Node.js rất nhanh?

Bài viết được sự cho phép của tác giả Tống Xuân Hoài

Vấn đề

Hãy thử hỏi một lập trình viên Node.js rằng điều gì bạn thích ở nền tảng bạn chọn, thì khả năng cao sẽ nhận được một câu trả lời mà trong đó có ý rằng “Node.js nhanh”. Và nếu hỏi tiếp tại sao nó nhanh thì có người sẽ nói do ngôn ngữ Javascript nhanh, do cơ chế bất đồng bộ, single thread, hay là do V8 Engine

Tất cả lý do trên có khả năng đúng trong một khía cạnh nào đó. Các cơ chế của Node.js dù thế nào đi nữa mục đích cuối cùng vẫn là tăng sức mạnh xử lý cho nó. Nhưng đó chỉ là trên lý thuyết của Node.js, thực tế không phải chỉ có Node.js mới triển khai những thứ như trên mà nhiều ngôn ngữ hay nền tảng khác đều đã triển khai, thậm chí còn triển khai một cách tốt hơn nữa.

Vậy thực hư nói Node.js “nhanh” là “nhanh” như thế nào? Bài viết này tôi xin trình bày quan điểm của tôi khi nói về vấn về “Node.js nhanh”.

Nhưng trước tiên, hãy dành thời gian xem qua các cơ chế mà mọi người hay nhắc đến để từ đó kết luận rằng nó nhanh nhé.

Single thread

Node.js sử dụng mô hình Single thread thông qua Event Loop để xử lý bất đồng bộ. Nhờ đó mà Node.js có thể xử lý nhiều yêu cầu cùng một lúc một cách dễ dàng.

Cho dễ hình dung, với những ngôn ngữ không theo mô hình Single thread như PHP. Mỗi một kết nối đến nó sẽ tạo ra một thread để xử lý. Rõ ràng máy chủ phải bỏ ra một phần chi phí (cost) tài nguyên như CPU, bộ nhớ cho mỗi thread được tạo. Hãy nghĩ xem điều gì xảy ra khi có nhiều yêu cầu được gửi đến?

Mô hình này mang lại một vài thế mạnh cho Node.js như giảm số luồng (thead) ít nhất có thể để giảm mức tiêu thụ tài nguyên của hệ thống nhưng vẫn đáp ứng được yêu cầu xử lý một lượng lớn yêu cầu đồng thời.

  Worker threads là gì? Bạn đã biết khi nào thì sử dụng Worker threads trong node.js chưa?

  Nguyên lý SOLID trong Node.js với TypeScript

Bất đồng bộ (I/O async)

Một ứng dụng web hiếm khi nào mà không cần dùng đến cơ sở dữ liệu. Chúng ta đều biết hành vi kết nối, truy vấn cơ sở dữ liệu là mất nhiều thời gian hơn so với những câu lệnh thông thường. Giả sử một endpoint trong API cần gọi một lệnh truy vấn và truy vấn tiêu tốn 2s để đưa ra kết quả, với mô hình Single thread của Node thì chẳng phải yêu cầu thứ hai phải đợi tối thiểu 2s rồi mới được xử lý tiếp hay sao? Tương tự cho yêu cầu thứ 3, thứ 4… sẽ gây nên một cấp số nhân về độ trễ???

Đừng lo lắng vì thế mạnh của Node.js là xử lý I/O không đồng bộ. Một số lượng nhất định các yêu cầu sẽ gần như được xử lý cùng lúc. Chỉ có điều Node.js sẽ lần lượt phản hồi kết quả cho từng yêu cầu, và việc này thường diễn ra rất nhanh chóng. Đối với PHP vì các thread là độc lập nên chúng có thể thoải mái trả về kết quả cùng một lúc.

V8 Engine

Nhắc đến Node, không thể bỏ qua V8 Engine. Công cụ này là trình thông dịch diễn dãi mã JS thành mã máy và chạy nó. Tốc độ của V8 là cực kì ấn tượng trong tất cả các Javascript Engine.

Vậy rốt cục nói Node.js nhanh là như thế nào?

Bạn có thể nghe thấy ai đó khuyên rằng Node.js thực sự phù hợp trong một số trường hợp như triển khai hệ thống API, làm ứng dụng realtime như chat, hay là những công việc thiên về I/O. Chứ rất ít bài viết khen Node.js nhanh ở khía cạnh tốc độ xử lý của nó.

Hiệu năng luôn luôn là vấn đề của mọi ngôn ngữ hay nền tảng trong các bài toán xử lý lượng yêu cầu đồng thời lớn. Bởi vì mỗi ngôn ngữ được tạo ra để tập trung giải quyết một vấn đề nào đó. Chính vì thế đánh giá rằng Node.js nhanh là không thực sự chính xác, mà chúng ta nên đánh giá rằng Node.js thực sự phù hợp trong trường hợp nào? Tại sao?

Nói như vậy không có nghĩa là Node.js không “nhanh”. Nhưng cái nhanh của Node.js tôi nghĩ rằng nó nằm ở tốc độ triển khai và phát hành.

Node cung cấp môi trường chạy mã JS mà JS thì lại cực kì phổ biến trên bản đồ ngôn ngữ lập trình của thế giới. Vì thế cộng đồng sử dụng Node rất lớn và bạn có thể nhanh chóng tìm được một người cộng sự phát triển dự án cùng mình. Cũng chính vì sự phát triển đó mà vô số thư viện được triển khai cho Node thông qua npm. Bạn sẽ không cần phải vất vả phát minh lại bánh xe, cộng đồng sẽ giúp bạn làm điều đó.

Tóm lại, theo tôi thứ quyết định đến một ngôn ngữ hay nền tảng mạnh mẽ chính là thái độ của nhà phát triển cùng với độ phủ sóng của ngôn ngữ hay nền tảng đó trong cộng đồng.

Xem thêm việc làm Node.js developer hấp dẫn nhất tại TopDev

So sánh hiệu năng của Node.js với ngôn ngữ hay nền tảng khác

Nếu chưa tin rằng Node.js không “nhanh”, Techempower đã dành thời gian của họ để tiến hành đo sức mạnh của nhiều ngôn ngữ hay nền tảng với nhau. Để đảm bảo khách quan, họ sẽ chạy nhiều bài test và mỗi bài test thực hiện trên nhiều ngôn ngữ hay nền tảng, trong cùng một môi trường hoàn toàn giống nhau. Cẩn thận hơn, hàng năm họ còn cập nhật phiên bản mới nhất của ngôn ngữ hay nền tảng và tiến hành đo lại.

Trong kết quả đo mới nhất là vào tháng 7/2022 với bài test máy chủ phản hồi plaintext (một dạng kiểu “hello world”). Node.js với một Framework nổi tiếng là fastify đứng ở vị trí 156 với lượng yêu cầu xử lý được là 575,967 req/s thấp hơn rất nhiều so với các Framework khác dựa trên ngôn ngữ như C#, Java hay là Golang. Cụ thể con số có thể đạt đến hơn 7 triệu req/s đối với aspcore của C#.

Benchmark

Một bài test về tốc độ truy vấn trong cơ sở dữ liệu thì fastify-mysql có thể xử lý được 9,383 req/s vẫn thấp hơn rất nhiều so với con số hơn 20k của C#.

Ngoài ra còn nhiều bài test khác về hiệu năng. Bạn đọc có thể nghiên cứu thêm cùng với cách thức đo điểm chuẩn của Techempower tại Project Information Framework Tests Overview.

Tổng kết

Tóm lại qua bài viết này tôi chỉ muốn làm rõ khái niệm “nhanh” của Node.js là như thế nào. Đồng thời nhấn mạnh rằng mỗi ngôn ngữ hay nền tảng được sinh ra đều có lý do của nó, việc so sánh nhanh hay chậm chưa chắc đã phản ánh đúng hết thế mạnh của ngôn ngữ hay nền tảng. Thay vào đó, chúng ta nên nắm bắt được điểm mạnh, yếu của chúng để áp dụng giải quyết bài vào từng bài toán sao cho phù hợp.

Bài viết gốc được đăng tải tại 2coffee.dev

Xem thêm:

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

Pinia – Quản lý state trong Vue nhỏ gọn, dễ dùng hơn Vuex rất nhiều

Pinia – Quản lý state trong Vue nhỏ gọn, dễ dùng hơn Vuex rất nhiều

Bài viết được sự cho phép bởi tác giả Sơn Dương

Hiện nay, Vuex vẫn là thư viện phổ biến nhất, được sử dụng trong hầu hết các dự án. Tuy nhiên, khi Pinia ra đời và được team phát triển Vue khuyến khích sử dụng đã thay đổi cuộc chơi.

Pinia thừa hưởng toàn bộ ưu điểm của Vuex và bổ sung nhiều tính năng hấp dẫn, nhưng vẫn giữ được tính gọn nhẹ và dễ sử dụng. Pinia thực sự là một ứng cử viên sáng giá để thay thế vuex.

Chúng ta cùng nhau tìm hiểu cách sử dụng Pinia này nhé!

Pinia là gì?

Pinia là thư viện quản lý state trong Vue (State Management), phục vụ cho việc lưu trữ và chia sẻ state giữa các component với nhau.

Về cơ bản thì Pinia tương tự với Vuex. Vì Pinia ra đời sau Vuex, nên Pinia thừa hưởng những thế mạnh của Vuex. Tất nhiên, Pinia tương thích hoàn toàn với cả hai phiên bản Vue 2.x và Vue 3.

Cấu trúc và cú pháp của Pinia cũng rất quen thuộc, cũng có action, store, getter… Nhưng các cài đặt và cấu hình store cho Pinia lại đơn giản đến bất ngờ.

Pinia – Quản lý state trong Vue

Với xu hướng được sử dụng ngày càng nhiều, Pinia có lẽ sẽ sớm thay thế Vuex trong tương lai gần thôi.

  3 cách truyền dữ liệu giữa các Components trong Vue.js

  Giới thiệu cấu trúc dự án tạo bằng Vuejs CLI

Tại sao chọn Pinia thay thế Vuex

Trong số các ưu điểm của thư viện Pinia, cá nhân mình thấy nó nổi trổi nhất ở các điểm sau:

  • Kích thước thư viện siêu nhẹ, chỉ khoảng 1kb
  • Hỗ trợ module hóa tốt
  • Hỗ trợ auto complete khi code tốt. Thay vì phải khai báo mapAction(…), mapGetter(…).v.v…
  • Dễ sử dụng, vì cách viết giống như bạn vẫn khai báo và sử dụng state trong từng component vậy.

Và còn nhiều ưu điểm khác nữa. Mình nghĩ sau khi thực hành và ứng dụng vào dự án, bạn sẽ trải nghiệm và nhận ra các ưu điểm này.

Xem thêm nhiều tuyển dụng VueJS hấp dẫn trên TopDev

Thực hành quản lý state sử dụng Pinia

Trước hết, chúng ta tạo mới một dự án Vue để thực hành đã nhé.

Vẫn câu lệnh quen thuộc:

vue create hello-pinia

(Dạo này đứt cáp quang biển nên việc tải thư viện, cài đặt dependencies lâu quá!)

Sau khi tạo xong dự án, bạn chạy thử dự án:

npm run serve

Vào trình duyệt để kiểm tra kết quả: http://localhost:8080

Trong bài viết này, mình sẽ sử dụng phiên bản Vue 3 cho nó hiện đại

Cài đặt và cấu hình Store với Pinia

Cài đặt Pinia cũng tương tự như các thư viện khác thôi. Chúng ta sẽ cài đặt qua npm bằng câu lệnh:

npm install pinia

Sau khi cài xong, quay trở lại main.js để thêm pinia vào Vue.

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from "pinia";

createApp(App).use(createPinia()).mount('#app')

Bước tiếp theo là cấu hình store với Pinia.

Pinia có cách  tiếp cận hơi khác một chút so với Vuex. Đó là Pinia xử lý state global theo hướng module. Tức là nó sẽ tạo nhiều store nhỏ lẻ tương ứng với một key duy nhất. Sau đó, Pinia sẽ kết hợp chúng lại thành một store duy nhất cho toàn ứng dụng.

Một store có 4 thuộc tính:

  • ID: là khóa duy nhất như đã đề cập ở trên để xác định store
  • state: là một hàm trả về trạng thái dữ liệu ban đầu của state
  • getters: là nơi định nghĩa các giá trị cần lấy từ store
  • actions: là nơi định nghĩa các hành động cập nhật state. Nó là sự kết hợp của action + mutation so với Vuex.

Ví dụ một đoạn code định nghĩa store bằng Pinia:

import { defineStore } from "pinia";

export const useTodoStore = defineStore({
  id: "uniqueID",
  state: () => ({
    // ...
  }),
  getters: {
    // ...
  },
  actions: {
    // ...
  },
});

Thực hành dự án với Pinia

Quay trở lại với dự án mà chúng ta đã tạo trước đó. Với dự án này, chúng ta sẽ xây dựng một ứng dụng quản lý công việc siêu đơn giản.

Có 2 tính năng chính:

  • Tạo mới công việc.
  • Hiển thị danh sách công việc.
  • Xóa một công việc

Giao diện ứng dụng khi hoàn thành sẽ như sau:

Pinia – Quản lý state trong Vue

Đầu tiên, chúng ta sẽ cài đặt store với 2 actions cơ bản là: addTodo, removeTodo.

// stores/todo.ts
import { defineStore } from "pinia";

export const useTodoStore = defineStore({
  id: "todoState",
  state: () => ({
    todos: [],
  }),
  getters: {
    totalTodos: (state) => state.todos.length,
  },
 actions: {
   addTodo(title, description) {
     const todo = {
       id: Math.floor(Math.random() * 10000), // random ID
       title,
       description,
    };
    this.todos = [todo, ...this.todos];
  },

  async removeTodo(id) {
    // remove todos
    this.todos = this.todos.filter((todo) => todo.id !== id);
  },
 },
});

Về phần giao diện, mình chia nhỏ giao diện thành 2 components chính: Phần nhập công việc mới và phần danh sách các công việc.

Trong phần này, các bạn chú ý tới hàm setup(). Đây là nơi mình khai báo tham chiếu tới store: const storeTodo = useTodoStore() nhờ đó mà mình có thể gọi tới actions và truy xuất giá trị của global state.

<!-- components/TodoForm.vue -->
<template>
<form @submit="onSubmit">
<h2>VNTALKING - Quản lý công việc</h2>

<!-- title -->
<div class="field">
<label class="label">Tiêu đề</label>
<input type="text" class="input" name="title" v-model="title" />
</div>

<!-- description -->
<div class="field">
<label class="label">Miêu tả</label>
<textarea class="input" name="description" v-model="description"></textarea>
</div>

<!-- submit -->
<div class="field">
<button type="submit">Tạo mới công việc</button>
</div>
</form>
</template>

<script>
import { defineComponent } from "vue";
import { useTodoStore } from "../stores/todo";

export default defineComponent({
 name: "TodoForm",
 data() {
return {
 title: "",
 description: "",
};
},
 setup() {
const storeTodo = useTodoStore();
return { storeTodo };
},
 methods: {
 onSubmit(e) {
 e.preventDefault();

if (!this.title) {
return;
}

 // save data into store
this.storeTodo.addTodo(this.title, this.description);

 // clear data
this.title = "";
this.description = "";
},
},
});
</script>

Và danh sách công việc:

<!-- components/TodoList.vue -->
<template>
  <div>
    <div v-for="todo of storeTodo.todos" :key="todo.id" class="wrapper">
      <div class="header">
        <div class="title">[{{ todo.id }}] {{ todo.title }}</div>
        <div>
          <button type="button" @click="storeTodo.removeTodo(todo.id)">Xóa</butto</div>
        </div>
      <div v-if="todo?.description">{{ todo?.description }}</div>
</div>
    </div>
</template>
<script>
import { defineComponent } from "vue";
import { useTodoStore } from "../stores/todo";
export default defineComponent({
  name: "TodoList",
  setup() {
    const storeTodo = useTodoStore();
    return { storeTodo };
  },
});
</script>

Như bạn cũng thấy, với cách viết của Pinia, mình không cần phải sử dụng mapActions(...) hay mapGetters(...) mà VS Code vẫn tự động gợi ý lệnh. Đây là điều mà mình cảm thấy hứng thú nhất với Pinia so với Vuex!

Các bạn có thể tải mã nguồn đầy đủ về tham khảo:

Tạm kết

Sau khi trải nghiệm quản lý state với Pinia xong, cám giác của bạn thế nào? Có thấy Pinia xứng đáng để thay thế Vuex ở thời điểm hiện tại này không?

Có lẽ không phải ngẫu nhiên mà team phát triển Vue lại khuyến khích sử dụng Pinia. Chắc chắn họ cũng nhận ra những ưu điểm và cũng có chiến lược phát triển Vue tương đồng với Pinia.

Bài viết gốc được đăng tải tại vntalking.com

Xem thêm:

Xem thêm các việc làm IT hấp dẫn trên TopDev