Làm thế nào để bạn có thể gia nhập vào thị trường việc làm Công nghệ thông tin – Lập trình phần mềm đang vô cùng sôi động và luôn khát nhân lực? Hướng đi nào tốt nhất, học ở đâu hiệu quả? FPT Aptech – Hệ thống đào tạo Lập trình viên quốc tế với hơn 23 năm kinh nghiệm, liệu có phải lựa chọn tin cậy?
Theo Báo Cáo Thị trường IT Việt Nam 2022của TopDev, dự kiến từ năm 2022 – 2024, Việt Nam sẽ thiếu hụt 150.000 – 195.000 lập trình viên/năm, và nhu cầu nhân lực vẫn còn tiếp tục tăng cao trong những năm tới. Sự thiếu hụt này xuất phát từ sự chênh lệch giữa trình độ của lập trình viên với yêu cầu của doanh nghiệp.
Bởi vậy mà việc nỗ lực trau dồi những kỹ năng cần thiết cũng như việc chọn lựa môi trường học tốt để trở thành một Lập trình viên đáp ứng yêu cầu thực tế là vô cùng quan trọng. Trả lời cho câu hỏi đưa ra ở đầu, thông thường, sẽ có 3 con đường học Lập trình phổ biến, điển hình như: học chính quy đại học/cao đẳng (3 – 4 năm), đơn vị đào tạo ngắn hạn (6 tháng – 2 năm), tự học online (không giới hạn thời gian),..
Mỗi con đường đều có ưu và nhược điểm riêng, trước khi lựa chọn bạn cần đánh giá vào các yếu tố như: giáo trình học, chương trình học có cập nhật mới nhất không? Đội ngũ giảng viên có kinh nghiệm thực chiến không? Đơn vị đào tạo có bề dày kinh nghiệm, có tiếng trong lĩnh vực không?
Vậy Hệ thống Đào tạo Lập trình viên quốc tế FPT Aptech, địa chỉ cung cấp nguồn nhân lực được nhiều doanh nghiệp tin cậy lựa chọn, có phải là điểm đến học tập lý tưởng?
Lợi thế hấp dẫn khi chọn học Lập trình tại FPT Aptech
Năm 1999, Hệ thống đào tạo Lập trình viên Quốc tế FPT Aptech được thành lập, trực thuộc Tập đoàn FPT, đồng thời là đơn vị sáng lập, Master Franchise duy nhất tại Việt Nam của tập đoàn Aptech Ấn Độ. Hơn 23 năm phát triển song hành cùng sự thay đổi của công nghệ, FPT Aptech trở thành môi trường học Lập trình lý tưởng không chỉ cho học sinh mới tốt nghiệp Trung học phổ thông, mà còn cả các bạn sinh viên các trường đại học, cao đẳng muốn học song song, hay người đi làm muốn chuyển ngành với thời gian học ngắn gọn từ 6 tháng đến 2 năm.
Hình ảnh ngày khai trương FPT Aptech cơ sở TP. Hồ Chí Minh từ năm 1999
Chọn FPT Aptech vì muốn học thật nhanh để đi làm sớm, Nguyễn Xuân Trường, cựu sinh viên FPT Aptech chia sẻ:
“Khi tốt nghiệp cấp 3, em cũng giống như nhiều bạn đắn đo chọn trường học. Thật may, em được cậu giới thiệu học tại đây. Việc được thực hành liên tục giúp em tự tin hơn và có công việc sớm khi học hết kỳ 2”.
Bạn Nguyễn Xuân Trường – Cựu sinh viên FPT Aptech hiện đang làm Developer tại công ty SmartOSC
Với ưu điểm thời gian thực hành chiếm 70% thời lượng học cùng với chương trình đào tạo được cập nhật liên tục, bám sát nhu cầu thực tế của doanh nghiệp, những đồ án sinh viên có tính ứng dụng cao, FPT Aptech từng bước chinh phục người học bằng chính chất lượng đào tạo của mình.
Là sinh viên ngành Công nghệ thông tin của một trường đại học có tiếng, Nguyễn Tiến Dương lựa chọn học thêm ở FPT Aptech như một “bệ phóng” giúp cậu tăng khả năng thực chiến hơn: “Em muốn học thêm thực hành nhiều hơn nữa để tăng cơ hội việc làm. Dù chương trình học 2 năm nhưng đến kỳ 2 (sau 1 năm) em cảm thấy đã đủ kiến thức để có thể tự “bơi” đi làm được rồi”.
Bạn Nguyễn Tiến Dương – Cựu sinh viên FPT Aptech hiện đang là Lập trình viên tại Công ty cổ phần công nghệ thông tin Địa lý eK
Ngoài những ưu điểm trong chương trình học cũng như chất lượng giảng viên theo tiêu chuẩn khắt khe của Tổ chức giáo dục FPT, sinh viên FPT Aptech còn được ưu tiên thực tập và làm việc tại các doanh nghiệp thuộc Tập đoàn FPT, 100% giới thiệu việc làm tại các công ty phần mềm mà nhà trường đã và đang hợp tác như NashTech, Vinmec, Viettel, FPT Software, LG,…
Cán bộ Tập đoàn VNPT học nâng cao nghiệp vụ Lập trình tại FPT Aptech
Hiện nay, FPT Aptech đang đào tạo các chương trình: Lập trình viên quốc tế Full stack (2 năm), Backend (12 tháng), Frontend (6 tháng) và đặc biệt chương trình Lập trình game đa nền tảng – Game Development with Unity mới ra mắt gần đây giúp các bạn trẻ đam mê Lập trình có thêm nhiều cơ hội theo đuổi con đường mà mình mơ ước.
Hệ thống đào tạo Lập trình viên quốc tế FPT Aptech
Cơ sở tại Hà Nội:
Tòa nhà Detech – số 8A Tôn Thất Thuyết, Mỹ Đình, Từ Liêm
Phát triển công nghệ đồng nghĩa với việc tiếp cận những giải pháp tân tiến và cải tiến hơn so với phát kiến trước nhằm phục vụ đối tượng mục tiêu. Trong đó, công nghệ điện toán đám mây vượt trội là giải pháp được thiết kế cho các doanh nghiệp hiện đại và phức tạp, đóng vai trò là nền tảng mạnh mẽ cho sự đổi mới. Công nghệ này được xây dựng dựa trên trí thông minh nhân tạo bổ sung các chức năng tân tiến, khiến người dùng làm việc hiệu quả hơn gấp nhiều lần, đặc biệt đối với các công việc liên quan đến phát triển phần mềm – vị trí đòi hỏi tiếp cận nguồn tài nguyên lớn.
Hãy cùng chúng tôi tham dự Hội thảo “Intelligent Cloud for app development – Phát triển ứng dụng cùng giải pháp đám mây thông minh” do Microsoft tổ chức vào lúc 12:30 – 16:00, ngày 07.12.2022 tại Vinpearl Landmark 81, để cùng tìm hiểu về các giải pháp phân tích dữ liệu, phát triển phần mềm, hiện đại hóa những ứng dụng cốt lõi.
AGENDA HỘI THẢO
Thời gian
Chủ đề
Diễn giả
12:30 – 13:00
Đón khách
–
13:00 – 13:40
Hỗ trợ phát triển game với giải pháp Azure for Gaming
Annie Mathew – Giám đốc phụ trách nhà phát triển Microsoft APAC Triệu Hải Linh – Chuyên gia tư vấn giải pháp Azure, Data và Trí tuệ nhân tạo Microsoft Vietnam
13:40 – 14:20
Thúc đẩy sáng tạo trong phát triển phần mềm một cách bảo mật với GitHub
Andre Kolodochka – Kỹ sư giải pháp cấp cao Github
14:20 – 15:00
Hỗ trợ kinh doanh hiệu quả cùng Cloud Scale Analytics
Lê Quốc Hoà – Kiến trúc sư giải pháp điện toán đám mây Microsoft
15:00 – 15:40
Hiện đại hoá các ứng dụng Cloud Native với Azure RedHat OpenShift
Nguyễn Hoàng Tín – Kiến trúc sư giải pháp, RedHat Việt Nam
15:40 – 15:50
Hỏi – Đáp
Tất cả diễn giả
15:50 – 16:00
Bế mạc
Hội thảo “Intelligent Cloud for app development – Phát triển ứng dụng cùng giải pháp đám mây thông minh” nằm trong chương trình sự kiện “Microsoft Technology Summit 2022” do Microsoft tổ chức ngày 07.12.2022 tại Vinpearl Landmark 81. Ngoài hội thảo về Cloud, sự kiện còn có các Chuyên đề khác:
Thúc đẩy đổi mới cùng Microsoft Azure
Trong bối cảnh công nghệ hóa toàn cầu, điện toán đám mây đã và đang trở thành giải pháp hàng đầu nhằm giải quyết nhiều vấn đề đối với cơ sở dữ liệu của doanh nghiệp. Đặc biệt với sự chuyển dịch khối lượng công việc lên các nền tảng trực tuyến, việc lưu trữ, sử dụng, bảo mật dữ liệu qua các máy chủ thông qua dịch vụ đám mây càng trở nên cần thiết.
Chuyên đề này cung cấp những nội dung chuyên sâu về cách Microsoft Azure đang hỗ trợ chuyển đổi số đồng thời thúc đẩy những cơ hội, sáng tạo mới trong nhiều lĩnh vực, ngành nghề khác nhau.
Microsoft Security cho tất cả
Không khó để tìm ra các số liệu thống kê hàng trăm vụ xâm nhập vào cơ sở dữ liệu của các công ty hàng đầu, gây ra những thiệt hại không nhỏ cho các công ty nói riêng và nền tảng dữ liệu toàn cầu nói chung.
Nhằm tạo ra nền móng vững chắc cho sự phát triển của Doanh nghiệp và mọi cá nhân, Microsoft đã và đang thực hiện các bước đi tiên phong trong các giải pháp bảo mật toàn diện dành cho các dịch vụ đám mây. Trong chuyên đề “Microsoft Security cho tất cả” chúng ta sẽ tìm hiểu về các công cụ và giải pháp bảo mật từ Microsoft nhằm bảo vệ mọi cá nhân, tổ chức, trên mọi thiết bị, tại bất cứ đâu.
Định hình môi trường làm việc của tương lai
Các nền tảng làm việc và trao đổi công việc trực tuyến, hay các phát kiến mới trong quy trình tự động hóa từ xa ngày càng được ứng dụng nhiều hơn trong đời sống, hỗ trợ gỡ bỏ cản trở trong giao tiếp ở những khoảng cách địa lý khác nhau, đồng thời tăng cường năng suất lao động.
Để có thể tối ưu hoá các quy trình cũng như mang lại hiệu quả công việc tối đa, mô hình làm việc kết hợp đã dần trở thành xu thế mới cho môi trường làm việc của tương lai.
Tại chuyên đề ” Định hình môi trường làm việc của tương lai “, các chuyên gia sẽ tập trung chia sẻ về các giải pháp nhằm nâng cao năng suất làm việc, sự cộng tác nhóm và tối ưu hoá trải nghiệm của nhân viên với sự hỗ trợ của các sản phẩm và giải pháp mới nhất đến từ Microsoft.
Trong kỉ nguyên của chuyển đổi số, Microsoft đang tích cực thúc đẩy sự thay đổi mang tính thời đại để cung cấp những cải tiến mới về công nghệ, hỗ trợ các Khách hàng và Đối tác phát triển mạnh mẽ, nhanh chóng và hiệu quả hơn. Hãy cùng chúng tôi tham dự Hội thảo “Microsoft Technology Summit 2022” – sự kiện công nghệ lớn nhất trong năm do Microsoft tổ chức, nhằm:
Tìm hiểu ngay về các giải pháp hỗ trợ của Microsoft dành cho doanh nghiệp để ứng dụng công nghệ hiệu quả
Mở ra cơ hội giao lưu, tương tác và học hỏi từ các chuyên gia công nghệ hàng đầu
Đón đầu các xu hướng công nghệ giúp tối ưu hoá vận hành và chi phí
Đây là cơ hội không thể bỏ qua để đi tắt đón đầu, nắm bắt ngay những cập nhật công nghệ mới nhất, đầy đủ nhất với rất nhiều sự lựa chọn chuyên đề, được thiết kế riêng cho từng nhu cầu của Doanh nghiệp trong các lĩnh vực khác nhau.
Công nghệ và Chuyển đổi số được xem là chìa khóa quan trọng giúp con người, doanh nghiệp, nền kinh tế hồi phục và phát triển sau đại dịch. Sự phát triển mạnh mẽ của Serverless Architecture, Web3 và Data-driven sẽ mở ra một kỷ nguyên mới, dẫn dắt làn sóng công nghệ Việt Nam và toàn cầu trong năm 2023.
Đón đầu xu hướng để đột phá
Với sự thay đổi liên tục, khó lường của nhu cầu thị trường thì việc “đón đầu” các xu hướng mới trong tương lai sẽ điều tất yếu để doanh nghiệp đảm bảo lợi thế cạnh tranh. Serverless Architecture, Web3 và Data-driven chính là 3 “trụ cột” mấu chốt giúp doanh nghiệp tạo đột phá trong tương lai:
Serverless Architecture là mô hình thực thi Cloud computing (điện toán đám mây), trong đó nhà cung cấp tự động quản lý việc phân bổ và cung cấp máy chủ. Do đó, doanh nghiệp không phải theo dõi máy chủ, không cần quan tâm việc phân bổ, quản lý tài nguyên của hệ điều hành và cả vấn đề về nâng cấp hay bảo mật. Chính vì vậy, doanh nghiệp sẽ tối ưu được nhiều thời gian, nhân lực cũng như chi phí phát sinh từ việc phải liên tục cài đặt bản vá, cập nhật và theo dõi 24/24 đề phòng các lỗi bất ngờ có thể xảy ra ảnh hưởng tới sự liền mạch vận hành của sản phẩm, dịch vụ.
Web3 tập trung vào một hệ sinh thái các sản phẩm công nghệ phi tập trung (decentralized), không tin cậy (trustless), không cần sự cho phép (permissionless) và có thể tương tác (interoperable). Đây được xem là thế hệ thứ 3 của World Wide Web, nơi ứng dụng các đột phá công nghệ mới như trí tuệ nhân tạo (AI), máy học (machine learning) và web ngữ nghĩa (Semantic Web), đồng thời sử dụng blockchain như một hệ thống bảo mật cho thông tin của người dùng. Với Web3 quyền lực sử dụng thông tin cá nhân sẽ được đưa về tay người dùng thay vì các “ông lớn”, đem đến môi trường internet tự chủ, thông minh và cởi mở hơn.
Data-driven có thể được hiểu là một trạng thái trong kinh doanh nơi dữ liệu được sử dụng để ra quyết định và các hoạt động liên quan khác một cách hiệu quả, trong thời gian thực. Data-driven thường yêu cầu: cơ sở dữ liệu với chất lượng cao, được tích hợp tốt và tự động hóa theo thuật toán, bao gồm cả trí tuệ nhân tạo (AI). Đây là một phản ứng đối với quá trình chuyển đổi kinh tế và văn hóa lớn đang diễn ra, được biết đến là Thời đại Công nghệ 4.0. Các công ty giờ đây đã nhận ra rằng dữ liệu là “nhiên liệu” quan trọng cần tận dụng để tồn tại và phát triển trong kỷ nguyên mới.
Có thể thấy, tổng hòa của 3 yếu tố trên sẽ tạo nên môi trường hoàn hảo cho doanh nghiệp có những bước phát triển đột phá trong tương lai. Với sức mạnh của Serverless Architecture, có khả nănggiải quyết tất cả các vấn đề về lưu trữ dữ liệu, từ đó tạo nền tảng cho quá trình thu thập, xử lý và đưa ra quyết định chiến lược dựa trên cơ sở dữ liệu (Data-driven). Web3 sẽ là môi trường hoàn hảo để đem sự tương tác giữa doanh nghiệp với người dùng nhanh chóng, tiện lợi và thông minh hơn bao giờ hết, hứa hẹn đem đến trải nghiệm tuyệt vời cho khách hàng và doanh số vượt bật cho doanh nghiệp.
Các doanh nghiệp hàng đầu như Amazon, Google, Alibaba,… đã bắt đầu ứng dụng mô hình này để giải quyết các vấn đề khác nhau tạo nên sự thay đổi tích cực cho nền kinh tế toàn cầu. Đây là dấu hiệu rõ ràng nhất cho làn sóng công nghệ mới tại Việt Nam và trên thế giới trong thời gian tới.
Vietnam Web Summit 2022 đồng hành cùng doanh nghiệp bước vào kỷ nguyên mới
Chính vì những lý do trên, ngày hội Công nghệ được mong chờ nhất – Do TopDev tổ chức (nền tảng tuyển dụng IT) sẽ chính thức trở lại tại Tp. HCM (02.12.2022) và Hà Nội (08.12.2022). Sự kiện tập trung phân tích những chủ đề nổi bật của công nghệ trong năm 2022 theo hướng đi mới .. với những nội dung xoay quanh các vấn đề chính: Adoption & Change Management, Customer – centric Mindset, Digital – first culture & Movement, Engineering Fundamentals, Data – driven organization, Serverless architecture, Technological humanism.
Sự kiện năm nay sẽ là nơi quy tụ của các tập đoàn Công nghệ lớn tại Việt Nam: NAB Innovation Centre Vietnam, Amanotes, BSS Group, akaBot FPT Software, Microsoft, NIPA, EPAM, Zoho… góp phần tạo ra một bức tranh công nghệ toàn cảnh với những xu hướng thị trường được cập nhật mới nhất.
Vietnam Web Summit 2022 không chỉ mang những giá trị cốt lõi là phục vụ và phát triển cộng đồng mà còn là cơ hội cho các doanh nghiệp lớn, nhỏ chia sẻ, hợp tác, trao đổi kiến thức – kỹ năng, đồng thời mở rộng quan hệ và giới thiệu sản phẩm. Dự kiến năm nay sự kiện thu hút sự tham gia của 10.000 lượt khách, 500 doanh nghiệp cùng sự xuất hiện của hơn 60 diễn giả hàng đầu trong lĩnh vực. Điều này minh chứng cho tầm ảnh hưởng mạnh mẽ của Vietnam Web Summit đối với cộng đồng Công nghệ Việt Nam. Trải qua 5 năm nỗ lực mang đến giá trị cốt lõi là phục vụ và phát triển cộng đồng, Vietnam Web Summit dần trở thành sân chơi không thể thiếu và là “điểm hẹn” thường niên dành cho mọi cá nhân, tổ chức lớn nhỏ đang hoạt động trong lĩnh vực công nghệ tại Việt Nam.
hứa hẹn sẽ là sự kiện không thể bỏ qua với những người yêu công nghệ, những doanh nghiệp đang tìm kiếm lời giải đáp cho những vấn đề công nghệ nổi bật hiện nay.
—————————————–
Vietnam Web Summit 2022 do TopDev tổ chức:
Hồ Chí Minh:02/12/2022 (thứ Sáu) tại Grand Palace, 142/18 Cộng Hòa, P.4, Q. Tân Bình, Tp.HCM
Hà Nội: 08/12/2022 (thứ Năm) tại CTM Palace, 131 Nguyễn Phong Sắc, Dịch Vọng Hậu, Cầu Giấy, Hà Nội
Bài viết được sự cho phép của tác giả Code Toàn Bug
Lỗi là một điều gì đó bất thường xảy ra trong chương trình, nhưng ở Golang lỗi lại mang một ý nghĩa khác. Lỗi chỉ là một giá trị hàm có thể trả về nếu có gì đó không mong đợi xảy ra.
Nếu bạn đã viết mã bằng Golang, ắt hẳn bạn sẽ gặp kiểu error. Go sử dụng các giá trị error để chỉ ra sự bất thường của ứng dụng. Cho ví dụ, hàm os.Open trả về 1 giá trị error khi không mở được tệp:
1
funcOpen(namestring) (file*File, errerror)
Đoạn mã sau sử dụng os.Open để mở một tệp. Nếu một lỗi xảy ra, nó sẽ gọi log.Fatal để in thông báo lỗi và dừng lại:
1
f, err:=os.Open("filename.ext")
2
iferr!=nil {
3
log.Fatal(err)
4
}
5
// do something with the open *File f
Bạn có thể làm được nhiều việc với kiểu error trong Go, nhưng trong bài viết này, chúng ta sẽ xem xét kỹ hơn về lỗi và thảo luận một số phương pháp hay để xử lý lỗi trong Go.
Cách triển khai lỗi thường được sử dụng nhất là package errors không hỗ trợ kiểu errorString:
1
// errorString is a trivial implementation of error.
2
typeerrorStringstruct {
3
sstring
4
}
5
6
func (e*errorString) Error() string {
7
return e.s
8
}
Bạn có thể tạo 1 trong những giá trị này với hàm errors.New. Nó nhận 1 string và convert thành errors.errorString, sau đó chuyển về giá trị error:
1
// New returns an error that formats as the given text.
2
funcNew(textstring) error {
3
return&errorString{text}
4
}
Đây là cách bạn sử dụng errors.New trong hàm tính căn bậc 2:
1
funcSqrt(ffloat64) (float64, error) {
2
if f<0 {
3
return0, errors.New("math: square root of negative number")
4
}
5
// implementation
6
}
Khi người dùng cố tình tính cân bậc 2 của số âm, sẽ có 1 thông báo lỗi đưa ra:
math: square root of negative number.
Chúng ta sử dụng hàm trên như sau:
1
f, err:=Sqrt(-1)
2
iferr!=nil {
3
fmt.Println(err)
4
}
Gói fmt hiển thị error bằng cách gọi phương thức Error() string của nó.
Trách nhiệm của thông báo lỗi là phải mô tả đầy đủ ngữ cảnh của nó. Hàm os.Open trả về lỗi là “open /etc/passwd: permission denied,” chứ không mỗi “permission denied.” Lỗi do hàm Sqrt của chúng ta trả về là thiếu thông tin về đối số không hợp lệ.
Để thêm thông tin chúng ta thêm gói fmt.Errorf. Nó định dạng một chuỗi theo các quy tắc của Printf và trả về nó dưới dạng một lỗi tạo bởi error.New:
1
if f<0 {
2
return0, fmt.Errorf("math: square root of negative number %g", f)
3
}
Trong nhiều trường hợp thì fmt.Errorf là đủ tốt, nhưng vì error là 1 interface, nên bạn có thể chỉnh sửa tùy ý data của bạn như các giá trị error, để bạn kiểm tra tùy theo ngữ cảnh của bạn.
Cho ví dụ, bạn muốn khôi phục giá trị không hợp lệ của đối số truyền vào Sqrt, bạn có thể định nghĩa 1 kiểu mới thay vì dùng string:
1
typeNegativeSqrtErrorfloat64
2
3
func (fNegativeSqrtError) Error() string {
4
returnfmt.Sprintf("math: square root of negative number %g", float64(f))
5
}
Sau đó chúng ta có thể sử dụng type assertion để kiểm tra NegativeSqrtError và xử lý 1 cách đặc biệt, mà các hàm fmt.Println or log.Fatal sẽ không nhìn thấy sự thay đổi đó.
Một ví dụ khác, package json chỉ định loại SyntaxError mà hàm json.Decode sẽ trả về lỗi khi không parsing được JSON:
1
typeSyntaxErrorstruct {
2
msgstring// description of error
3
Offsetint64// error occurred after reading Offset bytes
Interface error chỉ có 1 method Error, triển khai lỗi cụ thể có thể có các methods bổ sung. Cho ví dụ, package net trả về lỗi thuộc kiểu error, tuân theo quy ước thông thường, nhưng một số triển khai error có các methods bổ sung được xác định bởi interface net.Error:
1
package net
2
3
type Errorinterface {
4
error
5
Timeout() bool// Is the error a timeout?
6
Temporary() bool// Is the error temporary?
7
}
dser
Client có thể test với net.Error bằng cách kiểm tra các assertion, sau đó phân biệt lỗi mạng tạm thời với lỗi vĩnh viễn. Cho ví dụ, trình crawler web có thể sleep và thử lại khi gặp 1 lỗi tạm thời và từ bỏ nếu gặp lỗi vĩnh viễn:
Trong Go xử lý lỗi là rất quan trọng. Thiết kế và quy ước của ngôn ngữ khuyến khích bạn kiểm tra nơi xảy ra lỗi,(khác biệt với quy ước trong các ngôn ngữ khác là ném ra các ngoại lệ và đôi khi bắt chúng). Trong một số trường hợp, điều này làm cho mã Go trở nên dài dòng, nhưng may mắn thay, bạn có thể sử dụng một số kỹ thuật để giảm thiểu việc xử lý lỗi lặp đi lặp lại.
Hãy xem xét ứng dụng App Engine , với xử lý HTTP lấy các bản ghi từ datastore và định dạng nó bằng 1 template:
if err:=datastore.Get(c, key, record); err != nil {
10
http.Error(w, err.Error(), 500)
11
return
12
}
13
if err:=viewTemplate.Execute(w, record); err!=nil {
14
http.Error(w, err.Error(), 500)
15
}
16
}
Hàm xử lý lỗi trả về bởi hàm datastore.Get, và hàm viewTemplate’s Execute. Trong 2 trường hợp, nó đều trả về 1 lỗi đơn giản với thông báo mã 500 (“Internal Server Error”). Bạn nhận ra là code đã lặp lại.
Để giảm sự lặp lại, bạn định nghĩa 1 kiểu HTTP là appHandler như sau:
1
type appHandlerfunc(http.ResponseWriter, *http.Request) error
Sau đó chúng ta có thể thay đổi hàm viewRecord như sau:
Điều này trông đơn giản hơn, nhưng package http không hiểu kiểu trả về error. Để khắc phục, chúng ta triển khai interface ServeHTTP của http.Handler như sau:
Phương thức ServeHTTP gọi hàm appHandler và trả về error nếu có tới user.
Bây giờ chúng ta đăng ký hàm Handle( thay vì hàm HandleFunc) như appHandler là 1 http.Handler(nó không phải là 1 http.HandlerFunc):
1
func init() {
2
http.Handle("/view", appHandler(viewRecord))
3
}
Với cách xử lý này, chúng ta làm nó thân thiện hơn với user. Để hiển thị string thông báo lỗi và HTTP error code, chúng ta tạo 1 struct appError như sau:
1
type appErrorstruct {
2
Error error
3
Message string
4
Code int
5
}
Tiếp theo chúng ta sửa giá trị trả về thuộc kiểu *appError:
1
type appHandlerfunc(http.ResponseWriter, *http.Request) *appError
Và làm cho method appHandler’s ServeHTTP hiển thị thông báo lỗi appError’ chính xác với error code và message cho developer:
Phiên bản này có cùng độ dài với phiên bản ban đầu, nhưng mỗi dòng đều có ý nghĩa riêng và thân thiện hơn với người dùng. Nếu bạn muốn cải thiện thì sau đây là 1 số ý tưởng:
Cung cấp cho trình xử lý error bằng 1 template HTML.
Giúp việc debug dễ dàng hơn bằng stack trace vào HTTP response nếu user đó là quản trị viên.
Viết 1 constructor function vào appError để lưu trữ stack trace cho việc debug dễ dàng hơn.
recover panic bên trong appHandler, logging trên console bằng “Critical”, và thông báo cho user “a serious error has occurred.” Đây là một cách tốt để tránh cho người dùng thấy các thông báo lỗi khó hiểu do lỗi lập trình gây ra. Xem thêm Defer, Panic, and Recover.
Kết luận
Xử lý lỗi là 1 phần quan trọng trong việc viết 1 phần mềm tốt. Bằng việc sử dụng các kỹ thuật trong bài đăng này sẽ giúp bạn viết code Go 1 cách ngắn gọn và đáng tin cậy hơn.
Bạn có thể tham khảo những nhiệm vụ và yêu cầu của lập trình viên Golang thông qua hàng loạt việc làm Golang trên TopDev.
Nhắc đến lập trình Web thì không thể không nói đến JavaScript, một trong ba thành phần mà bạn nhất định phải học và nắm vững nếu muốn trở thành một FrontEnd Developer bên cạnh HTML và CSS.
Hiện nay, JavaScript không chỉ là một ngôn ngữ lập trình dành riêng cho Web mà nó còn được dùng để viết code dành cho server, cho ứng dụng mobile hay viết game. Chính vì vậy mà nhu cầu tuyển dụng JavaScript Developer hiện tại đang rất lớn.
Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu JavaScript là gì và làm thế nào để trở thành một JavaScript Developer nhé.
JavaScript là gì?
Trước hết, đừng nhầm lẫn JavaScript và Java, đây là 2 ngôn ngữ lập trình hoàn toàn khác nhau. Mặc dù cùng tiền tố “Java” nhưng thực tế 2 ngôn ngữ này chả có tí gì liên quan đến nhau cả.
JavaScript (JS) là một ngôn ngữ lập trình thông dịch, được phát triển bởi Netscape từ những năm 1995. Nó có cú pháp được phát triển dựa trên ngôn ngữ C.
JavaScript ban đầu được tạo ra để sử dụng trên các trình duyệt, giúp thiết kế các trang web động và xử lý các một số hiệu ứng hình ảnh thông qua DOM. Ngôn ngữ này là một sự bổ sung cần thiết giúp thực hiện các tác vụ mà không thể thực hiện được với chỉ HTML.
Trải qua gần 30 năm phát triển, JavaScript hiện nay đã trở thành một công cụ quan trọng và không thể thiếu đối với lập trình viên khi xây dựng Website. Hiện nay có đến 92% số lượng website sử dụng JavaScript. Điều này giúp nó trở thành ngôn ngữ phổ biến nhất (số liệu dựa theo khảo sát của cộng đồng lập trình viên trên StackOverflow):
Nguồn: miro.medium.com
JavaScript không chỉ dành cho Website hay lập trình viên Frontend, nó còn có nhiều thứ khác từ Backend cho đến ứng dụng di động. Khái niệm lập trình viên Fullstack cũng được nhắc đến nhiều hơn từ khi NodeJS – một platform viết bằng JavaScript sử dụng để lập trình server-side ra đời năm 2009. NodeJs giúp cho JavaScript Developer có thể tự mình tạo ra Website bằng chính ngôn ngữ của mình.
Nguồn:hackr.io/blog
NodeJS là một môi trường runtime dùng để chạy JavaScript bên ngoài trình duyệt. Từ đó giúp JavaScript có thể làm được vô số thứ khác. Hiện nay có rất nhiều framework của NodeJS được sử dụng để xây dựng website (phát triển cả BE và FE) như: Express, Nest, Hapi, …
Những năm gần đây, với sự phát triển của smartphone và các thiết bị di động, mảng lập trình dành cho các ứng dụng chạy trên mobile devices cũng thu hút các lập trình viên tham gia. Không thể thiếu JavaScript – một ngôn ngữ đa năng.
React Native, Ionic, NativeScript là những framework tiêu biểu dành cho việc phát triển các ứng dụng di động. Với ưu điểm là khả năng phát triển nhanh, code được build cho nhiều nền tảng khác nhau (phổ biến là Android và iOS) thì các framework trên đang giúp JavaScript được ưu tiên bởi các startup công nghệ.
Nguồn: discoversdkcdn.azureedge.net
Ngoài những khả năng trên, JavaScript có thể làm Game với những engine như Phaser, Babylon, Lime; hay đơn thuần là dùng để viết code như với Unity engine (Unity engine được viết bởi C, nhưng phát triển game trên Unity thì chúng ta có thể sử dụng JavaScript làm ngôn ngữ lập trình). Rất nhiều thư viện hiện nay được viết bởi JavaScript, có thể kể đến như:
jQuery: một thư viện giúp thao tác, xử lý sự kiện với HTML DOM.
Three.js: một thư viện để tạo và hiển thị đồ họa 3D sử dụng WebGL.
Chart.js: một thư viện giúp xây dựng biểu đồ, trực quan hóa các dữ liệu.
Socket.IO: một thư viện hướng sự kiện cho các ứng dụng web thời gian thực.
D3.js: một thư viện giúp xử lý tài liệu dựa trên dữ liệu và tạo hình ảnh trực quan.
JavaScript khá dễ học, dễ hiểu và không mất thời gian để cài đặt hay thiết lập môi trường. Tuy nhiên, JavaScript lại rất rộng, để học hết và hiểu hết được thì phải mất rất nhiều thời gian cũng như sự tìm hiểu chuyên sâu. JavaScript làm được rất nhiều thứ với nhiều công nghệ khác nhau, chính vì vậy bạn nên chọn một công nghệ cụ thể khi bắt đầu và tập trung vào nó.
Khi bắt đầu làm quen với JavaScript, hãy nắm thật vững những kiến thức cơ bản nhất: cú pháp, loại dữ liệu, khai báo biến, cấu trúc dữ liệu, các khối câu lệnh, cách viết hàm trong JS, … Các bạn có thể tự tìm hiểu theo cách gạch đầu dòng dưới đây:
Loại dữ liệu: string, number, boolean, null, undefned, object.
JavaScript được tạo ra để chạy trên trình duyệt, vì thế để debug được nó chúng ta có công cụ Chrome Dev Tools. Đây là công cụ rất hữu ích cho việc debug liên quan đến issues, memory hay performance, vì thế bạn nên tìm hiểu để sử dụng một cách hợp lý nhất.
Sau khi trang bị những kiến thức cơ bản, bạn sẽ bắt đầu lựa chọn cho mình hướng đi chuyên sâu hơn. Hãy tìm hiểu các thư viện, framework phổ biến hiện nay của JS theo định hướng của bạn.
Nếu muốn làm Frontend, hãy học ReactJS, VueJS hay jQuery, … Nếu muốn trở thành Backend Developer, hãy tìm hiểu NodeJS và framework như Express, NestJS, …. Còn nếu đam mê với lập trình di động, bạn có thể lựa chọn React Native.
Định hướng của bạn có thể trở thành Fullstack Developer, nhưng hãy bắt đầu từ một hướng trước để có thể tham gia vào các dự án cũng như giải quyết các bài toán thực tế có thể gặp phải. Theo ý kiến cá nhân mình, cần ít nhất 2 năm làm việc trong dự án cho mỗi hướng, sau đó kết hợp lại thì mới đủ yêu cầu để trở thành một Fullstack JS Developer.
Một số các framework, thư viện JavaScript phổ biến hiện nay, các bạn có thể tham khảo và chọn học:
JavaScript nói không quá thì là ngôn ngữ có vai trò lớn nhất trong sự phát triển của Website, nó đã biến trình duyệt web thành nền tảng ứng dụng và giúp lập trình viên tha hồ thỏa mãn sức sáng tạo của mình trên website đó.
JavaScript Developer hiện nay và trong tương lai sắp tới với sự phát triển mạnh mẽ sẽ vẫn luôn là vị trí hot, nhu cầu cao trong thị trường IT nói chung.
Bạn có thể tham khảo những nhiệm vụ và yêu cầu của lập trình viên JavaScript thông qua hàng loạt việc làm JavaScript trên TopDev.
Hy vọng bài viết này đã mang lại cho các bạn cái nhìn tổng quan về JavaScript là gì và giúp bạn định hướng tốt hơn trong hành trình trở thành một lập trình viên JavaScript. Hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.
Bài viết được sự cho phép của tác giả Nguyễn Chí Thức
Vào những năm 2014, tựa game flappybird miễn phí bình thường trong nước và quốc tế. Game flappybird có đồ họa đơn giản dễ chơi nhưng rất khó để đạt được điểm cao. Luật chơi vô cùng đơn giản, bạn chỉ điều khiển các chú chim vượt chướng ngại vật. Mỗi lần vượt qua, bạn sẽ được cộng một điểm, nhưng nếu bạn để chú chim chạm vào các vật thể khác, thì bạn sẽ bị thua.
Bắt đầu lập trình:
Nhập các yêu cầu thư viện.
Tạo một lớp Bird.
Hàm khởi tạo.
Hàm bật sound.
Lưu ý :
Ở đây mình dùng một tập tin có âm thanh click.
Chỉ sử dụng âm thanh có đuôi là .wav với Bitdepth là 16.
Hàm để vẽ các hình ảnh.
Hàm display point.
Colunm method.
Hàm run.
Lưu ý: Các bạn ghi chú vào phần chú thích . Kiểm tra xem con chim chạm cột. Mình sẽ kiểm tra xem chim có cột vào các trường hợp như sau. Và cũng tương tự như chim chạm vào tường.
Run try.
Hoàn thành
Vậy là chúng ta đã hoàn thành rồi. Nếu các bạn thấy hay thì hãy chia sẻ bài để ủng hộ mình nhé. Bạn cũng có thể tham khảo thêm các việc làm Python hoặc tin tuyển dụng Game Developer để hiểu thêm về những yêu cầu cũng như công việc nhé.
Năm 2024 đã bắt đầu, hãy cùng mình nhìn lại những gì IoT đã đạt được trong năm 2023, tương lai của ngành IoT trong năm 2024 sẽ như thế nào đây.
Rõ ràng mà nói, năm qua là một năm khó khăn cho cả thế giới, từ kinh tế, chính trị cho tới các bất ổn khác về chính trị. Cho dù gặp phải những khó khăn lớn như vậy, thị trường IoT năm 2023 (tính tới thời điểm đầu tháng 11), vẫn phát triển nhanh theo cấp số nhân.
Theo số liệu thống kê, IoT phát triển với tốc độ tăng trưởng kép hằng năm là 26,4%. Quy mô của toàn thị trường sẽ đạt 2,5 nghìn tỷ USD vào năm 2029. Gấp năm lần so với quy mô thị trường dự đoán hiện nay là 0,5 nghìn tỷ đô.
Song song với trí tuệ nhân tạo, thời điểm năm nay (2024) có phải là thời điểm tuyệt vời để đầu tư vào thị trường IoT vốn đang bị chững lại chút xíu do tình hình khó khăn chung của kinh tế toàn cầu?
1. Các động lực tăng trưởng của IoT
1.2 Linh kiện và giá nhân công
Vào năm 2017, con số thống kê của Cisco cho thấy, chỉ có khoảng 60% các dự án liên quan tới IoT thành công (tức là có thể release được sản phẩm).
Cũng vào năm đó, giá cả thiết bị phần cứng cho IoT, tiền lương nhân lực cũng ở mức khá cao so với mặt bằng thị trường.
Quay lại năm 2022, sau 5 năm, một số đột phá công nghệ đã thay đổi, giảm giá thành sản xuất cái linh kiện phần cứng phục vụ cho ngành IoT. Chi phí để triển khai dự án IoT từ đó cũng giảm xuống. Thiết bị, phần mềm, ứng dụng xuất hiện khắp mọi nơi, các thiết bị thông minh tại nhà, thiết bị thăm khác sức khoẻ tại các bệnh viện. Thiết bị IoT xuất hiện ở khắp mọi nơi với giá thành rẻ hơn rất nhiều.
Với hai động lực chính là giá thành linh kiện và chi phí nhân công giảm, dự án IoT rõ ràng có nhiều hơn các động lực để phát triển và tăng trưởng nóng trong giai đoạn 2020 tới năm 2022.
1.2 Giao tiếp 4G – 4G communication
Một thành tựu khác về mặt công nghệ là 4G. So với cách thức giao tiếp và truyền tải dữ liệu kiểu cũ, 4G đem lại tốc độ truyền tải nhanh hơn, an toàn hơn.
Tháo gỡ này về mặt truyền tải cho phép các thiết bị IoT thoải mái giao tiếp và phát triển. Ứng dụng IoT cũng không còn lo lắng về tình trạng truyền tải dữ liệu bị quá như khi còn là 3G hay các giao tiếp cũ hơn.
1.3 Artificial Intelligence và Machine Learning
Không thể phủ nhận sự phát triển của trí tuệ nhân tạo và học máy cũng là động lực to lớn cho ngành IoT phát triển hơn.
Với sự phát triển mạnh mẽ và không ngừng của AI và ML, autopilot không phải là thứ chỉ xuất hiện ở trong phim. Sự kết hợp giữa thành tự về AI, ML và IoT thực tế lại đem tới kết quả rõ ràng hơn, dễ nhìn nhận hơn. Bản thân IoT đôi khi mất đi việc làm của người tài xế, nhưng bản thân nó cũng tạo ra những việc làm khác liên quan tới công nghệ.
2. Tương lai của IoT
Nghành công nghiệp IoT hiện nay đang đứng giữa các điểm giao của công nghệ 5G, AI và ML. 5G cung cấp tốc độ truyền tải dữ liệu nhanh hơn 4G gấp 10 lần.
Tốc độ giao tiếp cực nhanh này cho phép các thiết bị IoT giao tiếp với nhau nhiều hơn, giao tiếp theo thời gian thực. Bản thân 5G chính là yếu tố chủ chốt thay đổi cuộc chơi cho nghành công nghiệp IoT.
Về mặt phạm vi, IoT hiện nay vượt ra khỏi nhà ở, nhà máy và các phạm vi công nghiệp khác. Một số dự án IoT đã và đang được phát triển để chống lại biến đổi khí hậu, bảo vệ môi trường sống. Đây thực sự là một điều đáng mừng.
Một số ví dụ có thể kể tới như việc United Nations Food (tổ chức nông lương thế giới), gần đây:
Chia sẻ dữ liệu cho nông dân về chất lượng đất canh tác.
Giải pháp bảo tồn nguồn nước ngọt
Giảm phát thải nhà kính thông qua đo lường từ các thiết bị IoT
IoT những năm vừa qua đã có đóng góp đáng kể trên nhiều lĩnh vực. Nông nghiệp cũng không nằm ngoài số đó
Với tiềm năng to lớn và các điều kiện thuận lợi, ngành công nghiệp IoT đang trên đường tới đỉnh cao, lộ trình đang thẳng băng băng. Nhưng liệu có phải ngành công nghiệp IoT không có thách thức?
3. Thách thức của ngành IoT
IoT không thể hoạt động mà không có dữ liệu. Dữ liệu từ chip, sensor trực tiếp truyền tải tới trung tâm dữ liệu. Từ đây dữ liệu được phân tích, sàng lọc và sử dụng vào các mục đích khác nhau.
Việc sử dụng dữ liệu thuần tuý sẽ không có vấn đề gì nếu tính bảo mật ngày nay hiện đang chưa được xem trọng.
Từ quy mô khổng lồ như việc lưu trữ dữ liệu và phát tán cho một tổ chức khác như các tập đoàn lớn. Cho tới rò rỉ dữ liệu nhạy cảm từ camera trong nhà của một hộ cá nhân nào đó. Rõ ràng là IoT vẫn đang tồn tại điểm yếu chết người về tính bảo mật dữ liệu.
IoT đối mặt với thách thức không nhỏ từ tính an toàn, độ bảo mật
May mắn thay, blockchain có thể giải quyết vấn đề này. Bản chất của mạng blockchain khiến blockchain trở nên đáng tin cậy để sử dụng với thiết bị IoT. Mạng giao tiếp trong blockchain được sử dụng các phương thức mã hoá an toàn. Việc đánh cắp và can thiệp vào mạng blockchain trở nên khó khăn hơn rất nhiều. Độ an toàn dữ liệu từ đó cũng được đảm bảo hơn.
4. Tổng kết
Ngành IoT bản thân đối mặt với những thách thức không nhỏ về cách mà nó tác động tới con người. Bảo mật dữ liệu càng ngày cũng đang được quan tâm nhiều hơn. Tuy nhiên, không vì những hạn chế và khó khăn đó mà bản thân IoT trở nên kém sức hút.
Dự báo trong 3 năm tới, ngành IoT sẽ trở nên cực kì sôi đội. Bản thân các thiết bị IoT sẽ xuất hiện nhiều và thường xuyên hơn trong đời sống con người. Sự phát triển của trí tuệ nhân tạo, học máy và blockchain cũng là động lực to lớn cho toàn ngành IoT phát triển.
Anh em đang trông chờ, háo hức từng bước từng bước một trở thành Machine Learning Engineer?. Nếu đúng, bài viết này đích thị là dành cho anh em.
Trong bài mình sẽ liệt kê đầy đủ, tuần tự 6 bước (cũng có thể xem là 6 kỹ năng) để anh em trở thành Machine Learning Engineer đích thực. Lưu ý là 6 bước là ý kiến tổng hợp và có thể khác đi tuỳ vào trình độ, lộ trình và khả năng tiếp cận của từng anh em nhá.
Trước khi bắt đầu phân tích từng thành phần, để tui liệt kê ra trước cho anh em 6 kỹ năng cần có cho Deep Learning:
1. Kỹ năng toán – Maths Skills.
2. Kỹ năng lập trình – Programming Skills.
3. Kỹ năng xử lý dữ liệu – Data Engineering Skills.
4. Hiểu biết về học máy – Machine Learning Knowledge.
5. Hiểu biết về deep learning – Knowledge of DL Algorithms.
6. Hiểu biết về các deep learning framework – Knowledge of DL Frameworks.
Tại sao lại là Deep Learning?, rồi anh em vào mục 1 sẽ thấy ngay.
1. Deep learning, Machine Learning và Artificial Inte
Đầu tiên, sự khác nhau giữa 3 thanh niên này tóm gọn như sau:
Machine learning and deep learning are both types of AI. In short, machine learning is AI that can automatically adapt with minimal human interference. Deep learning is a subset of machine learning that uses artificial neural networks to mimic the learning process of the human brain.
Machine learning và deep learning đều là một loại của AI (trí tuệ nhân tạo). Nói ngắn gọn, machine learning là trí tuệ nhân tạo có thể tự động thích ứng với sự can thiệp tối thiểu từ con người (chủ yếu là máy làm). Còn deep learning là một tập hợp con của machine learning sử dụng mạng trí tuệ nhân tạo để huấn luyện cho máy học như con người.
Vậy từ đó ta hiểu ra, deep learning và thành phần con, nằm trong cái khái niệm rộng hơn là machine learning (học máy)
Chính vì Deep learning là cái cốt lõi, nên lộ trình trở thành Machine Learning Engineer chính xác hơn phải bắt đầu từ Deep Learning skill.
2. Kỹ năng toán – Math skills
Không ngoa mà cũng giống như các meme thường có trên mạng. Machine Learning Engineer thì bước đầu tiên và phải có là kỹ năng toán học. Toán học giúp ta có thể hiểu được các thuật toán deep learning và machine learning hoạt động như thế nào?. Bao gồm 3 thành phần nhỏ:
2.1 Xác suất và thống kê – Probability & Statistics
Cơ bản của xác suất có định lý Bayes. Định lý này sử dụng trong thuật toán Naive Bayes để phân loại dữ liệu, kế tiếp là Probability Distribution, thường được sử dụng để xác định tần suất một sự kiện có thể xảy ra. Cũng cần tìm hiểu thêm về lấy mẫu (Sampling) và kiểm tra giả thuyết (hypothesis testing)
2.2 Đại số tuyến tính – Linear Algebra
Trong đại số tuyến tính thì có hai khái niệm chính thường được sử dụng là deep learning (học sâu) và machine learning (học máy). Matrices (ma trận) và các vector được sử dụng để nhận dạng hình ảnh. Những hình ảnh mà ta muốn nhận dạng được hiểu ở dạng ma trận.
2.3 Giải tích – Calculus
Giải tích, môn học thần thánh ám ảnh từ hồi cấp 3 sẽ quay trở lại nếu như anh em dấn thân vào con đường Machine Learning Engineer.
Trong giải tích, anh em có hai cái là phép tính vi phân và phép tính tích phân. Hai ông thần này giúp ta xác định xác suất của các sự kiện. Ví dụ, trong việc tìm xác suất trong thuật toán Naive Bayes.
Trên đây chỉ là 3 subject cơ bản khuyến nghị cho anh em, còn lại anh em có thể tìm hiểu thêm các subject khác. Nói chung là càng giỏi về toán càng tốt, tiến về ML càng nhanh, chả mất vào đâu cả.
Chốt kèo anh em bình tĩnh, không toán là không làm được đâu
3. Kỹ năng lập trình – Programming language
Bản thân Machine Learning Engineer có từ Engineer (kỹ sư). Nếu anh em đi theo hướng nghiên cứu thì khỏi bàn đi ha. Còn theo hướng ML thì kỹ năng lập trình (programming language) là yếu tố bắt buộc để anh em có thể trở thành expert.
Có rất nhiều rất nhiều ngôn ngữ lập trình ngoài kia anh em có thể học. Trong phạm vi bài viết này xin phép được giới thiệu 4 ngôn ngữ sau:
Python.
R.
C.
Java.
Trong 4 ngôn ngữ này, Python và R là hai ngôn ngữ phù hợp nhất cho deep learning và machine learning. Mình suggest cho anh em go với Python và R. Nếu là beginner thì start với Python có vẻ là dễ thở nhất, dễ học nhất.
4. Kỹ năng xử lý dữ liệu – Data Engineering Skills
Có kiến thức về Deep learning, giỏi toán, thành thạo ngôn ngữ lập trình. Mỗi kỹ năng như một phát mài cho cây kiếm sắc bén của anh em. Nhưng giờ chém vào đâu?. Chả lẽ chém vào không khí, không, chém vào dữ liệu. Đối với anh em Machine Learning thì có dữ liệu là có tất cả. Vậy kỹ năng tiếp theo để trở thành Machine Learning Engineer là Data Engineering Skills
Kỹ năng cụ thể ở đây cần có là Data Wrangling (bóc tách dữ liệu), dịch nếu có hơi không sát tí mong anh em thông cảm, nghĩa thì như nhau. Bóc tách là biến dữ liệu thô đầu vào thành dữ liệu tinh tuý đầu ra.
4.1 Xử lý tiền dữ liệu
Machine Learning cần một lượng lớn dữ liệu để học, bước đầu tiên và tiền xử lý dữ liệu, trong Data Wrangling bao gồm các thành phần sau:
Khai thác ở đây được hiểu là kỹ năng trích xuất dữ liệu từ các máy chủ. Chuyển đổi ở đây là chuyển đổi sang định dạng phù hợp cho bạn sử dụng. Tải ở đây được hiểu là tải các dữ liệu đã được xử lý để sử dụng trong nghiên cứu của mình.
Cuối cùng là hiểu biết về cơ sở dữ liệu
4.3 Hiểu biết về hệ cơ sở dữ liệu
Deep learning liên quan tới dữ liệu, mà dữ liệu thì không thể bảo là chỉ lưu một cục hổ lốn trong csv hay excel. Nên hiểu biết về hệ cơ sở dữ liệu cũng là điều bắt buộc anh em cần có.
Bảo là hiểu hết như ông DBA thì không cần, nhưng anh em cần có hiểu biết nhất định về SQL, NoSQL, một số hệ quản trị phổ biến như là MySQL và Oracle.
5. Hiểu biết về deep learning – các khái niệm chính
Sau khi đã nắm trong tay, có hiểu biết về từng bước để trở thành Machine Learning Engineer thì bước tiếp theo đây, không kém phần quan trọng là concepts của ML.
Một số thuật toán anh em cần thiết phải nắm cơ bản:
Naive Bayes.
Support Vector Machine.
K nearest Neighbour.
Linear Regression.
Logistic Regression.
Decision Tree.
Random Forest.
K means Clustering.
Hierarchical Clustering.
Apriori.
Các thuật toán trên đây chủ yếu chia thành 2 loại (Classification Category – phân loại) và (Clustering Category – phân nhóm). Trong phân nhóm lại chia thành hai loại nữa là phân nhóm và hồi quy (regression).
Hồi quy sử dụng để đưa ra dự đoán cho dữ liệu, trong khi phân loại chia dữ liệu thành các loại khác nhau.
6. Hiểu biết về thuật toán deep learning
Sau khi đã nắm rõ và hiểu về cách phân loại, khái niệm liên quan tới deep learning thì giờ là lúc cho thuật toán algorithm (a lờ go ri thầm). Những thứ phổ biến và thông dụng thường được sử dụng của thuật toán Deep learning là:
Artificial Neural Network.
Convolutional Neural Network.
Recurrent Neural Network.
Generative Adversarial Network.
Deep Belief Network.
Long Short Term Memory Network.
Do bài viết nhắm tới việc làm rõ từng bước từng bước để trở thành Machine Learning Engineer nên mình sẽ không đi sâu vào từng thuật toán. Vả lại từng thuật toán để làm rõ được chắc phải cần ít nhất 3 bài =)).
7. Có kinh nghiệm với deep learning framework
Sau khi đã đi theo 4 bước:
Hiểu vấn đề
Lựa chọn thuật toán có thể giải quyết được vấn đề
Tạo ra model với một hoặc nhiều thuật toán
Tối ưu model để có độ chính xác tốt nhất
Để tự giải quyết cho mình các vấn đề bằng Machine Learning, giờ là lúc anh em cần tới sức mạnh của Framework. Bản thân các ML framework cũng như framework trong các lĩnh vực khác, bản thân nó hỗ trợ rất nhiều công cụ, thư viện để làm việc nhanh chóng, thuận tiện và an toàn hơn.
Dưới đây là một số ML frameworks tiêu biểu anh em có thể tìm hiểu (má líu lưỡi)
TensorFlow.
Theano.
scikit learn.
PyTorch.
Keras.
DL4J.
Caffe.
Microsoft Cognitive Toolkit.
Cùng lướt qua một số frameworks tiêu biểu để xem có gì hút hàng nha:
7.1 Tensorflow
Tensorflow là framework tiêu biểu được sử dụng rộng rãi cho ML và DL. Tensor là open source, thường dùng để tính toán số liệu bằng biểu đồ luông dữ liệu (data flow).
TensorFlow, vị thần trong các vị thần
7.2 Theano
Theano giúp anh em xác định, tối ưu hóa và đánh giá các phép toán. Một số thư viện nổi tiếng của nó bao gồm LASAGNE, BLOCKS và KERAS. Hẳn là anh em nếu sử dụng framework này chắc đã một lần dùng qua
Bài viết được sự cho phép của tác giả Nguyễn Văn Trọng
Chào bà con, cũng mấy năm rồi mới ngồi lại viết. Có 2 lý do chính, một là bận, hai là hết chữ. Nhưng lý do chính là cái số 2. Trong mấy năm vừa qua mình tập trung vào việc trau dồi kỹ năng Requirement và Consultant, nôm na là tư vấn nghiệp vụ – công nghệ, và định nghĩa yêu cầu giúp khách hàng. Cũng thu được một chút ít kinh nghiệm nên nay sẽ viết trở lại. Trước mắt là Requirement Define (sâu hơn phần 1), sau đấy tới phần thiết kế và tư vấn giải pháp.
Mình nhắc lại một chút kiến thức như đã nói ở phần trước (viết cách đây 5 năm), vì cũng có nhiều bạn trẻ chưa hình dung được luồng dự án. Một dự án thông thường sẽ chạy qua các step sau.
1. Bối cảnh, mục đích, ý tưởng
2. Phân tích tài chính, được – mất và phương châm triển khai
3. Tư vấn giải pháp, chiến lược
4. Tìm đối tác (một hoặc nhiều) : 3 và 4 có thể đảo ngược tuỳ bối cảnh
5. Assessment : bao gồm business, technology, risk
6. PROJECT DEVELOPMENT
Trong [giai đoạn 6] thì sẽ có các [công đoạn] sau :
Trong bài viết này mình sẽ đi qua các mục bên dưới:
– Khái niệm
– Thành Phần
– Cách tiến hành
Khái Niệm Và Câu Hỏi Tiền Đề
Định Nghĩa Yêu Cầu – 要件定義 (RD) là công đoạn đầu trong chuỗi qui trình phát triển phần mềm, nhằm mục đích tài liệu hoá các yêu cầu về tính năng hệ thống. Gồm 3 phần chính : nghiệp vụ, chức năng và phi chức năng
RD : viết tắt của Requirement Define
Có nhiều người sẽ nhảy bổ vào phán : Thời nay người ta làm Scrum-Agile, ai còn ngồi làm mấy cái RD vớ vẩn nữa, vừa tốn thời gian, chả được tích sự gì. Cũng giống như lúc bạn đang xây nhà cấp 4, sẽ có mấy ông bà rảnh việc đi ngang xỉa xói : thời buổi nào rồi còn xây nhà cấp 4, sao không xây nhà cao tầng, biệt thự. Dám cá luôn là giao cho họ cái chuồng heo cũng chưa chắc làm nổi. Vậy nên kệ đi, mình cứ học dần, làm dần, đắp từng viên gạch một, kiên trì tới 1 ngày nào đấy thành quả thu được sẽ hơn cả sức tưởng tượng của bản thân cũng như mấy ông hàng xóm “tốt bụng”.
Vậy thử đặt câu hỏi, có cần thiết phải làm RD không (Có nghĩa là bạn đủ năng lực để làm nhưng cân nhắc có nên làm hay không, khác với việc không làm được và chọn cách tránh né). Trả lời : Cái đấy còn tuỳ. Nó không phụ thuộc vào Model phát triển phần mềm (Agile/WaterFall) như các bạn vẫn lầm tưởng, mà phụ thuộc vào mục đích và ý tưởng của khách hàng. Khi mọi thứ chưa được rõ ràng, ngay cả khách hàng cũng không biết họ muốn gì thì thường sẽ áp dụng theo cách vừa làm vừa sửa, Agile được sinh ra như một hệ quả tất yếu để tiết kiệm chi phí – thời gian, và giảm risk cho cách làm cũ theo water-fall hay V-Model. Bởi vậy nên trong trường hợp này, requirement là không cần thiết hoặc được tinh giảm tối đa ở mức có thể biểu đạt ý tưởng bằng một vài câu chữ hoặc biểu đồ đơn giản – vì còn phải sửa đi sửa lại.
Câu hỏi 2, vì sao các dự án làm với Nhật đa phần đều có Requirement Define – Design rồi mới tới Code-Test ? Lý do thì có nhiều, nhưng có 2 lý do chính : Thứ nhất là văn hoá chắc cú đã ăn sâu vào tiềm thức của người Nhật, họ rất ghét sự mất kiểm soát – thay đổi liên tục. Thứ hai là trong một dự án lớn với nhiều bên tham gia, nó không phải đơn giản như việc code 1 cái app nhỏ demo-update, mà là các hệ thống với hàng trăm người cùng làm việc đồng thời. Bởi vậy cần có in-out rõ ràng.
Câu 3 : Có nên nhận làm RD hay để khách làm.
Câu 4 : Làm sao để xác định được độ sâu cần thiết (độ sâu = độ chi tiết)
Câu 5 : Thành phần bao gồm những gì, có cần thiết phải làm hết không hay chỉ 1 phần.
Câu 6 : Yếu tố cốt lõi của một RD tốt là gì
Câu 7 : Làm sao để nâng cao năng lực
Mình sẽ viết, còn việc hiểu và giải đáp lần lượt từng câu hỏi là của các bạn.
Thành Phần
Trên đây là danh sách gần như đầy đủ các file tài liệu cần thiết trong công đoạn.
Với những application đơn giản về mặt nghiệp vụ – kỹ thuật, không quá 20MM (man-month effort) Code-Test, hoặc các system thuộc loại Renew/Migration mà không thay đổi nhiều về mặt nghiệp vụ thì chỉ cần làm một số file : Flow nghiệp vụ tổng quan, danh sách màn hình và luồng di chuyển. Còn đối với các dự án lớn, phân bổ nhiều team thì cần làm hầu như toàn bộ.
Nghiệp Vụ
Sau khi tiến hành, chúng ta sẽ có được bộ tài liệu cơ bản như này. Khi estimate các bạn cần chú ý về tỉ lệ % effort giữa Code-RD tuỳ vào độ sâu – độ rộng của tài liệu. Với hình trên thì rơi vào tầm 0.5–>0.7, tức là 10MM code thì cần 5–>7MM để RD, việc chênh lệch tuỳ vào lĩnh vực nghiệp vụ (quản lý sản xuất, tài chính – ngân hàng, bảo hiểm, quản lý nội bộ doanh nghiệp …) để điều chỉnh.
Với mỗi một loại tài liệu, cần chia làm 2 bước, bước 1 tổng quan – lấy xác nhận OK của khách trước khi tiến hành làm chi tiết hoá. Ví dụ : trước khi vẽ Flow, cần tạo 1 list danh sách tính năng hệ thống, đưa khách xem họ có bổ sung thêm bớt gì không, sau đấy mới ngồi vẽ lại sơ đồ hệ thống. Mặc dù biết là sau khi vẽ xong khách sẽ có yêu cầu thay đổi 1 đôi chỗ, nhưng chia làm 2 bước sẽ giảm thiểu thời gian re-work. Các bạn BrSE/PM cần chú ý chỗ này.
Với trường hợp hệ thống phức tạp, ở bước 1 thì ngoài file liệt kê chức năng, cần có flow hệ thống như file bên dưới để khách dễ hình dung.
Sơ đồ tổng quan hệ thống quản lý sản xuất – seisankanri
Chức Năng
Sau khi khách đã xác nhận, chúng ta tiến hành bước tiếp theo là chi tiết hoá Flow nghiệp vụ ở level [Cụm chức năng], trong đó có 3 thông tin chính : 1.Chức năng, 2. InputData, 3. OutputData. Data ở đây chưa cần tới mức table – field mà chỉ cần loại data như : thông tin khách hàng, thông tin sản phẩm, thông tin kho …
Ứng với từng nhóm chức năng, sẽ có tiếp 2 step nữa.
Step 1. Tách nhóm thành nhiều màn hình riêng lẻ và flow di chuyển. Ví dụ nhóm quản lý order bao gồm : Search Order, Order Detail, Order Update, Order Delete …
Step 2. Danh sách màn hình và detail chức năng – nhiệm vụ của màn hình.
Sau khi nhóm tất cả lại với nhau chúng ta sẽ có được bộ tài liệu về ScreenList-ScreenFlow cho toàn bộ hệ thống. Tới bước này thì mọi thứ đã gần như rõ ràng và có thể tiến hành Basic Design được rồi.
Phi Chức Năng
Phần này mọi người thường hay bỏ qua. Cũng đúng vì đa phần là làm theo thói quen hoặc khách hàng sẽ là người làm. Ví dụ qui định về tính bảo mật, tuỳ vào hệ thống để thiết lập network riêng, như admin system cần phải VPN mới access được chẳng hạn. Hoặc là điều kiện vận hành – bảo trì, cơ chế backup-revert data định kỳ hoặc khi xảy ra sự cố…
Cách Tiến Hành
Nhìn vào sơ đồ trên mọi người cũng hiểu được luồng rồi, có một chú ý ở phần phân tích tính khả thi về mặt kỹ thuật – nghiệp vụ. Người làm RD cần tỉnh táo và nhạy bén để biết được yếu tố nào cần cải tiến – thêm bớt – loại bỏ để đáp ứng được technical cũng như cost. Trong trường hợp có thể đáp ứng được nghiệp vụ – kỹ thuật nhưng phải mua library với mức giá rất cao mới làm được thì nên suggest phương án thay thế chẳng hạn. Lúc này RD đóng vai trò là Consultant.
Với chi tiết từng step cần – nên làm gì chắc mình sẽ chia sẻ trong 1 dịp khác.
Kết
Trên đây là bài viết chi tiết hơn một chút sau 5 năm lăn lộn bổ sung thêm kiến thức kể từ phần 1. Tính ra cũng chưa sâu lắm, để mình làm thêm ít năm nữa rồi viết phần 3. Cũng có khi lúc đấy người ta chả cần làm RD, 1 phát ăn Code luôn, hoặc cũng có thể không còn cần Code nữa mà sử dụng các FW-Platform No-Code, Low-Code để tiến hành …kéo thả. Có khi vậy cũng nên.
Nhưng các bạn đừng lo, làm được cái này không đói đâu. Đây là nền tảng để xây nên mọi thứ. Kể cả No-Code, muốn sinh ra 1 hệ thống kiểu vậy, hoặc để hiểu và vận hành các Platform đó cũng cần có mức độ sâu sắc về phân tích nghiệp vụ để đưa ra giải pháp. Như ví dụ từ đầu bài, kinh nghiệm xây được nhà cấp 4 sẽ giúp bạn xây được nhà cao tầng, và đừng bao giờ để tâm đến mấy lời xỉa xói từ những đứa ngay cả cái chuồng heo cũng không làm nổi.
Frontend Developer (FE Dev) là thuật ngữ để chỉ những lập trình viên phát triển ứng dụng client side. Công việc chính của FE Dev là xây dựng giao diện và trải nghiệm cho người dùng (UI và UX). Trong một dự án thông thường số lượng FE Dev sẽ nhiều hơn so với Backend Developer, vì thế hiện nay nhu cầu tuyển dụng Frontend Developer là rất lớn. Trong bài viết này, mình sẽ tổng hợp các câu hỏi thường được sử dụng nhất giúp các bạn có thể có được sự chuẩn bị tốt cho buổi phỏng vấn vị trí lập trình viên Frontend.
Nguồn: tma.vn
Hiện nay khi làm frontend chúng ta có rất nhiều thư viện hay framework được sử dụng phổ biến như Bootstrap, jQuery, Angular, Reac, Vue, … Mỗi thư viện sẽ có cách sử dụng và đặc thù khác nhau, vì thế khi bạn phỏng vấn vào từng vị trí cụ thể sẽ có những câu hỏi khác nhau dành cho từng framework. Trong bài viết này mình sẽ không đi sâu vào câu hỏi dành cho từng thư viện trên mà sẽ chỉ đề cập đến phần nội dung kiến thức dành cho lập trình viên Frontend.
Frontend Developer cần được trang bị những kiến thức và HTML, CSS và JavaScript – đấy là những ngôn ngữ (kỹ năng) chủ đạo; ngoài ra kiến thức về UI/UX cùng một số thao tác sử dụng cơ bản phần mềm thiết kế như Photoshop hay AI cũng là cần thiết.
Chúng ta cùng bắt đầu vào các câu hỏi cụ thể nhé.
A. Kiến thức về HTML
1. Phân biệt thẻ HTML inline và block, khi nào sử dụng 2 loại này?
HTML block/inline ý chỉ cách hiển thị 1 thẻ HTML trên trình duyệt, trong đó block là dạng khối với width mặc định là 100% , height thì phụ thuộc vào nội dung bên trong, ngược lại thì inline sẽ hiển thị dạng nối tiếp nhau với width phụ thuộc vào độ dài của dữ liệu hiển thị.
Các thẻ dạng block là div, p, header, footer, table, …
Các thẻ dạng inline là span, i, b, a, br, label, button, …
Về cách sử dụng, nếu muốn các dữ liệu hiển thị trên 1 hàng thì sẽ sử dụng thẻ inline, còn nếu muốn tạo 1 khối có thể thiết lập khoảng trống giữa nội dung và đường viền thì sẽ sử dụng các thẻ block. Ngoài ra chúng ta có thể sử dụng thuộc tính display trong CSS để thiết lập hiển thị inline hay block.
2. Mô tả cấu trúc bố cục thường sử dụng của HTML
Thông thường 1 trang web sẽ có cấu trúc gồm những phần như dưới đây:
Header: Phần bắt đầu của web, chứa các thông tin về tiêu đề, logo, liên hệ (các thẻ meta), các link CDN css thông thường cũng được import ở đây.
Footer: Phần cuối cùng của trang web, thông thường sẽ chứa các thông tin liên hệ, bản quyền, tác giả hay các link liên kết.
Menu hay Nav: thanh điều hướng của trang. Có nhiều kiểu style menu khác nhau, phổ biến là top menu, sidebar.
Body: Phần thân của website, chứa các phần tử chính hiển thị lên màn hình như văn bản, hình ảnh, liên kết, form, …
Style: phần khai báo thuộc tính CSS sử dụng trong trang web.
Script: phần khai báo mã JavaScript sử dụng trong trang web.
HTML5 là một ngôn ngữ lập trình, còn HTML đơn thuần là một ngôn ngữ đánh dấu dành cho việc hiển thị. HTML5 được phát triển trên nền tảng HTML với nhiều cải tiến và hỗ trợ giúp cho lập trình viên cũng như người sử dụng (end-user). HTML5 được phát hành từ năm 2018, có khả năng tương thích với các trang web cũ, chuẩn hóa các kỹ thuật không chính thức và twang khả năng phục vụ đa phương tiện.
Đối với lập trình viên, HTML5 hỗ trợ tốt hơn khi thiết kế web dành cho di động, thuộc tính data được thêm vào các thẻ giúp bạn có thể tùy biến dữ liệu mà không cần sử dụng thêm đoạn xử lý JS nào khác.
Đối với người dùng đầu cuối, HTML5 giúp nâng cao trải nghiệm, xem được các hình ảnh, video đa phương tiện mà không cần cài đặt thêm các plugin khác.
1. Có những cách nào để khai báo CSS, thứ tự ưu tiên giữa các cách sử dụng đó.
Có 3 cách thông thường để sử dụng CSS trên 1 trang HTML
Inline: đặt trực tiếp bên trong các phần tử HTML qua thuộc tính style.
Internal: khai báo css trong thẻ style nằm trong chính trang HTML đó. Có 3 rule sử dụng để liên kết giữa css và phần tử bao gồm: thông qua thẻ, thông qua khai báo class hoặc thông qua khai báo id.
External: đặt phần css này thành 1 file riêng so với file html và sử dụng thẻ link để liên kết với nhau. Cách liên kết cũng tương tự như khai báo Internal, thông qua thẻ, class và id.
Về thứ tự ưu tiên, CSS sẽ ưu tiên khai báo inline có tác dụng cao nhất, tiếp đó sẽ đến id, class và thẻ. Ngoài ra chúng ta có thể sử dụng khai báo !important để ưu tiên css mình muốn sử dụng.
2. Bạn thường dùng kỹ thuật nào để responsive một trang web
Responsive là cách thiết kế website làm sao cho các phần tử trong web có thể hiển thị một cách phù hợp trên các thiết bị với kích thước và độ phân giải khác nhau. Có một số thủ thuật (tips) hay sử dụng như sau:
Sử dụng percentages (%): để set width/height của nội dung hiển thị, chúng ta có thể sử dụng % giúp nó co giãn theo kích thước của màn hình. Set % cũng thường sử dụng cho việc chia khối layout.
Sử dụng Media Query: Media Query là 1 module giúp chúng ta xác định được device đang hiển thị, từ đó style các thành phần của web một cách hợp lý.
Sử dụng max-width, min-width: cho phép đặt chiều rộng tối đa cho 1 phần tử, ngăn không cho phần tử này vượt quá phạm vi bạn set và giúp bạn giữ được bố cục layout màn hình.
Sử dụng Box-sizing: Box-sizing giúp chúng ta thoải mái điều chỉnh padding cho từng loại màn hình khác nhau mà không sợ ảnh hưởng đến width của phần tử.
3. Hãy giải thích các thuộc tính về vị trí (position) trong CSS
Thuộc tính vị trí (position) trong CSS có những giá trị sau:
Absolute: vị trí tuyệt đối cho phần tử theo thành phần bao ngoài hoặc cửa sổ trình duyệt.
Static: vị trí ở trạng thái mặc đinh của phần tử (trường hợp này thì các thuộc tính top, bottom, left, right đều không có hiệu lực).
Relative: vị trí tương đối so với vị trí mặc định.
Fixed: định vị trí theo màn hình và luôn cố định ở 1 vị trí trên viewport.
Sticky: vị trí của phần tử được xác định khi người dùng sử dụng thanh cuộn.
1. Liệt kê 1 số function thao tác với DOM bạn hay sử dụng
Một số thao tác DOM cơ bản thường sử dụng:
getElementById: trả về phần tử có thuộc tính ID là giá trị được chỉ định.
getElementsByClassName: trả về tập hợp các phần ử trong trang có thuộc tính class được chỉ định.
querySelector: trả về phần tử đầu tiên trong tập hợp các kết quả được tìm thấy bởi CSS selector được chỉ định.
addEventListener / removeEventListener: thêm / xóa sự kiện hay hành động cho 1 phần tử HTML.
appendchild / removechild: thêm / xóa 1 DOM Node vào DOM Tree.
2. BOM là gì? Các loại BOM hay dùng.
BOM viết tắt của Brower Object Model là những đối tượng liên quan đến trình duyệt browser. Có 1 số loại BOM hay dùng như:
Window: đối tượng toàn cục cấp cao nhất, thường sử dụng để lấy kích thước trình duyệt (window.innerHeight), mở cửa sổ mới (window.open) hoặc đóng (window.close), di chuyển (window.moveTo), … Các BOM còn lại dưới đây các bạn đều có thể sử dụng như 1 thuộc tính của Window (ví dụ Window.Screen).
Screen: lấy width, height, color depth hay pixel depth của màn hình.
Location: thao tác với url của trình duyệt như: tải lại (reload), replace (ghi đè), load trang mới (assign).
History: thao tác với lịch sử web, trở về trang trước hoặc tới trang tiếp theo, …
Navigator: lấy thông tin ngôn ngữ, hệ điều hành, version của client và trình duyệt.
Cookies: thao tác với Cookies của trình duyệt.
3. Cơ chế bất đồng bộ trong JavaScript
JavaScript là 1 ngôn ngữ Single thread (luồng đơn), tức là nó chỉ có 1 thread duy nhất. Điều đó có nghĩa là các câu lệnh được thực hiện 1 cách tuần tự theo thời gian, xong cái trước mới bắt đầu thực hiện cái sau. Cơ chế bất đồng bộ sinh ra để khắc phục việc JavaScript không hỗ trợ multi-thread bằng cách bắt đầu thực hiện cái sau ngay cả khi cái trước chưa hoàn thành.
Trong JS, chúng ta sử dụng Callback, Promise hoặc Async/Await để thực hiện bất đồng bộ. Lưu ý là Promise được thêm vào trong ES6, còn Async/Await chỉ có mặt trong phiên bản ES7 về sau. Bài toán chúng ta hay sử dụng Async/Await nhất là khi cần lấy dữ liệu từ server thông qua API, lúc này sẽ cần chờ đợi phản hồi từ server trả về; và đấy chính là một yêu cầu HTTP không đồng bộ.
Kết bài
Trên đây là tổng hợp của mình về một số câu hỏi phỏng vấn thường gặp cho vị trí FrontEnd Developer. Còn rất nhiều câu hỏi khác mà bạn có thể gặp, vì thế hãy trang bị cho mình đầy đủ các kiến thức liên quan từ HTML, CSS hay JS, nó sẽ giúp bạn tự tin để có thể pass được vị trí lập trình viên mà bạn mong muốn. Chúc các bạn thành công và hẹn gặp lại các bạn ở các bài viết sau của mình.
Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân
Trước đây tôi có viết bài Dựng mạng VPN với WireGuard . Sau một thời gian sử dụng, để ý thấy do các máy con (client) của tôi thỉnh thoảng xảy ra tình trạng treo WireGuard: từ các máy khác không ping đến nó được. Vì vậy tôi lại tiếp tục đề tài WireGuard này, giới thiệu một cách khắc phục.
Trước tiên, xin nêu vài nguyên nhân khiến VPN WireGuard bị treo:
WireGuard của năm 2018 (lúc tôi viết bài trên) được nạp lên hệ thống dưới dạng DKMS. Như ta đã biết, khác với các giải pháp VPN thông thường, WireGuard chạy dưới dạng một driver/module của nhân Linux. Nhưng khi được phân phối ở dạng DKMS, mỗi lần máy được nâng cấp nhân mới thì module này phải trải qua quá trình build lại từ mã nguồn bên ngoài. Điều này đôi khi gây ra tình trạng, phiên bản cũ vẫn còn lơ lửng trong RAM và phiên bản mới chưa thế chân vào được, thế là WireGuard bị treo. Từ Linux 5.6 trở đi thì WireGuard đã được tích hợp vào nhân, không còn ở dạng DKMS nữa nên tình trạng này không còn.
Network interface của WireGuard (ví dụ wg0) được khởi tạo khi máy vẫn chưa thực sự kết nối với Internet (sai thứ tự), việc kết nối với server VPN không thành công, khiến việc cấu hình không hoàn tất. Hoặc khi đang chạy ngon bỗng dưng Internet bị rớt, mất luôn mối kết nối với server. Điều này hay xảy ra với các máy con (client) vì các máy này không được đảm bảo luôn có Internet, thậm chí là không phải lúc nào cũng có điện.
Dựa vào các nguyên nhân trên thì có hai bước phải làm để trị dứt điểm tình trạng WireGuard treo.
Nâng cấp hệ điều hành. Nếu máy của bạn dùng Ubuntu thì nâng cấp lên Ubuntu 20.04 là vừa đủ. Mặc dù Ubuntu 20.04 mới chỉ có Linux 5.4 thôi nhưng đội ngũ tác giả đã “backport” lại sự tích hợp WireGuard của Linux 5.6 vào. Sau khi nâng cấp, nhớ gỡ gói wireguard-dkms ra.
Không dùng script wg-quick để khởi tạo network interface cho WireGuard nữa, mà chuyển việc đó cho các phần mềm chuyên quản lý mạng như systemd-networkd, NetworkManager v.v… để đảm bảo việc khởi tạo network interface cho WireGuard diễn ra sau khi đã kết nối Internet. Dưới đây tôi sẽ trình bày cách chuyển đổi khi bạn đang có WireGuard chạy với wg-quick rồi.
Bài chỉ dẫn này dành cho systemd-networkd trên Ubuntu. Tôi viết cho Ubuntu vì đây là hệ điểu hành mà các máy con của tôi dùng. Ngoài systemd-networkd, tôi cũng đã thử nghiệm NetworkManager, nhưng trên Ubuntu 20.04, NetworkManager dường như có bug khiến thông số “persistent-keepalive” của WireGuard không được tôn trọng, nên tôi không viết về NetworkManager nữa.
Ta sẽ bắt đầu bằng cách chỉnh sửa cấu hình mạng trong Netplan. Netplan là một phần mềm riêng của Ubuntu để giúp việc cấu hình mạng đơn giản hơn. Bản thân Netplan không phải là phần mềm quản lý mạng, tức là nó không cùng thể loại với systemd-networkd, NetworkManager. Nó chỉ giúp việc sinh ra các file cấu hình cho systemd-networkd, NetworkManager bằng một file đầu vào đơn giản hơn.
Bây giờ hãy mở file cấu hình Netplan của bạn, trong /etc/netplan. Ví dụ trên máy tôi thì là file /etc/netplan/wired.yml. Ban đầu nó có nội dung tương tự thế này (máy này chỉ có một cổng mạng dây (Ethernet) là enp1s0):
Giả sử mạng LAN ảo, do WireGuard tạo ra, của bạn là 192.168.2.0/24, và máy con có địa chỉ trong mạng LAN ảo này là 192.168.2.100. Thêm vào file đó cấu hình cho WireGuard như sau:
Lưu ý, chữ tunnels thụt lề cùng cấp với ethernets.
Ta sẽ tắt tính năng tự khởi động service wg-quick đi, để tránh nó tranh chấp với systemd-networkd:
sudo systemctl disable wg-quick@wg0.service
Nếu bạn đang không truy cập từ xa vào máy con qua ngả VPN này thì nó thể tắt nó luôn bằng lệnh:
sudo systemctl disable --now wg-quick@wg0.service
Tiếp đến, yêu cầu Netplan sinh ra cấu hình mới cho systemd-networkd và làm các bước cần thiết để systemd-networkd tạo mới lại mạng theo chỉ dẫn trong cấu hình này:
sudo netplan apply
Ta có thể kiểm tra wg0 có đang được tạo ra và quản lý bởi systemd-networkd bằng cách:
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp1s0 ether routable configured
3 wg0 wireguard routable configured
Nhớ ping thử từ máy khác xem VPN có hoạt động thật không. Sau đó bạn có thể xóa file /etc/wireguard/wg0.conf đi được rồi.
Thế là xong, bây giờ ta có thể yên tâm WireGuard không còn bị treo nữa. Nhân tiện xin khoe hình ảnh trang nội bộ của AgriConnect để theo dõi trạng thái online/offline của các máy đặt tại trang trại khách hàng, cũng như bot Telegram cảnh báo khi có máy bị offline:
Kỹ sư cầu nối là gì? BrSE là gì? Ngày càng nhiều tin tuyển dụng BrSE, Kỹ sư cầu nối xuất hiện. Liệu rằng đây là vị trí liên quan đến “cầu, đường”? Con đường sự nghiệp của Kỹ sư cầu nối như thế nào? Cùng mình giải đáp những câu hỏi này bằng thông tin bên dưới.
Kỹ sư cầu nối (BrSE) là gì?
Kỹ sư cầu nối hay BrSE (Bridge Software Engineer) là người có trách nhiệm kết nối công ty với khách hàng. Họ giúp team thực hiện dự án hiểu rõ mục tiêu, yêu cầu của khách hàng, đồng thời giúp khách hàng hiểu về quá trình phát triển sản phẩm của team. Từ đó, đảm bảo việc hai bên hiểu nhau, tiến triển của dự án diễn ra thuận lợi và đạt hiệu quả.
Để làm được điều này, kỹ sư cầu nối phải luôn theo sát tiến độ dự án, từ giai đoạn nhận yêu cầu đến khi bàn giao sản phẩm.
Hiện nay, ngày càng nhiều doanh nghiệp phần mềm của Nhật Bản lựa chọn Việt Nam là nơi phát triển kinh doanh với nguồn nhân lực chất lượng cao. Vì vậy, nhu cầu tuyển dụng Kỹ sư cầu nối tiếng Nhật lại ngày càng “nóng”. Theo đó, chức danh Kỹ sư cầu nối hay BrSE được sử dụng phổ biến cho thị trường Nhật Bản và có lẽ cũng được tạo ra từ đây.
Với thị trường Âu-Mỹ, BrSE sẽ được thay thế bằng DM – Delivery Manager. Đây cũng là câu trả lời cho thắc mắc “Có phải kỹ sư cầu nối chỉ làm cho các công ty Nhật?”. Thực tế, nhu cầu tuyển dụng kỹ sư cầu nối tiếng Nhật tại Việt Nam cao. Song song với đó vẫn có kỹ sư cầu nối sử dụng ngôn ngữ khác nhưng với số lượng ít.
Công việc của Kỹ sư cầu nối là gì?
Công việc mỗi ngày của một kỹ sư cầu nối còn tùy thuộc vào lĩnh vực, quy mô kinh doanh của doanh nghiệp. Nhưng nhìn chung, ta có thể tóm gọn bằng những đầu việc dưới đây:
Quản lý và xử lý email, trao đổi với khách hàng.
Lên kế hoạch công việc cho từng ngày và theo đó thực hiện.
Đại diện khách hàng trả lời Q&A cho team.
Báo cáo công việc, quy trình, tiến triển của dự án cho khách hàng.
Có thể thấy, nhiệm vụ của BrSE là sự luân phiên cập nhật tình hình cho team nội bộ và khách hàng để đảm bảo sự thống nhất giữa hai bên.
Mặt khác, công việc của BrSE còn thay đổi theo từng giai đoạn của dự án. Cụ thể:
Bắt đầu dự án: nghiên cứu kỹ thuật, lập kế hoạch và sẵn sàng triển khai.
Trong quá trình thực hiện dự án: giám sát và quản lí dự án. Có thể linh hoạt thay đổi chiến lược và phương pháp để nâng cao năng suất và chất lượng dự án.
Cuối dự án: xem xét và kiểm tra sản phẩm trước khi bàn giao cho khách hàng.
Kỹ năng cần có của một BrSE
Ngoại ngữ
Để hiểu chính xác thông tin được truyền tải cũng như giao tiếp trôi chảy, Kỹ sư cầu nối tiếng Nhật ít nhất cần chứng chỉ N2. Ngoài ra, tiếng Anh sẽ giúp bạn tự học từ các nguồn tài liệu trên mạng, song song đó bạn có thể tiếp cận được khách hàng và thị trường nước ngoài.
Nếu bạn hỏi “Không giỏi ngoại ngữ có làm BrSE được không?” Câu trả lời là không – khá phũ nhỉ! Tuy nhiên, đây là thực tế. Bạn là “cầu nối” mà bạn không hiểu khách hàng nói gì hoặc hiểu sai thì hậu quả sẽ như thế nào? Đặc biệt đối với thị trường Nhật, CV của bạn nên bao gồm chứng chỉ N2 trở lên hoặc bạn sẽ bị loại.
Chuyên môn (lập trình)
Nếu vị trí bạn làm chỉ thiên về phiên dịch thì bạn chưa cần học code. Tuy nhiên, để có thể bao show cả dự án từ lúc bắt đầu đến lúc kết thúc với nhiều vấn đề kỹ thuật khó nhằn, bạn cần hiểu code và biết code. Ngoài ra, nhiều công ty cũng đòi hỏi ứng viên biết code cho vị trí Kỹ sư cầu nối.
Khả năng giao tiếp hiệu quả
Có thể nói đây là một kỹ năng không thể thiếu. Bạn là người đảm bảo truyền đạt thông tin một cách chính xác, cũng như giải quyết các xung đột trong dự án. Việc trau dồi tốt kỹ năng giao tiếp hiệu quả sẽ giúp bạn làm tròn vai trò kết nối của mình.
Khả năng tự học
Không riêng BrSE mà hầu như tất cả các nghề đều cần tinh thần tự học cao. Có vậy thì bạn mới có thể theo nghề, liên tục phát triển và nâng cao kỹ năng nghề nghiệp của bạn được.
Riêng về Kỹ sư cầu nối, mỗi dự án sẽ dùng một công nghệ, ngôn ngữ khác nhau. Nên việc tự học là vô cùng quan trọng. Bạn có thể học qua Google, học qua tài liệu, học từ những người đi trước, học từ cộng đồng chuyên môn.
Những tố chất và kỹ năng mềm khác
Kỹ năng làm việc nhóm, kỹ năng giải quyết vấn đề phối hợp với sự điềm tĩnh, trách nhiệm cao, cốt yếu lại vẫn giúp bạn giải quyết thỏa đáng những vấn đề phát sinh. Vừa bảo vệ “team nhà” và bảo vệ khách hàng.
Có nên đi theo con đường Kỹ sư cầu nối?
Có thể thấy yêu cầu từ một Kỹ sư cầu nối là khá cao với nhiều kỹ năng quan trọng. Ngoài ra, để có thể làm việc độc lập với mức lương đáng mơ ước thì bạn cần ít nhất 2 năm để học hỏi và rèn luyện. Phải thật kiên nhẫn thì bạn mới có thể thành công trên con đường trở thành Kỹ sư cầu nối.
Mặt khác, nhiều cơ hội sẽ đến với bạn khi theo nghề
Thu nhập cao, với những BrSE từ 2 năm kinh nghiệm. Điều này là hiển nhiên vì bạn vừa phải biết code vừa phải giỏi ngoại ngữ cơ mà.
Cơ hội định cư tại nước ngoài.
Được làm việc trực tiếp với nhiều khách hàng khác nhau từ đó mở rộng mối quan hệ và học hỏi tư duy kinh doanh từ họ.
Từ những khó khăn, cơ hội, yêu cầu trên. Bạn hãy xác định xem bản thân có thích, có cảm thấy thú vị không. Khi đã có mục tiêu rồi thì bắt tay vào rèn luyện thôi!
BrSE cần học những gì?
Đơn giản thôi! À không hẳn đơn giản =)). Hai yếu tố quan trọng của một BrSE là ngoại ngữ và kỹ thuật (code). Bạn cứ theo đó mà học tập và rèn luyện.
Trường hợp bạn đang và đã biết code rồi. Bạn là dân kỹ thuật và muốn trở thành BrSE, hãy học ngoại ngữ. Tiếng Nhật của bạn nên ở mức độ giao tiếp trôi chảy hoặc chứng chỉ đo đếm tối thiểu là N2.
Trường hợp bạn là dân ngoại ngữ muốn đánh hướng sang BrSE, hãy bắt đầu học code khoảng 1 năm (“khoảng” thôi, sớm hay muộn hơn là do khả năng của bạn). Song song với đó bạn nên bắt đầu với công việc của BA (Business Analyst) hoặc tester, để ứng dụng kiến thức kỹ thuật cũng như làm quen với quy trình sản xuất phần mềm.
Đến đây thì chắc bạn cũng hình đung được Kỹ sư cầu nối là gì rồi, cũng như những được mất nếu theo ngành. Nếu bạn muốn hiểu hơn về nhu cầu thị trường hiện tại cho vị trí này như thế nào? Những yêu cầu và nhiệm vụ của một BrSE ở từng công ty sao? Mời bạn tham khảo tin tuyển dụng BrSE trên TopDev nhé!
Nhắc đến ngôn ngữ lập trình phổ biến nhất thì Python luôn luôn được xếp trong top đầu trong hầu hết các bảng xếp hạng. Với sự phát triển của khoa học dữ liệu hiện nay, Python lại càng được ưa chuộng hơn nhờ tốc độ xử lý dữ liệu của mình. Bài viết hôm nay mình sẽ cùng các bạn tìm hiểu xem Python là gì? và các bước để tự học lập trình Python nhé.
Python Là Gì? Tổng hợp kiến thứ cho người mới bắt đầu
Python là gì?
Python là một ngôn ngữ lập trình bậc cao, mã nguồn mở và đa nền tảng. Python được sử dụng rộng rãi để phát triển các ứng dụng web, phát triển phần mềm, khoa học dữ liệu và máy học (ML).
Python là một ngôn ngữ lập trình mà máy tính có thể hiểu và thực thi trực tiếp mà không cần phải biên dịch trước. Nó được thiết kế để dễ đọc và dễ viết, với cú pháp đơn giản và rõ ràng.
Python được Guido van Rossum giới thiệu vào năm 1991 và đã trải qua 3 giai đoạn phát triển khác nhau tương ứng với các version, mới nhất hiện nay là Python version 3x (3.12.3 vào 9 tháng 4 2024). Python có cú pháp rõ ràng và ngắn gọn, giúp cho việc học và sử dụng ngôn ngữ này trở nên dễ dàng.
Video giới thiệu Python từ W3school:
Tại sao lại chọn ngôn ngữ Python?
Dưới đây là bảng xếp hạng các ngôn ngữ lập trình phổ biến nhất năm 2024, được đăng tải trên trang twitter chính thức của Python Developer:
Python – ngôn ngữ được sử dụng nhiều nhất thế giới
Ta có thể thấy, Python là ngôn ngữ lập trình được sử dụng nhiều nhất thế giới hiện nay. Vậy tại sao các lập trình viên lại yêu thích ngôn ngữ này? Sau đây là bảy lý do khiến nhiều programmer sử dụng Python:
Tại sao Python được sử dụng phổ biến?
Cú pháp đơn giản và dễ đọc: Cú pháp của Python rất giống với ngôn ngữ tiếng Anh tự nhiên, dễ học và dễ đọc, giúp lập trình viên tập trung vào giải quyết vấn đề hơn là việc ghi nhớ cú pháp phức tạp.
Đa dụng: Python có thể được sử dụng trong nhiều lĩnh vực khác nhau như phát triển web, khoa học dữ liệu, trí tuệ nhân tạo, tự động hóa, phân tích dữ liệu, và nhiều ứng dụng khác.
Thư viện phong phú: Python có một kho thư viện đồ sộ, hỗ trợ nhiều tác vụ khác nhau. Các thư viện như NumPy, Pandas, TensorFlow, và Django giúp lập trình viên tiết kiệm thời gian và công sức khi phát triển các ứng dụng phức tạp.
Cộng đồng lớn mạnh: Python có một cộng đồng lập trình viên rộng lớn và năng động, cung cấp nhiều tài liệu, hướng dẫn, và hỗ trợ qua các diễn đàn, nhóm thảo luận và các khóa học trực tuyến.
Đa nền tảng: Python có thể chạy trên nhiều hệ điều hành khác nhau như Windows, macOS, Linux, Raspberry Pi,… giúp cho việc phát triển và triển khai ứng dụng trở nên dễ dàng.
Khả năng mở rộng và tích hợp tốt: Python có thể dễ dàng tích hợp với các ngôn ngữ lập trình khác và các công nghệ hiện có, giúp nó trở thành một lựa chọn lý tưởng cho nhiều dự án khác nhau.
Hỗ trợ từ các tổ chức lớn: Nhiều công ty và tổ chức lớn như Google, Facebook, NASA sử dụng Python và đóng góp vào việc phát triển ngôn ngữ này, làm tăng uy tín và sự tin cậy của nó.
Python được thiết kế với tư tưởng giúp người học dễ đọc, dễ hiểu và dễ nhớ; vì thế ngôn ngữ Python có hình thức rất clear, cấu trúc rõ ràng, thuận tiện cho người mới học. Cấu trúc của Python cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu, nói cách khác thì so với các ngôn ngữ lập trình khác, chúng ta có thể sử dụng ít dòng code hơn để viết ra một chương trình trong Python.
Ban đầu, Python được phát triển để chạy trên nền Unix, vì thế nó là mã nguồn mở. Sau này qua thời gian phát triển, Python mở rộng và hiện nay đã hỗ trợ hầu hết các nền tảng khác như Window hay MacOS.
Python sử dụng một trình thông dịch để chạy mã. Khi bạn viết mã Python, bạn không cần phải biên dịch nó thành mã máy trước khi chạy. Thay vào đó, trình thông dịch sẽ đọc và thực thi mã của bạn trực tiếp, từng dòng một
Python là một ngôn ngữ lập trình đa mẫu hình, nó hỗ trợ hoàn toàn mẫu lập trình hướng đối tượng và lập trình cấu trúc; ngoài ra về mặt tính năng, Python cũng hỗ trợ lập trình hàm và lập trình hướng khía cạnh. Nhờ vậy mà Python có thể làm được rất nhiều thứ, sử dụng trong nhiều lĩnh vực khác nhau.
Python có sẵn các cấu trúc dữ liệu mạnh mẽ như list, dictionary, tuple, giúp bạn dễ dàng xử lý và lưu trữ dữ liệu. Ngoài ra bạn không cần phải khai báo kiểu dữ liệu cho các biến, Python sẽ tự động xác định kiểu dữ liệu dựa trên giá trị của biến.
Triết lý thiết kế của Python nằm trong câu châm ngôn: “chỉ nên có một và tốt nhất là chỉ một cách rõ ràng để làm việc này”. Thay vì việc tích hợp tất cả các tính năng vào phần cốt lõi, Python được thiết kế để dễ dàng mở rộng bằng các module, đồng thời trình thông dịch của Python cũng dễ dàng được mở rộng.
Nếu so về tốc độ độc lập, Python sẽ chậm hơn Java hay C, nhưng nếu bạn cần tốc độ, các bạn có thể chuyển các hàm đó sang các module mở rộng viết bằng C. Phần lõi của Python luôn hướng đến những cú pháp đơn giản, gọn gàng và sẽ luôn chứa chỉ một lời giải rõ ràng nhất cho bài toán của bạn.
Python là một ngôn ngữ phổ biến trong phát triển web nhờ vào các framework mạnh mẽ như Django và Flask. Django, với triết lý “bao gồm mọi thứ bạn cần,” giúp các nhà phát triển xây dựng các trang web phức tạp chỉ trong thời gian ngắn. Flask, ngược lại, linh hoạt và nhẹ, phù hợp cho các dự án nhỏ hơn hoặc các ứng dụng cần cấu trúc tùy biến.
Khoa học Dữ liệu và Phân tích Dữ liệu
Python là công cụ chính cho các nhà khoa học dữ liệu. Thư viện Pandas cung cấp các công cụ mạnh mẽ để thao tác và phân tích dữ liệu. NumPy cho phép thực hiện các tính toán số học với hiệu suất cao. Matplotlib và Seaborn giúp tạo ra các biểu đồ đẹp mắt và dễ hiểu. Các nhà khoa học dữ liệu có thể dễ dàng làm việc với các tập dữ liệu lớn, thực hiện các phân tích phức tạp và trực quan hóa kết quả một cách sinh động.
Trí tuệ Nhân tạo và Học máy
Python là ngôn ngữ hàng đầu cho trí tuệ nhân tạo và học máy. TensorFlow và Keras giúp xây dựng các mô hình học sâu (deep learning) mạnh mẽ. PyTorch nổi bật với tính linh hoạt và dễ sử dụng, là lựa chọn ưa thích của nhiều nhà nghiên cứu. Scikit-learn cung cấp các công cụ đơn giản nhưng hiệu quả để thực hiện các thuật toán học máy truyền thống. Python giúp biến những ý tưởng phức tạp thành hiện thực với ít dòng mã hơn.
Tự động hóa và Scripting
Python là ngôn ngữ lý tưởng cho tự động hóa các tác vụ hàng ngày. Bằng cách viết các script đơn giản, bạn có thể tự động hóa mọi thứ từ việc quản lý hệ thống, xử lý tệp, đến gửi email hàng loạt. Các công cụ như Selenium cũng giúp tự động hóa việc kiểm thử các ứng dụng web.
Phát triển Game
Pygame là thư viện nổi tiếng giúp phát triển game đơn giản với Python. Nó cung cấp các công cụ để xử lý đồ họa, âm thanh và tương tác người dùng. Pygame không chỉ là một cách tuyệt vời để học lập trình mà còn để hiện thực hóa các ý tưởng game sáng tạo.
Ứng dụng Desktop
Python cũng mạnh mẽ trong phát triển ứng dụng desktop. Thư viện Tkinter giúp tạo giao diện người dùng đơn giản. PyQt và Kivy cung cấp các công cụ để xây dựng các ứng dụng phức tạp và đa nền tảng. Bạn có thể phát triển các ứng dụng từ trình quản lý công việc đến phần mềm đồ họa chuyên nghiệp.
Mạng và Bảo mật
Python là công cụ đắc lực trong lĩnh vực mạng và bảo mật. Bạn có thể viết các script để phân tích gói tin, kiểm thử bảo mật, hoặc thậm chí phát triển các công cụ bảo mật của riêng bạn. Thư viện như Scapy giúp bạn làm việc với mạng một cách dễ dàng.
Internet of Things (IoT)
Python phổ biến trong phát triển các ứng dụng IoT, đặc biệt là với Raspberry Pi. Bạn có thể dễ dàng viết mã để điều khiển các cảm biến, thiết bị và thu thập dữ liệu từ môi trường. Python giúp hiện thực hóa các dự án IoT từ những ý tưởng sáng tạo nhất.
Xử lý Hình ảnh và Video
OpenCV là thư viện nổi tiếng cho xử lý hình ảnh và video trong Python. Nó cho phép bạn thực hiện các tác vụ từ nhận diện khuôn mặt, theo dõi đối tượng, đến xử lý video thời gian thực. Python giúp bạn tạo ra các ứng dụng xử lý hình ảnh mạnh mẽ và hiệu quả.
Khoa học và Nghiên cứu
Python là công cụ không thể thiếu trong nghiên cứu khoa học. Các nhà nghiên cứu sử dụng Python để phân tích dữ liệu trong các lĩnh vực như sinh học, vật lý, hóa học. Thư viện như SciPy và SymPy hỗ trợ các tính toán khoa học và mô phỏng phức tạp, giúp các nhà khoa học tập trung vào nghiên cứu của mình mà không phải lo lắng về công cụ lập trình.
Những thư viện và framework Python bạn nên biết
Thư viện Python
Matplotlib: thư viện giúp hiển thị dữ liệu dưới dạng đồ họa (2D và 3D) cho các ứng dụng khoa học máy tính
Pandas: thư viện giúp đọc, ghi, xử lý dữ liệu cho các tác vụ phân tích dữ liệu và machine learning
NumPy: thư viện giúp thực hiện các phép toán đại số tuyến tính
Requests: thư viện cung cấp các hàm hữu ích cho việc phát triển Web
OpenCV: thư viện cho các tác vụ liên quan đến xử lý ảnh
Keras: thư viện mạng Neural cho việc xử lý dữ liệu
Framework Python
Framework Python phổ biến nhất
Django: framework fullstack phát triển ứng dụng Web trên quy mô lớn
Flask: framework micro để phát triển các ứng dụng Web nhỏ
TurboGears: framework phát triển Web
Apache MXNet: framework xây dựng các ứng dụng Deep Learning
Pytorch: framework xây dựng dựa trên thư viện Torch giúp xây dựng các ứng dụng NLP, xử lý ảnh, …
Như đã đề cập ở trên, Python là một ngôn ngữ lập trình dễ học và gần gũi với lập trình viên. Python dễ học nhưng lại có thể làm được rất nhiều thứ, vì thế trước khi bắt đầu bước vào thế giới Python, hãy lựa chọn cho mình hướng phát triển sau này.
Nếu muốn học Python để làm web, hãy tìm hiểu các framework như Django hay Flask; nếu muốn trở thành một Data Analyst, hãy tìm hiểu các thư viện phân tích dữ liệu sẵn có của Python.
Tiếp theo, bạn hãy bắt đầu bằng những project nhỏ để có thể training cú pháp, khái niệm, câu lệnh cơ bản của Python. Python cũng có hầu hết các kiểu dữ liệu cơ bản, các function trong các ngôn ngữ lập trình khác, dù vậy thì cách sử dụng, các case study tất nhiên sẽ khác nhau phụ thuộc vào từng bài toán mà bạn gặp phải.
Vì thế hãy luyện tập bằng cách giải quyết các bài toán lập trình bằng các project nhỏ, chúng sẽ giúp bạn không mất thời gian khi vào thực tế các project lớn hơn của bạn hay khách hàng.
Tập trung vào tìm hiểu các thư viện, module trong Python. Có thể nói mỗi thư viện của Python là một tập hợp các function xử lý hầu hết các bài toán trong một lĩnh vực nhất định – đấy cũng là điểm mạnh giúp Python khác biệt so với các ngôn ngữ khác. Vì vậy, việc nắm bắt, hiểu rõ các function trong một thư viện là điều bắt buộc nếu bạn muốn làm việc với Python.
Chẳng hạn nếu bạn sử dụng thư viện OpenCV để xử lý ảnh trong Python, gần như tất cả các giải thuật về xử lý ảnh đã được tích hợp trong đó, bạn chỉ cần gọi hàm, truyền tham số và sử dụng. Hiểu đúng về giải thuật cũng như tham số truyền vào sẽ giúp bạn sử dụng đúng và hiệu quả để giải quyết bài toán của mình.
Kết bài
Với Python, bạn có thể làm được tất cả mọi thứ – đây là câu mô tả không hề quá khi nói về ngôn ngữ lập trình này. Hy vọng bài viết này đã mang lại cho các bạn những thông tin hữu ích để trả lời cho câu hỏi Python là gì? Bạn có thể tham khảo tin tuyển dụng Python mọi cấp bậc tại đây, để có thể hình dung về những nhiệm vụ, yêu cầu của một lập trình viên Python nhé!
Cảm ơn các bạn đã đọc, hẹn gặp lại trong các bài viết tiếp theo của mình.
Bài viết được sự cho phép của tác giả Tô Thị Vân Anh
Hai khái niệm vô cùng quen thuộc với đội ngũ trong nghề đúng không nào?!, Thực ra khi mà nhắc đến hai khái niệm này và bảo so sánh với nhau, hầu như là ai cũng sẽ có đầy tự tin mà trả lời được rằng retest là test lại bug đã có, còn regression test là test hồi quy – test xem việc sửa 1 bug có sinh ra bug mới hay không. Câu trả lời này tất nhiên là đúng, nhưng mà chưa đủ, hehe. Muốn biết câu trả lời đầy đủ là gì, thì xin mời đọc tiếp!
Retesting
Retesting – Kiểm thử lại: là công việc thực hiện để đảm bảo rằng bug đã log và được fix trước đó có đúng là đã được sửa ở phiên bản hiện tại này hay chưa.
Hay đơn giản là như thế này, bạn tìm thấy 1 bug > sau đó gán cho 1 chú dev nào đó > chú dev này sửa bug, và báo với bạn là bug này tui sửa rồi đó, bản build ngày mai sẽ có > tới ngày mai, bạn vào test lại cái bug này để xác nhận là ồ đúng là chú này đã fix con bug, cái việc này gọi là retesting.
Việc re-test này chỉ thực hiện kiểm thử ở chỗ đã xảy ra lỗi trước đó, tức là trước đó lỗi ở đâu thì sau khi sửa mình sẽ test lại đúng chỗ đó.
Regression testing
Regression testing – kiểm thử hồi quy: là một loại kiểm thử phần mềm để đảm bảo rằng việc sửa lỗi, hay sửa đổi, cập nhật chức năng không làm sinh ra lỗi mới liên quan đến các phần được sửa đổi đó.
Tức là việc này có thể test lặp lại những phần mà trước đây đã từng test rồi, và mục đích ở lần này là để phát hiện liệu phần sửa đổi kia có là nguyên nhân gây ra lỗi hay không.
Thông thường, ta sẽ thực hiện regression testing khi:
Ứng dụng có thêm một function mới nào đó
Có yêu cầu thay đổi (Change Requirement)
Sau khi sửa lỗi
Sau khi sửa lỗi hiệu năng
Môi trường ứng dụng thay đổi (VD: Chuyển đổi Database từ MySQL sang Oracle…)
Bảng so sánh Retesting vs Regression testing
REGRESSION TESTING
RETESTING
Kiểm thử hồi quy được thực hiện để đảm bảo các thay đổi không ảnh hưởng đến các chức năng hiện có.
Kiểm thử lại được thực hiện để đảm bảo rằng các test case failed trước đó đã pass khi các bug được sửa
Kiểm thử hồi quy được thực hiện để xác minh xem liệu có chức năng hiện có nào bị ảnh hưởng hay không, liên quan đến sự thay đổi đó.
Kiểm thử lại được thực hiện trên việc bug log trước đó đã được sửa.
Tùy theo tình hình dự án, regressiton testing có thể được thực hiện song song với retesting.
Retesting được đánh giá có độ ưu tiên cao hơn so với regression testing, nên thường được thực hiện trước regresstion testing.
Verify defect không thuộc kiểm thử hồi quy
Verify defect là một phần của retesting.
Ta thường thực hiện kiểm thử tự động với regresstion testing, thực hiện manually có thể tốn nhiều chi phí và thời gian.
Ta không thể thực hiện tự động với những case cần retest.
Regresstion testing được biết đến như là một loại kiểm thử chung chung.
Re-testing là một kiểu kiểm thử có kế hoạch.
Việc thực hiện test này có thể thực hiện trên cả những test case đã từng pass trước đó.
Re-testing chỉ thực hiện trên những test case fail.
Regresstion test case được đưa ra dựa vào mô tả chức năng
Thực hiện re-testing với cùng bộ dữ liệu test, môi trường test.
Tóm lại
Bài viết dông dài thế kia thôi, tóm lại là như này cho dễ hình dung, dễ thuộc bài nè. Re-testing là kiểm tra xem có thực sự là lỗi đã được sửa hay không, và Regression testing là kiểm tra xem liệu có lỗi mới nào phát sinh sau khi chỉnh sửa hay không. :))
Devops Engineer từ lâu đã là một nghề hot trong bộ các ngành liên quan tới IT, bài viết này sẽ chỉ ra 8 bước trong lộ trình trở thành Devops Engineer.
DevOps Engineer không đơn thuần là thao tác với phần cứng, viết vài dòng CICD cho code auto run build deploy. 8 bước sau đây sẽ cho anh em cái nhìn tổng quan từng bước để trở thành kỹ sư DevOps.
Gét gô thôi anh em ơi!
1. Học một ngôn ngữ lập trình
Tin không vui cho anh em nào bảo chuyển qua devops không cần code củng gì nữa. Thực tế là bắt đầu để trở thành DevOps Engineer, ta vẫn cần kiến thức cơ bản của một ngôn ngữ lập trình.
Có thể là không được sâu như các Senior Software Engineer nhưng ít nhất cũng phải hiểu biết những thuật ngữ, khái niệm, concept cơ bản nhật của lập trình.
Devops Engineer không chỉ đơn thuần động tới phần cứng, Devops Engineer.
Chính vì vậy lộ trình trở thành Devops Engineer, bước đầu tiên không thể nào khác đi, đó là học một ngôn ngữ lập trình. Ở thời điểm hiện tại, một số ngôn ngữ lập trình sau được recommended nha anh em:
Thử nghĩ nếu một Devops Engineer vừa có thể debug code cho development team, vừa có thể đọc lock code, hiểu về các command và development thực hiện để run code. Ôi, ông devops ấy thật đáng ngưỡng mộ biết nhường nào.
Không biết ít thì biết nhiều vẫn phải biết code nha anh em
Hơi lố nhưng sau khi đã nắm cơ bản về một ngôn ngữ lập trình, bước kế tiếp là tìm hiểu về hệ điều hành.
Bước thứ hai nhìn thì có vẻ dễ hơn bước một trong lộ trình trở thành DevOps Engineer nhưng thực tế là không phải vậy.
Cho dù là bạn có kinh nghiệm cài win dạo mười năm, hackintosh 5 năm thì hiểu sâu về hệ điều hành (operating system) lại là câu chuyện hoàn toàn khác. Devops Engineer làm việc ở đâu?, làm việc trên hệ điều hành chứ ở đâu. Nếu không hiểu về nó làm sao có thể nhận biết lỗi, làm sao có thể điều khiển nó hoạt động? Chính vì thế, tìm hiểu về Operating System là bắt buộc nha anh em.
Kế tiếp là các hệ điều hành hiện nay. Cái này thì không cần nói hầu như mọi người cũng biết. 3 hệ điều hành phổ biến hiện nay để tìm hiểu là:
Linux (Khuyến khích)
Unix
Windows
Tại sao các máy chủ hiện tại lại yêu thích Linux. Trường hợp nào máy chủ Linux được ưu tiên hơn máy chủ Windows. Lợi và hại của từng loại máy chủ.
Ngoài tìm hiểu nội dung cơ bản, anh em cũng cần học về terminal, kể cả là có GUI hay không có GUI anh em cũng chiến rầm rầm. Mở terminal lên là deploy thôi.
Tiện đây giới thiệu cho anh em con Terminus, xài bao đã, remember vào cứ click và bay thẳng vào server gõ lạch cạch.
Quản lý danh sách host, server. Truy cập bằng 1 click
Thêm host mới nhanh chóng, dễ dàng
Anh em có thể tìm hiểu thêm về sự khác biệt giữa các hệ điều hành tại đây.
3. Tìm hiểu về mạng máy tính, bảo mật (networking security ) và các phương thức (protocols)
Sau khi đã thành thạo bá đạo các hệ điều hành rồi. Tới độ mở terminal lên là gõ thôi, mọi câu lệnh nằm trong đầu, không phải tra cái gì cả.
Nhắm mắt vào cũng rm -rf, pm2 delete rầm rầm thì xin chúc mừng anh em đã qua bước thứ 2 trong lộ trình trở thành DevOps Engineer. Bước thứ 3 là tìm hiểu về mạng máy tính, bảo mật và các phương thức (protocols).
Bước này có một số khái niệm cơ bản anh em phải nắm vững:
Ví dụ như HTTP, anh em cần tìm hiểu thật sâu nó có những phương thức nào (tham khảo bài Http Methods: thất tinh bắc đẩu trận). Nếu có điều kiện thì thực hành với postman, sự khác biệt giữa các methods là gì?. Thực tế lúc nào cần xài cái nào?
Mô hình OSI trong mạng máy tính
Ngoài những thông tin trên, rõ ràng là bất cứ ứng dụng nào cũng sẽ có protocols (phương thức) giao nhận để truyền đạt thông tin. Mỗi giao thức lại hỗ trợ một kiểu khác nhau, nên anh em cần nắm kỹ.
TCP/IP (Transmission Control Protocol/Internet Protocol) suite.
ARP (Address Resolution Protocol)
DHCP (Dynamic Host Configuration Protocol)
DNS (Domain Name System)
4. Học về Infrastructure
Sau khi đã nắm kiến thức về Security và Protocols thì bước kế tiếp là tìm hiểu về Infrastructure. Bước thứ 4 trong lộ trình trở thành Devops Engineer không đơn giản.
Infrastructure as Code (IaC) là công việc hợp lý hoá, thiết kế và phân tích cơ sở hạ tầng để triển khai ứng dụng. Các ứng dụng khác nhau lại có yêu cầu về cơ sở hạ tầng khác nhau.
Ví dụ, một ứng dụng truyền đạt dữ liệu đơn giản có thể không yêu cầu nhiều về mặt hạ tầng. Nhưng với những dự án có sử dụng thiết bị IoT hoặc các thiết bị truyền đạt dữ liệu lớn, việc thiết kế hạ tầng đòi hỏi cần người có trình độ cao, có kinh nghiệm.
Một ví dụ về thiết kế hạ tầng cho hệ thống IoT. Nguồn ảnh: f5.com
Bước này có lẽ là bước tốn nhiều thời gian nhất để trở thành một Devops Engineer giỏi. Ngoài việc nắm chắc kiến thức, bước này còn cần thời gian để thực hành. Cơ hội để tham gia vào dự án thực tế.
5. Lấn sâu vào CI (Continuous Integration) và CD (Continuous Deployment)
Nghe có vẻ hơi ngược trong lộ trình trở thành DevOps Engineer nhưng bước thứ 5 lại là lấn sâu vào CI và CD. Thực tế CI và CD không hề khó nếu anh em đã có kiến thức nền ở các bước số 1 và 2.
Tích hợp liên tục (CI) và Triển khai liên tục (CD) là nguyên tắc trung tâm và cốt lõi cho Devops Engineer. Bản thân công việc của người kỹ sư là tự động hoá để làm sao việc phát triển, triển khai các ứng dụng được thực hiện liên tục, không có sự ngắt quãng.
Để đạt được việc này, hầu hết các kỹ sư giỏi đều nắm chắc các công cụ hỗ trợ CI, CD. Sau khi thiết lập hoàn thiện các phần này, công sức triển khai không còn là bao nhiêu.
Một số cái tên có thể liệt kê ra đây để anh em tìm hiểu:
GitHub
GitLab
Bamboo
Jenkins
Ở trình độ cao hơn, một số anh em có thể tự xây dựng CI, CD cho riêng bản thân mình. Có thể một số tính năng như count time, log, auto retries chưa có, nhưng cũng không phải là điều không thể.
6. Hiểu sâu về Application Monitoring và Infrastructure Monitoring.
Sau khi đã triển khai CI, CD thành công. Bước thứ 6 trong lộ trình trở thành DevOps Engineer là Monitoring.
Trong bài viết này mình chia thành 2 loại là Applicaiton Monitoring và Infrastructure Monitoring.
Vậy Monitoring là gì?. Bản thân nó là giám sát, sau khi đã triển khai ứng dụng, trong quá trình vận hành làm sao anh em có thể giám sát. Trường hợp có sự cố hoặc tiềm tàng phát hiện sự cố, việc giám sát giúp hạn chế rủi ro, hạn chế thiệt hại khi có sự cố phát sinh.
Ví dụ về mornitoring application. Nguồn ảnh/ Source: solarwinds.com
6.1 Application Monitoring
Theo dõi ứng dụng ở đây là theo dõi các thông số hoạt động liên quan tới ứng dụng. Các chỉ số này bao gồm các tính năng liên quan tới ứng dụng. Nếu có một form đăng ký, bình thường hàng ngày số lượt đăng ký là 300. Nếu hôm nay tự nhiên là 5, vậy có khả năng nó có vấn đề.
Một số công cụ Application Monitoring anh em có thể tham khảo:
Prometheus (recommended)
Nagios
Datadog
6.2 Infrastructure Monitoring
Infrastructure theo dõi ở cấp độ hạ tầng, kết nối giữa ứng dụng và các hạ tầng khác liên quan. Ví dụ một ứng dụng IoT có lưu dữ liệu lên đám mây. Nếu kết nối cloud có vấn đề, việc theo dõi có thể ngăn chặn sớm lỗi này.
Một số công cụ Infrastructure Monitoring anh em có thể tham khảo:
Hầu hết các ứng dụng hiện này đều được host trên cloud. Mỗi bên cung cấp dịch vụ về cloud lại có một tài liệu kỹ thuật riêng. Dịch vụ cloud cung cấp bảo mật, khả năng mở rộng
Bước thứ 7 trong lộ trình trở thành DevOps Engineer là tìm hiểu và thi lấy chứng chỉ nếu được cho các Cloud Provider này. Việc thi chứng chỉ sẽ bao gồm rất nhiều hạng mục:
Sử dụng Cloud như thế nào
Tính toán chi phí
Ước lượng, thiết kế hạ tầng cloud cho ứng dụng
Việc tìm hiểu, thực hành cho các bên cung cấp dịch vụ Cloud là bắt buộc. Có thể kể tới đây một số bên cung cấp dịch vụ cloud lớn nhất hiện nay:
AWS (recommended)
Azure
Google Cloud
Heroku
Top 10 Cloud Provider – Nguồn ảnh: allcode.com
8. Nắm chắc, hiểu sâu về cloud design patterns
Sau khi đã thành thạo và hiểu sâu về các bên cung cấp dịch vụ cloud. Bước cuối cùng để trở thành DevOps Engineer trình độ cao là hiểu biết về Cloud Design Pattern.
Design Pattern là các pattern cần tuân theo để thiết kế Cloud sao cho có khả năng mở rộng, đạt được độ tin cậy và bảo mật.
Một ví dụ đơn giản là giải quyết bài toán độ trễ (high latency) trong hệ thống cloud.
Một số lĩnh vực anh em có thể tìm hiểu về Cloud Design Pattern bao gồm:
Availability
Data Management
Design and Implementation
9. Tham khảo thêm về lộ trình trở thành devops engineer
Anh em lưu ý là lộ trình tui đề xuất ra đây là lộ trình cơ bản và không bao gồm tất cả những nội dung anh em cần học để trở thành DevOps Engineer nha. Lộ trình để tham khảo thôi đấy.
Chứ đi theo lộ (đường) thì đôi khi mỗi anh em lại hợp với một loại đường. Có anh em thích đi đường nhựa tay ga, có anh em thích đi đường đá chân trần. Anyway
Cảm ơn anh em đã dành thời gian đọc bài. Thank you for your time – Happy Coding
Thực tế hiện nay, khi Công nghệ hiện hữu hầu hết khắp nơi trong đời sống con người, nghề làm IT càng trở nên thu hút hơn bao giờ hết. Và nghe đến “làm IT”, thì có lẽ thu nhập và cơ hội thăng tiến sẽ là những chủ đề được quan tâm nhất. Trong bài viết này, hãy cùng mình tham khảo mức lương các vị trí Lập trình 2022 qua những thống kê từ Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 do TopDev phát hành nhé! Giờ thì… bắt đầu thôi nào!
Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 do TopDev phát hành đã đưa ra bảng so sánh mức lương giữa các vị trí lập trình mới nhất trong năm 2022. Các vị trí ngành lập trình có mức lương dao động từ 8 – 140 triệu/tháng.
Mức lương lập trình viên theo Công nghệ & lĩnh vực
Xếp hạng các công nghệ được trả lương cao nhất có thể được chia thành 2 nhóm lớn: High-tech liên quan đến xu hướng AI / ML (Kubernetes, Tensor Flows, Python) và Điện toán đám mây (AWS, GCP, Azure). Nhóm thứ hai là các công nghệ mới nổi – Unity và xu hướng play-to-earn & NFT.
Theo Báo cáo thị trường IT Việt Nam – Tech Hiring 2022, Lập trình viên với từ 1 đến 3 năm kinh nghiệm làm về AWS có mức lương Gross trung bình $1,775; đối với GCP là $1,698; với Azure là $1,526. Mức lương Lập trình viên làm về các công nghệ thuộc nhóm High Tech bao gồm Tensor Flows, Kubernetes, Python, lần lượt đạt mức $1,732, $1,669, $1,389. Mức lương Gross của Lập trình viên Unity hiện ở mức trung bình $1,378/tháng khi có từ 1 đến 3 năm kinh nghiệm.
3 ngành có thu nhập cao hàng đầu hiện nay là Blockchain, High Tech và Fintech. Du nhập vào Việt Nam từ năm 2015, lĩnh vực High tech (AI, IoT, Điện toán đám mây, …) được coi là chìa khóa mang lại lợi thế cạnh tranh, là xu hướng bắt buộc đến năm 2025. Đối với Fintech, đây được coi là ngành thực sự cần thiết đối với các ngân hàng và tất cả các hệ thống quản trị doanh nghiệp. Mức lương của các ngành này dao động từ $1,000 đến $3,500 tùy vào số năm kinh nghiệm.
IT Service, Banking, Telecommunication, PropTech, E-Commerce,… vẫn là những ngành được quan tâm phát triển mạnh mẽ. Mức lương của các ngành này trung bình từ $800 tới $2.200, tùy vào số năm kinh nghiệm và năng lực thực chiến.
Mức lương lập trình theo số năm kinh nghiệm
Theo Báo cáo thị trường IT Việt Nam năm 2022 do TopDev phát hành, mức lương lập trình viên dao động từ $350 (Fresher) đến $1.190 cho vị trí Mid-Senior. Lập trình viên Senior có mức lương dao động từ $860 đến $1.510. Các vị trí Quản lý (từ 5 năm trở lên) hoặc cấp cao hơn được khảo sát có mức lương từ $1.410 cho đến hơn $2.300.
Ngành Công nghệ thông tin khởi sắc và nở rộ với các xu hướng về Chuyển đổi số và đầu tư phát triển Công nghệ. Các doanh nghiệp ngày càng nhận thấy sự cần thiết của lực lượng nhân sự IT và tăng cao nhu cầu tuyển dụng. Điều này đã thu hút ngày càng nhiều nhân lực IT tham gia vào thị trường. Ngoài ra, với nhu cầu tuyển dụng lớn cùng yêu cầu về kỹ năng và kinh nghiệm thì mức lương Lập trình viên theo từng cấp độ cũng có xu hướng tăng lên.
Cụ thể, kết quả báo cáo thị trường IT Việt Nam – Tech Hiring 2022 do TopDev phát hành, mức lương Lập trình viên Fresher đã tăng 4.93% so với cùng kỳ năm ngoái và đạt đến $565. Mức lương Lập trình viên Senior (có từ 4 năm kinh nghiệm trở lên) tăng 8,97% để đạt mức lương Gross lên đến $1.510. Mức lương của nhân lực IT từ cấp Director trở lên (sở hữu từ 10 năm kinh nghiệm) ở cả định hướng Business và Technical tăng hơn 10%, và có thể chạm đến mức lương trung bình là $2,750.
Mức lương lập trình viên theo vị trí: 140 triệu/ tháng liệu có dễ dàng?
Theo thông số do báo cáo cung cấp, các vị trí được trả lương cao nhất yêu cầu các kỹ năng đặc biệt như Data Analyst, Cloud, DevOps, Machine Learning hoặc AI. Và với tác động của Covid-19, Cloud Service & DevOps đã đóng một vai trò quan trọng trong việc duy trì và phát triển doanh nghiệp. Do đó, nhu cầu về kỹ sư Cloud / DevOps đã có sự tăng trưởng mạnh mẽ, kéo theo đó là các vị trí này được trả lương ngày càng cao.
Mức lương càng cao thì trách nhiệm công việc, kinh nghiệm thực chiến và kỹ năng cũng càng phải đạt những yêu cầu khắc nghiệt hơn. Hãy cùng điểm qua một số vị trí với định hướng phát triển và mức lương khi đảm nhiệm ngay sau đây nhé!
CIO/CTO
Vai trò CTO hay CIO, phụ trách Tech Management nói chung có mức lương lên đến $5.933 (trên 140 triệu đồng), được coi là mục tiêu nghề nghiệp cao nhất của nhân sự ngành IT. Để vươn tới vị trí này, các lập trình viên không những vững kỹ năng cơ bản, mà còn phải xử lý những công việc quản trị và xây dựng, tối ưu những công nghệ và sản phẩm công nghệ của doanh nghiệp.
Solution Architect
Người làm Solution Architect có vai trò đưa ra kiến trúc để xây dựng phần mềm đáp ứng các yêu cầu về functional và non-functional cho phần mềm đó. Ngoài ra, trong nhiều dự án thì Solution Architect cũng phải tham gia vào cả giai đoạn phân tích nghiệp vụ cùng với Business Analyst. Vị trí này có mức lương trung bình cho từ 1 – 3 năm kinh nghiệm là $4,242 (trên 100 triệu đồng).
Technical Architect
Vai trò của vị trí này là đảm nhiệm công việc giám sát một nhóm tập trung vào các vấn đề kỹ thuật, bao gồm phát triển phần mềm, phát hành sản phẩm và các nhiệm vụ kỹ thuật khác. Technical Architect là người đánh giá các quy trình làm việc của nhóm, hợp tác với các nhân viên để xác định và sửa chữa các vấn đề kỹ thuật và thực hiện các thay đổi để tối ưu quy trình. Mức lương của vị trí này ở khoảng: $4,127/tháng (khoảng 98 triệu đồng).
DevOps Engineers
DevOps Engineers đảm nhiệm vai trò làm giảm chi phí và vòng lặp của dự án, là cầu nối giữa Developers và nhóm IT khác. DevOps Engineers hiểu cặn kẽ về vòng đời phát triển phần mềm và các công cụ tự động hóa được sử dụng để tạo CI / CD Pipeline (tích hợp liên tục / phân phối liên tục), giúp giảm thiểu lỗi, tạo điều kiện triển khai nhanh chóng các sản phẩm với chất lượng tốt hơn và đồng thời cải thiện khả năng duy trì cơ sở hạ tầng. Năm 2022, vị trí này có mức lương dao động trong khoảng $2,149/tháng.
Project Manager
Project Manager có trách nhiệm quản lý dự án, hoàn thành các mục tiêu đề ra từ khi bắt đầu đến khi thực hiện và kết thúc. Họ là người đứng giữa khách hàng và team lập trình, đại diện tiếp nhận và trao đổi yêu cầu, vấn đề gặp phải của cả hai bên. Trở thành Project Manager, bạn cần có khả năng thích ứng với các quy trình nội bộ khác nhau của khách hàng và hình thành sự liên kết cho đôi bên, giải quyết các vấn đề phát sinh giữa họ và Team Lập trình. Vị trí này có mức lương trong khoảng: $1,890/tháng.
Full-stack Developers
Thông thường, vị trí này yêu cầu phải có khả năng làm việc với CSS & JS tốt (Truy vấn media, ứng dụng trang đơn và DOM, ES6). Biết các công cụ như Grunt, Gulp & Browserify, framework web (ít nhất một). Ngoài ra, họ còn được yêu cầu có thể thiết kế mô hình relation tốt, thực hiện các truy vấn tiên tiến và SQL Joins. Biết cách deploy code của mình trên AWS EC2 bằng Apache2 hoặc Nginx như web server, có kiến thức làm việc với Docker và Virtualization. Vị trí này có mức lương dao động trong khoảng: $1.405/tháng
Vai trò của vị trí này là cài đặt, nâng cấp và giám sát phần mềm và phần cứng. System Administrator thường là người duy trì các yếu tố cần thiết như hệ điều hành, ứng dụng kinh doanh, công cụ bảo mật, web-servers, email, PC, mạng cục bộ và mạng diện rộng cả phần cứng, phần mềm và phần cứng máy chủ tầm trung. Mức lương dao động cho vị trí này ở khoảng $1,381/tháng.
Game Developers
Đây là người phát triển phần mềm tạo ra các trò chơi video. Game Developers sẽ tham gia vào các lĩnh vực khác nhau của game từ khái niệm, viết cốt truyện cho đến lập trình. Các lĩnh vực tiềm năng khác cho Game Developers bao gồm âm thanh, thiết kế, sản xuất và visual arts. Game Developers có mức lương trong khoảng: $1,279/tháng.
Mobile Developers
Mobile Developers giữ vai trò là người phát triển ứng dụng trên các nền tảng Google, Android, iOS và Microsoft, Windows Phone,…. Nhiệm vụ chính của một Mobile Developer là phối hợp với các nhóm chức năng để xây dựng và phát triển các chức năng của ứng dụng di động, không ngừng cải thiện và tối ưu hóa ứng dụng di động để đáp ứng nhu cầu người dùng. Mức lương dao động trong khoảng: 1,174$/tháng
Product Manager
Product Manager là người chịu trách nhiệm về sự thành công của sản phẩm, đảm nhiệm xây dựng tính năng của sản phẩm thông qua kết hợp làm việc với Developer và UX/UI Designer. Vị trí này có mức lương trong khoảng: $1.033/tháng.
UX/UI Designer
Vai trò của vị trí này là tìm hiểu người dùng, triển khai các ý tưởng để giải quyết nhu cầu của người dùng – nhu cầu của kinh doanh – và cả xây dựng, đo lường những giải pháp thực tế để xem chúng có thực sự hiệu quả hay không. Mức lương dao động trong khoảng: $943/tháng.
IT Helpdesk
Đây là người theo dõi và kiểm tra hệ thống liên tục, phụ trách phối hợp ăn ý với các bộ phận liên quan như Technical để hỗ trợ và giúp đỡ khách hàng giải quyết lỗi kỹ thuật, hỏng hóc,… nhanh chóng và hiệu quả. Ngoài ra, họ còn thu thập thông tin và đóng góp phản hồi của khách hàng về sản phẩm dịch vụ công ty để dễ dàng rà soát, cải tiến và nâng cao chất lượng của sản phẩm, đồng thời chăm sóc & quan tâm tới khách hàng sử dụng dịch vụ của công ty. Mức lương của vị trí này từ 1 – 3 năm kinh nghiệm ở khoảng $331/tháng.
Hi vọng những thông tin về mức lương Lập trình viên năm 2022 ở bài viết trên có thể mang lại giá trị tham khảo cho những ai muốn “dấn thân” vào lĩnh vực Lập trình. Thu nhập cao gắn liền với trách nhiệm cao hơn và cả sự đánh đổi. Có thể thấy rằng để đạt được mức lương 140 triệu/ tháng không phải là điều dễ dàng. Ngoài vốn kiến thức & kinh nghiệm dày dặn, người làm IT muốn hướng tới mức lương này cần trang bị cho mình tinh thần cầu thị, khả năng lãnh đạo cùng nhiều kỹ năng khác để có thể vượt trội hơn số đông còn lại. Nhưng điều này không phải là không thực hiện được. Hãy không ngừng cố gắng bạn nhé! Chúc bạn thành công!
Ngoài ra, bạn có thể tham khảo thêm nhiều thông tin và chỉ số khác của toàn ngành IT thông qua bản báo cáo đầy đủ nhất tại đây: Báo Cáo Thị Trường IT Việt Nam 2022
Chỉ chưa đầy 1 tháng sau sự kiện hợp nhất The Merge của mình, cộng đồng Ethereum cùng hướng đến sự kiện Devcon 2022 – hội nghị toàn cầu thường niên diễn ra tại Bogata, Columbia. Sự kiện năm nay thu hút được sự chú ý lớn đến từ toàn thị trường blockchain nói chung khi mà các thông tin liên quan đến bước tiến tiếp theo đối với hệ sinh thái ETH sẽ được đưa ra thảo luận. Bài viết này mình sẽ cùng các bạn tìm hiểu các thông tin liên quan đến sự kiện này nhé.
Devcon là gì?
Devcon viết tắt cho Developers Conference là sự kiện lớn nhất do ETH Foundation tổ chức dành cho các nhà phát triển, nhà nghiên cứu, nhà tư tưởng và nhà sản xuất Ethereum. Mục đích của hội nghị này là tập hợp các dự án tiên tiến nhất, các nhà phát triển và cộng đồng hiểu biết về tiền điện tử trên toàn thế giới để trao đổi thông tin và các ý tưởng cải tiến cho hệ sinh thái ETH.
Devcon lần đầu được tổ chức vào năm 2015 (1 năm sau sự ra đời của ETH), tại London, Anh. Sự kiện thường niên này thu hút sự quan tâm của cộng đồng, được tổ chức trải rộng trên khắp các địa điểm trên thế giới: Thượng Hải, Trung Quốc; Osaka Nhật Bản; Praha Cộng hòa Séc; Cancun Mexico.
Năm 2020 và 2021, do ảnh hưởng của đại dịch Covid-19; sự kiện đã bị hoãn lại cho đến năm nay. Sau 3 năm, sự kiện Devcon 2022 này mới quay trở lại và được chú ý hơn nhất là sau sự kiện The Merge – một trong những cột mốc quan trọng nhất đối với hệ sinh thái ETH.
Devcon lần thứ 6 được diễn ra từ ngày 11 đến 14 tháng 10 ở Bogota, Columbia. Tất cả các bài thuyết trình của sự kiện đều được trực tiếp trên các nền tảng trực tuyến, các bạn quan tâm có thể dễ dàng truy cập vào blog chính thức của hội nghị để theo dõi.
Nguồn: cryptoevents.global
Devcon 2022 có gì đáng chờ đợi?
Năm nay, các diễn giả chính của hội nghị Devcon bao gồm: đồng sáng lập Ethereum Vitalik Buterin; giám đốc điều hành Ethereum Foundation Aya Miyaguchi và nhà nghiên cứu Ethereum Danny Ryan. 3 Labs về ETH lớn nhất hiện nay là Offchain Labs, Optimism Labs và Matter Labs cũng có đại diện tham dự và cùng thảo luận xung quanh các chủ đề Layer 2 – một giải pháp cho tính mở rộng và là chìa khóa cho sự phát triển của Ethereum trong tương lai.
Sau sự kiện The Merge, dẫu quan trọng và được kỳ vọng nhiều, nhưng giá ETH lại đang bắt đầu có xu hướng giảm mạnh. ETH từ mức gần 1.800 USD trước The Merge đã xuống chỉ còn 1.300 USD khiến cộng đồng hơn bao giờ hết hy vọng 1 tín hiệu tích cực sẽ đến khi Devcon diễn ra. Cộng đồng Ethereum cần 1 sự đảm bảo đến từ những diễn giả tại hội nghị – cũng là những nhà phát triển và nghiên cứu trực tiếp hệ sinh thái blockchain này để tiếp tục đặt niềm tin vào tương lai của coin ETH.
Về mặt công nghệ, vấn đề liên quan đến tính mở rộng Ethereum cũng được quan tâm hơn. Các giải pháp giải quyết vấn đề đưa ra (gọi chung là Layer 2) hứa hẹn vẫn có thể kế thừa tính bảo mật từ Layer 1, đồng thời có khả năng xử lý nhiều giao dịch hơn, giảm chi phí và tốc độ xác thực giao dịch nhanh hơn Layer 1. Tất cả hứa hẹn sẽ được giới thiệu và làm rõ trong Devcon lần này.
Nguồn: miro.medium.com
Ngoài lề sự kiện, có 1 số lo ngại về an ninh cũng như việc tấn công từ hacker khiến cho 1 số diễn giả nổi tiếng không thể tham gia. Đồng sáng lập Polygon, Sandeep Nailwal do lo ngại về sự an toàn của nước chủ nhà nên đã quyết định không tham gia hội nghị lần này.
Devcon đã đi qua 6 quốc gia và 3 lục địa với mong muốn có thể phổ biến đến mọi thành viên quan tâm đến blockchain nói chung và ETH nói riêng. Địa điểm tổ chức của hội nghị Devcon 2023 (lần thứ 6) sẽ được bình chọn trên forum chính thức của sự kiện. Hiện nay, Việt Nam đang đứng đầu trong cuộc bình chọn trở thành địa điểm tổ chức Devcon VI, theo sát sau đó là Thổ Nhĩ Kỳ.
Việt Nam của chúng ta đang có ưu thế lớn trong cuộc bầu chọn này với ước tính có khoảng 41% cư dân Việt Nam đang sở hữu tiền điện tử; blockchain cũng là một trong những công nghệ được ưu tiên trong cuộc cách mạng công nghiệp lần thứ 4 của nước ta. Các dự án nổi bật về blockchain và tiề n điện tử của chúng ta hiện nay như Tomochain, Kyber Network, Kyros, … cũng góp phần làm tăng uy tín trong việc bình chọn. Địa điểm tổ chức được đề xuất là ở Nha Trang. Các bạn có thể theo dõi đề xuất và thực hiện việc votes tại link: https://forum.devcon.org/t/proposed-location-nha-trang-city-vietnam/697
Cùng hy vọng với sự ủng hộ của cộng đồng quốc tế, năm sau chúng ta, những người quan tâm đến ETH hay blockchain có thể chào đón các diễn giả nổi tiếng đến với đất nước Việt Nam.
Hy vọng bài viết đã mang đến cho bạn những thông tin hữu ích liên quan đến sự kiện Devcon 2022 và hệ sinh thái Ethereum. Cảm ơn các bạn đã theo dõi và hẹn gặp lại các bạn trong các bài viết sau của mình.
Đầu tháng 9 vừa qua, TopDev – Nền tảng tuyển dụng IT hàng đầu vừa phát hành Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 với những đánh giá và phân tích về vận hội cũng như viễn cảnh của thị trường lao động IT.
Chiều ngày 22/9/2022, trong Lễ ra mắt Hội đồng Công ty ICT Hàn Quốc tại TPHCM (KICH) – Launching Ceremony of Korea ICT Company Council in Ho Chi Minh City (KICH), ông Park JongHo – CEO của TopDev đã có bài phát biểu nhằm giới thiệu về Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 và nhận định về thị trường nhân lực IT tại Việt Nam trong thời gian tới. Tại sự kiện, ông Park đã chia sẻ về những thay đổi đối với ngành Công nghệ Thông tin sau giai đoạn đại dịch COVID-19. Qua đó, ông Park cũng chỉ ra những điểm tích cực đáng tự hào trong năm vừa qua với sự chuyển dịch & thích nghi nhanh của người lao động và doanh nghiệp Việt Nam khi triển khai các mô hình tuyển dụng & làm việc mới.
“Những biến động khó lường của thị trường IT cũng đã vượt ra khỏi những tính toán ban đầu. Tuy vậy, có thể nhận thấy rằng nội lực kỹ thuật mạnh mẽ đến từ lực lượng nhân sự CNTT và các chính sách thúc đẩy chuyển đổi số chính xác và kịp thời của Chính phủ Việt Nam đã tạo ra nền tảng và sự cộng hưởng lớn giúp giữ vững nền kinh tế và lấy lại đà khôi phục nhanh chóng trong năm 2022” – Ông Park nhận định.
Nhiều năm qua, TopDev không ngừng hoàn thiện và phát hành các Báo cáo về thị trường IT, nhằm mang đến cái nhìn toàn diện về nguồn nhân lực IT cho các Doanh nghiệp, Nhà đầu tư và những cá nhân có định hướng hoạt động trong lĩnh vực này. Bài báo cáo cung cấp đầy đủ thông tin cần thiết về Tổng quan tình hình kinh tế & Xã hội tại Việt Nam, mức lương Lập trình viên, những vận hội cũng như thách thức dành cho Nhà tuyển dụng và Nhân lực ngành IT.
Những kết quả thu được từ Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 đã cho thấy sự thay đổi về nhu cầu và xu hướng làm việc của người làm trong ngành IT. Ông Park JongHo cũng nhấn mạnh: “Để thích ứng nhanh chóng với đại dịch COVID-19, các phương thức làm việc mới đã xuất hiện và dần trở thành sự lựa chọn của các Lập trình viên. Nhu cầu về sức khỏe tinh thần và vấn đề về cân bằng cuộc sống – công việc cũng đang là mối quan tâm lớn của người tìm việc. Nhưng trên thực tế, với những yêu cầu kể trên về quản lý nhân sự để đáp ứng cho người tìm việc, Nhà tuyển dụng vẫn đang cố gắng hồi phục và thích nghi bối cảnh kinh doanh hoàn toàn mới. Đây được xem là thử thách lớn cho lĩnh vực nhân sự nói chung và tuyển dụng nhân lực IT nói riêng.”
Ở thời điểm hiện tại, công nghệ đang không ngừng cải tiến và ngày càng xuất hiện nhiều trong đời sống hàng ngày. Đằng sau sự phát triển đó phải kể đến sự nỗ lực cống hiến và tiềm năng sáng tạo của Con người.
Tại sự kiện tối ngày 22/9/2022, nhấn mạnh về yếu tố “Con người” trong thời đại công nghệ số, ông Park JongHo đã nhận định: “Việt Nam đang có một nguồn nhân lực IT đầy hứa hẹn về chất và lượng cũng như thị trường tiềm năng và tăng trưởng kinh tế. Điều quan trọng nằm ở các kế hoạch, chiến lược về đầu tư, phát triển và định hướng cho nguồn lực này nhằm thúc đẩy các mục tiêu kinh tế, xã hội Quốc gia trong bối cảnh toàn cầu hóa. Đây thực sự là một chủ đề lớn và là chặng đường dài cho tất cả chúng ta, nhưng TopDev tin rằng SỰ THAY ĐỔI sẽ làm nên những điều lớn lao. Và để tạo ra sự thay đổi, mỗi bên đều có thể đóng góp theo vai trò riêng. Tất cả cho sự phát triển kinh tế LẤY NHÂN TÀI LÀM TRUNG TÂM.”
Những nhận định trên của CEO TopDev – ông Park JongHo là lời phát biểu tại Lễ ra mắt Hội đồng Công ty ICT Hàn Quốc tại TPHCM (KICH) diễn ra ngày 22/09/2022 tại Khách sạn New World, TP. Hồ Chí Minh, được tổ chức bởi Cơ quan Xúc tiến CNTT Hàn Quốc (NIPA). NIPA là tổ chức phi lợi nhuận trực thuộc Bộ Khoa học và Công nghệ thông tin tại Hàn Quốc, chịu trách nhiệm hỗ trợ cho các doanh nghiệp và chuyên gia CNTT với mục đích thúc đẩy các cơ hội kinh doanh mạnh mẽ hơn giữa Hàn Quốc và các nước ASEAN trong ngành IT. NIPA hiện dẫn đầu về cơ sở hạ tầng phát triển Kinh tế xã hội và Kinh tế quốc gia dựa trên tri thức từ việc xúc tiến khả năng cạnh tranh của tổng thể các ngành công nghiệp thông qua việc sử dụng CNTT và thúc đẩy ngành công nghiệp này.
Cùng với bối cảnh Kinh tế – Xã hội nước ta trong năm qua, Việt Nam đã trở thành điểm đến đầu tư đầy tiềm năng của các doanh nghiệp nước ngoài, đặc biệt là Hàn Quốc. Trong lĩnh vực Kinh tế, Hàn Quốc là đối tác FDI lớn của Việt Nam, đóng góp vào lĩnh vực công nghiệp mũi nhọn, đồng thời chuyển giao công nghệ cho nước ta. Với triển vọng thị trường IT tại Việt nam như hiện tại, dự đoán trong tương lai sẽ ngày càng nhiều các công ty IT Hàn Quốc đầu tư vào thị trường và nguồn nhân lực IT tại Việt Nam.
Để cập nhật những thông tin mới nhất về tình hình thị trường IT trong năm 2022, mời bạn tải xuống Báo cáo thị trường IT Việt Nam – Tech Hiring 2022 tại đây.
Bài viết được sự cho phép của tác giả Trần Văn Dem
Java là một ngôn ngữ dễ học mang lại hiệu năng đủ tốt dành cho hầu hết các sản phẩm hiện nay. Chắc hẳn mọi người biết rằng để xây dựng một hệ thống có thời gian phản hồi trong khoảng vài milliseconds thì việc caching là rất quan trọng. Việc của chúng ta sẽ phải làm là tăng tỉ lệ cache hit và cách đơn giản nhất là cache càng nhiều dữ liệu trên memory một vài ứng dụng sẽ cần cache tất cả lên memory mà không sử dụng thêm một memory database nào khác.
Một trong các hạn chế của Java khi xây dựng hệ thống có tải cao và độ trễ thấp đó là garbage collection (gc). Mặc dù qua các phiên bản khác nhau của Java hệ thống này ngày càng được cải tiến với các thuật toán gc thông minh hơn giúp giảm thời gian stop the world đi nhưng hiện tại với phiên bản Java 11 thì thời gian stop the world vẫn chưa bằng 0. Dữ liệu trên heap càng nhiều thì sẽ ảnh hưởng tiêu cực đến các thuật toán gc của Java. Nếu các bạn muốn đọc thêm về turning gc trong Java, chọn thuật toán gc nào phù hợp với ứng dụng của mình thì click Garbage Collection Tuning Guide đây là tài liệu của oracle viết giúp turning gc.
Tại bài viết hôm nay mình muốn giới thiệu cho mọi người một kỹ thuật khác trong Java có thể dùng để caching dữ liệu mà không làm nặng tải cho các thuật toán gc giúp giảm thiểu thời gian stop the world. Như đã trình bày bên trên càng nhiều dữ liệu trên heap thì càng làm tăng tải cho các thuật toán gc. Vậy cách cache dữ liệu mà không ảnh hưởng đến gc sẽ là chúng ta sẽ cache một số dữ liệu tại off-heap vùng bộ nhớ này sẽ không chịu tác động của gc nên sẽ giảm tải cho thuật toán gc.
Bộ nhớ Off-Heap trong Java là một khái niệm không mới mặc dù nó đã tồn tại rất lâu nhưng hiện tại mình chỉ sử dụng nó được khoảng gần 1 năm. Tại bài viết này mình sẽ chia sẻ về off heap , zero copy và các ứng dụng thực tế mình đã làm.
Sự khác biệt của Off-Heap
Bộ nhớ on-heap trong Java đã quá quen thuộc với mọi người. Mọi lập trình viên Java đều sử dụng nó hằng ngày để cấp phát và lưu các đối tượng trong chương trình.
Bộ nhớ off-heap sẽ sử dụng memory trực tiếp của hệ điều hành nên sẽ không chịu tác động của gc trên Java chúng ta chỉ cấp phát một object nhỏ trong heap để làm việc với bộ nhớ off-heap nên sẽ không ảnh hưởng đến gc.
Vì đây là bộ nhớ của OS nên chúng ta chỉ lưu được dữ liệu dưới dạng binary sequence. Mọi object muốn được lưu trong off heap sẽ phải serialize thành các byte array và khi muốn truy xuất đối tượng trong offheap thì sẽ cần bước deserialize từ byte array sang object.
Để sử dụng được bộ nhó off-heap trong Java cung cấp cho chúng ta class :
DirectByteBuffer và
MappedByteBuffer.
Hai class không những giúp chúng ta xây dựng caching trên off-heap mà còn có thể tăng hiệu năng của chương trình trong một số trường hợp nhất định.
Caching trên Off-heap
Các thách thức khi implementoffheap caching.
On-Heap
OffHeap
Cấu trúc dữ liệu
Implement Hashtable bằng array. Array cho phép ramdom accesss vào object
Implement Hashtable bằng DirectByteBuffer. DirectByteBuffer cho phép access đến offset của bytes
Trùng mã Hash
Implement B-Tree hoặc LinkedList tùy phiên bản của Java
Implement B-Tree hay LinkedList trên OffHeap là rất khó khăn
resize HashTable
Tạo ra array mới có size lớn hơn (thường là gấp 2) và tính toán lại hết các mã hash và slot lưu dữ liệu
Việc tạo mới DirectByteBuffer với size gấp đôi là rất tốn kém chi phí.
Chúng ta có thể lựa chọn giải pháp kết hợp giữa on-heap và off-heap bằng cách sẽ lưu offset của một object trên on heap. Sau khi lấy được offset của object rồi thì sẽ dùng các api có sãn để seek đến offset và lấy dữ liệu ra.
Vì có quá nhiều bài toán cần phải giải quyết khi implement off-heap cache nên hiện tại mình chưa code demo cho mọi người về offheap cache được.
Nhưng trong các projecttrading của bên mình (caching tất cả lệnh đang được mở của khách hàng) đã làm đều sử dụng thư viện MapDB. Đây là một thư viện rất mạnh đang được hơn 4.5K sao trên github. Mình đã đọc qua source code của thư viện này thì thấy tác giả đã cài đặt off-heap cache lưu cả phần offset và data trên DirectByteBuffer. Thuật toán của anh ta rất tuyệt vời mang lại tốc độ đọc/ghi ngang với các concurrent collection của Java.
Khi đọc/ghi dữ liệu từ off-heap thì chúng ta cần quan tâm một điều nữa là việc serialize dữ liệu. Khi có thuật toán đủ tốt dành cho caching data rồi thì bottleneck của hệ thống chính là phần serialize này. Khi sử dụng Java thì mọi người nên tránh sử dụng serialize có sẵn của nó mà nên dùng một số thư viện như : kryo,proto,… Hoặc tự xây dựng một bộ serialize riêng, tham khảo bài viết ngắn gọn của mình về Serialize, code trong blog đã được mình sửa lại rất nhiều và commit trên github.
Sử dụng DirectByteBuffer tối ưu đọc dữ liệu từ socket
Theo hiểu biết của mình hiện tại có 2 mô hình socket server :
Blocking IO socket. Một Thread sẽ đọc dữ liệu từ một connection
Non Blocking IO socket. Một Thread đọc dữ liệu từ nhiều connection
Tại đây mình sẽ nói đôi chút về Non Blocking IO socket với DirectByteBuffer. Theo các tài liệu viết về mô hình NonBlockingIO này dữ liệu sẽ đọc từ channel vào bytebuffer. DirectByteBuffer được tối ưu cho việc đọc ghi này. Vì DirectByteBuffer dùng memory của hệ điều hành chứ không dùng heap của Java. Và vẫn như trên DirectByteBuffer không làm tăng tải cho gc.
Khi bạn sử dụng Heap Buffer khi ghi dữ liệu của socket thì sẽ làm các bước sau:
Tạo direct bytebuffer tạm
Ghi dữ liệu từ Heap Buffer vào direct buffer tạm
Thực hiện các quá trình socket I/O khác bằng buffer tạm
Việc tạo mới DirectByteBuffer là rất tốn kém nên nếu sử dụng DirectByteBuffer thì hãy nên tạo và tái sử dụng không nên tạo mới.
Công việc hiện tại của mình mỗi khi code socket thì sẽ sủ dụng netty và netty cũng sử dụng DirectByteBuffer.
Một ứng dụng rất nổi tiếng đó là Kafka nó sử dụng cơ chế zero copy để khiến dữ liệu từ server chuyển về phía consumer là nhanh nhất. Để an toàn Kafka persist tất cả message của producer xuống file của server và sẽ chuyển dữ liệu từ file này đến phía của consumer.
Mặc dù liên quan rất ít đến nội dung bài blog này nhưng mình vẫn xin phép giải thích một chút về zero copy của Kafka.
Nếu không sử dụng kỹ thuật zero copy thì logic khi code sẽ là như sau.
Chương trình của chúng ta sử dụng rất nhiều API của hệ điều hành, nhất là khi thao tác với các hệ thống File hoặc thao tác với socket. Vậy nên khi muốn đọc File hay muốn gửi nhận dữ liệu thì chúng ta đều phải switching context để sử dụng API của OS
Có một số điểm cần lưu ý tại hình trên:
Chúng ta có 4 lần switching context: 2 lần gọi syscall() từ Application, 2 lần OS trả lại kết quả và cho Application chạy tiếp.
Có một lần copy data từ OS sang Application, một lần copy data từ Application sang OS.
Bốn lần switching context và hai lần copy data có thể gây chậm cho hệ thống Kafka. Với hầu hết các ứng dụng thì phần code logic rất phức tạp nên ta không thể tránh được 4 lần switching context và 2 lần copy data được, nhưng với các kỹ sư code Kafka thì họ có thể xử lý được.
Sau khi sử dụng kỹ thuật zero copy thì sẽ được như sau.
Với sự support của OS thì các kỹ sư của Kafka đã sử dụng APItransferTo() để gửi thẳng nội dung từ FileChannel sang SocketChannel mà không cần copy lên Application và cũng giảm tải được số lần switching context. Tất nhiên để làm được điều này thì các kỹ sư của Kafka phải có cách thiết kêt File đủ tốt để biết khi gửi sẽ gửi từ byte nào đến byte nào để dưới client có thể hiểu và deserialize được
Đọc code Kafka nòi mắt thì mình tìm thấy code implementzero copy này:
Mình cũng đang tìm hiểu cách ghi xuống File và cách xóa Data của Kafka mà code nó to quá chưa nghiên cứu hết được :((. Hy vọng sau này tìm được mình sẽ trình bày một bài.
Đọc ghi File
Mặc dù Zero Copy mang lại hiệu năng rất cao nhưng mà hầu hết các ứng dụng của chúng ta không phải chỉ dùng để forward dữ liệu mà còn thực hiện nhiều logic khác. Vậy nên chúng ta sẽ không ứng dụng được nhiều phần Zero copy này. Tại đây mình muốn dưới thiệu một kiểu đọc ghi hiệu quả hơn là sủ dụng mmap() của hệ điều hành.
Bình thường đọc ghi của chúng ta sẽ là như sau :
Cũng tương tự như làm việc với socket khi chúng ta read/write thì phải sử dụng API của OS các API này sẽ copy data và switching context. Vậy nên trong hầu hết các ngôn ngữ lập trình đều sử dụng buffer và chỉ thực hiện gọi API của hệ điều hành khi đầy buffer hoặc đã đọc hết data trong buffer.
Khi sử dụng buffer thì khi ghi dữ liệu bằng một cách nào đó chương trình chúng ta bị lỗi thì dữ liệu sẽ không được ghi xuống đĩa của OS.
OS còn hỗ trợ một kiểu đọc ghi nữa là mmap() kiểu này sinh ra dành cho mục đích IPC (Inter-process communication) nên có IO nhanh hơn read/write. Trong Java để làm việc với mmap() thì qua class MappedByteBuffer. Khi sử dụng MappedByteBuffer chúng ta có interface dễ hiểu như làm việc với ByteBuffer vấn đề phức tạp đã được Java giải quyết giúp chúng ta.
Khi sử dụng mmap() thì đọc ghi sẽ như sau:
Sự khác biệt khi sử dụng mmap() chúng ta không phải copy dữ liệu lên buffer của Application mà vẫn thực hiện IO. Khi đọc dữ liệu cần lên Application sẽ copy trực tiếp từ main memory lên buffer.
Cách này có các ưu điểm sau:
không switching context nhiều như cách đọc bằng buffer. Việc copy hay flush đã được OS quản lý.
Không có copy data vì dữ liệu đã được OS map vào main memory
Không cần tự flush dữ liệu, khi hệ thống không may bị crash thì dữ liệu sẽ được OSflush xuống ổ đĩa.
Ứng dụng thực tế
Trong hệ thống trading mình đang xây dựng đang sử dụng MappedByteBuffer dùng để CDC (capture data change). Để thiết kế tối ưu nhất về thời gian cũng như tài nguyên dành cho giao tiếp thì bên mình sử dụng mô hình asynchronous trong cả giao tiếp lẫn trong tính toán. Bên mình không trực tiếp làm việc với DB luôn mà mọi request thay đổi dữ liệu trong DB sẽ áp dụng event driven bắn vào msg queue cho service khác thực hiện việc update db.
Để tiết kiệm chi phí bên mình không sử dụng Kafka mặc dù open source nhưng mà deploy lại khá tốn server nên mỗi khi đọc dữ liệu từ msg queue bên mình sẽ dùng MappedByteBuffer ghi dữ liệu đọc được xuống File sau đó sẽ đọc từ File này ghi vào DB. Vì MappedByteBuffer hay mmap() thiết kế cho việc IPC nên rất phù hợp cho quá trình này. Tiếp đến bên mình sử dụng Tcp socket nên nếu mình đọc dữ liệu từ socket ra chậm thì giao thức Tcp sẽ gửi chậm lại và ảnh hưởng rất nhiều đến hệ thống. Vậy nên bước ghi xuống File này rất quan trọng. Tiếp đến nó sẽ không bị mất dữ liệu khi crash app nên rất phù hợp để CDC.
Mô hình xử lý bên mình như sau:
Mình cũng đã chia sẻ communication-way-in-high-traffic-system nếu quan tâm mọi người vào đọc ủng hộ mình nhé. Còn phần processing asynchronous hiện tại mình chưa viết nhưng sẽ viết trong tương lai nếu thời gian rảnh và được ủng hộ bởi mọi người.
Kết luận
Hy vọng qua bài viết này các bạn biết thêm một loại bộ nhớ nữa là off-heap và tùy vào ứng dụng có thể áp dụng trong thực tế.
Theo mình thấy thì nếu các bạn caching quá nhiều trong trường hợp đó ảnh hưởng quá xấu đến gc dẫn đến stop the world quá nhiều thì nên sử dụng vì khi sử dụng off heap tốc độ sẽ không thể nhanh bằng on heap được.
Mình cũng trình bày thêm một số ứng dụng cảu ByteBuffer của Java và zero copy của mô hình Non blocking IO hy vọng giúp ích được mọi người hiểu thêm và ứng dụng được vào Application của mình.
Như mọi lần nếu bài viết có vấn đề gì thì mọi người góp ý nhé vì chia sẻ cũng là học hỏi thêm. Bài viết hay thì mình xin một sao trên repo blog trên github này làm động lực mình thêm bài viết mới.
Tiếp nối thành công của những năm trước, KICC HCMC cùng TopDev tiếp tục mang đến chương trình hợp tác năm 2022 với thông điệp “Make Your IT Career Outstanding – Khởi sắc sự nghiệp IT của bạn”. Theo đó là những hoạt động phối hợp với mục đích kết nối các việc làm ngành CNTT tại các doanh nghiệp IT Hàn Quốc với đối tượng Lập Trình Viên Việt Nam.
Mối quan hệ đầu tư chiến lược Hàn Quốc – Việt Nam
Hiện tại, Việt Nam là đối tác hợp tác kinh tế hàng đầu trong Chính sách hướng Nam mới và là một trong những đối tác kinh tế lớn nhất của Hàn Quốc tại khu vực ASEAN. Không chỉ có các doanh nghiệp lớn, tập đoàn đang từng bước xây dựng các chuỗi cung ứng chiến lược tại Việt Nam mà các doanh nghiệp nhỏ và vừa của Hàn Quốc cũng tăng cường xúc tiến đầu tư tại Việt Nam.
Kết nối công nghệ trong kỷ nguyên mới
“Công nghệ” là lĩnh vực có tiềm năng vô tận, và là chìa khóa để mọi quốc gia bước vào kỷ nguyên phát triển nhanh và bền vững. Đặc biệt, đây cũng là lĩnh vực để hai quốc gia có thể phát huy tiềm năng, khai thác hiệu quả nguồn lực từ mỗi bên để cùng phát triển những giá trị rõ rệt cho nền kinh tế – thương mại cũng như thị trường lao động.
FDI Hàn Quốc “bùng nổ” trở lại sau đại dịch Covid-19
Theo số liệu của Cục Đầu tư nước ngoài, 6 tháng đầu năm 2022, các nhà đầu tư Hàn Quốc đã đăng ký đầu tư vào Việt Nam trên 2,66 tỷ USD, chiếm gần 19% tổng vốn đầu tư, tăng 29,6% so với cùng kỳ. Điều này cho thấy, thị trường Việt Nam vẫn là mảnh đất màu mỡ với các doanh nghiệp Hàn Quốc dù trước hay sau đại dịch Covid-19 bùng nổ.
Khởi sắc sự nghiệp IT tại các công ty Công nghệ Hàn Quốc ngay tại Việt Nam
Trong khuôn khổ hợp tác, KICC HCMC cùng TopDev hứa hẹn mang đến những giá trị cho tổ chức/ doanh nghiệp:
Hỗ trợ, hợp tác và thúc đẩy tuyển dụng việc làm công nghệ thông tin cho các công ty IT Hàn Quốc;
Quảng bá hình ảnh, sản phẩm/ dịch vụ và thương hiệu tuyển dụng của các công ty IT Hàn Quốc đến với Cộng đồng Lập trình viên Việt Nam;
Hỗ trợ khách hàng tiềm năng của nhau cùng tiếp cận thị trường địa phương, tìm kiếm đối tác, khách hàng tiềm năng và mở rộng kinh doanh tại Việt Nam.
Cơ hội phát triển sự nghiệp tại các công ty IT Hàn Quốc dành cho các Lập trình viên Việt:
Trực tiếp tham gia các dự án công nghệ sử dụng nền tảng hiện đại, tiên tiến từ nước ngoài;
Được tạo điều kiện để phát triển bằng các công tác giáo dục và bồi dưỡng nâng cao năng lực chuyên môn và kỹ năng thường xuyên;
Môi trường làm việc quốc tế, chuyên nghiệp tại các doanh nghiệp hàng đầu của Hàn Quốc;
Mức lương xứng đáng, phù hợp với kinh nghiệm và vị trí;
Tiếp cận nền tảng công nghệ hiện đại, sản phẩm lớn và nhiều dự án mang đầy tính sáng tạo, thử thách;
Cơ hội nâng cao trình độ qua các chuyến công tác onsite tại Hàn Quốc, training sử dụng các công nghệ….
Thông tin chi tiết về dự án vui lòng truy cập tại đây.
Về KICC HCMC và NIPA:
Được thành lập vào ngày 23 tháng 5 năm 2019, KICC HCMC (KICC Hồ Chí Minh) là văn phòng thứ 6 trên toàn cầu và thứ 2 tại Việt Nam. KICC là văn phòng quốc tế trực thuộc Bộ Khoa học – Công nghệ Thông tin Hàn Quốc (MSIT) và Cơ quan Xúc tiến Công nghệ Thông tin – Truyền thông (NIPA) với mục đích giúp đỡ việc kinh doanh quốc tế của những công ty về Công nghệ Thông tin (CNTT) của Hàn Quốc. KICC có 06 văn phòng ở Thung lũng Silicon (Mỹ), Tokyo (Nhật), Bắc Kinh (Trung Quốc), Singapore, Hà Nội (Việt Nam) và Hồ Chí Minh (Việt Nam).
NIPA là tổ chức phi lợi nhuận từ Chính phủ Hàn Quốc và là thành viên của Bộ Khoa học – Công nghệ Thông tin Hàn Quốc, chịu trách nhiệm trong việc hỗ trợ các công ty và các chuyên gia CNTT. NIPA hiện dẫn đầu trong kiến thức về cơ sở hạ tầng kinh tế xã hội và phát triển kinh tế quốc gia bằng việc xúc tiến khả năng cạnh tranh của toàn ngành công nghiệp thông qua sự tiến bộ kỹ thuật CNTT và công nghiệp.
Địa chỉ: 135 Hai Bà Trưng, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh
Về TopDev – nền tảng tuyển dụng IT
Với hơn 300.000 profile lập trình viên đồng thời sở hữu Cộng đồng Lập trình viên lớn nhất Việt Nam, TopDev hiện là một trong những nền tảng tuyển dụng chuyên về IT hàng đầu tại Việt Nam. Ngoài ra, TopDev là một trong những đơn vị tiên phong ở lĩnh vực IT tại Việt Nam, giúp xây dựng và phát triển thương hiệu tuyển dụng – Employer Brand cho hàng trăm công ty công nghệ trong và ngoài nước. Đây còn là đơn vị chuyên khảo sát, phân tích và phát hành các báo cáo quý, năm về thị trường và nhân lực IT tại Việt Nam. (Báo cáo thị trường IT tại đây)