Home Blog Page 37

Githooks là gì? Tìm hiểu cách sử dụng Githooks để ngăn chặn commit ẩu

Sử dụng Githooks như thế nào để ngăn chặn commit ẩu

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

Vấn đề

Làm việc với git đã lâu nhưng có thể bạn chưa biết rằng trong git cũng có khái niệm hooks và họ gọi là githooks. Githooks được kích hoạt thông qua các sự kiện, từ đó giúp bạn có thể chèn thêm những công việc cần xử lý trước hoặc sau khi thực hiện hành động đó.

Githooks là gì?

Githooks là các script mà Git thực thi trước hoặc sau các sự kiện như: commit, push và receive. Githooks là một tính năng được tích hợp sẵn trong git nên chúng ta không cần tải xuống thêm bất cứ thứ gì.

Git cung cấp rất nhiều hooks, một số hooks phổ biến có thể kể đến là:

  • pre-commit: Được gọi khi dùng lệnh git commit và nó được chạy trước git commit
  • pre-receive: Đây là một hook được thực hiện ở phía server, được gọi trước khi git push.
  • post-commit: Được gọi sau khi dùng lệnh git commit. Hành vi trong post-commit không ảnh hưởng đến kết quả của commit vì nó được kích hoạt sau khi commit thành công.
  • post-receive: Đây là một hook được thực hiện ở phía server, được gọi sau khi dùng lệnh git push. Hành vi trong post-receive không ảnh hưởng đến kết quả của lệnh push vì nó được kích hoạt sau khi push thành công.

Để xem danh sách đầy đủ và mô tả của hooks bạn tham khảo thêm ở trang tài liệu git.

Mỗi kho lưu trữ Git đều có một thư mục .git/hooks có chứa các file tương ứng cho mỗi hook mà bạn muốn sử dụng. Bạn có thể thay đổi nội dung các file này và Git sẽ thực thi chúng khi những sự kiện đó xảy ra.

Các hooks trong git có thể được chia ra thành hai loại: Loại chạy phía máy khách (client-side) và loại chạy phía máy chủ (server-side). Các hooks phía máy khách được chạy trước hoặc sau hành động trên máy khách (local repository) còn các hooks máy chủ được chạy trước hoặc sau khi được đẩy tới server (remote repository).

Các hooks phía máy chủ được sử dụng để thực thi mạnh mẽ hơn các chính sách (policies) mà chúng ta muốn vì nó được được remote kiểm tra, bởi vì các hooks phía máy khách có thể dễ dàng bỏ qua bởi nhiều thủ thuật. Để biết những hook nào chạy ở phía máy khách hay chủ bạn có thể xem chi tiết trong tài liệu git.

  Git Submodules và ứng dụng trong việc chia sẻ tài nguyên dùng chung

Cách sử dụng Githooks

Khi dùng git init để khởi tạo git repository cho project thì git cũng tạo những tệp example của các hook trong thư mục .git/hooks các bạn có thể vào xem. Thực chất đây là những tập lệnh bash.

thư mục .git/hooks

Ví dụ đây là nội dung của file pre-commit.sample:

#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".

if git rev-parse --verify HEAD >/dev/null 2>&1
then
  against=HEAD
else
  # Initial commit: diff against an empty tree object
  against=$(git hash-object -t tree /dev/null)
fi

# If you want to allow non-ASCII filenames set this variable to true.
allownonascii=$(git config --type=bool hooks.allownonascii)

# Redirect output to stderr.
exec 1>&2

# Cross platform projects tend to avoid non-ASCII filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
  # Note that the use of brackets around a tr range is ok here, (it's
  # even required, for portability to Solaris 10's /usr/bin/tr), since
  # the square bracket bytes happen to fall in the designated range.
  test $(git diff --cached --name-only --diff-filter=A -z $against |
    LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
  cat <<\EOF
Error: Attempt to add a non-ASCII file name.

This can cause problems if you want to work with people on other platforms.

To be portable it is advisable to rename the file.

If you know what you are doing you can disable this check using:

  git config hooks.allownonascii true
EOF
  exit 1
fi

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --

Đối với hooks pre-commit, nếu bạn return một exit status khác 0 thì ngay lập tức commit sẽ bị huỷ bỏ và trả về lỗi. Để cấu hình sử dụng hook nào rất đơn giản chỉ cần đặt tên file là tên hooks trong thư mục .git/hooks (xoá đuôi .sample).

Tham khảo Job FrontEnd HOT trên TopDev!

Sử dụng pre-commit để ngăn chặn commit ẩu

Commit ẩu có thể là những commit chưa chịu chạy qua ESLint để kiểm tra cú pháp hay chưa chạy Unit test trước đó. Tuỳ vào trường hợp của bạn mà sẽ có những lúc bạn muốn ngăn chặn những commit mà vi phạm một lỗi nào đó được quy định từ trước. Những lúc như thế thì áp dụng hooks pre-commit là quá chuẩn.

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

Ví dụ tôi muốn mỗi khi commit phải chạy qua Unit test, nếu thành công thì mới tiến hành commit còn không thì báo lỗi thì làm như sau.

Tạo file .git/hooks/pre-commit với nội dung:

#!/bin/sh
git stash -q --keep-index
npm run test
status=$?
git stash pop -q
exit $status

Trước khi run test tôi tiến hành stash các file trước đó vì những file đó không nằm trong commit, rồi sau đó unstash và trả về exit với status là exit status của lệnh npm run test. Cú pháp $? trong bash là lấy exit code của task cuối cùng. Trong trường hợp sử dụng khác bạn có thể thay đổi npm run test thành bất kì lệnh nào mà bạn muốn kiểm tra trước khi commit.

Tổng kết

Bên trên chỉ là một ví dụ nhỏ của việc sử dụng githook, ngoài pre-commit còn rất nhiều hook khác. Bằng cách kết hợp các hook sẽ giúp bạn giải quyết được điều vấn đề hơn nữa.

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

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

Học IT có khó không? 6 khó khăn khi theo học ngành CNTT

6 khó khăn có thể bạn sẽ gặp khi theo học ngành CNTT

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Lại là mình đây, trong bài viết này mình sẽ kể khổ cho các bạn khi bạn quyết định theo học ngành Công nghệ thông tin (IT) ha.

Mình hiện là sinh viên năm cuối ngành IT, tuy chưa có nhiều năm kinh nghiệm thực tế nhưng những gì mình chia sẻ là những gì mình đã lĩnh hội được trong quá trình học tập và làm việc tại các công ty IT.

Hi vọng với những gì mình chia sẻ sẽ ngày hôm nay sẽ giúp các bạn phần nào hiểu rõ hơn về những áp lực khi quyết tâm theo học ngành học này (đặc biệt là các bạn học sinh đang nung nấu ý định thi vào các trường về IT). Ok bắt đầu thôi !

#1. Có quá nhiều sự lựa chọn

Có thể nhiều bạn còn chưa hiểu tại sao lại là “nhiều sự lựa chọn”. Thực ra công nghệ thông tin là một khái niệm rất rộng, nó bao hàm nhiều lĩnh vực nhỏ bên trong.

6 khó khăn có thể bạn sẽ gặp khi theo học ngành CNTT

Mình tin chắc phần đa các bạn khi đỗ vào các trường đại học vẫn chưa được định hướng rõ ràng sẽ đi theo mảng nào của ngành học này.

Mình đã có một bài viết nói về các lĩnh vực nhỏ trong ngành IT, các bạn có thể tham khảo tại đây nhé !

Việc lựa chọn một hướng đi cụ thể sẽ là khó khăn ban đầu khi bạn học xong các chương trình cơ bản. Ví dụ bạn không biết phải đi theo hướng nghiên cứu hay thực hành, không biết nên đi theo các công nghệ mới (AI, Machine Learning…) hay các hướng cũ như lập trình web app, mobile app…

Vậy giải pháp là gì? Mình khuyên là đầu tiên các bạn nên giành thời gian tìm hiểu, sau đó nếu thấy hay thì cứ học hết đi. Nhưng đến một lúc (khoảng vào cuối năm 2 – đầu năm 3) hãy chọn cho mình một lĩnh vực bạn thích rồi đi sâu vào nó.

#2. Kiến thức cập nhật thường xuyên.

Không phải mình dọa các bạn đâu nhưng công nghệ trên thế giới thay đổi hàng tuần chứ không muốn nói là hàng giờ.

6 khó khăn có thể bạn sẽ gặp khi theo học ngành CNTT

Có thể khi bạn đang chật vật học công nghệ này, công nghệ kia thì ở đâu đó họ đã cho ra công nghệ mới “ngon” hơn rồi.

Nói vậy không có nghĩa là bạn bỏ cái cũ mà chạy theo cái mới. Chúng ta phải học có chọn lọc và thường thì khi công nghệ nào đó được sử dụng nhiều nó sẽ có vòng đời không quá ngắn.

Đủ để chúng ta học, tạo ra sản phẩm và cải thiện nó. Điều mà bạn nên chú tâm đó là theo dõi công nghệ bạn đang sử dụng cập nhật như thế nào.

Mình lấy ví dụ các bạn làm việc với ngôn ngữ lập trình Java, chắc không nhiều bạn biết rằng hiện tại Java hiện đã ra mắt phiên bản SE 15 vào tháng 9 năm 2020. Nhưng chúng ta vẫn cứ dùng Java 8 được phát hành từ tháng 3 năm 2014.

Đơn giản vì nhiêu đó tính năng của Java 8 đủ dùng rồi, các tính năng mới để cải thiện hiệu năng và dùng cho các mục đích đặc biệt.

Tóm lại việc cập nhật kiến thức công nghệ là không thể tránh khỏi nếu bạn theo học ngành IT này, nhưng hãy học và dùng công nghệ một cách chọn lọc nha các bạn.

#3. Tiếp xúc nhiều với máy tính

Nhiều bạn nghe lại bảo rằng tiếp xúc nhiều với máy tính thì sao, làm sao nhiều bằng mấy ông chơi game được.

6 khó khăn có thể bạn sẽ gặp khi theo học ngành CNTT

Đúng, cái này mình công nhận nhưng khoan hãy so sánh với bạn chơi game. Học IT dù là lĩnh vực gì bạn cũng phải giành thời gian để lập trình hoặc các công việc khác mà buộc phải có máy tính.

Dẫn đến thứ nhất là mắt bạn phải làm việc nhiều trước máy tính, về lâu về dài có thể gây ra các bệnh như cận thị (đặc biệt là khi dùng trong bóng tối) hoặc đơn giản là mỏi mắt, nhức đầu.

Hai nữa là khi làm việc nhiều với máy tính bạn còn đâu thời gian dành cho các việc khác, như là thể thao, yêu đương, vui chơi, học những kiến thức, kỹ năng mềm khác.

Đó mới chính là hệ lụy của việc tiếp xúc với máy tính. Nó khiến cho bạn thu nhỏ không gian sống, thu nhỏ sở thích cũng như thu nhỏ thế giới quan của các bạn.

Vì vậy hãy làm sao cân bằng khi học tập, làm việc và vui chơi để vừa đảm bảo công việc, sức khỏe cũng như các mối quan hệ khác.

#4. Gặp các vấn đề khó

Tôi nói đến đây chắc nhiều ông dev đọc được lại vỗ tay bảo “chuẩn luôn!”. Vì học IT mà không gặp vấn đề khó, không gặp bug thì như tấm chiếu chưa trải vậy.

6 khó khăn có thể bạn sẽ gặp khi theo học ngành CNTT

Đôi khi một lập trình viên giỏi được đánh giá dựa trên kinh nghiệm giải quyết vấn đề của anh ta. Các bài toán khó khi học IT là không thể tránh khỏi. Đó có thể là một logic khó, có thể là một chức năng khó hoặc đôi khi chỉ đơn giản là một lỗi mà bạn chưa gặp bao giờ.

Gặp nhiều vấn đề khó mà không giải quyết được thì bạn sẽ mau nản và cảm thấy học công nghệ thông tin khó. Đây là tình trạng chung mà hầu như ai cũng từng trải qua.

Để khắc phục được điều này thì cách duy nhất đó là kiên trì rèn luyện, bạn cứ tưởng tượng số lượng vấn đề khó mà bạn giải quyết được tỉ lệ với kinh nghiệm của bạn mà cố gắng vượt qua thôi.

Tham khảo thêm:

#5. Ngày càng có nhiều người học

Đây là sự thật phũ phàng mà bạn phải nhận ra thật sớm để lao vào cuộc chiến này với tinh thần quyết liệt nhất.

6 khó khăn có thể bạn sẽ gặp khi theo học ngành CNTT

Nhiều bạn vẫn nghĩ học IT ra kiểu gì chả có việc. Nhưng không, các bạn nhầm to rồi, việc thì không thiếu nhưng không phải cứ tốt nghiệp là có việc TỐT đâu.

Giờ bạn không làm được việc thì ai dám thuê bạn về làm, rồi tiền đâu trả cho bạn. Nếu bạn không tự cố gắng, nâng cao chuyên môn thì ra trường cũng chỉ là một cậu học sinh già không hơn không kém.

Ngày càng có nhiều người học thì đồng nghĩa với việc nguồn nhân lực ngày càng nhiều. Nếu tính theo tỷ lệ, rõ ràng số người cạnh tranh với bạn cũng sẽ tăng lên.

Đây thực sự là áp lực nếu như bạn không sớm nhận ra trong những năm tháng còn ngồi trên ghế giảng đường.

Vì vậy hãy luôn trau dồi kiến thức, kỹ năng để mình có được sự ưu tiên cao hơn nha các bạn.

#6. Đôi khi phải đánh đổi

Ở đây mình dùng từ “đôi khi” vì không phải ai cũng đánh đổi và chấp nhận đánh đối.

6 khó khăn có thể bạn sẽ gặp khi theo học ngành CNTT

Thứ nhất là về sức khỏe, mình từng thức tới 3-4 giờ sáng để học và ôn thi rồi hôm sau thì mệt nhoài, người gầy gò ốm yếu.

Thứ hai là các mối quan hệ, thời gian giành cho mọi người xung sẽ giảm đi, đặc biệt là khi bạn tập trung vào công việc. Dẫn đến đôi khi bạn cảm giác mình bị trầm cảm, mặc cảm với thế giới rồi dần thu mình lại bên chiếc máy tính.

Và còn rất nhiều hệ lụy khác nữa, để khắc phục và không chấp nhận đánh đổi bạn phải luôn biết cân bằng giữa công việc, học tập và cuộc sống.

Điều này không phải dễ nhưng không phải là không làm được. Chỉ cần bạn lên kế hoạch và quyết tâm thực hiện rồi bạn cũng sẽ tạo ra các thói quen tốt thôi.

#7. Kết luận

Vâng, trên đây là những khó khăn mà hầu hết những anh em theo học ngành IT sẽ phải đối mặt.

Những gì mình chưa sẽ mình biết chưa phải là tất cả, song nó cũng là những khó khăn rõ ràng nhận thấy nhất mà bạn sẽ phải chấp nhận đối diện khi học IT.

Ông nào đang trong nghề thì chia sẻ tiếp những khó khăn mà các ông đang gặp phải để anh em cùng thảo luận thêm nhé ◔◡◔

Hi vọng các bạn sẽ vượt qua được hết và trở thành một kỹ sư công nghệ thông tin giỏi. Hẹn gặp các bạn trong bài viết tiếp theo nha.

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

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

Xem thêm Tuyển dụng it hấp dẫn trên TopDev

Hướng nghiệp CNTT – Định hướng nghề nghiệp cho các bạn trẻ

Hướng nghiệp CNTT

Hướng nghiệp CNTT là một trong những vấn đề quan trọng giúp các bạn trẻ cho niềm đam mê với CNTT có thể đưa ra lựa chọn chính xác để theo nghề.

Hướng nghiệp CNTT

Thời đại công nghệ 4.0 lên ngôi, kéo theo phát triển bùng nổ của Công nghệ Thông tin. Nhiều ngành nghề, dịch vụ, thị trường cũng được công nghệ hóa để phù hợp với nhu cầu sử dụng của xã hội ví dụ như ngành giáo dục – giáo dục điện tử, tài chính – tài chính điện tử,  ngân hàng – ngân hàng điện tử… tất tần tật đều được lồng ghép công nghệ, hiện đại hóa để trở nên ngày một tiện dụng.

Như một kết quả hiển nhiên, bên cạnh sự bùng nổ công nghệ ấy thì định hướng nghề nghiệp của các bạn trẻ hiện nay cũng có xu hướng công nghệ hóa theo. Giới trẻ hiện nay chính là tầng lớp có tỷ lệ tiếp cận và học hỏi công nghệ nhanh nhất, hầu như các bạn trẻ từ lứa tuổi 15 – 35 tuổi đều sử dụng thành thạo các thiết bị công nghệ.

  "Ngành IT này học rất dễ, tài liệu ko bao giờ thiếu. Quan trọng là phải có đam mê và chịu cày"

Chính vì thế Công nghệ Thông tin chắc hẳn sẽ là một ngành thu hút nhiều bạn trẻ, tuy nhiên ngành Công nghệ Thông tin không phải là một ngành dễ dàng, ngành này đòi hỏi người học phải có tư duy, logic tốt và cả niềm đam mê với ngành nghề thì mới thật sự phát triển được về lâu dài chính vì thế các bạn trẻ đừng quên tham khảo về các bài viết về hướng nghiệp CNTT.

Để có thể có cái nhìn tổng quan hơn về ngành, bài viết dưới đây TopDev sẽ chia sẻ với bạn đọc một số thông tin cơ bản về ngành Công nghệ Thông tin, hướng nghiệp CNTT, định hướng nghề nghiệp và các bằng cấp quan trọng, có giá trị trong ngành.

Ngành học Công nghệ Thông tin là gì?

Hướng nghiệp CNTT

Công nghệ Thông tin là gì?

Để có thể hiểu được Công nghệ Thông tin là gì thì bạn cần nắm rõ 2 khái niệm thông tin là gì và công nghệ là gì trước!

Thông tin sẽ phản ánh sự vật, sự việc, hiện tượng của thế giới xung quanh và các hoạt động con người trong đời sống xã hội. Thông tin còn là tất cả những gì đem lại sự hiểu biết cho con người về thế giới. 

Ví dụ như khi bạn nhìn thấy một con mèo màu đen thì đấy gọi là thông tin, hoặc các bạn nhìn thấy một người bị vấp ngã thì đấy cũng gọi là thông tin được phản ánh vào bộ não của bạn để bạn biết được là người đó đang bị ngã. 

Lấy thêm một ví dụ khác về ngành nghề đặc thù như ngành tài chính, ngành này chủ yếu phân tích và chuyên làm việc với các con số, các con số cũng là 1 nhánh nhỏ của thông tin. Ngành nhân sự, chuyên làm việc với con người, quản trị con người và con người cũng là một phần của thông tin.

Công nghệ Thông tin học những gì?

Đơn giản và dễ hiểu, học Công nghệ Thông tin là học các phương pháp để xử lý thông tin, bao gồm tất cả các thông tin vừa được nêu ở ví dụ trên.

Ngành Công nghệ Thông tin được xem là một nhánh của kỹ thuật sử dụng máy tính và phần mềm máy tính để xử lý thông tin, các phương pháp xử lý thông tin như chuyển đổi, lưu trữ, bảo vệ, khai phá thông tin, truyền tải, thu thập… Có thể hiểu theo cách đơn giản hơn ngành Công nghệ Thông tin là sử dụng công nghệ để xử lý thông tin.

Sau các khóa học Công nghệ Thông tin – Hướng nghiệp CNTT bạn sẽ được trang bị đầy đủ các kỹ năng để xử lý thông tin, chế tạo, sử dụng công nghệ máy tính, phần cứng, phần mềm, công cụ… để truyền thông tin (sự kiện, nội dung, hình ảnh, âm thanh…) để vận chuyển, truyền đạt thông tin đến User một cách tối ưu nhất.

Có thể nói hành vi lướt web, xem youtube, sử dụng mạng xã hội của bạn là minh chứng cho sự thành công của nền công nghệ thông tin trong 10 năm trở lại đây. Việc đăng tải thông tin lên web, youtube, mạng xã hội tuy đơn giản đối với người dùng nhưng để có thể làm được những điều đó các lập trình viên đã phải hoạt động và nâng cấp rất nhiều các nền tảng đó.

  Các vị trí tuyển dụng ngành IT khiến nhà tuyển dụng đau đầu

Hướng nghiệp CNTT

Đó là mình chứng cho các thành quả của Công nghệ Thông tin và quá trình để tạo nên được thành quả đó là đến từ những người học Công nghệ Thông tin. Họ sẽ phải xây dựng hệ thống Bigdata, hệ thống vận hành, Sever. Web…để có thể đem đến cho người dùng các sản phẩm công nghệ tiên tiến hơn.

Ngành Công nghệ Thông tin rất đa dạng các ngành nghề, kỹ năng và cấp bậc học, tùy theo nhu cầu công việc hoặc nhu cầu trao dồi thêm kiến thức mà các bạn có thể chọn học ở cấp độ khác nhau. 

Tại Việt Nam, hướng nghiệp CNTT của các bạn trẻ thường hướng đến các cấp độ từ thấp đến cao như Cử nhân, Thạc sĩ, Tiến sĩ.

Tốt nghiệp Công nghệ Thông tin ra làm gì?

Sau khi tốt nghiệp ngành Công nghệ Thông tin, còn tùy vào chuyên ngành mà bạn theo mà có thể làm các nghề như:

IT security – An ninh mạng/ Bảo mật Công nghệ Thông tin

An ninh mạng có vai trò bảo vệ các thông tin trên mạng, nền tảng hệ thống, fix bug để tránh bị rò rỉ thông tin. Đối với nhánh ngành này, bạn sẽ được đào tạo bài bản cho việc phòng chống tội phạm mạng, các xác định bug, sửa bug và truy tìm dấu vết….

Các cơ quan trực thuộc Chính phủ, Quân đội hoặc các tổ chức/ doanh nghiệp lớn sử hữu lượng data khủng hoặc đơn giản là các doanh nghiệp có nhu cầu bảo mật thông tin thì đều cần đến các nhân viên IT security.

Các vị trí tuyển dụng IT Security

System Administrator – Quản trị hệ thống

Quản trị hệ thống là quá trình quản lý, duy trì và giám sát hệ thống máy tính và mạng trong một tổ chức hoặc doanh nghiệp. Những người làm công việc này được gọi là quản trị viên hệ thống. Vai trò của họ là đảm bảo rằng hệ thống hoạt động ổn định, an toàn và hiệu quả.

Game Development – Phát triển Game

Ngành này là một nhánh nhỏ của ngành phát triển phần mềm. Vai trò của một nhà phát triển Game là sử dụng các ngôn ngữ lập trình theo yêu cầu để hoàn thành các thành phẩm game 2D, 3D, máy chủ của Game. Các nhà phát triển Game sẽ phải kiêm luôn hầu hết các công việc như tiếp nhận ý tưởng từ team thiết kế hoặc team sự kiện trong Game, sau đó apply tất cả các ý tưởng đó vào Game.

Ví dụ như kết hợp giữa đồ họa và âm thanh, tạo sự kiện trong game, xử lý các tương tác giữa các người chơi trong game, thiết lập logic…

Tìm việc làm cho lập trình Game

Website Applications – Ứng dụng website

Để có thể đảm nhiệm vị trí của một nhà phát triển web, người học cần có hiểu biết về các loại ngôn ngữ, kỹ năng để có thể cho ra một sản phẩm Web phù hợp với yêu cầu của công ty/ khách hàng.

Artificial Intelligence – Trí tuệ nhân tạo

Nghề Trí tuệ nhân tạo (Artificial Intelligence – AI) là một lĩnh vực trong ngành Công nghệ thông tin tập trung vào nghiên cứu, phát triển và triển khai các giải pháp thông minh nhân tạo. Các chuyên gia và nhà nghiên cứu trong lĩnh vực này dành thời gian tìm hiểu và phát triển các thuật toán, mô hình máy học và deep learning, xử lý ngôn ngữ tự nhiên, robot học, và các ứng dụng AI khác.

Apps Developers – Phát triển ứng dụng

Thời đại phát triển, tỷ lệ người dùng điện thoại thông minh ngày càng cao thế nên ngành này cũng là một ngành đang hot tại Việt Nam. Vai trò khi đảm nhiệm vị trí của các Apps Developers là tạo ra các ứng dụng trên điện thoại di động ví dụ như game hoặc bất kỳ các ứng dụng nào được sử dụng trên điện thoại.

Software Engineer – Kỹ sư phần mềm

Kỹ sư phần mềm là một người chuyên về phát triển và xây dựng các phần mềm có chất lượng cao. Đây là một trong những vai trò quan trọng nhất trong lĩnh vực Công nghệ thông tin (CNTT). Software Engineer thường tham gia vào quá trình phát triển phần mềm từ giai đoạn thiết kế, triển khai, kiểm thử đến bảo trì và cải tiến.

topdev

Tham khảo các vị trí tuyển dụng cho lập trình Software tại Topdev

Cơ hội nghề nghiệp

Mức lương

Đối với ngành Công nghệ Thông tin, sau khi ra trường bạn sẽ có rất nhiều cơ hội việc làm trong nhiều lĩnh vực khác nhau từ kinh doanh, tài chính, giáo dục, du lịch, viễn thông đến các ngành như y tế, ngân hàng… Tùy theo lĩnh vực mà bạn yêu thích mà có thể tập trung phát triển thế mạnh về nó.

Ngoài ra, mức lương của IT cũng khá cao so với mặt bằng chung, cụ thể là ở vị trí Fresher, Junior, Senior,… đều có mức lương nhỉnh hơn so với các ngành khác dù là cùng level. Cơ hội làm việc ở nước ngoài lớn vì nhu cầu tuyển dụng ngành IT không chỉ gói gọn ở Việt Nam, các nước như Hàn, Nhật cũng mở rộng cơ hội, tìm kiếm nguồn lực ở nước ta với mức lương cao.

Nếu bạn là một người không thích sự trói buộc ở các công ty, thì ngành IT cũng có thể hoàn toàn đáp ứng được sở thích của bạn vì với ngành này bạn có thể làm việc Freelancer – có nghĩa là bạn sẽ nhận dự án, hoàn thiện dự án, sau đó nộp lại bên phía khách hàng.

Các bằng cấp có giá trị của Công nghệ Thông tin

Trong ngành này, bằng cấp thật sự không quan trọng bằng kỹ năng, định hướng, hướng nghiệp CNTT của bạn. Tuy nhiên nếu bạn có một hoặc nhiều những bằng cấp được liệt kê dưới đây có lẽ các nhà tuyển dụng sẽ đánh giá bạn khá cao đấy.

Dưới đây là list các bằng cấp có giá trị cao, để đạt được những chứng nhận này chứng tỏ bạn là một người có tư duy và kỹ năng tốt trong ngành.

  • Chứng nhận trong quản trị doanh nghiệp Công nghệ Thông tin (Certified in the Governance of Enterprise IT – CGEIT)
  • Chứng nhận AWS cho kiến trúc sư giải pháp (AWS Certified Solutions Architect – Associate)
  • Chứng chỉ Project Management Professional (PMP)
  • Bằng AWS Certified Developer – Associate
  • Chứng nhận chuyên gia bảo mật hệ thống thông tin (Certified Information Systems Security Professional – CISSP)
  • Chứng nhận trong kiểm soát hệ thống thông tin và rủi ro ( Certified in Risk and Information Systems Control – CRISC)
  • Chứng nhận quản lí bảo mật thông tin (Certified Information Security Manager – CISM)
  • Chứng nhận ScrumMaster
  • Chứng nhận Hacker (Certified Ethical Hacker – CEH)
  • Bằng đai xanh Six Sigma
  • Chứng chỉ Citrix Certified Professional – Virtualization (CCP-V)
  • Chứng chỉ Microsoft Certified Solutions Expert (MCSE) – Cơ sở hạ tầng máy chủ
  • Chứng chỉ kiểm toán viên hệ thống thông tin (CISA)
  • Chứng nhận Cisco Certified Network Professional (CCNP) Routing và Switching
  • Chứng chỉ Citrix Certified Associate – Networking (CCA-N)

Vai trò của Công nghệ Thông tin đối với cộng đồng, xã hội

Trong thời kỳ hiện đại hóa công nghiệp hóa như hiện nay, hướng nghiệp CNTT – Công nghệ Thông tin là một ngành không thể thiếu và nắm giữ vai trò quan trọng trong việc phát triển, nâng cao chất lượng công việc, gia tăng năng suất làm việc, giúp quản lý tốt các vấn đề của doanh nghiệp, hỗ trợ vận hành trong nhiều ngành nghề, nâng cao trải nghiệm sống của con người… và rất nhiều vai trò khác nữa.

  Sinh viên CNTT làm thế nào để học tốt ở trường đại học?

  Chín thói quen xấu cần bỏ nếu muốn theo ngành CNTT

Vai trò của Công nghệ Thông tin trong đời sống

Nhờ sự phát triển nhanh chóng của Công nghệ Thông tin mà các bạn có thể dễ dàng tìm kiếm, lựa chọn các kênh giải trí như mạng xã hội, youtube, chơi game, nghe nhạc… để giải tri.

Ngoài ra bạn cũng có thể kết nối, trò chuyện, chia sẻ hình ảnh, âm thanh, video call với bạn bè người thân hoặc làm quen bạn mới thông qua các sản phẩm Công nghệ Thông tin như các mạng xã hội, các phương tiện kết nối khác như viber, skype, telegram, zalo… dù bạn đang ở bất cứ đâu.

Vai trò của Công nghệ Thông tin trong ngành Giáo dục

Không thể nào chối bỏ những hiệu quả mà Công nghệ Thông tin đã đem lại cho ngành giáo dục, rất nhiều sản phẩm Edtech đã ra đời để hỗ trợ và phần nào nâng cấp, thay thế 1 số chức năng lạc hậu của nền giáo dục truyền thống.

Ứng dụng công nghệ vào việc giảng dạy giúp học sinh nhanh chóng nắm rõ được kiến thức, tiếp cận với các thông tin giáo dục, kiến thức sâu hơn, tốt hơn, tiết kiệm thời gian hơn.

Ví dụ như đối với phương pháp giảng dạy cũ, các giáo viên sẽ mất khá nhiều thời gian cho việc viết bảng thì hiện nay có thể thay thế điều đó bằng cái slide trình chiếu vừa giúp tiết kiệm thời gian viết bảng vừa có thể chèn thêm vào các hình ảnh, video minh họa sinh động hơn.

Hướng nghiệp CNTT

Bên cạnh đó các nền tảng hỗ trợ quản lý nhà trường, nền tảng giáo dục thông qua Internet cũng rất hữu ích như các khóa học online, người dùng có thể tự nâng cao kiến thức ngay tại nhà.

Vai trò của Công nghệ Thông tin trong ngành Y tế

Công nghệ Thông tin còn ứng dụng được trong cả ngành y tế, giúp tự động hóa các quá trình xét nghiệm, khám chữa bệnh. Hệ thống y tế còn hỗ trợ bệnh nhân rà soát các vết thương nội mà khó có thể xác định bằng phương pháp khám thông thường, đo lường tỷ lệ, chuẩn đoán tình trạng bệnh tật của bệnh nhân… Đối với các ứng dụng công nghệ cao cấp hơn thì còn giúp con người trong việc giải phẫu bằng máy móc giúp giảm tỷ lệ tử vong.

Ngoài ra, Công nghệ Thông tin còn giúp nâng cấp nền tảng quản lý hồ sơ bệnh nhân, giúp dễ dàng nhanh chóng tìm kiếm hồ sơ bệnh nhân. Các sản phẩm ứng dụng Healtech cũng được cho ra đời với đa dạng các chức năng khác nhau dùng để cải thiện, phục vụ cho đời sống sức khỏe của người dùng.

Vai trò của Công nghệ Thông tin trong ngành Tài chính

Vai trò của Công nghệ Thông tin trong ngành tài chính là sản xuất ra các sản phẩm liên quan đến việc quản lý thông tin trong ngành tài chính, ví dụ hệ thống quản lý thông tin khách hàng, nhân viên, số liệu, phần mềm tính toán số liệu…

Các ứng dụng công nghệ từ các ngân hàng giúp việc kiểm tra số dư trong tài khoản, lịch sử giao dịch, chuyển khoản, nhận lương, trả góp nợ ngân hàng trở nên dễ dàng hơn. Ngoài ra bạn còn có thể thanh toán online…

Ngoài những ngành được nêu trên, Công nghệ Thông tin còn có vai trò rất quan trọng và được ứng dụng trong hầu hết các ngành nghề đang có hiện nay.

Có thể bạn muốn xem thêm:

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

Sinh viên CNTT làm thế nào để học tốt ở trường đại học?

Sinh viên CNTT làm thế nào để học tốt ở trường đại học?

Tôi vẫn còn nhớ rõ thời điểm này cách đây đúng bốn năm. Khi ấy, tôi và các bạn cùng khoá vừa bước vào giảng đường đại học. Nỗi băn khoăn lớn nhất của tôi vào lúc ấy là câu hỏi trên. Tôi đã từng thấy rất nhiều người tài giỏi xuất thân ngành CNNT, nhưng cũng nghe rất nhiều anh chị than thở về việc học ở đây, học CNTT như thế nào cho đúng. Phải có điều gì tạo nên sự khác biệt, và tôi luôn thôi thúc bản thân mình tìm ra câu trả lời chính xác nhất.

Trong suốt thời gian học CNTT, tôi quan sát những người học trên mình vài khoá, học hỏi từ các bạn bè, và tự rút tỉa từ các kinh nghiệm bản thân. Qua những điều đã học, tôi nhận ra rằng hoàn toàn có thể học tốt ngành CNTT, và điều tạo nên sự khác biệt chính là phương pháp.

Vài hôm trước, có bạn sinh viên khoá dưới hỏi tôi rằng:

“Làm sao để học tốt CNTT?”

Thật thú vị. Bốn năm đã qua, giờ đây tôi gặp lại câu hỏi trên. Đó chính là động lực khiến tôi phác thảo ra bài viết này.

Bài viết này phục vụ cho ai?

Thứ nhất, tôi muốn truyền đạt những kinh nghiệm của mình cho các bạn sinh viên chuẩn bị vào trường. Kể cả các bạn sang năm hai cũng có thể tìm thấy những điều bổ ích ở đây. Các bạn còn rất nhiều cơ hội phía trước.

Ngoài ra, các bạn sinh viên năm ba, bốn vẫn có thể cùng tôi chia sẻ những phương pháp được giới thiệu ở đây. Bởi vì, không có gì là quá muộn để bắt đầu. Hy vọng bài viết này có thể giải đáp phần nào những thắc mắc của các bạn.

Cuối cùng, tôi mong rằng bất kỳ ai đang học tập và làm việc trong lĩnh vực CNTT cũng có thể tham khảo rồi đóng góp ý kiến cho bài viết. Đây là câu hỏi của mọi người, nên tốt nhất là để mọi người cùng tham gia trả lời. Một điều rất thú vị trong ngành CNTT là ứng với mỗi thắc mắc của một người, luôn tồn tại ít nhất một ai đó có thể giải đáp, thế nhưng vấn đề là hai người có thể tìm thấy được nhau hay không.

Tuyển dụng Fresher IT mới nhất cho bạn

Nhưng thật ra, khái niệm học tốt nghĩa là gì?

Chúng ta hãy xét hai sinh viên A và B vừa mới tốt nghiệp. Anh A tốt nghiệp với điểm số tuyệt vời, nhận được rất nhiều bằng khen. Dĩ nhiên, có người sẽ cho rằng anh ta học gạo, rằng anh ta sống chết vì điểm số trong suốt bốn năm rưỡi qua. Trong khi đó, anh B có điểm số không mấy ấn tượng. Anh ấy lý giải rằng thời gian được anh ấy dùng để trui rèn kiến thức chuyên ngành, kể cả những kiến thức bên ngoài phạm vi giảng dạy ở trường, nên anh ấy không quan tâm nhiều đến các kỳ kiểm tra. Dĩ nhiên, cũng có người cho rằng điểm số ấy sẽ khiến anh mất nhiều thời gian hơn đối với nhà tuyển dụng. Thật ra, bạn chỉ cần đạt được thành tích như một trong hai người trên đã là học tốt rồi. Nếu đạt được cả hai, bạn có thể tự hào rằng mình đã học rất tốt.

Ngược lại, vì không có được cả hai điều, bạn trông đợi vào tấm bằng đại học sẽ giúp mình đạt được một mục tiêu nào đó. Thế thì bạn đã học bình thường. Cuối cùng, nếu bạn không có được bất kỳ điều nào trong ba điều kể trên, thì lẽ ra bạn cần suy nghĩ về chúng sớm hơn, và đã phải có một hành động nào đó để xoay chuyển tình thế. Bạn đang ở tình trạng báo động!

Tóm lại, nếu không được như anh A hay anh B, bạn đã không học tốt ngành CNTT.

3 nguyên tắc quan trọng cần nhớ

Nếu phải đúc kết toàn bộ kinh nghiệm để thành công khi học CNTT bằng một từ duy nhất, nhiều người sẽ không ngần ngại trả lời: “học nhóm”. Hoàn toàn chính xác. Ngoài ra, bạn cũng cần biết thêm hai nguyên tắc nữa, đó là “tự đánh giá” và “tự học”.

Nguyên tắc #1: Những ích lợi của học nhóm 

Học nhóm (group-study) được đề cập rất nhiều ngay từ thời chúng ta còn học phổ thông. Nhưng vào thời điểm đó, học nhóm hay không học nhóm, điều đó không mấy khác biệt. Có khác biệt chăng là ta có nhiều cơ hội để chơi đùa với bạn bè hơn 😎 Nhưng ở môi trường đại học, đây là yếu tốt vô cùng quan trọng.

Hầu hết mọi sinh viên chúng ta đều chơi trong ít nhất một nhóm bạn nào đó. Hiểu một cách đơn giản, bạn bè là những người có chung một sở thích, suy nghĩ nào đó khiến họ kết hợp lại với nhau. Chúng ta có thể nhận ra có những hình thức kết bạn như sau:

Xét về quê quán, có nhóm Quảng Nam, nhóm Tiền Giang, nhóm Sài Gòn…
Xét về nơi ở, có nhóm Ký Túc Xá, nhóm ở chung phòng trọ,…
Xét về trường phổ thông, có nhóm Lê Hồng Phong, nhóm Năng Khiếu,…
Xét về giới tính, có nhóm các bạn nữ, nhóm các bạn nam.
Xét về giải trí, có nhóm đá banh FIFA, nhóm đánh War Craft, nhóm bắn Half Life…
Xét về ăn uống, có nhóm Lẩu dê, nhóm Lẩu Cá kèo, nhóm Bia hơi…
Xét về tình cảm, có nhóm những bạn đang yêu nhau, nhóm những bạn đang tìm hiểu
nhau…
Xét về sinh hoạt xã hội, có nhóm Mùa hè xanh, nhóm làm web, nhóm Cán bộ Đoàn…
Ngoài ra, có nhóm những người quen nhau lúc vừa vào đại học, nhóm cầu lông, nhóm văn nghệ, nhóm Linux, nhóm xe Su xì po và điện thoại Nó kìa, vân vân và vân vân.

Tất cả các nhóm trên, nhóm nào cũng có cái hay của riêng nó. Đời sinh viên của bạn cũng nên “nếm trải” qua mùi vị của vài nhóm. Nếu bạn đang ở trong một nhóm nào đó, thì sẽ thật tuyệt vời nếu bạn có thể đưa nhóm mình từ hình thức hiện tại trở thành nhóm những người bạn cùng học tốt CNTT (gọi tắt là nhóm học tốt).

  Đừng lãng phí khoảng thời gian học đại học của bạn!!

  Những cái “khó” khi mới học lập trình

Đạt được điểm số cao không phải là một nhiệm vụ bất khả thi!

Hỗ trợ nhau học tập sẽ đem lại những lợi ích lớn lao cho mỗi thành viên. Thứ nhất, đây là cách thức hiệu quả nhất để bạn có được điểm số cao trong học tập. Có một số người rất thông minh (theo đánh giá của bản thân họ và của những xung quanh), nhưng thi cử lại rất lận đận. Có một số người rất chăm chỉ, nhưng điểm số cũng không được như ý. Bởi vì họ chưa biết cách học và thi cho thật tốt.

Bí quyết đơn giản nhất để có được điểm cao trong các kỳ thi là phải “luyện” thật nhiều. Luyện gì ư? Hãy luyện các đề thi. Bạn có thể tìm thấy đề thi các năm trước ở các tiệm photo trong trường. Xem qua chúng và giải các bài trong đó, với phương châm: nhiều hơn, nhanh hơn và chính xác hơn. Nghe qua thì có vẻ dễ dàng và đơn giản quá, nhưng thật ra không có nhiều người có thể làm được.

Nhiều người hăm hở đi tìm các đề thi cũ ngay từ những tuần đầu tiên của học kỳ. Thế rồi, lòng kiên nhẫn của họ sớm bị thử thách vì có quá nhiều đề thi trong đó. Một bộ đề có từ 5 đến 15 đề. Mỗi đề có từ 4 câu hỏi trở lên, nếu là đề thi trắc nghiệm thì còn nhiều hơn nữa. Nên nhớ rằng một học kỳ lý tưởng (nghĩa là không phải trở nợ môn nào) cũng có ít nhất 7 môn học. Bỏ đi những môn lý thuyết thuần tuý, rồi làm một phép nhân đơn giản, cũng dễ thấy rằng một cá nhân không thể nào giải được phân nửa số lượng đề thi đó. Hơn nữa, làm sao người đó chắc chắn rằng những gì mình giải là đúng. Các bộ đề thi đều không có đáp án (nếu có thì cũng không nên tin tưởng hoàn toàn vào chúng). Và bởi vì phải làm ngày làm đêm mà vẫn chưa hết, họ sẽ không có thời gian để hệ thống hoá, rút ra những kỹ thuật giúp làm bài nhanh hơn. Thế đấy, họ đã làm không nhiều, không nhanh và cũng không chính xác. Rồi đến ngày thi, họ có thể bị sốc vì gặp phải một vấn đề hoàn toàn mới lạ, không làm kịp bài vì không “quen tay”, hay làm rồi mà không biết mình sai hay đúng. Đây cũng là một trong những lý do vì sao điểm số của sinh viên khoa CNTT thường rất thấp. Nếu bạn chỉ trông cậy vào sự thông minh của mình và trông cậy vào sự rộng lượng của giáo viên chấm thi, tức là bạn đã phó thác kết quả học tập của mình cho sự may rủi.

Thay vì vậy, hãy tập hợp thành những nhóm nhỏ và cùng nhau học thi. Từng người trong nhóm sẽ đảm nhận 2,3 môn. Đối với từng môn, người đó sẽ chịu trách nhiệm hệ thống lại kiến thức của toàn môn học, nhấn mạnh những điểm quan trọng. Ngoài ra, cũng cần phải giải hết các đề thi, sau đó chọn lựa những bài tinh hoa nhất rồi đề nghị những người còn
lại giải qua. Như vậy, bất kỳ người nào trong nhóm cũng có cơ hội giải qua tất cả các dạng bài tập. Hiển nhiên, điều quan trọng là làm quen được càng nhiều dạng bài tập càng tốt, chứ không phải số lượng bài tập đơn thuần. Nhưng điều này khó có thể được thực hiện nếu chỉ có một cá nhân duy nhất, bởi vì không thể phân loại được các dạng bài tập
nếu chưa từng giải qua tất cả các bài tập hiện có. Sau đó, những người trong nhóm sẽ trao đổi kết quả với nhau. Điều này sẽ giúp các thành viên biết được mình đã làm đúng hay chưa. Dĩ nhiên, kết quả cuối cùng của nhóm không hẳn đã là kết quả đúng. Nhưng đó chắc chắn là kết quả tốt hơn rất nhiều so với một người. Ngoài ra, cũng phải xét đến yếu tố xác suất. Kết quả của một nhóm 3,4 người thường cũng là kết quả tốt nhất của 200 người cùng một khoá. Vì vậy, bạn sẽ không sợ rằng điểm thi của mình thấp hơn bất kỳ ai.

Hình thức học thi tốt nhất là mỗi người tự giải đề thi ở nhà rồi gặp nhau ở một số buổi. Trong những buổi này, ngoài việc trao đổi kết quả, các thành viên còn chỉ bảo cho nhau những kỹ thuật đặc biệt giúp tăng tốc, hoặc giảm thiểu sai sót khi làm bài. Tôi và các bạn của tôi thường ghi lại các vấn đề này thành các tài liệu rồi trao đổi với nhau. Một lợi ích không thể không nhắc đến của việc cùng học thi là nó sẽ thúc đẩy các thành viên chăm chỉ hơn. Sự ganh đua, hợp tác sẽ giúp mọi người cảm thấy việc giải một số lượng lớn các bài tập trong một thời gian ngắn đỡ nhàm chán hơn so với khi làm một mình.

Nhiều người hay than thở về điểm số của mình, cho rằng do mình còn lười biếng, do khối lượng kiến thức nhiều quá, do đề thi ở đâu đâu… Có lẽ họ đã quên bài học từ thời phổ thông. Làm sao họ đã thi đậu vào ngành CNTT, nếu không phải vì đã chăm chỉ giải các đề thi đại học đến mức thuần thục? Việc thi cử ở đại học cũng không khác mấy, thế mà họ đã sớm ngủ quên trên chiến thắng. Hãy làm các bài tập trong sách, do giảng viên cho, trong các bộ đề. Và hãy cùng làm với những người bạn của mình. Đó là bí quyết đơn giản để có điểm số cao.

Nhóm học tốt giúp tiếp thu kiến thức hiệu quả hơn

Nếu học CNTT hơn bốn năm trời mà chỉ có luyện giải bài tập thì thật còn khổ hơn sống dưới địa ngục. Nhưng bạn đừng quá thật vọng. Theo quan sát của tôi, ngay cả những sinh viên đạt được điểm số cao nhất ở khoa CNTT cũng chỉ dành tổng cộng tối đa là 6 tuần trong một học kỳ để tập trung học thi. Mà một học kỳ có đến 15 tuần, cộng thêm 3 đến 4 tuần dành cho thi cử. Ngoài ra còn chưa kể đến khoảng thời gian nghỉ hè và nghỉ Tết. Như vậy, dù cho thi cử có là sự đối phó đối với bạn, thì bạn vẫn còn rất nhiều thời gian để học và làm những gì mà bạn cho rằng thật sự cần thiết.

Ngoài điểm số, ranh giới giữa một sinh viên học tốt và một sinh viên học chưa tốt còn nằm ở chỗ ai biết tận dụng khoảng thời gian rộng rãi này. Một nhóm học tập hoạt động hiệu quả sẽ giúp các thành viên biết làm đúng việc vào đúng thời điểm.

Chẳng hạn, câu hỏi “Tôi nên học ngôn ngữ lập trình nào đây?” là thắc mắc thường thấy nhất của sinh viên năm một, năm hai. Nếu chỉ có một mình, bạn có thể sẽ loay hoay mãi với câu hỏi này, hoặc sự lựa chọn của bạn là không chính xác, hoặc bạn đã học được đúng ngôn ngữ cần thiết những chưa đạt được đến độ sâu kiến thức. Giáo viên hay những sinh viên khoá trên cũng có thể giúp đỡ, nhưng sẽ không hiệu quả bằng bạn bè cùng giúp đỡ lẫn nhau. Bởi vì người hiểu khả năng của bạn nhất chính là bản thân bạn, người thứ hai là người thường xuyên làm việc với bạn. Người giỏi cách mấy nhưng không hiểu về bạn thì khó có thể đưa ra một lời khuyên phù hợp được.

Thực sự thì rất khó để đưa ra một phương pháp cụ thể để hướng dẫn một nhóm đi đến thành công. Có lẽ cách tốt hơn là tôi nêu ra những kinh nghiệm và những nguyên tắc cơ bản. Thứ nhất, mọi hoạt động phải có mục tiêu rõ ràng.

“Chúng ta sẽ học Java trong học kỳ này” là một mục tiêu. Nhưng chưa rõ ràng. Học Java để làm gì? Làm sao chắc rằng chỉ cần một học kỳ là xong? Học xong rồi thì làm gì tiếp? Học như thế nào đây? Nhiều nhóm bắt đầu với một mục tiêu như trên, nhưng rồi không xác định được những việc làm cụ thể để ràng buộc các thành viên. Thế rồi học kỳ này trôi qua một cách nhanh chóng. Sang học kỳ mới, mục tiêu đổi thành: “Chúng ta sẽ cố gắng học Java trong học kỳ này”. Lại một học kỳ trôi qua. Đến học kỳ kế tiếp, mục tiêu mới sẽ là “Chúng ta sẽ học C# trong học kỳ này”. Repeat … Until 3>5.

“Chúng ta sẽ viết một chương trình tương tự như Address Book của Windows, viết bằng Java”. Đây là một mục tiêu rõ ràng hơn. Do đó, nó có khả năng đưa nhóm đến thành công cao hơn. Nhưng chưa đủ. Cần làm rõ hơn nữa. Cho đến khi nào các thành viên cảm thấy rằng việc học Java cũng thúc ép như việc thi học kỳ, tức là nhóm đã tạo ra được một môi trường hiệu quả cho các thành viên cùng học tập.

Thứ hai, phải kiên trì. Bất kỳ nhóm học tập nào cũng gặp khó khăn, không sớm thì muộn. Có thể là do khó khăn của riêng một cá nhân, chẳng hạn không đủ thời gian, chưa đủ trình độ, không hợp tính,… Cũng có thể cách tổ chức nhóm chưa hiệu quả. Cho dù hoàn cảnh có thật vọng thế nào đi nữa, hãy cố gắng tiến lên. Vì nếu bỏ cuộc, bạn chỉ còn lại hai lựa chọn. Hoặc là tập trung hoàn toàn vào việc học vì điểm số, nó không thú vị lắm đâu. Hoặc là buông xuôi tất cả, nghĩa là cuộc đời sinh viên của bạn đã chấm hết.

Nguyên tắc cuối cùng, nếu một người trong nhóm nản chí, bạn hãy truyền sự kiên nhẫn của mình cho người đó
. Đây là lợi ích lớn nhất và cũng là duy nhất mà việc học một mình không thể có được. Edison từng nói: “Nhiều người bỏ cuộc ngay khi họ ở cách sự thành công một khoảng rất ngắn”. Sự động viên, giúp đỡ, ganh đua lẫn nhau trong nhóm tạo nên động lực mạnh mẽ cho các thành viên. Theo kinh nghiệm của riêng tôi, một nhóm học tập xuất phát từ nhóm những người bạn thân thường dễ xây dựng được những giá trị này hơn.

Hãy liên kết lại

Nếu bạn đang lẻ loi và cảm thấy mình học chưa tốt. Hãy tìm những người bạn. Nếu bạn đang lẻ loi nhưng tin rằng mình đang học tốt, bạn vẫn nên tìm những người bạn để có thể học tốt hơn. Hầu như những nhân vật thành công trong ngành CNTT đều có những người bạn cũng thành công không kém, họ đã từng cùng học tập và làm việc với nhau suốt thời tuổi trẻ: Bill Gates và Paul Allen ở Microsoft, Jerry Yang và David Filo ở Yahoo!,…

Một nhóm học tập hiệu quả được đánh giá qua một tiêu chuẩn duy nhất: nhóm ấy có giúp các thành viên hài hoà cả đối nội (học các môn trong trường và có điểm số tốt) lẫn đối ngoại (học những kiến thức vốn rất rộng lớn trong ngành CNTT). Nói cách khác, nhóm ấy có giúp thành viên học tốt hơn hay không.

Nên nhớ rằng, tập hợp những người học tốt lại với nhau không phải là cách để thành lập nhóm học tốt. Ngược lại, nhóm học tốt là nhóm mà nhờ chơi với nhau, những người bạn trong đó trở thành những người học tốt.

Người đời thường nói: chọn bạn mà chơi. Tương tự, hãy nói cho tôi biết bạn đang chơi với ai, tôi sẽ cho biết bạn có đang học tốt CNTT hay không 🙂 .

  Top 7 phương pháp tự học lập trình tốt nhất dành cho Developer

Nguyên tắc #2: Phải biết tự đánh giá mình

Không ai trong chúng ta lại muốn rằng sau bốn năm rưỡi học đại học, trình độ của mình so với lúc mới vào cũng chẳng khác là bao. Những viễn cảnh đen tối ấy hoàn toàn có thể xảy ra nếu bạn không có khả năng tự đánh giá bản thân mình.

Tự đánh giá có nghĩa là biết mình đang ở đâu. Ngay học kỳ đầu tiên, có thể bạn sẽ cảm thấy thua thiệt so với một số bạn bè. Nhưng đừng than thở rằng trước kia (hồi phổ thông), bạn chưa được chuẩn bị về kiến thức tin học cơ bản, chưa từng học qua lập trình, chưa quen đọc sách tiếng Anh. Cũng đừng nản chí nếu bạn chưa có máy vi tính, chưa tiếp xúc với Internet. Đó là những suy nghĩa tiêu cực và sẽ làm giảm sức phấn đấu của bạn. Mọi sinh viên trúng tuyển vào ngành CNTT đều dựa trên năng lực của họ, hoàn toàn không căn cứ vào điều kiện hay kiến thức chuyên ngành sẵn có. Tất cả được giả định là bắt đầu từ con số 0. Mọi người cùng có một chương trình học, cùng có một lượng thời gian, hoàn toàn bình đẳng như nhau. Nếu bạn chưa có gì, tức là bạn giống như phần đông sinh viên ở đây. Còn nếu bạn đã có sẵn nền tảng về tin học, đấy là một thuận lợi nhất định, nhưng không bảo đảm bạn sẽ học tốt hơn những người không có sự thuận lợi ấy. Xin nhắc lại, hoàn toàn không có sự bất lợi giữa những sinh viên khi mới vào đại học. Dĩ nhiên, ở đây tôi không xét đến những trường hợp đặc biệt khó khăn về tài chính, những bạn sinh viên này thật sự cần sự trợ giúp từ nhiều nguồn khác nhau.

Tự đánh giá còn có nghĩa là biết được bản thân mình cần gì và không cần gì. Một năm học đại cương có thể làm bạn lo lắng không biết mình cần chuẩn bị gì để bước vào chuyên ngành. Đúng là chương trình đại cương không có những môn học mang tính chuẩn bị hoặc định hướng cho sinh viên. Như đã nói, đây là lúc bạn nên cùng với những người xung quanh để hỗ trợ nhau tìm ra hướng đi cho chính mình. Bạn nên tìm hiểu từ sách báo, từ giảng viên, từ những sinh viên khóa trước. Nhưng quan trọng là bạn phải dám đưa ra một quyết định chính xác mình sẽ chọn lựa hướng đi nào. Sau đó hãy cố gắng thực hiện nó, nếu cùng với những người bạn khác thì càng tốt. Có thể vài lần thất bại mới có thể giúp bạn tìm ra được điều mà mình thực sự cần. Trong phạm vi hiểu biết của tôi, đó là cách tốt nhất để thực hiện.

Nhưng quan trọng hơn là biết nhận diện những gì thực sự không cần thiết và gạt hẳn chúng sang một bên. Ngành CNTT có rất nhiều lĩnh vực, muốn chuyên sâu vào một lĩnh vực đòi hỏi rất nhiều thời gian và công sức. Không chỉ riêng sinh viên CNTT, mà hầu như rất nhiều bạn trẻ Việt Nam có khuynh hướng ôm đồm mọi thứ, kết cuộc là không tinh thông được thứ nào. Tinh thông ở đây có nghĩa là làm được việc trong lĩnh vực đó, hoặc có thể thích ứng nhanh với lĩnh vực ấy khi cần thiết. Biết nhiều mà chỉ hời hợt thì cũng giống như là không biết gì cả.

Một ví dụ khác, nhiều bạn sinh viên băn khoăn khi nghe nói rằng các trung tập đào tạo lập trình viên quốc tế như Aptech, Informatics, NIIT,… có chương trình đào tạo hiện đại và thực tế hơn rất nhiều so với trường đại học. Trong trường không dạy C/C++/C#, Java, SQL Server, ASP, JSP,… thì làm sao mai mốt đi làm được. Nếu suy nghĩ như vậy tức là bạn đã chưa tự đánh giá đúng trình độ của mình. Bạn đang được đào tạo để trở thành kỹ sư, trong khi những nơi kia đào tạo các kỹ thuật viên. Không có cấp bậc nào là “cao cấp” hơn, bởi vì chúng phục vụ cho những mục đích hoàn toàn khác nhau. Các trung tâm đào tạo bạn cách sử dụng công cụ, còn trường đại học đào tạo bạn suy nghĩ về công cụ và tạo ra công cụ. Dĩ nhiên, bạn phải biết cách sử dụng công cụ trước. Nhưng những kiến thức này được giả định là bạn phải biết và không có môn học cụ thể nào về chúng. Nếu bây giờ bạn chưa biết thì phải tự học để mà biết. Trong trường hợp bạn không thể tự học, mà nhất định phải đi học ở các trung tâm, có thể bạn đã ôm đồm nhiều thứ một lúc. Đó là tình trạng mà báo chí thường than phiền: thầy không ra thầy, thợ không ra thợ.

Ngoài ra, tự đánh giá cũng có nghĩa là biết nhìn nhận mọi sự việc theo đúng bản chất của nó. Bởi vì kiến thức trong ngành CNTT thật rộng lớn mà trình độ của mọi sinh viên khi mới vào trường thì đều chưa cao, nên các sinh viên thường hay bị dao động bởi cái gọi là “nghe nói rằng”. Chẳng hạn:

– Nghe nói rằng C++ rất khó nên chưa dám học. Nghe nói rằng Java chạy rất chậm nên chưa muốn học.
– Nghe nói rằng phần cứng rất “chua”, lại không bảo đảm việc làm trong tương lai nên không muốn quan tâm. Nếu buộc phải học thì học một cách hời hợt.
– Thậm chí, nghe nói rằng đề thi cuối kỳ sẽ lấy từ sách này nên đổ xô đi mua cuốn sách ấy.
Thật hài hước phải không. Bạn đang học ngành công nghệ thông tin. Thông tin là những gì có thể tăng sự chắc chắn về một vấn đề nào đó. Nhìn sâu xuống dưới, thông tin được thể hiện bằng hai con số: 0 và 1 (không và có). “Nghe nói rằng” là những gì hoàn toàn không chắc chắn. Đừng để chúng điều khiển bạn.
Một biểu hiện quan trọng của tự đánh giá là phải biết lắng nghe và đưa ra ý kiến của mình. Biểu hiện của người thiếu tự tin là không dám nghe người thực sự am hiểu nói (mà chỉ quan tâm đến những cái “nghe nói rằng”), trong khi biểu hiện của người tự mãn là luôn nhận định đúng hoặc sai ngay khi người khác chưa trình bày xong vấn đề. Ví dụ mẩu đối thoại sau:
A : đoạn mã này có thể được viết bằng Java…
B : không thể nào, bởi vì một chương trình viết bằng Java chạy chậm hơn viết bằng C++ đến 10 lần, phải viết bằng C++.
A (chưa kịp nói) : bởi vì thời gian để thực hiện đoạn mã này chỉ chiếm 10% tổng thời gian thực hiện chương trình nên nó không nhất thiết là nơi cần phải tối ưu hóa tốc độ. Hơn nữa, nó được chạy trên máy chủ có tốc độ nhanh gấp 10 lần so với máy thường. Cuối cùng, đối với đoạn mã này thì dùng Java có thể rút ngắn thời gian viết code và debug hơn so dùng C++ xuống còn phân nửa.

Trong cả hai trường hợp, không biết lắng nghe sẽ làm cho bạn không tiếp thu được kiến thức từ những người khác. Ngược lại, khi đã lắng nghe xong, bạn phải có ý kiến của riêng mình. Một phong cách đáng chán của sinh viên khoa CNTT (tôi phải thừa nhận là mình cũng nằm trong số này) là không bao giờ phát biểu, dù chỉ là đúng hoặc sai, khi giảng viên hỏi. Tôi còn nhớ một lần thầy giáo hỏi: “Ai cho rằng cách này đúng?”. Có khoảng 5% giơ tay. “Ai cho rằng cách này sai?”. Cũng có khoảng 5% giơ tay, trong đó 2,3% là những người đã giơ tay lần đầu ;-0 Hơn 90% còn lại là cả một sự bí hiểm!
Có thể bạn không biết gì cả, hoặc đã biết những không thèm giơ tay vì chúng quá tầm thường. Khi đó, nên nghĩ lại xem bạn có mặt ở lớp học làm gì, bởi vì kiến thức quá cao siêu hoặc quá tầm thường đều cho thấy bạn đã không thích hợp với chúng. Ngược lại, nếu chỉ vì bạn đã đánh giá sai về chúng, thì hãy tự đánh giá lại cho chính xác.

Cuối cùng, tự đánh giá có nghĩa là biết nhận lấy thất bại. Khó có ai học suốt 4 năm trời mà chưa bao giờ bị điểm dưới trung bình, cũng có khi bạn thua kém bạn bè ở chính sở trường của mình, hoặc liên tiếp nhận các thất bại khiến bạn nghi ngờ khả năng của mình. Tôi đã từng học môn lý A1 đến 3 lần mới qua được. Tôi vẫn có nhớ cảm giác chua xót khi bạn bè tung tăng chuẩn bị vào chuyên ngành thì tôi vẫn phải lầm lũi làm luận án “tiến sĩ” về Lý A1. Hay như người bạn của tôi đã từng rớt môn Giáo dục quốc phòng, môn học mà ai-cũng-cho-rằng-không-thể-rớt. Nhưng chúng tôi đều có điểm chung là cảm thấy mạnh mẽ hơn sau những cú ngã tê tái đó.

Khả năng của một người là khái niệm vô hình, chỉ có thể đánh giá qua các kết quả cụ thể. Điều gì quyết định đến kết quả? Đó là phong độ và đẳng cấp của bạn. Chẳng hạn, phong độ trong một ngày thi sẽ ảnh hưởng phần nào đến kết quả bài thi hôm đó. Nhưng phần lớn là do đẳng cấp của bạn trong môn đó. Phong độ có thể thay đổi theo từng ngày, có thể do thời tiết, do người yêu của bạn, do ngày hôm trước có trực tiếp bóng đá,… Nhưng đẳng cấp thì chỉ tiến hoặc lùi sau một thời gian tương đối dài. Trở lại ví dụ trên, có thể trong một ngày xui xẻo, phong độ làm bài thi tệ hại đã xóa sạch đẳng cấp cao vốn có của bạn. Bạn phải nhận điểm thấp. Bạn cũng phải biết đánh giá đúng bản chất của thất bại, bởi vì:

Phong độ là nhất thời, đẳng cấp mới là mãi mãi .

Sau đó hãy nhận lấy thất bại, từ đó bạn sẽ biết cần cải thiện phong độ hay đẳng cấp của mình. Còn nếu bạn vẫn ủ rũ chẳng biết làm gì, hoặc ngược lại, bạn cố nghĩ ra những lý do khách quan để không phải nhìn vào thực chất vấn đề, có thể bạn sẽ nhận thêm một kết quả tồi tệ hơn thế nữa.

Tóm lại, bạn cần phải biết mình đang đứng ở đâu và nên đi về hướng nào. Có như vậy bạn mới xác định được mình vừa tiến bộ hay thụt lùi. Tất cả những điều trên hoàn toàn là do bạn tự đánh giá lấy.

Nguyên tắc #3: Tự học để đi tiếp con đường phía trước 

Nếu chỉ xét khoảng thời gian bốn năm rưỡi (hay nhiều hơn?) học CNTT, tự học chưa hẳn là yếu quan trọng nhất. Nhưng nếu xét đến cả một sự nghiệp trong thời gian dài, đây là điều phải nêu đầu tiên.

Đặc thù của ngành CNTT là kiến thức thay đổi rất nhanh. Phần cứng, cụ thể là vi xử lý, phát triển theo định luật Moore, cứ mỗi 18 tháng thì tốc độ CPU tăng gấp đôi. Đây là sự phát triển cực nhanh nếu so với những ngành nghề khác. Nhưng đó cũng chưa phải là lĩnh vực có tốc độ phát triển nhanh nhất. Phần mềm còn phát triển nhanh hơn, bởi vì bạn luân thấy phần cứng ra đời là để đáp ứng nhu cầu của phần mềm ;-> Internet cũng là một môi trường phát triển chóng mặt.

Bạn làm gì để theo kịp tốc độ đó? Chỉ có thể là tự học.

Nhà trường chỉ có thể hỗ trợ cho bạn phần nền tảng (mặc dù hiện tại nhà trường cũng phải cải cách nhiều mới có thể thực hiện được đầy đủ nhiệm vụ này), còn bạn phải tự hướng dẫn mình đi trên con đường riêng.

Trở lại vấn đề thắc mắc muôn thuở của sinh viên, những kiến thức như C++, Java, ASP, JSP, PHP, Access, SQL Server… là phải tự học.

Ngoài ra, kỹ năng làm việc nhóm, kỹ năng giao tiếp, anh văn chuyên ngành,… cũng phải tự học là chính. Nhà trường chỉ có thể hỗ trợ phần nào.

Nhìn chung, có hai nhóm kiến thức bạn cần phải tự học. Thứ nhất, đó là những kiến thức được giả định là bạn phải biết. Những điều tôi vừa liệt kê ở trên nằm trong nhóm này. Thứ hai, đó là những kiến thức mà không một ai có thể dạy bạn. Không ai khác có thể chỉ rõ từng bước để bạn có thể nghiên cứu ra một công trình khoa học hoàn toàn mới, không ai khác có thể rèn luyện cho bạn kỹ năng lập trình thuần thục, không ai khác có thể giúp bạn mọi việc để dựng nên một công ty tin học,… Người đó chỉ có thể là bạn.
Ở giữa hai nhóm trên, đó là những kiến thức mà nhà trường sẽ trang bị cho bạn.

Nhưng phải tự học thế nào? Bạn là người thầy giáo tốt nhất, và sách (cùng với Internet, CD, thư viện…) là phương tiện để người thầy đó truyền đạt kiến thức cho bạn.

Một số người nhìn vào các giáo trình tin học dày cộm và lắc đầu: “Tôi không đọc nổi!”. Đúng vậy, không một ai có thể đọc nổi những cuốn sách đó theo cách mà họ nghĩ: đọc toàn bộ từ đầu đến cuối trong một thời gian ngắn rồi thôi. Trong số lượng nhỏ nhoi những cuốn sách tin học mà tôi đã từng đọc, phải thành thật thừa nhận rằng chưa có cuốn nào mà tôi đọc trọn vẹn cả, tức là đọc không sót đoạn nào, giống như đọc tiểu thuyết vậy. Tôi chỉ đọc những phần mà tôi cảm thấy cần thiết vào thời điểm đó, và ít khi nào tôi đọc ngấu nghiến một cuốn sách. Ngoài ra, tôi cũng thường xuyên phải xem lại những sách mà mình đã đọc qua bởi vì có thể ở những lần đọc sau này, tôi mới hiểu ra được vấn đề mà sách muốn trình bày.

Dĩ nhiên, việc tự học sẽ chỉ hiệu quả nếu tìm được những cuốn sách tốt. Cách đọc sách và tìm sách để đọc là một vấn đề không đơn giản, tôi sẽ tổng hợp lại trong một tài liệu khác, đi kèm với tài liệu này. Chỉ lưu ý rằng bạn đừng theo quán tính của một số người, luôn than thở rằng thiếu thốn tài liệu, thiếu tiền bạc để mua tài liệu nên không thể tự học được. Không, hoàn toàn không phải như vậy, cái mà họ thiếu chính là tinh thần ham học hỏi và một lòng dũng cảm để thừa nhận sự thiếu thốn đó.

Nhớ rõ 3 nguyên tắc trên: Ngay từ bây giờ, bạn hãy tìm những người bạn có cùng suy nghĩ với mình về nguyên tắc:

Group-study – Học nhóm
Self-assessment – Tự đánh giá
Self-study – Tự học

Rồi hãy cùng nhau thực hiện.

5 căn bệnh phổ biến ở khoa CNTT

Học CNTT không phải là việc dễ dàng. Nếu không cẩn thận, bạn dễ mắc phải các căn bệnh sau đây.

Bệnh than

Đây không phải là căn bệnh từng gieo rắc kinh hoàng cho nước Mỹ, mà là bệnh than thở. Hầu như mọi sinh viên học CNTT đều mắc bệnh này. Hãy nghe họ than thở những gì:

– Than rằng học ở đây chán quá, khó quá, không thiết thực quá. Nhưng họ lại không trả lời được giảng dạy thế nào để họ không chán, không khó, thiết thực hơn. Họ lại thường so sánh với các trường ngoài, trung tâm bên ngoài, và cả nước ngoài. Vậy thì tại sao họ lại ở đây nhỉ?
– Than rằng học mấy năm rồi mà thấy chẳng tiến bộ.
– Than rằng không biết làm gì khi ra trường. Thế thì họ đã làm những gì khi ở trong trường?
– Họ than thở những điều trên từ học kỳ này sang học kỳ khác. Thế hệ sinh viên này đến thế hệ sinh viên khác cũng than thở như vậy.

Bệnh nhát

Thường thì sinh viên than thở về một môn học nào đó thì cũng sẽ gặp ngay môn đó. Chẳng hạn, than rằng phần cứng rất “oải” thì y như rằng sẽ gặp đồ án phần cứng. Lúc này thì bệnh than biến chứng trở thành bệnh nhát.

Mắc bệnh nhát thì không dám làm điều gì đang ở ngay trước mắt. Không làm nghĩa là chết, những vẫn không dám làm. Có thể nói, họ thà chết chứ không chịu hy sinh. Chẳng hạn, vừa nghe nói môn học X này là môn “sát thủ” , họ đã buông súng ngay từ tuần lễ đầu tiên của học kỳ. Thế là rớt, họ lại truyền đạt điều trên cho các đàn em yếu bóng vía, và thật tội nghiệp những em này. Bệnh này lây rất nhanh.

Hoặc, có quá nhiều lựa chọn nên cũng không dám chọn và làm một cái nào. Cuối cùng thì loay hoay mãi không biết mình nên chuyên phần cứng hay phần mềm, nên học C++ hay Java. Nếu họ chịu làm điều gì đó thì dù chưa chọn được đúng ý mình, trong trường hợp xấu nhất họ cũng biết được rằng mình không phù hợp với phần cứng, cũng không phù hợp với C++. Bây giờ thì còn Java để thử tiếp.

Bệnh hời hợt 

Nhưng nếu bị buộc phải chọn lựa do hoàn cảnh thúc ép, họ sẽ làm một cách hời hợt. Chẳng hạn, nhận phải một đồ án xương xẩu, họ nghĩ thôi thì làm qua loa cho xong rồi học kỳ sau sẽ tìm được cái ngon hơn. Ai chắc rằng sẽ có cái ngon hơn, hay lại phải gặp cái mà họ cứ cho rằng là xương xẩu? Làm qua loa thì mãi sẽ không bao giờ thoát được cái vòng luẩn quẩn đó, nó còn tước mất cơ hội để mình thấy được điều đó thật ra cũng không xưởng xẩu như đã nghĩ.

Bệnh hời hợt ngăn cản ta đạt đến đỉnh cao trong một môn học nào đó. Nếu học một môn học mà việc kết quả cao, thấp, đậu, rớt, chương trình học, bài tập lớn không làm bạn có bất kỳ cảm xúc nào, chỉ đơn giản là đã qua được nó, thì bạn đã đánh mất một cơ hội của mình. Cần nhớ rằng, giáo trình học, giảng viên môn học đó có thể chưa làm bạn hài lòng, nhưng bản thân môn học đó là thực sự cần thiết. Học hời hợt chỉ vì không hợp với giảng viên, điều đó có nên hay không?

Bệnh la lối

Bệnh này thường xuất phát từ bệnh hời hợt, nó cũng tương tự như bệnh than nhưng sự bộc phát rất dữ dội. Sau khi loay hoay mãi trong cái vòng luẩn quẩn trên, họ kết tội cái đồ án đã làm hại họ, bộ môn này đã kìm hãm họ, nhà trường đã không tạo môi trường thuận lợi cho họ. Thế mà, họ không nhìn xem những người khác đã làm gì để không rơi vào tình trạng như họ, hoặc những người khác đã làm gì để vượt qua tình trạng đó.

Bệnh la lối là nguy hiểm nhất. Nó hủy hoại người bệnh một cách tàn khốc. Bệnh này cũng khó chữa nhất, nhất là khi nó đã vào thời kỳ cuối.

Bệnh lười

Bệnh này là nguồn gốc gây ra 4 căn bệnh đã kể trên. Lười biếng tức là đã tự đặt mình vào tình thế bị động.
Không thường xuyên làm bài tập sẽ làm cho kết quả thi thấp, thậm chí bị rớt.
Không chịu đọc sách, không chịu mày mò sẽ làm cho kiến thức nghèo nàn đi.
Và thế là mắc phải bệnh than. Cũng vì lười biếng mà bệnh than chuyển thành bệnh nhát, rồi bệnh hời hợt, rồi bệnh la lối. Bệnh lười lại dễ lây nhất. Mình lười biếng sẽ làm cho bạn của mình bị ảnh hưởng theo. Bạn mình siêng năng thì mình cũng siêng năng hơn.

  • Tránh xa những căn bệnh trên
  • Thường xuyên tự chuẩn đoán để biết mình đang mắc phải bệnh gì, rồi tìm cách chữa trị chúng. Nhưng nguyên tắc quan trọng là: phòng bệnh hơn chữa bệnh. Để phòng bệnh, hãy làm như sau:

– Luôn suy nghĩ tích cực, đồng thời chuẩn bị những điều bất lợi sắp tới.
– Khi chúng đến, đánh giá chúng.
–  Chấp nhận chúng.
– Suy nghĩ tích cực để có thể “hưởng thụ” chúng.
– Và tiếp tục như vậy.

Bạn cần có một kế hoạch ngay từ đầu

Việc học tập được hoạch định và tổ chức tốt sẽ giúp ích cho bạn rất nhiều trong suốt thời gian học CNTT. Cụ thể, bạn cần xây dựng cho mình một kế hoạch học tập, trong đó trình bày những mục tiêu mà bạn phấn đấu đạt được, khả năng của bạn, những việc mà bạn cần làm và thời gian dành cho chúng.

Bản kế hoạch này sẽ giúp bạn có phương hướng rõ ràng trong học tập. Nó chỉ cho bạn biết những thứ bạn cần học ở thời điểm hiện tại, điều gì chưa cần quan tâm ngay vào lúc này, nó còn đưa bạn vào một khuôn khổ để bạn chuyên cần hơn. Thiếu bản kế hoạch, bạn dễ bị rơi vào tình trạng hoang mang, chẳng biết học gì, làm gì khi học CNTT.

Đối với những sinh viên có tổ chức, học kỳ bắt đầu từ thời điểm trước đó khoảng hai tuần. Đây là thời điểm họ xây dựng kế hoạch cho học kỳ sắp tới. Ngược lại, đối với những sinh viên chưa có tổ chức, học kỳ mới bắt đầu từ tuần thứ hai hay thứ ba trở đi, thậm chí là tuần thứ bảy (tức là tuần trước khi thi giữa kỳ). Họ không có kế hoạch cho từng môn, để rồi hằng tuần cứ đến lớp rồi về nhà mà không ôn luyện gì cả. Đến lúc gần thi thì mới vắt giò lên cổ mà chạy. Thường thì lúc đó đã quá trễ, kể cả với những người vốn được đánh giá là thông minh nhất, nhưng một người không có tổ chức thì làm sao có thể gọi là thông minh nhỉ?

Kế hoạch và tiến trình công việc phải song hành

Nguyên tắc cơ bản để lập kế hoạch học tập là các bản kế hoạch của bạn phải phản ánh đúng với hoàn cảnh của bạn, có như thế thì chúng mới mang tính khả thi. Một bản kế hoạch đầy đủ chi tiết, cố định ngay từ đầu, rồi bạn phải theo đó mà làm cho đến hết là không phù hợp với hoàn cảnh học tập của sinh viên. Chúng ta chưa đủ khả năng và kinh nghiệm để làm điều này.

Thay vì vậy, bản kế hoạch chỉ nên bắt đầu với những việc chắc chắn, mà theo đó bạn có thể thực hiện ngay và thực hiện một cách trọn vẹn. Sau đó, dựa vào những gì bạn đã làm, bạn sẽ điều chỉnh và bổ sung lại bản kế hoạch. Tóm lại, có Kế hoạch cũng cần được ghi lại trên giấy, hoặc soạn thảo bằng máy vi tính. Thậm chí, nếu bạn biết dùng Microsoft Project thì càng tốt. Nếu chỉ xác định trong đầu, bạn sẽ quên kế hoạch của mình vào một lúc nào đó, và sẽ không có cơ sở để đánh giá lại những gì mình đã làm. Ngoài ra, việc ngồi xuống, phác thảo ra bản kế hoạch của mình sẽ mang lại cho bạn niềm hưng phấn để bắt đầu với công việc mới.hai quá trình song song ở đây.

Nhưng cẩn thận, đừng dành quá nhiều thời gian chỉ để viết kế hoạch mà không làm gì cả. Phần lớn thời gian của bạn là để thực hiện những gì bạn đã hoạch địch. Đừng làm ngược lại.

“Too much scheduling will kill you, if you can’t make up your mind.”

Bạn cần nhiều thông tin cụ thể hơn?

Dự định ban đầu của tôi là viết một tài liệu duy nhất để hướng dẫn các sinh viên khóa sau của mình về những kinh nghiệm học tập mà tôi biết được. Nhưng vấn đề ở chỗ nếu tôi đưa vào quá nhiều chi tiết, tài liệu này trở nên rất dài và rất khó quản lý mỗi khi cần cập nhật. Do đó, tôi quyết định chia ra làm hai tài liệu liên quan đến nhau. Đây là tài liệu thứ nhất, trong đó chỉ nêu những nguyên tắc cơ bản nhất mà mọi sinh viên đều nên biết khi học  CNTT.

Tài liệu thứ hai sẽ thú vị hơn. Nó sẽ chứa đựng những câu hỏi mà các sinh viên thường thắc mắc, kèm theo đó là những câu trả lời xác đáng nhất. Mọi sinh viên đều có thể tham gia đóng góp câu hỏi, câu trả lời vào đây. Tôi cũng mong các giảng viên cũng sẽ tham gia vào đây. Như vậy, sinh viên sẽ tìm được nơi có thể giải đáp những thắc mắc của mình, mà giảng viên cũng không phải mất thời gian trả lời một câu hỏi nhiều lần.

Trong tài liệu thứ hai, tôi cũng sẽ tham gia vào việc trình bày những kinh nghiệm cụ thể. Chẳng hạn, bài viết này chỉ nói đến những nguyên tắc chung của việc học nhóm, tự học, lập kế hoạch, còn những cách làm cụ thể sẽ đưa tôi giới thiệu trong tài liệu thứ hai. Tạm thời, tôi đặt tên tài liệu đó là: DIT – FAQs (hay Những câu hỏi thường gặp khi học CNTT).

Một điều nữa mà tôi cần nói rõ là tài liệu này được viết dưới góc nhìn của một sinh viên. Tất cả những khó khăn, suy nghĩ, cách giải quyết ở đây đều mang ảnh hưởng trên. Có thể bạn sẽ nghĩ: “Vậy khoa CNTT làm gì trong trường hợp này?” khi đọc qua tài liệu này. Nhưng, điều đó hoàn toàn nằm ngoài phạm vi của một sinh viên, tức là nằm ngoài phạm vi bài viết này. Chúng ta cần phải kiến nghị lên trên khi có một vấn đề bức xúc, nhưng giải quyết những kiến nghị đó không phải là trách nhiệm của chúng ta. Thay vào đó, chúng ta nên tập trung vào những gì mà một sinh viên cần làm.

Lời kết

Tôi hy vọng bạn sẽ tìm được điều gì đó bổ ích từ tài liệu này. Dĩ nhiên, việc nén bốn năm rưỡi các kinh nghiệm của nhiều thế hệ sinh viên vào trong 20 trang giấy không phải là điều dễ dàng. Hơn nữa, không phải mọi điều tôi trình bày ở đây đều hoàn toàn chính xác, và thậm chí còn rất nhiều điều chính xác đã bị tôi bỏ sót không đưa vào đây.

Do đó, tôi hy vọng rằng bạn, miễn là bạn đã, đang, và sinh học tập hay làm việc trong lĩnh vực CNTT, bạn có thể đóng góp vào bài viết này. Các góp ý, tranh luận, bổ sung đều được hoan nghênh . Chắc chắn, tôi sẽ thường xuyên cập nhật tài liệu này theo thời gian. Bởi vì, việc học CNTT sẽ rất khác đi qua các thế hệ sinh viên. Nhưng, tôi sẽ chỉ có thể làm điều này nếu nhận được sự ủng hộ từ các bạn.

Các bạn sinh viên có thể tham khảo thêm các việc làm ngành CNTT như fresher python, fresher android, fresher devops từ các công ty HOT nhất nhé!

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

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

Xem thêm việc làm it hàng đầu hot nhất trên TopDev

ĐỐI THOẠI VỚI DOANH NGHIỆP HÀN QUỐC VỀ PHÁT TRIỂN NHÂN LỰC CHẤT LƯỢNG CAO

Chiều 18/7, tại Nhà Điều hành ĐHQG-HCM đã diễn ra tọa đàm “Hợp tác phát triển nguồn nhân lực chất lượng cao: Đối thoại với doanh nghiệp Hàn Quốc” do ĐHQG-HCM tổ chức. PGS.TS Vũ Hải Quân – Giám đốc ĐHQG-HCM, đã đến dự.

Hiệu trưởng ĐHQG Seoul cho rằng các đại học và chính quyền có trách nhiệm quan trọng trong việc trao đổi nhân tài giữa Hàn Quốc và Việt Nam. Ảnh: Thiện Thông

Tạo điều kiện trao đổi nhân tài

Tọa đàm quy tụ lãnh đạo các địa phương TP.HCM, Bình Dương, Bình Phước, Tây Ninh; lãnh đạo các tập đoàn Hàn Quốc lớn hiện đang đầu tư tại Việt Nam như CJ Group Vietnam, Mirae Asset Vietnam, Shinhan Bank, TopDev, LG Vina Cosmetics, Samsung Electronics… Sự kiện còn có sự tham dự của lãnh đạo ĐHQG-HCM, ĐHQG Hà Nội, và đại diện đến từ ĐHQG Seoul (Hàn Quốc) với vai trò là cầu nối, thúc đẩy sự hợp tác giữa các doanh nghiệp Hàn Quốc và các trường đại học tại Việt Nam.

Đây là cơ hội để các bên thảo luận về việc tăng cường hợp tác giữa “ba nhà” (nhà nước, nhà trường, doanh nghiệp) trong phát triển nguồn nhân lực chất lượng cao; xác định giải pháp và các lĩnh vực hợp tác giữa nhà trường và doanh nghiệp Hàn Quốc để thu hẹp khoảng cách giữa đào tạo và nhu cầu thị trường, giải quyết thách thức về hiện trạng thiếu hụt lực lượng lao động tay nghề cao của các tập đoàn Hàn Quốc đang đầu tư tại Việt Nam. Ngoài ra, tọa đàm còn thảo luận về cơ hội hợp tác nghiên cứu, thành lập đơn vị Nghiên cứu và Phát triển (R&D) của các doanh nghiệp Hàn Quốc tại ĐHQG-HCM.

Phát biểu tại tọa đàm, GS Ryu Hong-lim – Hiệu trưởng ĐHQG Seoul, cho biết hạ tuần tháng 6 vừa qua, Tổng thống Hàn Quốc Yoon Suk-yeol đã có chuyến thăm Việt Nam để thảo luận phương hướng hợp tác giữa hai quốc gia về nhiều vấn đề như kinh doanh, văn hóa, cân bằng carbon và chuyển đổi số.

Kể từ thời điểm thiết lập quan hệ ngoại giao vào năm 1992, thương mại song phương giữa hai nước đã chứng kiến bước tăng trưởng kinh ngạc lên gấp 175 lần. Hàn Quốc đã trở thành nhà đầu tư lớn nhất của Việt Nam, và năm nay đánh dấu 31 năm quan hệ ngoại giao giữa đôi bên” – ông Ryu Hong-lim chia sẻ.

Ông cho biết thêm, sinh viên Việt Nam xếp thứ 2 về số lượng sinh viên quốc tế theo học tại Hàn Quốc, điều này cho thấy mối gắn bó chặt chẽ về giáo dục giữa hai quốc gia. Ngược lại, số lượng người Hàn Quốc đến Việt Nam để làm việc và đầu tư không ngừng tăng lên trong một thập kỷ qua, hiện nay có khoảng 170.000 người Hàn Quốc và hơn 8.800 doanh nghiệp Hàn Quốc chuyển hướng đến Việt Nam. Theo đó, ông nhận định việc tạo điều kiện thuận lợi để trao đổi nhân tài giữa hai nước là trách nhiệm quan trọng của các đại học và chính quyền.

PGS.TS Vũ Hải Quân – Giám đốc ĐHQG-HCM, nhấn mạnh sứ mệnh đào tạo nguồn nhân lực chất lượng cao của ĐHQG-HCM. Ảnh: Thiện Thông

Hợp tác doanh nghiệp – đại học

Đại diện ĐHQG Seoul – GS Chae Su-hong cho biết năm 2023, Việt Nam là đối tác thương mại lớn thứ 3 của Hàn Quốc chỉ sau Trung Quốc và Hoa Kỳ. Nói về tính cấp thiết trong hợp tác doanh nghiệp – đại học giữa Hàn Quốc và Việt Nam, ông nhận xét nền kinh tế Việt Nam tập trung vào các ngành sử dụng lao động giá rẻ, nhưng bối cảnh hiện nay yêu cầu chuyển dịch sang các ngành công nghệ. Theo đó, hai quốc gia cần nỗ lực vì tăng trưởng chung, thông qua các hoạt động: chia sẻ và chuyển giao công nghệ, bồi dưỡng nguồn nhân lực chất lượng cao, hợp tác doanh nghiệp – đại học và hợp tác giáo dục.

Tại tọa đàm, các doanh nghiệp Hàn Quốc đã trình bày tổng quan về nhu cầu nhân lực và nêu đề xuất giúp các trường đại học Việt Nam phát triển nguồn nhân lực chất lượng cao. Lãnh đạo chính quyền các địa phương đã có cơ hội đối thoại với các doanh nghiệp và các đại học xoay quanh vấn đề hợp tác phát triển nhân lực đáp ứng nhu cầu của doanh nghiệp Hàn Quốc.

PGS.TS Vũ Hải Quân – Giám đốc ĐHQG-HCM, nhấn mạnh chiến lược phát triển của ĐHQG-HCM, trong đó có sứ mệnh đào tạo nguồn nhân lực chất lượng cao, bồi dưỡng nhân tài, có năng lực dẫn dắt, thúc đẩy sự phát triển kinh tế – xã hội. Điều này cho thấy ĐHQG-HCM đang cố gắng từng bước làm giảm khoảng cách giữa nhu cầu thực tế và công tác đào tạo tại các cơ sở giáo dục đại học hàng đầu quốc gia.

Toàn cảnh tọa đàm. Ảnh: Lê Hoài

Bài viết gốc tại vnuhcm.edu.vn

5 điều gây rò rỉ bộ nhớ (memory leak) trong Node.js và cách khắc phục

Vì sao bộ nhớ (memory leak) trong Node.JS rò rỉ & cách khắc phục

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

Vấn đề

Rò rỉ bộ nhớ là hiện tượng ứng dụng không thể giải phóng bộ nhớ không cần dùng đến nữa trong quá trình hoạt động. Có thể ban đầu ứng dụng chạy rất mượt mà nhưng sau một thời gian lại trở nên chậm chạm, thậm chí giật lác khiến chúng bị “crash” và thứ bạn nhìn thấy lúc này rất có thể là thông báo JavaScript heap out of memory ở đâu đó trong console.

V8 trong Node.js được cung cấp mặc định 4GB cho dữ liệu cấp phát động hay còn gọi là Heap. Giới hạn này có thể tăng thêm nhưng đổi lại là hiệu năng của ứng dụng sẽ giảm sút. Các kiểu dữ liệu tham chiếu như Object, Function, Array sẽ được lưu trữ trong Heap. Chính vì thế nếu như quá nhiều đối tượng kể trên được cấp phát trong thời gian chạy (runtime) của ứng dụng sẽ gây ra hiện tượng tràn bộ nhớ.

Nếu đã biết được nguyên nhân sâu xa gây ra hiện tượng tràn bộ nhớ thì dưới đây là 5 điều phổ biến dẫn đến việc rò rỉ bộ nhớ cho đến khi không còn để mà rò rỉ nữa.

5 điều gây rò rỉ bộ nhớ

Khai báo biến toàn cục (Global Variables)

Biến toàn cục là các biến được khai báo với var hoặc this hoặc với cả các biến không được khai báo bằng từ khoá nào cả. Khi không được khai báo với từ khoá mặc định nó sẽ được gán vào window đối với trình duyệt.

function variables() {
  this.a = "Variable one";
  var b = "Variable two";
  c = "Variable three";
}

Những biến này sẽ không được trình thu gom rác của V8 giải phóng cho đến khi chúng được đặt thành null. Hãy đảm bảo rằng bạn kiểm soát được các biến mà bạn tạo ra khi khai báo toàn cục. Thận trọng hơn hãy sử dụng use strict để trình biên dịch cảnh báo bạn mỗi khi khai báo biến toàn cục.

Cần lưu ý khi sử dụng biến toàn cục để lưu trữ Object hay Array. Chúng sẽ không được giải phóng cho đến khi bạn đặt thành null, hay có thể dữ liệu lưu trữ bên trong nhiều lên đến mức mất kiểm soát, do đó chiếm một phần lớn bộ nhớ Heap.

  Mọi thứ bạn nên biết về Memory Leaks trong IOS (phần 1)

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

Chia quá trình xử lý dữ liệu lớn thành các quá trình chunks và spawn

Điều gì sẽ xảy ra khi bạn cố gắng lấy ra hết vài triệu bản ghi trong cơ sở dữ liệu vào một đối tượng. Hay là đọc hết 1 triệu hàng trong file excel rồi xử lý chúng qua 77 49 bước nữa? Tin tôi đi khả năng cao bạn sẽ nhận được thông báo “Heap out of memory” trước khi mà có thể tiếp tục xử lý được đấy. Vì lúc này dữ liệu được nạp vào quá lớn sẽ khiến Heap nhanh chóng bị lấp đầy đến khi không còn chỗ chứa. Chưa kể đến việc xử lý dữ liệu trên một đối tượng lớn như thế sẽ khiến ứng dụng của bạn trở nên chậm chạm và gây ra nhiều vấn đề khác.

Có nhiều cách để giải quyết trường hợp này, nhưng phổ biến là các trường hợp chia nhỏ (chunks) từng phần dữ liệu ra để xử lý. Còn để tăng tốc xử lý thì hãy tạo thêm (spawn) một số tiến trình con trong Node như trong bài viết Worker threads là gì? Bạn đã biết khi nào thì sử dụng Worker threads trong node.js chưa? mà tôi đã đề cập trước đó.

Cẩn thận với setInterval

Cẩn thận với setInterval

setInterval là một hàm cho phép chúng ta lặp lại một tác vụ sau mỗi một thời gian nhất định. Sẽ không có gì khi bạn kiểm soát được số lượng các hàm setInterval. Nhưng việc không kiểm soát được cộng thêm nhiệm vụ nặng nề mà chúng phải gánh vác thì khả năng cao lượng bộ nhớ được phân bổ mất kiểm soát càng nhiều. Vì thế hãy đảm bảo clearTimeout được gọi khi setInterval không còn cần thiết nữa.

const arr = [];

const interval = setInterval(() => {
  arr.push(new Date());
}, 1000);

clearInterval(interval);

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

Loại bỏ các biến không dùng nữa khỏi Closure

Mặc dù Closure gây ra nhiều tranh cãi về việc nó gây ra rò rỉ bộ nhớ hay không tuy nhiên nhìn vào cách nó vẫn lưu giữ được giá trị của các biến ngay cả khi hàm đã return thể hiện rằng Heap vẫn phải chịu một phần chi phí lưu trữ này.

Ví dụ một hàm Closure sau:

const fn = () => {
  let Person1 = { name: "2coffee", age: 19 };
  let Person2 = { name: "hoaitx", age: 20 };

  return () => Person2;
};

Sau khi fn() được gọi và thực thi xong Person1 sẽ được giải phóng nhưng Person2 thì không bởi vì nó vẫn bị tham chiếu đến trong hàm trả về (return).

Unsubscribe khỏi Observers và Event Emiter

Observers và Event Emiter cũng có vấn đề tương tự như setInterval ở trên. Giữ các Observers trong thời gian dài có thể gây ra rò rỉ bộ nhớ. Hãy huỷ theo dõi các Observers bất cứ khi nào bạn không còn cần đến chúng.

Ví dụ:

const EventEmitter = require("events").EventEmitter;
const emitter = new EventEmitter();

const bigObject = {};
const listener = () => {
  doSomethingWith(bigObject);
};

emitter.on("event1", listener);

bigObject sẽ bị giữ lại cho đến khi listener được huỷ theo dõi.

emitter.removeEventListener("event1", listener);

Ngay cả Node.js cũng cảnh báo việc rò rỉ bộ nhớ nếu có hơn 10 trình lắng nghe sự kiện được gắn vào 1 bộ phát sự kiện.

emitter.on("event1", listener);
emitter.on("event2", listener2);
...
emitter.on("eventN", listenerN);

// sẽ nhận được cảnh báo giống như
// "(node) warning: possible EventEmitter memory leak detected. N listeners added. Use emitter.setMaxListeners() to increase limit."

Tổng kết

Phần lớn hiện tượng rò rỉ bộ nhớ khó phát hiện sớm cho đến khi bạn ứng dụng của bạn đột ngột lăn ra chết. Lúc này việc của bạn là phải tìm ra nguyên nhân và khắc phục sớm nhất có thể. Dựa vào 5 điều trên hy vọng sẽ giúp ích được cho bạn trong quá trình sửa chữa những sai lầm đó.

Nếu bạn còn phát hiện thêm những trường hợp nào có thể gây ra hiện tượng rò rỉ bộ nhớ cũng như cách để khắc phục thì hãy bình luận phía dưới cho mọi người cùng biết nhé!

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

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

Xem thêm tuyển IT lương cao hấp dẫn tại TopDev

Tuyển sinh ngành Công nghệ Thông tin, bạn đã biết?

Công nghệ Thông tin

Ngành Công nghệ Thông tin hiện vẫn đang là một ngành hot và nằm trong top những nhóm ngành tiềm năng. Với xu thế hội nhập cùng tốc độ tăng trưởng vượt bậc về công nghệ, nhu cầu tuyển dụng nhân lực cho ngành CNTT ngày càng lớn. Vì thế, việc nắm bắt chính xác, cụ thể những thông tin về ngành là điều rất quan trọng. Đó được xem là một lợi thế lớn trong bước tiếp đầu tiếp cận với ngành học. Cùng TopDev điểm qua những điểm đáng lưu ý xung quanh ngành học thú vị này.

Những hiểu biết cơ bản về ngành CNTT

Theo lối hiểu xưa cũ, Công nghệ Thông tin được xem là ngành làm việc với máy tính. Đồng thời đưa ra các giải pháp quản lý, thực hiện truyền tải thông tin. Biểu hiện cụ thể là thông qua việc tạo ra các phần mềm ứng dụng, truy xuất dữ liệu,…

Thế nhưng, khác xa với lối mô tả trước đó, CNTT hiện tại đã trở thành một ngành công nghệ phát triển nhanh nhất thế giới. Nhiều sản phẩm công nghệ ra đời là minh chứng cho sự lột xác của ngành CNTT như: các thiết bị di động thông minh, laptop, tivi,… Tất nhiên, việc tạo ra sự thay thế hoàn toàn con người là điều có thể thực hiện được. Đó cũng là đích đến không xa của giới chuyên môn.  

Nếu hiểu theo tên gọi thuật ngữ quốc tế thì “Computer Science” – Khoa học máy tính là tên gọi mô tả đầy đủ và chính xác nhất. Tuy nhiên, tại thị trường Việt Nam, chúng ta vẫn hay gọi là “Công nghệ thông tin”.

Theo đuổi ngành Công nghệ Thông tin – Bạn cần có gì?

Mỗi ngành nghề đều có những tính chất riêng. Đó là cái làm nên đặc thù ngành. Và để tiến xa, bạn cần quan tâm đến việc khai thác tố chất; rèn luyện những kỹ năng cần thiết để thích ứng phù hợp với ngành học. 

Am hiểu chuyên môn là một chuyện. Những yếu tố về kỹ năng, tiềm năng phát triển mới là thứ quyết định bạn có thể thành công và phát triển lâu dài với ngành được hay không.

Sự đam mê

Có thể nói, sự đam mê là tính chất quan trọng mà bạn cần có khi bắt đầu theo đuổi ngành CNTT.

Công nghệ Thông tin

Đam mê có cần phải rèn luyện? Khó có thể lý giải được câu hỏi này. Tuy nhiên, bạn hãy trả lời những câu hỏi sau:

– Bạn có tò mò về ngành học CNTT hay không? Sao trang web này thu hút và có giao diện tuyệt vời đến vậy? Những tính năng thông mình này được lập trình như thế nào? Bạn đã từng có suy nghĩ như vậy chưa?

– Bạn có yêu thích và muốn mình sẽ tự tạo ra các sản phẩm công nghệ? Hay trực tiếp tham gia vào quá trình đưa ra các giải pháp hay chưa? 

Nếu đáp án của bạn là tức bạn thật sự có sự đam mê với ngành học này. Đam mê không cần xuất phát từ những thứ lớn lao. Nó đơn giản được hình thành từ sự tò mò, thích khám phá cái mới. Hơn thế nữa, khi bạn yêu thích và khao khát thực hiện, chính đam mê trong bạn sẽ được hun đúc và nuôi dưỡng từng ngày.

Hãy nhớ rằng, sự đam mê chỉ thật sự hình thành khi bạn có sự trải nghiệm. Vì thế, đừng ngần ngại tạo ra cho bản thân mình những cơ hội thử sức. Các trang web học lập trình có thể là nguồn dữ liệu để bạn kiếm tra xem bản thân có phù hợp với ngành học hay không.

Các kỹ năng về công nghệ và tư duy lập trình

Để xem xét mức độ phù hợp thì kỹ năng IT là thước đo chuẩn nhất. Tuy nhiên, nếu kỹ năng chưa của bạn chưa hoàn thiện, đừng lo lắng nhé! Bạn có thể rèn luyện nó theo thời gian. 

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

Công nghệ Thông tin

Kỹ năng IT chính là vũ khí đắc lực giúp bạn phát huy tối đa năng lực chuyên môn của mình. Dù có hay chưa có kỹ năng, bạn vẫn phải trau đồi các kỹ năng về IT.

Những kỹ năng IT bạn cần phải quan tâm bao gồm tìm kiếm, tra cứu thông tin; hiểu biết từ cơ bản đến nâng cao các phần mềm thông dụng (Word, Excel, Powerpoint,…); hiệu chỉnh, quản lý thông tin dữ liệu,… Rất nhiều kỹ năng IT để bạn trau dồi. Bạn cần tìm hiểu sâu hơn về chuyên ngành học để sàng lọc những kỹ năng cần thiết cũng như kỹ năng bỗ trợ để bản thân hoàn thiện hơn.

Bên cạnh các kỹ năng, bạn cần quan tâm đến tư duy lập trình.

Tư duy lập trình tức là cách một cá nhân tri nhận về đường hướng giải quyết vấn đề theo một trình tự logic. Nói một cách khác, bạn cần có tư duy khoa học, hệ thống về các vấn đề một cách cơ bản trước khi tiếp xúc với thế giới IT.

Khả năng ngoại ngữ 

Ngoại ngữ là yếu tố rất quan trọng để tạo ra lợi thế cạnh trạnh. Thực tế cho thấy, chính sự phát triển về mặt bằng chung tri thức đã khiến cho việc tiếp cận tư duy có nhiều thay đổi. Tiếng Anh không còn là một ngoại ngữ cần có mà nó là yếu tố bắt buộc phải có. Dù vậy, việc trau dồi tiếng Anh vẫn là mối quan tâm hàng đầu.

Ví dụ thực tế:

Nếu bạn đang cạnh tranh với nhiều ứng viên cùng 1 vị trí, nhà tuyển dụng sẽ cân nhắc về năng lực ngoại ngữ để lựa chọn. Việc sở hữu ngoại ngữ tốt giúp bạn dễ dàng trúng tuyển hơn.

Ngoại ngữ thật sự quan trọng và bạn cần dành thời gian để đầu tư cho nó. Trau dồi ngoại ngữ là cách bạn đang tự tạo cho bản thân những cơ hội nghề nghiệp cũng như sự thăng tiến lâu dài trên hành trình nghề nghiệp của mình.

Những đặc thù nổi bật của ngành Công nghệ Thông tin

Đòi hỏi tính tự học cao

Đây là một đặc điểm quan trọng. Nó cũng chính là yếu tố chi phối đến khả năng phát triển nghề nghiệp của bạn.

Kiến thức từ bài giảng chỉ chiếm 10% dù bạn phải trải qua ít nhất 4 năm đèn sách. 90% còn lại là do khả năng tự tìm tòi, nghiên cứu, trải nghiệm của bạn. Bạn có thể trau dồi nhiều kiến thức từ các khóa học online; các buổi hội thảo, chương trình đào tạo, sự kiện, hoạt động ngoại khóa. Tham gia những chương trình với nhiều cách tổ chức truyền tải nội dung kiến thức khác nhau sẽ giúp bạn có vốn hiểu biết sắc hơn về kiến thức đa ngành.  

Tự học giúp bạn tự vạch ra những chiến lược cụ thể. Và chỉ có những ai đam có sự đam mê lớn với ngành hoc, họ mới có sự quyết tâm lớn như vậy. Nếu sở hữu chuyên môn tốt, việc tự học sẽ thúc đẩy bạn phát triển nhanh hơn đến mức không ngờ.

Lương cao nhưng không thể tránh những áp lực

Môi trường làm việc của ngành CNTT rất đa dạng và là ngành đòi hỏi nhiều chuyên môn, kinh nghiệm. Chính vì vậy mà hầu như chế độ lương của ngành cũng cao hơn so với các nhóm ngành trong thị trường. 

Công nghệ Thông tin

Thế nhưng, để có mức lương cao, bạn sẽ phải đối mặt với nhiều thách thức, áp lực bủa vây. Đừng bao giờ chạy theo định hướng của ngôn luận báo chí. Bạn nên hiểu rằng, cái gì cũng có cái giá của nó. Ngành CNTT không chỉ đơn giản như những mô tả. Sự phóng đại bởi những hào nhoáng bên ngoài chỉ là bề nổi mà thôi. Khi có cơ hội tự trải nghiệm, bạn sẽ biết được nhiều góc khuất khác nhau của ngành CNTT. 

  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!
  Đừng lãng phí khoảng thời gian học đại học của bạn!!

Những áp lực ấy có thể tác động xấu đến sức khỏe của bạn. Bạn nên biết rằng, theo thống kê từ thực tế, tuổi thọ trung bình của nghề CNTT không cao. Do đó, nếu bạn thật sự yêu thích ngành học, bạn hãy quan tâm đến vấn đề sức khỏe của mình. Chạy deadline khiến bạn phải OT liên tục dẫn đến stress về tâm lý. Cuộc đua nghề nghiệp không hề dễ dàng như bạn nghĩ. Và nó chỉ phù hợp với những người chịu được áp lực công việc cao. 

Lựa chọn môi trường học tập phù hợp

Đâu là những môi trường đào tạo tốt về ngành CNTT? TopDev sẽ liệt kê một số trường được giới chuyên môn đánh giá cao về vấn đề đào tạo, phát triển kỹ năng chuyên môn.

Khu vực phía Nam

Nếu bạn đến từ TP. Hồ Chí Minh, bạn có thể lựa chọn những ngôi trường lý tưởng sau:

  • Đại học Bách Khoa – ĐH Quốc gia TP. HCM
  • Đại học Khoa học Tự nhiên – ĐH Quốc gia TP. HCM
  • Đại học Công nghệ Thông tin – ĐH Quốc gia TP. HCM

Đây là 3 ngôi trường được giới chuyên môn đánh giá cao bởi chất lương đào tạo, những chương trình phát triển kỹ năng sinh viên cũng như những giá trị mà trường đóng góp vào sự phát triển chung của ngành CNTT. 

Nếu trường Đại học Bách Khoa nổi trội với 2 ngành “Khoa học máy tính” và  “Kỹ thuật máy tính” thì Đại học Khoa học Tự nhiên cũng có những ngành chuyên sâu về CNTT như: Công nghệ phần mềm, Mạng máy tính, Thị giác máy tính & robot, Công nghệ tri thức,… Người bạn còn lại của khu vực đào tạo CNTT phia Nam gọi tên Đại học Công nghệ Thông tin TP.HCM. Đây là ngôi trường mạnh về đào tạo Mạng máy tính và bảo mật.

Bạn có thể tham khảo Những trường Đại học đào tạo Công nghệ thông tin chất lượng hiện nay!

Khu vực phía Bắc

Nếu bạn ở khu vực phía Bắc, đừng lo lắng, bạn có thêm tham khảo những ngôi trường sau:

  • Đại học Bách Khoa Hà Nội
  • Đại học Công nghệ – ĐH Quốc gia Hà Nội
  • Học viện công nghệ Bưu chính viễn thông

Đại học Bách Khoa Hà Nội được đánh giá là đơn vị đào tạo tốt nhất ở miền Bắc. Không kém cạnh, cả hai trường Đại học Công nghệ và Học viện công nghệ Bữu chính Viễn thông cũng nổi tiếng về chất lương giảng dạy.

Nhìn chung, đây đều là những ngôi trường đáng để học. Cá nhân mỗi sinh viên của từng trường họ đều là những người có tiềm năng công nghệ. Họ có khả năng và ý thức tự học cao. Với đội ngũ giảng viên giàu kinh nghiệm cùng môi trường học tập tốt, chắc chắn sẽ là những điểm đến phù hợp dành cho các bạn.

Nếu còn những lo ngại về việc điểm đầu vào quá cao thì trường Đại học FPT là sự lựa chọn phù hợp. Trường có cả hai cơ sở tại TP.HCM và Hà Nội. Trường cũng là đơn vị đào tạo kiến thức chuyên ngành theo chuẩn quốc tế đảm bảo cho việc tiếp cận các nguồn tri thức mới. 

Có rất nhiều sự lựa chọn dành cho bạn. Hãy cân nhắc về các yếu tố khác nhau để tìm được cho mình một ngôi trường ưng ý nhé!

Những thắc mắc thực tế cần quan tâm

Định hướng học tập theo hướng nào, cơ hội việc làm sẽ cao hơn? 

CNTT luôn là một ngành hot và có nhiều “đất” để bạn làm việc. Mấu chốt là kiến thức, kỹ năng của bạn có đáp ứng được vị trí bạn yêu thích hay không?

Hãy tự trau dồi và vạch ra các định hướng cụ thể. Khi đó, bạn sẽ biết được bạn thiếu gì, cần bổ sung thêm điều gì để bạn thân phù hợp với công. Hãy nhớ rằng nền tảng là gốc rễ của nhiều kiến thức. Một số kiến thức nền tảng bạn có thể lưu tâm đó là: tư duy lập trình, lập trình hướng đối tượng, cấu trúc dữ liệu & giải thuật,…

Rèn luyện chính là sự chuẩn bị tốt nhất cho hành trình nghề nghiệp của bản thân. 

Khi bắt đầu học, mình nên học gì đầu tiên?

Đầu tiên, bạn nên học làm quen với việc sử dụng thành thạo máy tính. Về việc bắt đầu học kiến thức, bạn nên tìm hiểu kỹ. Nếu mong muốn có lối tư duy tốt, bạn có thể học ngôn ngữ C/C++ hoặc Python trước. Nếu muốn học chuyên sâu và đi vào nền tảng, bạn có thể học các ngôn ngữ như Java, PHP,…  

Trường nghề có phải là giải pháp phù hợp nếu không lựa chọn học Đại học?

Công nghệ Thông tin

Một sự thật khá chua chát, Đại học ngoài đào tạo chuyên môn (thường sẽ từ năm thứ hai) thì nhiều môn học mang tính hàn lâm rất cao. Tất nhiên, Đại học cũng là môi trường bị chi phối bởi nhiều yếu tố như: chất lượng giảng dạy, điểm số, các mối quan hệ, các chương trình hoạt động kỹ năng,.. Dù xem xét dưới góc độ nào, Đại học vẫn là cơ sở đào tạo tốt. Nếu được, bạn nên đồng hành cùng nó.,

Tuy nhiên, không có giới hạn nào cho sự thành công. Nếu đủ đam mê, sự nỗ lực, dù bạn học tập ở môi trường nào, bạn vẫn có thể là một nhân tố xuất sắc. Nếu bạn thật sự muốn trải nghiệm trường nghề về CNTT, hãy lựa chọn một cơ sở uy tín và chất lượng.

Lời kết

Ngành Công nghệ Thông tin đang nhân được sự quan tâm lớn. Điều đó đồng nghĩa với sức ép cạnh tranh lớn dần hơn. Tuy tạo ra những thách thức cho các bạn đang theo đuổi ngành học này song chúng ta vẫn mong đợi nhiều nhân tố sáng giá cho ngành học. Mỗi cá nhân lựa chọn đồng hành và quyết tâm trải nghiệm nó dù là trên giảng đường hay bất cứ nơi đâu đều góp phần khẳng định vị thế và sức ảnh hưởng lớn từ ngành học này.

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

Xem thêm Top IT Jobs Developer trên TopDev

So sánh WordPress và Drupal: Lựa chọn CMS nào sẽ tốt hơn?

So sánh Wordpress và Drupal: Lựa chọn CMS nào sẽ tốt hơn?

Nhắc đến Hệ quản trị nội dung thì WordPress và Drupal là 2 cái tên phổ biến, luôn có mặt trong top những phần mềm CMS tốt nhất hiện nay. Cả 2 đều được viết bằng ngôn ngữ lập trình PHP, ra mắt đầu những năm 2000 và trở thành nền tảng được yêu thích sử dụng trong các website hàng đầu hiện nay. Hôm nay chúng ta cùng nhau so sánh WordPress và Drupal để xem 2 nền tảng này có sự giống và khác nhau gì, để trả lời cho câu hỏi nên lựa chọn CMS nào cho website của bạn nhé.

Tìm hiểu về WordPress và Drupal

1. WordPress là gì? Điểm mạnh của WordPress

WordPress là một hệ quản trị nội dung (CMS) mã nguồn mở được viết bằng PHP và sử dụng hệ quản trị cơ sở dữ liệu MySQL. Với giao diện thân thiện và dễ sử dụng, WordPress cho phép người dùng tạo và chỉnh sửa nội dung một cách dễ dàng, mà không yêu cầu kiến thức lập trình.

Nó cung cấp hàng ngàn theme (giao diện) và plugin (tiện ích) mở rộng, cho phép người dùng tùy chỉnh trang web theo ý muốn. WordPress cũng hỗ trợ cộng đồng lớn và đa dạng, với tài liệu phong phú và sự hỗ trợ từ cộng đồng người dùng trên toàn thế giới.

Wordpress là gì?

Ưu điểm của WordPress:

  • Dễ sử dụng: Giao diện người dùng thân thiện và trực quan của WordPress làm cho việc tạo và quản lý nội dung trở nên dễ dàng cho cả người mới bắt đầu và người không có kỹ năng lập trình.
  • Tính linh hoạt: WordPress cung cấp hàng ngàn theme và plugin, cho phép người dùng tùy chỉnh giao diện và mở rộng chức năng của trang web theo nhu cầu riêng.
  • Cộng đồng lớn: WordPress có một cộng đồng người dùng rộng lớn, với tài liệu phong phú và sự hỗ trợ từ cộng đồng. Người dùng có thể tìm kiếm câu trả lời và giải pháp cho các vấn đề thông qua diễn đàn và nhóm thảo luận.
  • Tối ưu hóa SEO: WordPress được xây dựng với cấu trúc tốt cho việc tối ưu hóa công cụ tìm kiếm (SEO). Nó cung cấp các plugin và công cụ hỗ trợ để cải thiện hiệu suất SEO của trang web.
  • Khả năng mở rộng: WordPress cho phép người dùng mở rộng trang web của mình một cách dễ dàng bằng cách thêm các tính năng mới thông qua việc cài đặt các plugin và widget.

  26 đoạn code hay dùng trong lập trình theme WordPress

  Top 5 câu hỏi phỏng vấn Drupal Developer không phải ai cũng biết

2. Drupal là gì? Điểm mạnh của Drupal

Drupal là một hệ quản trị nội dung (CMS) mã nguồn mở PHP mạnh mẽ và linh hoạt. Nó được sử dụng để xây dựng và quản lý các trang web phức tạp. Với Drupal, người dùng có khả năng tùy chỉnh cao và kiểm soát đầy đủ về cấu trúc và nội dung trang web.

Nó cung cấp một hệ thống module mạnh mẽ, cho phép người dùng mở rộng chức năng và tính năng của trang web theo ý muốn. Drupal cũng không ngừng được cải tiến và tích hợp thêm nhiều tính năng mới hỗ trợ người dùng.

Drupal là gì?

Ưu điểm của Drupal

  • Linh hoạt và mở rộng: Drupal cho phép người dùng tùy chỉnh cao và kiểm soát đầy đủ về cấu trúc và nội dung trang web.
  • Đa chức năng: Drupal hỗ trợ xây dựng các trang web phức tạp và đa dạng, bao gồm trang web doanh nghiệp, trang web chính phủ, cộng đồng trực tuyến, trang web thương mại điện tử, và nhiều hơn nữa.
  • Hiệu suất tốt: Drupal được tối ưu hóa để xử lý lưu lượng truy cập lớn và dữ liệu phức tạp. Nó có khả năng xử lý nội dung lớn mà không ảnh hưởng đến hiệu suất trang web.
  • Cộng đồng hỗ trợ: Drupal có một cộng đồng người dùng lớn và nhiều kinh nghiệm. Người dùng có thể tìm kiếm và chia sẻ kiến thức, tài liệu, và giải pháp thông qua các diễn đàn, trang web và sự kiện Drupal.

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

So sánh WordPress và Drupal: Nên chọn cái nào?

Wordpress và Drupal

Tính khả dụng

Tính khả dụng đề cập đến việc một CMS có dễ dàng cài đặt và sử dụng ngay cả đối với những người không có nhiều kiến thức về lập trình. Ở khía cạnh này thì WordPress tỏ ra vượt trội hơn vì tính đơn giản, dễ hiểu và dễ sử dụng. Cụ thể:

  • Drupal: Để cài đặt Drupal và sử dụng, trung bình cần hơn 10 phút với những thao tác thủ công và có đòi hỏi kiến thức về lập trình Web. Mã nguồn của Drupal cũng có nhiều bản cài khác nhau gọi là các bản distributions giúp bạn lựa chọn phù hợp với yêu cầu, loại website bạn cần.
  • WordPress: Thời gian cài đặt thủ công trung bình của WP mất khoảng 5 phút với những thiết lập khá đơn giản. Hầu hết các nhà cung cấp hosting hiện nay đều tích hợp WordPress giúp việc cài đặt và sử dụng đơn giản hơn chỉ bằng một cú nhấp chuột. 

Có một điểm chung cả 2 CMS này đều là mã nguồn mở và hoàn toàn miễn phí, và không chỉ WP thì một số nhà cung cấp hosting hiện nay cũng đã tích hợp Drupal để hỗ trợ cài đặt trực tiếp (không cần thao tác download về và upload lên server).

So sánh WordPress và Drupal

Khả năng tối ưu hóa SEO

SEO (Search Engine Optimization) hay tối ưu hóa công cụ tìm kiếm giúp website của bạn chất lượng và lưu lượng truy cập, thu hút người dùng.

  • Drupal: với Drupal, để giữ cho website của bạn luôn được cập nhật các phiên bản mới nhất là một điều tương đối khó khăn và thường chỉ là công việc của các lập trình viên. Drupal hỗ trợ tốt cho SEO với nhiều công cụ giúp bạn hoàn thiện SEO Website như Yoast SEO, đặc biệt là nó được đi kèm sẵn trong mã nguồn của Drupal.
  • WordPress: WP có rất nhiều plugin tuyệt vời dành cho SEO như All in One SEO Pack hay Yoast SEO. Một yếu tố nữa là nhờ sự phổ biến của cộng đồng WordPress mà việc SEO các site WP cũng trở nên hiệu quả hơn.

So sánh WordPress và Drupal

Tốc độ và hiệu năng

Tốc độ và hiệu năng của một website bị tác động chủ yếu nhờ các kỹ thuật lập trình áp dụng trong source code cộng thêm một số các kỹ thuật tăng tốc độ tải và xử lý đến từ server, hosting. Về điểm này thì Drupal thường được cộng đồng lập trình viên đánh giá cao hơn, cụ thể:

  • Drupal: Về mặt kỹ thuật thì Drupal là tiên tiến hơn so với WP, nhờ vậy nó luôn được đánh giá cao về tốc độ và hiệu năng. Nó tiêu tốn ít tài nguyên máy chủ, không yêu cầu lưu trữ hay thiết lập nhiều vì đó site làm bằng Drupal thường tải nhanh hơn, thời gian đáp ứng cũng tốt hơn WP.
  • WordPress: tốc độ là một trong những vấn đề lớn nhất của WP, nếu không phải là một người có kinh nghiệm lập trình và làm việc với WordPress thì việc tối ưu tốc độ cho CMS này là một bài toán khó. Bù lại thì WP cũng có sẵn một số plugins hỗ trợ tăng tốc site, hơn nữa một số hosting còn có những tính năng để tối ưu hóa hiệu năng các site chạy bằng WP; điều đó giúp site của bạn được cải thiện rõ rệt hơn.

Tính bảo mật

Tính bảo mật và độ an toàn của một CMS phụ thuộc nhiều vào khả năng quản trị server cũng như kiểm soát tốt source code ứng dụng, mặc dù vậy cũng có những điểm đặc trưng giữa 2 CMS trên.

  • Drupal: Drupal xây dựng được danh tiếng là hệ quản trị nội dung an toàn nhất với việc từng được dùng làm website của nhà Trắng và những website thuộc chính phủ nhờ việc áp dụng chuẩn bảo mật cao cấp. Drupal không có nhiều theme và plugin, cũng nhờ vậy mà hạn chế được lỗi bảo mật không mong muốn xảy ra.
  • WordPress: bản thân mã nguồn gốc của WP rất an toàn, mặc dù vậy do sự mở rộng plugin và themes vô cùng lớn cũng kèm theo là việc tạo ra nhiều lỗ hổng bảo mật hơn. Thực tế cho thấy WordPress là CMS bị hack nhiều nhất, chủ yếu với những site lỗi thời hay sử dụng plugins lỗi. Mặc dù vậy nếu bạn kiểm soát tốt được các plugins, themes cài đặt và hiểu biết một chút về bảo mật thì có thể giảm thiểu khả năng bị tấn công xuống mức thấp nhất. 

So sánh WordPress và Drupal

Tính linh hoạt

Tính linh hoạt thể hiện ở việc CMS có khả năng tùy chỉnh từ giao diện đến tính năng. Ở tiêu chí này, nhờ cộng đồng hỗ trợ rất lớn của mình, WordPress có số lượng plugin và themes vô cùng phong phú giúp người dùng có thể dễ dàng thay đổi, bổ sung, nâng cấp cho CMS của mình. Mặc dù vậy thì Drupal không phải không có ưu điểm của nó, cụ thể:

  • Drupal: người dùng có thể tùy chỉnh bằng modules và extensions tương tự cách dùng plugins hay themes đối với WordPress. Drupal hỗ trợ chỉnh sửa rất sâu bên trong sourcecode, tác động toàn bộ đến site CMS; mặc dù vậy bạn cần kiến thức về lập trình vì các chỉnh sửa là hoàn toàn thủ công, không hỗ trợ cài đặt giao diện như WP.
  • WordPress: lý do lớn nhất cho việc WP trở thành CMS số 1 hiện nay là nhờ kho plugins và themes đồ sộ, bao gồm cả miễn phí và trả phí. Bạn dễ dàng cài đặt thông qua giao diện trên CMS với vài thao tác cơ bản.

Tóm lại

Drupal là một CMS có rất nhiều tính năng nổi trội được tích hợp, tối ưu cho tốc độ và bảo mật ngay từ ban đầu, tuy nhiên nó đòi hỏi một kiến thức lập trình nhất định để có thể tận dụng được khả năng của Drupal. Nếu là một lập trình viên hay có kiến thức nhất định về lập trình Web, về hosting, domain, server,… hãy tự tin lựa chọn Drupal cho CMS của mình. WordPress dễ cài đặt, dễ dùng, mức độ phổ biến cao và vì thế nó phù hợp với phần đông đối tượng người dùng hơn. WordPress cũng hoàn toàn có thể sử dụng để xây dựng các website lớn với các tùy chỉnh chuyên sâu, tuy vậy thì nhìn chung WordPress phù hợp hơn với những người mới bắt đầu.

Hy vọng bài viết hữu ích dành cho bạn trong việc lựa chọn CMS cho website sắp tới, 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

Bạn có thể xem thêm:

Dev đừng bỏ lỡ Top tin tuyển dụng IT tại TopDev nhé!

Làm IT Ngân Hàng Có Gì Khác “Bọt”

lam it ngan hang

Các ngân hàng Việt Nam đang thực hiện chuyển đổi số từ quy trình đến các sản phẩm, dịch vụ tài chính. Vai trò của công nghệ thông tin càng thực sự trọng yếu trong hoạt động ngân hàng, góp phần mang đến sự thành công cho một tổ chức. Có thể nói công nghệ thông tin ngân hàng là một trong những ngành được đầu tư nhiều nhất.

Và ACB – ngân hàng thuộc Top các NHTMCP lớn nhất hiện nay – đang tích cực thực hiện chiến lược số hóa toàn bộ từ nay đến năm 2024.  Chính vì vậy, ACB chủ động thực hiện hàng loạt hoạt động tuyển dụng, networking thường xuyên để gửi lời mời đến các nhân tài trong lĩnh vực công nghệ thông tin có mong muốn trở thành “đối tác sự nghiệp” của ACB. 

So với các công ty công nghệ thì IT ngân hàng có gì khác “bọt”? Và “IT is a business” là định hướng gì mà mỗi nhân sự CNTT của ACB đều đóng vai trò quan trọng cho sự phát triển của toàn ngân hàng?

IT ngân hàng không chỉ sử dụng các công nghệ mã nguồn mở, đám mây, công nghệ di động mà còn áp dụng các công nghệ tiên tiến như trí tuệ nhân tạo, học máy, blockchain, v.v. để cung cấp các giải pháp tài chính sáng tạo, tập trung vào khách hàng nhất. Tại ACB, Công nghệ thông tin gắn liền với phát triển kinh doanh khi trực tiếp xây dựng và thực hiện các dự án lớn để gia tăng khách hàng, góp phần mang về lợi nhuận cho ngân hàng thông qua nhiều sản phẩm và dịch vụ mới mẻ như ngân hàng số và ví điện tử, kiosk tự động. 

Qua những thông tin ngắn gọn trên, bạn đã thấy những gì bạn muốn biết về công nghệ thông tin trong ngân hàng đã đầy đủ chưa? Bạn có cảm hứng khi đạt những thành công qua việc chinh phục các thử thách? Bạn có tham vọng xây dựng một sự nghiệp với từng bước tiến vững vàng, thành quả được ghi nhận trong lĩnh vực công nghệ thông tin tại ACB không?

Nếu có, đừng bỏ qua sự kiện “Giải pháp CNTT trong chuyển đổi số toàn diện” do ACB tổ chức vào ngày 27/07/2023 sắp tới đây. Đây là sự kiện thường niên quan trọng của ACB dành cho đội ngũ nhân sự công nghệ thông tin cả bên trong và bên ngoài ngân hàng. Sự kiện mang đến những nội dung giúp hiểu thêm về vai trò của CNTT trong ngân hàng và một không gian freestyle thoải mái, vui vẻ cho giới IT “build” networking. Đặc biệt hơn, sự kiện mở ra nhiều cơ hội cho các chuyên viên công nghệ thông tin được “tuyển thẳng” vào “tim” (team) ACB và có thể “deal” trực tiếp về các phúc lợi mà bạn mong muốn.  

Đăng ký tham gia sự kiện tại đây: TECH 2023 | ACB Experience & Networking day (office.com)

ACB sẵn sàng đồng hành với bạn chinh phục khát vọng thành công xuất sắc trong lĩnh vực công nghệ thông tin ngân hàng.

Thông tin cụ thể về sự kiện:

Sự kiện “Giải pháp CNTT trong chuyển đổi số toàn diện”

Thời gian: 18h30 – 21h00 ngày 27/07/2023

Địa điểm: ACB – 442 Nguyễn Thị Minh Khai, Phường 5, Quận 3, TP.HCM

Nội dung: 

  1. Phiên thảo luận: Chuyển đổi số trong ngân hàng
  • Công nghệ thông tin trong ngân hàng
  • Xu hướng phát triển công nghệ Tài chính và Ngân hàng
  • Những dự án công nghệ nổi bật: Cloud, End to end Security, Data Platform
  • Tư duy & Năng lực quản lý dự án Công nghệ thông tin  

2. Giao lưu trực tiếp cùng cộng đồng chuyên gia ACB trong lĩnh vực công nghệ Cloud Engineering, Data, Security, Software Engineering, Project Management

3. Cơ hội nhận lời mời tham gia vào các dự án Công nghệ thông tin chiến lược của ACB

4. Rút thăm may mắn với các phần quà công nghệ có tổng giá trị lên đến hơn 50 triệu đồng

lam it ngan hang

Xây dựng Car Location Tracking cho Android với Firebase

Tạo ứng dụng theo dõi vị trí xe trong Android với Firebase

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

Trong bài hướng dẫn này, chúng ta sẽ tạo một ứng dụng theo dõi vị trí xe (Car Location Tracking) giống như Grab và Uber. Bài viết này mình sẽ sử dụng Firebase Real-time Database. Tài xế chỉ cần gửi vị trí hiện tại về firebase và khách hàng sẽ cập nhật được vị trí của lái xe trên Google Map.

>>> Xem thêm: Firebase là gì

Mặc dù chúng ta sẽ không phát triển một ứng dụng hoàn thiện như Grab hay Uber. Nhưng mình sẽ hướng dẫn các bạn tự xây dựng một tính năng rất quan trọng đó là cập nhật thời gian thực, hiển thị thông tin tài xế trên ứng dụng khách hàng.

Bài viết sẽ chia làm 2 phần:

  • Phần 1: Xây dựng tính năng gửi location theo thời gian thực cho tài xế (dành cho tài xế).
  • Phần 2: Xây dựng tính năng hiển thị vị trí tài xế theo thời gian thực (dành cho khách hàng).

Kết quả của bài viết này sẽ là ứng dụng Car Location Tracking như bên dưới:

Từng bước xây dựng ứng dụng Car Location Tracking trên Android

#1. Yêu cầu trước khi bắt đầu xây dựng Car Location Tracking

  1. Bạn phải có Google Map API để hiển thị bản đồ. Xem đường link này để lấy API Key
  2. Cần có một Firebase project để sử dụng real-time database. Bạn có thể tạo Firebase project tại đây.

Sau khi bạn đã hoàn thành 2 bước trên thì chuyển tiếp sang bước bên dưới nhé.

#2. Lập trình ứng dụng cho tài xế(Driver App)

Như mình đã nói ở trên, tổng thể ứng dụng Car Location Tracking  sẽ chia làm 2 ứng dụng độc lập. Một ứng dụng dành riêng cho tài xế và một dành riêng cho khách hàng.

Vì vậy, phần 1 của bài viết này, chúng ta sẽ bắt đầu với ứng dụng dành cho tài xế, gọi là Driver App.

  AsyncTask trong Android – công cụ xử lý đa luồng hữu hiệu

  Sử dụng Intelligent constants trong lập trình Android

Cài đặt thư viện cần thiết

Đầu tiên, hãy thêm thư viện vào build.gradle

implementation 'com.google.android.gms:play-services-location:15.0.1'
implementation 'com.google.android.gms:play-services-maps:15.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'

Sau đó thêm những permission cần thiết cho ứng dụng. Trong 3 permissions này thì permission về quyền location là bạn cần phải được sự đồng ý của người dùng.

Bạn có thể tham khảo thêm bài viết của mình về cách xin cấp permission trong Android.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Ngoài ra, để hiển thị Google Maps trong ứng dụng Car Location Tracking  chúng ta cần thêm các thẻ meta vào trong Manifest file.

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="@string/map_api_key" /> // Change it with your Google Maps API key.

Tất cả những khâu chuẩn bị đã sẵn sàng cho việc hiển thị Google Maps và đọc vị trí của người dùng.

Xây dựng giao diện ứng dụng Car Location Tracking 

Ok, không chần chừ thêm nữa chúng ta hãy cùng bắt tay vào việc lập trình nào. Dưới đây là giao diện người dùng của DriverApp mà chúng ta sẽ tạo.

ung-dung-car-location-tracking-cho-android-1

Giao diện rất cơ bản, chúng ta có SwitchCompat dành cho cả tài xế trực tuyến và ngoại tuyến, bên dưới là Google Map.

Để tạo giao diện như trên, các bạn code như bên dưới đây (các bạn code vào file layout là activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/driverStatusLayout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/colorPrimary"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/driverStatusTextView"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginStart="15dp"
            android:gravity="center"
            android:text="@string/offline"
            android:textColor="@color/colorIcons"
            android:textSize="22sp" />

       <android.support.v7.widget.SwitchCompat
           android:id="@+id/driverStatusSwitch"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_gravity="end"
           android:layout_marginEnd="15dp"
           android:checked="false"
           android:theme="@style/SCBSwitch" />

      </FrameLayout>

      <fragment
          android:id="@+id/supportMap"
          android:name="com.google.android.gms.maps.SupportMapFragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:layout_below="@+id/driverStatusLayout"
tools:context="spartons.com.frisbeeGo.fragments.MapFragment" />

</RelativeLayout>

MainActivity

Sau khi đã có layout, chúng ta sẽ code để hiển thị map và lấy location. Dưới đây là code cho Activity chính

class MainActivity : AppCompatActivity() {

    companion object {
        private const val MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 2200
    }

    private lateinit var googleMap: GoogleMap
    private lateinit var locationProviderClient: FusedLocationProviderClient
    private lateinit var locationRequest: LocationRequest
    private lateinit var locationCallback: LocationCallback
    private var locationFlag = true
    private var driverOnlineFlag = false
    private var currentPositionMarker: Marker? = null
    private val googleMapHelper = GoogleMapHelper()
    private val firebaseHelper = FirebaseHelper("0000")
    private val markerAnimationHelper = MarkerAnimationHelper()
    private val uiHelper = UiHelper()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val mapFragment: SupportMapFragment = supportFragmentManager.findFragmentById(R.id.supportMap) as SupportMapFragment
        mapFragment.getMapAsync { googleMap = it }
        createLocationCallback()
        locationProviderClient = LocationServices.getFusedLocationProviderClient(this)
        locationRequest = uiHelper.getLocationRequest()
        if (!uiHelper.isPlayServicesAvailable(this)) {
            Toast.makeText(this, "Play Services did not installed!", Toast.LENGTH_SHORT).show()
            finish()
        } else requestLocationUpdate()
        val driverStatusTextView = findViewById<TextView>(R.id.driverStatusTextView)
        findViewById<SwitchCompat>(R.id.driverStatusSwitch).setOnCheckedChangeListener { _, b ->
            driverOnlineFlag = b
            if (driverOnlineFlag) driverStatusTextView.text = resources.getString(R.string.online_driver)
            else {
                driverStatusTextView.text = resources.getString(R.string.offline)
                firebaseHelper.deleteDriver()
            }
        }
    }

    @SuppressLint("MissingPermission")
    private fun requestLocationUpdate() {
        if (!uiHelper.isHaveLocationPermission(this)) {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION)
            return
        }
        if (uiHelper.isLocationProviderEnabled(this))
            uiHelper.showPositiveDialogWithListener(this, resources.getString(R.string.need_location), resources.getString(R.string.location_content), object : IPositiveNegativeListener {
                override fun onPositive() {
startActivity(Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS))
                }
            }, "Turn On", false)
locationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper())
    }

    private fun createLocationCallback() {
        locationCallback = object : LocationCallback() {
            override fun onLocationResult(locationResult: LocationResult?) {
               super.onLocationResult(locationResult)
               if (locationResult!!.lastLocation == null) return
               val latLng = LatLng(locationResult.lastLocation.latitude, locationResult.lastLocation.longitude)
               Log.e("Location", latLng.latitude.toString() + " , " + latLng.longitude)
               if (locationFlag) {
                   locationFlag = false
                   animateCamera(latLng)
               }
               if (driverOnlineFlag) firebaseHelper.updateDriver(Driver(lat = latLng.latitude, lng = latLng.longitude))
               showOrAnimateMarker(latLng)
           }
       }
   }

   private fun showOrAnimateMarker(latLng: LatLng) {
       if (currentPositionMarker == null)
           currentPositionMarker = googleMap.addMarker(googleMapHelper.getDriverMarkerOptions(latLng))
       else markerAnimationHelper.animateMarkerToGB(currentPositionMarker!!, latLng, LatLngInterpolator.Spherical())
   }

   private fun animateCamera(latLng: LatLng) {
       val cameraUpdate = googleMapHelper.buildCameraUpdate(latLng)
       googleMap.animateCamera(cameraUpdate, 10, null)
   }

   override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
       super.onRequestPermissionsResult(requestCode, permissions, grantResults)
       if (requestCode == MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION) {
           val value = grantResults[0]
           if (value == PERMISSION_DENIED) {
               Toast.makeText(this, "Location Permission denied", Toast.LENGTH_SHORT).show()
               finish()
           } else if (value == PERMISSION_GRANTED) requestLocationUpdate()
       }
    }
}

Mình sẽ giải thích cụ thể tác dụng của các hàm quan trọng:

1.createLocationCallback(): Chúng ta gọi hàm này từ hàm onCreate của MainActivity. Trong hàm LocationCallback, chúng ta sẽ lấy vị trí hiện tại của tài xế,và cập nhật trên Firebase Real-time Database nếu tài xế đang trực tuyến

2.requestLocationUpdates(): Gọi hàm này từ hàm onCreate của MainActivity nếu người dùng đã cài đặt GooglePlayService.

Trong hàm này, chúng ta sẽ cần đoạn mã để yêu cầu người dùng cấp quyền cho Location permission. Sau đó chúng tôi kiểm tra Location provider đã được bật lên hay chưa. Cuối cùng là bắt đầu cập nhật vị trí.

3. showOrAnimateMarker(): chúng ta sẽ kiểm tra xem thử Marker của xe tài xế đã có rồi hay chưa, nếu chưa thì tạo mới  một Marker vào Google Maps. Nếu đã có rồi thì tạo hiệu ứng chuyển động cho Marker đến vị trí mới.

4. animteCamera(): Mục đích chính của hàm này là tạo hiệu ứng và chuyển map về vị trí hiện tại

UiHelper

Class này mình tạo riêng với mục đích sẽ viết những hàm mà mình có thể tái sử dụng nhiều lần. Như tên của class, các hàm liên quan đến UI sẽ được mình để vào đây

class UiHelper {

    fun isPlayServicesAvailable(context: Context): Boolean {
        val googleApiAvailability = GoogleApiAvailability.getInstance()
        val status = googleApiAvailability.isGooglePlayServicesAvailable(context)
        return ConnectionResult.SUCCESS == status
    }

    fun isHaveLocationPermission(context: Context): Boolean {
        return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
    }

    fun isLocationProviderEnabled(context: Context): Boolean {
        val locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
        return !locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)
    }

    fun showPositiveDialogWithListener(callingClassContext: Context, title: String, content: String, positiveNegativeListener: IPositiveNegativeListener, positiveText: String, cancelable: Boolean) {
        buildDialog(callingClassContext, title, content)
                .builder
                .positiveText(positiveText)
                .positiveColor(getColor(R.color.colorPrimary, callingClassContext))
                .onPositive { _, _ -> positiveNegativeListener.onPositive() }
                .cancelable(cancelable)
                .show()
    }

    private fun buildDialog(callingClassContext: Context, title: String, content: String): MaterialDialog {
         return MaterialDialog.Builder(callingClassContext)
                 .title(title)
                 .content(content)
                 .build()
    }


    private fun getColor(color: Int, context: Context): Int {
        return ContextCompat.getColor(context, color)
    }

    fun getLocationRequest() : LocationRequest {
        val locationRequest = LocationRequest.create()
        locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
        locationRequest.interval = 3000
        return locationRequest
    }
}

Mình sẽ giải thích một số hàm quan trọng:
isPlayServicesAvailable():Hàm này kiểm tra việc người dùng đã cài Google Play Services hay chưa.

isHaveLocationPermission():Kiểm tra xem người dùng có cấp quyền truy cập vị trí (location permission) hay không.

isLocationProviderEnabled(): Kiểm tra xem Location Provider đã được kích hoạt hay chưa. Nếu chưa thì mở Setting và bật Location Provider( Chọn GPS hay Network…)

showPositiveDialogWithListener(): Chức năng tiện ích để hiển thị Dialog khi điện thoại người dùng vì lý do nào đó mà tắt Location Provider

GoogleMapHelper

Class này sẽ gồm những hàm dàng riêng cho map cho Car Location Tracking .

class GoogleMapHelper {

    companion object {
        private const val ZOOM_LEVEL = 18
        private const val TILT_LEVEL = 25
    }

    /**
     * @param latLng in which position to Zoom the camera.
     * @return the [CameraUpdate] with Zoom and Tilt level added with the given position.
     */

    fun buildCameraUpdate(latLng: LatLng): CameraUpdate {
        val cameraPosition = CameraPosition.Builder()
                .target(latLng)
                .tilt(TILT_LEVEL.toFloat())
                .zoom(ZOOM_LEVEL.toFloat())
                .build()
        return CameraUpdateFactory.newCameraPosition(cameraPosition)
    }

    /**
     * @param position where to draw the [com.google.android.gms.maps.model.Marker]
     * @return the [MarkerOptions] with given properties added to it.
     */

    fun getDriverMarkerOptions(position: LatLng): MarkerOptions {
        val options = getMarkerOptions(R.drawable.car_icon, position)
        options.flat(true)
        return options
    }

    private fun getMarkerOptions(resource: Int, position: LatLng): MarkerOptions {
        return MarkerOptions()

 .icon(BitmapDescriptorFactory.fromResource(resource))
                 .position(position)
    }
}

MarkerAnimationHelper

Lớp MarkerAnimationHelper tạo hiệu ứng cho marker khi xe tài xế di chuyển từ vị trí cũ tới vị trí mới.

class MarkerAnimationHelper {

    fun animateMarkerToGB(marker: Marker, finalPosition: LatLng, latLngInterpolator: LatLngInterpolator) {
        val startPosition = marker.position
        val handler = Handler()
        val start = SystemClock.uptimeMillis()
        val interpolator = AccelerateDecelerateInterpolator()
        val durationInMs = 2000f
        handler.post(object : Runnable {
            var elapsed: Long = 0
            var t: Float = 0.toFloat()
            var v: Float = 0.toFloat()
            override fun run() {
                // Calculate progress using interpolator
                elapsed = SystemClock.uptimeMillis() - start
                t = elapsed / durationInMs
                v = interpolator.getInterpolation(t)
                marker.position = latLngInterpolator.interpolate(v, startPosition, finalPosition)
                // Repeat till progress is complete.
                if (t < 1) {
                    // Post again 16ms later.
                    handler.postDelayed(this, 16)
                }
            }
        })
    }
}

FirebaseHelper

Mình sẽ viết những hàm liên quan đến kết nôi Firebase tại class này:

class FirebaseHelper constructor(driverId: String) {

    companion object {
        private const val ONLINE_DRIVERS = "online_drivers"
    }

    private val onlineDriverDatabaseReference: DatabaseReference = FirebaseDatabase
            .getInstance()
            .reference
            .child(ONLINE_DRIVERS)
            .child(driverId)

    init {
        onlineDriverDatabaseReference
                .onDisconnect()
                .removeValue()
    }

    fun updateDriver(driver: Driver) {
        onlineDriverDatabaseReference
                .setValue(driver)
        Log.e("Driver Info", " Updated")
    }

    fun deleteDriver() {
        onlineDriverDatabaseReference
               .removeValue()
    }
}

Trước khi bắt đầu giải thích về class FirebaseHelper, mình muốn cho bạn thấy cấu trúc của Firebase Real-time Database.

ung-dung-car-location-tracking-cho-android-2

Mình sẽ giải thích một số hàm quan trọng trong FirebaseHelper.
onlineDriverDatabaseReference(): Khi tạo DatabaseReference, chúng ta cần thêm hai thư mục: một cho các điểm mà các drivers đang online khác, một cho bản thân driver đó.

Chúng ta cần thông báo firebase real-time database để cập nhật thông tin vị trí Driver. Đó chính là lý do tại sao mình lại thiết lập driverId như là top node và là một đối tượng Driver. Lưu ý driverId phải unique

updateDriver(): Cập nhật vị trí mới của Driver firebase real-time database.

deleteDriver(): Loại bỏ driver node khỏi firebase real-time database.

Driver Object

Class này đơn giản là model để mình định nghĩa object driver với các thuộc tính: driverId, lat, lng

data class Driver(val lat: Double, val lng: Double, val driverId: String = "0000")

Bạn có thể thay đổi driverId bằng mã khóa chính của người dùng hoặc bất kỳ thứ gì mà bạn cho là unique

Giải thích thêm: Cách tiếp cận mà mình sử dụng cho 2 mode của tài xế: online và offline tương tự cách mà các ứng dụng Social Media đang làm. Tức là hiển thị trạng thái online cuối cùng, kiểm tra xem người dùng có online hay không, v.v.

Tổng kết

Như vậy là chúng ta đã hoàn thành ứng dụng Car location Tracking phần danh cho tài xế. Toàn bộ source code, các bạn có thể download bên dưới.

Bài viết sau, mình sẽ tiếp tục hướng dẫn các bạn xây dựng phần hiển thị vị trí của tài xế, phần dành cho khách hàng.

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

Xem thêm:

Tìm việc làm IT mọi cấp độ tại TopDev

Lại nói về cách làm thế nào để gọi được API các dịch vụ của Google

Làm thế nào để tích hợp được API - Các dịch vụ của Google

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

Vấn đề

Việc tích hợp với API của bên thứ ba có lẽ không còn xa lạ gì với nhiều người. Tùy vào hệ thống sắp sửa phải liên kết mà có cách triển khai và gọi khác nhau, như phương thức HTTP, xác thực client, quyền hạn được truy cập vào những endpoint nào… Mỗi bên, họ đều có những quy tắc và yêu cầu mà chúng ta cần tuân thủ nếu muốn có các cuộc gọi thành công.

Không biết trong đây có bạn đọc nào đã từng tích hợp API của Google chưa chứ tôi thì có vài lần rồi. Lần đầu tiên là gọi API của Google Sheets, cần ghi được dữ liệu vào Sheets riêng tư của người dùng. Thời gian đầu, phải bỏ ra một vài ngày để nghiên cứu cách làm, đọc tài liệu của Google thì bị “loạn xì ngầu” vì cách họ trình bày có phần hơi khó hiểu, hoặc có thể là dễ hiểu cho người đã từng có kinh nghiệm làm rồi. Rất may là cuối cùng việc tích hợp cũng ổn thỏa, tôi đã có thể ghi được dữ liệu bằng cách yêu cầu họ thêm tài khoản Google của mình với quyền ghi vào file Sheets ấy.

Bẵng đi một thời gian sau đó, khi cần phải tích hợp API của Google Analytics thì là một lần… phải nghiên cứu lại. Có lẽ lâu rồi không đụng đến nên tôi quên mất cách làm năm xưa. Nhưng may mắn lần này mất ít thời gian hơn vì dần dần nhớ ra được luồng xử lý trước đó.

Nghĩ rằng sẽ có những người gặp phải trường hợp như tôi, nên trong bài viết này vừa là ghi chép lại cách làm, vừa là hướng dẫn cho người mới trong vấn đề này, hy vọng nó sẽ có ích cho bạn đọc.

  Tìm hiểu về xác thực và phân quyền trong ứng dụng

  Google Cloud hướng tới hỗ trợ tất cả dữ liệu phi cấu trúc

Xác thực và ủy quyền

Trước tiên để mà nói, có một vài điểm cần làm sáng tỏ. Sau khi hiểu được một số khái niệm và luồng tích hợp thì vấn đề trở nên dễ hiểu hơn. Google cung cấp hai khái niệm Xác thực và Ủy quyền để cho phép chúng ta thay mặt người dùng tương tác với API của hệ thống. Sau khi xác thực và ủy quyền thành công, có thể thoải mái gọi API để tương tác với dữ liệu của họ.

Vậy thì thế nào là xác thực và ủy quyền?

Hiểu đơn giản, hành vi xác thực để chứng minh bạn sở hữu quyền truy cập vào tài khoản thông qua việc đăng nhập vào tài khoản Google. Nhập thông tin tài khoản và mật khẩu để đăng nhập, bạn đã xác thực thành công. Còn ủy quyền là hình thức chúng ta tạo ra một OAuth 2 Credentials để xin quyền đọc/ghi dữ liệu của người dùng. Sau khi họ ủy quyền cho ứng dụng của chúng ta được phép truy cập, ngay lập tức sẽ có được quyền gọi API.

Xác thực và ủy quyền

Vậy thì việc xin được quyền thể hiện ở chỗ nào?

Đó chính là bạn lấy được mã Access Token của người dùng đã ủy quyền cho ứng dụng. Từ mã token đó gọi lên API sẽ lấy được thông tin. Hầu hết các dịch vụ của Google đều yêu cầu Access Token đã được ủy quyền để có thể lấy được dữ liệu.

Xác thực và ủy quyền

Hãy tóm tắt lại, quá trình để có thể gọi được API diễn ra như sau: Tạo OAuth 2 Credentials -> Dùng Credentials đó đi xin quyền truy cập vào một dịch vụ nào đó của người dùng -> Lấy được mã Access Token -> Dùng mã đó gọi API.

Rất ngắn gọn phải không!

Tham khảo việc làm Back-end hấp dẫn trên TopDev

Ngoài cách xác thực và ủy quyền thông qua OAuth 2 Credentials ở trên, chúng ta còn có một cách nữa để có được mã Access Token. Nhưng mã token này không phải là của người dùng, mà nó là token của Google Service Account.

Nếu để ý, bạn có thể biết nhiều dịch vụ của Google cho phép chúng ta thêm các tài khoản Google khác vào quản lý với các đặc quyền như chỉ đọc/ghi, hoặc toàn quyền (admin). Google Service Account có thể coi như là một tài khoản Google đặc biệt và có thể được thêm vào làm quản trị. Khi đó tài khoản này cũng có quyền được truy cập vào dữ liệu người dùng nên có thể thông qua nó để lấy được dữ liệu người dùng thông qua API.

Hai cách xin quyền truy cập dịch vụ (ủy quyền)

Vì để cho ngắn gọn và đỡ lan man, bài viết này tôi chỉ trình bày các ý chính của hai cách xin quyền, mã ví dụ sẽ có trong các bài viết tiếp theo.

Scope

Trước khi nói về hai cách, hãy dành thời gian tìm hiểu về scope vì nó khá là quan trọng.

Scope trong Oauth 2 rất quan trọng, nó thể hiện cho việc bạn đang muốn xin quyền gì ở người dùng. Ví dụ như quyền đọc được thông tin tài khoản như họ tên, avatar, địa chỉ email… cho đến các quyền thêm/sửa/xóa dữ liệu của người dùng. Vì thế hãy sử dụng scope để xin những quyền mà bạn thực sự muốn, tránh việc xin các quyền vô lý khác dẫn đến rủi ro cho tài khoản của người dùng, hoặc có thể người dùng sẽ không đồng ý cấp quyền cho bạn.

Về danh sách scope, bạn có thể xem tại OAuth 2.0 Scopes for Google APIs.

Scope luôn xuất hiện ở trong mã, nơi có bất kì yêu cầu xác thực và ủy quyền nào cho người dùng, hãy lưu ý điều đó cho việc viết mã sau này.

Sử dụng chính tài khoản người dùng có quyền truy cập

Rõ rồi, tài khoản người dùng có quyền truy cập vào dịch vụ, nếu lấy được Access Token được ủy quyền từ nó, chúng ta sẽ gọi được API. Đây cũng là cách đầu tiên tôi nghĩ ra để lấy được quyền truy cập vào dữ liệu người dùng.

Cách làm này cũng khá đơn giản, bao gồm các bước chính như sau:

  • Tạo một OAuth 2 Credentials bằng cách truy cập vào Credentials.
  • Sử dụng Client ID & Client secret được tạo ra để xác thực và ủy quyền tài khoản người dùng
  • Lấy được Access Token & Refresh Token, lưu lại chúng vào đâu đó để phục vụ cho việc gọi API sau này.

Client ID sau khi tạo ra, nhúng nó vào trong web thông qua bộ SDK của google, người dùng bấm vào nút “Đăng nhập” một popup mở ra xin quyền truy cập, nếu người dùng đồng ý bạn sẽ lấy được token và ngược lại.

Tuy nhiên cách làm này có một số hạn chế như phải xin quyền trực tiếp từ tài khoản Google của người dùng, rủi ro lộ thông tin cá nhân… Vì lẽ đó, chúng ta có thêm một cách thứ hai dưới đây.

Sử dụng Google Service Accounts

Google Service Accounts (GSA) là một tính năng của Google Cloud Platform (GCP) cho phép các ứng dụng và dịch vụ truy cập các tài nguyên trong môi trường GCP mà không cần sử dụng thông tin đăng nhập của người dùng. Service Accounts cung cấp một cách để xác thực và ủy quyền các ứng dụng và dịch vụ để tương tác với các tài nguyên và API của GCP.

Hiểu đơn giản GSA là một tài khoản Google đặc biệt, được tạo ra và thêm vào các dịch vụ để nó có quyền được truy cập vào dữ liệu. GSA có cơ chế xác thực đơn giản hơn so với tài khoản người dùng, chỉ cần sử dụng một tệp cấu hình của GSA là đã có thể gọi các API của Google.

Các bước sử dụng GSA được tóm tắt như sau:

  • Tạo một tài khoản GSA và tải về tệp cấu hình có định dạng JSON
  • Thêm tài khoản GSA vừa tạo vào dịch vụ của Google với quyền đọc/ghi tùy mục đích sử dụng.
  • Sử dụng thư viện do Google cung cấp tương ứng cho dịch vụ cần tương tác, thêm tệp cấu hình vào để khởi tạo client và thực hiện các cuộc gọi API như bình thường.

Bằng cách làm này, chúng ta có thể bảo vệ được thông tin người dùng, không cần xin phép từ tài khoản của họ. Tất cả những gì cần làm là thêm GSA vào nhóm quản trị với quyền hạn tùy mục đích sử dụng.

Tuy nhiên, một số dịch vụ không chấp nhận thêm tài khoản GSA. Thế nên tùy dịch vụ mà chúng ta cần lựa chọn cách xác thực và ủy quyền sao cho hợp lệ.

Cách gọi API sau khi đã có được mã Access Token

Có nhiều cách để bạn gọi được API, đơn giản và thuận tiện nhất chính là sử dụng các thư viện mà họ cấp.

Ví dụ nếu đang dùng Node.js và muốn gọi API của Google Sheets, bạn có thể sử dụng gói googleapis. Đây là thư viện đóng gói hầu hết các dịch vụ của Google như Oauth 2 đến Google Sheets, Google Driver, Google Analytics…

Một điểm cộng cho việc dùng thư viện nữa là nó sẽ đảm nhận luôn việc xử lý Access Token hết hạn, nghĩa là tự động làm mới mã truy cập thông qua Refresh Token. Tất cả những gì bạn cần làm là tải file cấu hình vào lúc khởi tạo client, sau đó thư viện sẽ cung cấp các hàm kiểm tra, làm mới mã thông báo.

Ngoài ra, chúng ta còn có cách gọi trực tiếp API bằng các Endpoints mà Google cung cấp, tuy nhiên cách này có đôi phần rời rạc và phức tạp hơn do phải xử lý và lưu trữ một lượng endpoint lớn.

Tổng kết

Có thể việc tích hợp API các dịch vụ của Google lần đầu có phần hơi mất thời gian. Nhưng sau khi hiểu được nguyên lý xác thực và ủy quyền đồng thời biết cách sử dụng các thư viện hỗ trợ do chính họ cung cấp thì chúng ta có thể đẩy nhanh quá trình tích hợp sau này.

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

AsyncTask trong Android – công cụ xử lý đa luồng hữu hiệu

Xử lý đa luồng hữu hiệu với AsyncTask trong Android

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

Bài viết này mình sẽ hướng dẫn chi tiết các sử dụng AsyncTask trong Android, một cách làm rất được khuyến khích khi xử lý đa luồng trong Android.

Mỗi ứng dụng Android khi sử dụng đều được hệ điều hành cấp cho một process, và trên đó có một thread mặc định. Đó là main UI thread. Android xử lý tất cả các sự kiện/tác vụ trên một thread duy nhất gọi là main UI thread. Main UI thread không xử lý các hoạt động đồng thời vì nó chỉ xử lý một sự kiện/task tại một thời điểm.

Do vậy, nếu bạn thực hiện một tác vụ gì đó mà tốn nhiều thời gian trên main UI thread sẽ gây ra hiện tượng treo ứng dụng hay còn gọi là ANR (Application Not Responding).

Để xử lý các tác vụ cần nhiều thời gian như: Tải file từ internet, nén hoặc giải nén… thì chúng ta phải tách tác vụ đó khỏi main UI thread( gọi là xử lý đa nhiệm). Android cung cấp một số công cụ để bạn có thể làm được điều đó như:

  • Sử dụng Service – IntentService
  • Sử dụng Thread – một khái niệm của Java
  • Loader trong Android
  • Hoặc sử dụng AsyncTask trong Android…

Nhưng trước hết, chúng ta cùng nhau tìm hiểu xử lý đa nhiệm trong Android là gì? Và khi nào cần phải xử lý đa nhiệm thay vì thực hiện ngay trên UI thread?

Xử lý đa nhiệm trong Android

Nếu các sự kiện hoặc một task nào đó không được xử lý đồng thời. Thì toàn bộ mã của ứng dụng Android sẽ chạy trên luồng chính và code sẽ được thực hiện tuần tự từng dòng một.

Giả sử nếu bạn thực hiện một công việc/ tác vụ cần thời gian xử lý như tải nhạc từ Internet, ứng dụng sẽ hiển thị trạng thái treo cho đến khi tải xong.

Để mang lại trải nghiệm người dùng tốt, tất cả tác vụ có khả năng chạy chậm đều phải chạy không đồng bộ.

Xử lý đa nhiệm trong Android

Mình có thể tạm liệt kê một số tác vụ cần thời gian xử lý như:

  • Truy cập tài nguyên (như MP3, JSON, Hình ảnh) từ Internet.
  • Thao tác với cơ sở dữ liệu.
  • Tương tác với webService như RESTful, SOAP…
  • Các Logic phức tạp mất khá nhiều thời gian như: Nén/giải nén file, sao chép/di chuyển file trong bộ nhớ…

Và còn rất nhiều các trường hợp khác cần phải xử lý bất đồng bộ, đa nhiệm khác nữa. Tùy vào ứng dụng của bạn như thế nào mà ứng biến cho phù hợp.

Bài viết này mình sẽ tập trung giới thiệu cho các bạn các sử dụng AsyncTask trong Android, một khái niệm của Android và cũng được khuyên dùng khi cần xử lý tác vụ nặng, cần thời gian.

  Sử dụng Intelligent constants trong lập trình Android

  Interface trong Java – Bạn đã hiểu đúng? Nếu chưa, mời đọc ngay

AsyncTask trong Android là gì?

AsyncTask là một abstract Android class, giúp ứng dụng Android xử lý main UI thread hiệu quả hơn. AsyncTask trong Android cho phép chúng ta thực hiện những tác vụ dài mà không ảnh hưởng đến main thread.

Khi nào thì sử dụng AsyncTask?

Để dễ hình dung, mình giả sử bạn tạo một ứng dụng Android để tải xuống tệp MP3 từ Internet.

Sơ đồ trạng thái dưới đây cho thấy một loạt các hoạt động sẽ diễn ra khi bạn chạy ứng dụng

 da-luong-multi-threading-voi-asynctask-trong-android

Trong khi chờ nhận file MP3 từ máy chủ, ứng dụng sẽ bị treo vì main thread vẫn đang chờ tác vụ tải xuống hoàn tất.

Để khắc phục điều này, chúng ta có thể tạo thread mới và thực hiện các tác vụ trên thread mới đó. Do đó giao diện người dùng sẽ không bị ảnh hưởng và treo nữa

Nhưng việc xử lý với thread riêng biệt có thể tạo ra một số vấn đề như việc cập nhật giao diện người dùng. Bạn sẽ cần phải cập nhập trạng thái download được bao nhiêu % file đó, và khi kết thúc tải thì cũng phải cập nhập cho người dùng biết. Nếu bạn sử dụng Thread đơn giản của java thì việc cập nhập này sẽ khá phức tạp.

Android đã xem xét tất cả các vấn đề này và tạo một lớp chuyên dụng có tên là AsyncTask.

Tham khảo việc làm Java mới nhất trên TopDev

Cách triển khai AsyncTask trong Android?

Tạo một class mới bên trong Activity và kế thừa từ AsyncTask như dưới đây

private class DownloadMp3Task extends AsyncTask<URL, Integer, Long> {
 protected Long doInBackground(URL... urls) {
      //Yet to code
      }
 protected void onProgressUpdate(Integer... progress) {
     //Yet to code
     }
 protected void onPostExecute(Long result) {
     //Yet to code
     }
}

Để thực thi tác vụ, đơn giản bằng cách gọi phương thức execute

new DownloadMp3Task().execute(mp3URL);

Bản chất Asynctask gồm có 4 bước:

 da-luong-multi-threading-voi-asynctask-trong-android

Bước 1: onPreExecute()

Được thực hiện trước khi bắt đầu thực hiện tác vụ. Hàm được gọi trước phương thức doInBackground() và được gọi trên UI thread.

Thông thường, hàm này được dùng để hiển thị thanh progressbar thông báo cho người dùng biết tác vụ bắt đầu thực hiện

Bước 2doInBackground()

Tất cả code mà cần thời gian thực hiện sẽ được đặt trong hàm này.  Vì hàm này được thực hiện ở một thread hoàn toàn riêng biệt với UI thread nên bạn không được phép cập nhật giao diện ở đây.

Để có thể cập nhập giao diện khi tác vụ đang thực hiện. Ví dụ như cập nhập trạng thái % file đã download được, chúng ta sẽ phải sử dụng đến hàm bên dưới onProgressUpdate()

Bước 3: onProgressUpdate()

Hàm này được gọi khi trong hàm doInBackground() gọi đến hàm publishProgress()

Bước 4onPostExecute()

Hàm này được gọi khi doInBackground hàm thành công việc. Kết quả của doInBackground() sẽ được trả cho hàm này để hiển thị lên giao diện người dùng.

Trong quá trình Asynctask thực hiện tác vụ, bạn hoàn toàn có thể tạm dừng bất kể lúc nào mà không cần phải đợi AsyncTask làm xong. Đơn giản là bạn gọi hàm cancel(boolean)

Một số lưu ý về các sử dụng AsynctTask

  • Lớp AsyncTask phải được thực hiện trên UI Thread
  • Hàm execute(Params…) phải được gọi trên UI Thread
  • Không nên gọi onPreExecute ()onPostExecute()doInBackground (Params…)onProgressUpdate (Progress…) theo cách thủ công.
  • Task chỉ được thực thi một lần tại một thời điểm (Exception sẽ được throw nếu thực hiện lần thứ hai).

Như vậy là mình đã hướng dẫn các bạn kiến thức cơ bản về cách sử dụng AsyncTask trong Android. Khi bạn đã nắm được bản chất thì việc sử dụng và ứng biến trong từng trường hợp cụ thể sẽ rất dễ dàng.

Đừng quên chia sẻ bài viết cho các bạn khác cùng tìm hiểu nữa nhé.

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

Tìm việc làm IT mọi cấp độ tại TopDev

Đôi điều về Object Reference trong Javascript. Nhiều lúc quên thật phiền toái!

Object Reference trong Javascript và những phiền toái!

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

Vấn đề

Object Reference là một khái niệm thể hiện một biến tham chiếu, tức là thay vì lưu trữ giá trị thực nó lưu lại địa chỉ ô nhớ & thao tác với dữ liệu dựa trên địa chỉ đó. Điều này giúp tiết kiệm bộ nhớ cho các ứng dụng. Tuy nhiên cũng không ít điều phiền toái từ nó mà ra.

Kiểu dữ liệu nguyên thuỷ

Trong Javascript, chúng ta có những kiểu dữ liệu “nguyên thuỷ” (Primitive Types) bao gồm: undefinednullstringnumberboolean và symbol.

Các biến khi được khởi tạo với các giá trị này sẽ được cấp pháp một ô nhớ nhất định không có liên quan đến nhau. Ví dụ:

let name = "estacks";
let name2 = name; // estacks
name = "estacks.icu";
console.log(name); // estacks.icu
console.log(name2); //estacks

Bất kì khi nào thay đổi biến name thì những biến trước được gán bằng name vẫn giữ nguyên giá trị. Điều này cũng tương tự với kiểu dữ liệu numberboolean

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

Object & Array

Không giống với Primitive Types, Object & Array, khi có nhiều hơn một biến được tạo để lưu trữ một objectarrayfunction. Những biến đó được trỏ đến địa chỉ đã được phân bổ tương tự trong bộ nhớ.

const arr1 = ['e', 's', 't', 'a', 'c', 'k', 's'];
const arr2 = arr1;
arr1[0] = 'a';
console.log(arr2); // ['a, 's', 't', 'a', 'c', 'k', 's']

Nhìn vào ví dụ trên, khi phần tử thứ nhất trong arr1 bị thay đổi, kéo theo đó thì arr2 cũng bị thay đổi theo. Tại sao vậy?

Khi arr1 được khai báo, bộ nhớ sẽ được cấp phát và một địa chỉ được lưu lại bởi nó. Sau đó arr2 được gán bằng arr1. Vì arr1 là một mảng thay vì tạo mới một bản sao của mảng đó, arr2 chỉ đơn giản là trỏ đến địa chỉ lưu arr1. Bằng cách đó, bất kỳ thay đổi nào được thực hiện trên arr1 cũng sẽ được thay đổi trên arr2 hoặc ngược lại bởi vì chúng trỏ đến cùng một vị trí. Điều này cũng tương tự với object & function.

  Top 10 điều hay ho khi làm việc Javascript Array

  Deep Clone Objects trong Javascript – Giới thiệu một biện pháp cực mạnh

Những phiền toái

“Quên” mất việc biến đang tham chiếu

Đây cũng là trường hợp mình thấy phổ biến nhất. Khai báo một biến dựa trên một biến khác mà quên mất biến đó có tính chất reference. Những bạn mới vào nghề sẽ rất dễ bị mắc lỗi này, vì thế khi biết được tính chất này thì hãy tránh khai báo một biến dựa trên một biến khác nhé, thay vào đó hãy sao chép nó ra.

const person1 = {
  name: 'Nguyễn Văn A',
  age: 20,
  address: {
    city: 'Hà Nội',
    district: 'Cầu Giấy',
  }
};
const person2 = { ...person1 };

Ở ví dụ trên mình vừa copy person1 sang person2. Hãy thử thay đổi giá trị của name hoặc age ở person1 thì person2 vẫn không bị thay đổi. Nhưng nếu thay đổi city hoặc district thì person2 vẫn bị thay đổi theo. Lý do là bởi address được khai báo với giá trị là object nên address vẫn có tính chất reference.

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

Cách copy object bằng cú pháp spread (…) ở trên hay nhiều cách copy khác như dùng Object.assign chỉ có thể sao chép “nông” (shallow) được đối tượng, để có thể sao chép được toàn bộ đối tượng lồng nhau như vậy mà tránh reference có thể dùng một trong ba cách sau:

Thứ nhất là dùng tổ hợp cú pháp JSON.parse & JSON.stringify. Đây là cách đơn giản & nhanh chóng nhất.

const person1 = {
  name: 'Nguyễn Văn A',
  age: 20,
  address: {
    city: 'Hà Nội',
    district: 'Cầu Giấy',
  }
};
const person2 = JSON.parse(JSON.stringify(person1));

Tuy nhiên đây lại là cách tồi nhất, do việc parse một string thành object hoàn toàn không tốt cho hiệu năng, chưa kể nếu như string đó là lớn.

Thứ hai là viết mã để thực hiện việc deep copy:

function deepCopy(obj) {
    if(typeof obj !== 'object' || obj === null) {
        return obj;
    }

    if(obj instanceof Date) {
        return new Date(obj.getTime());
    }

    if(obj instanceof Array) {
        return obj.reduce((arr, item, i) => {
            arr[i] = deepCopy(item);
            return arr;
        }, []);
    }

    if(obj instanceof Object) {
        return Object.keys(obj).reduce((newObj, key) => {
            newObj[key] = deepCopy(obj[key]);
            return newObj;
        }, {})
    }
}

Và cuối cùng, sử dụng thư viện có sẵn các hàm deepCopy như lodash, ramda… hoặc dùng package clone có sẵn trên npm.

Đặt một đối tượng dùng chung

Hình dung như bạn có một config để sử dụng làm mặc định nếu không tìm thấy những config riêng của chúng, bạn sẽ export ra một object chứa những config đó & thật tai hại nếu như trong quá trình sử dụng chúng, bạn vô tình thay đổi giá trị ở một nơi nào đó.

// file config.js
module.export = {
  appName: "estacks",
  connection: {
    host: "0.0.0.0",
    port: 80,
}
// file app.js
const conf = require('./config.js');

let config = findConfig(); // null
if (!config) config = conf;
...
// vô tình thay đổi conf
config.connection.port = 443;

Thì lúc này ở những file khác đang có import config.js thì connection.port đều bị chuyển thành 443 hết.

Giải pháp cho vấn đề này là hãy deep clone config ra trước khi sử dụng. Để tránh việc thay đổi chúng sẽ dẫn đến những lỗi ngớ ngẩn mà có thể mất cả tuần để debug :D.

Kết luận

Kiến thức về Object Reference chỉ đơn giản là chỉ một biến tham chiếu. Khi làm việc với biến tham chiếu bạn phải hết sức cẩn thận để không phải mắc những sai lầm như tôi ở trên nhé!

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

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

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

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