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)
Bài viết được sự cho phép của tác giả Nguyễn Văn Trọng
Tiếp tục sê ri công đoạn phát triển phần mềm, hôm nay mời quí bạn và các vị đến với “định nghĩa yêu cầu” 要件定義 – Requirements Definition. Quả thật là những BrSE được có cơ hội làm công đoạn này không nhiều. Một phần vì kỹ năng nghe, thứ 2 là nó rất khó. Mình thì may mắn được đi hóng hớt suốt 2 tháng trời, hằng ngày muối mặt ở shinjuku (ngay khu phố trong bộ phim Đại Náo Shinjuku – Thành Long) nghe khách hàng nói trên trời dưới đất. Dạo ấy đi cùng mình là một bác đồng nghiệp người Nhật, người sau này mình gọi là shisho (師匠 – sư phụ). Bác ấy nghe chính còn mình chỉ phụ hoạ chứ hồi đó mới nứt mắt thì biết gì mà hear vs chả ring. Đến tận mấy dự án sau này, ngồi đọc các tài liệu nên cũng thấm dần, đầu đất mà mưa dầm thì nó cũng nhão ra.
Giải Thích Thuật Ngữ
Hẳn là các bạn đã từng nghe đến “phân tích yêu cầu” – “tài liệu định nghĩa yêu cầu” – 要件分析 – 要求分析 – 要求定義書 – 要件定義書 và không hiểu nó là cái gì và khác gì nhau, bày ra lắm cho rắc rối. Nói thật ra Nhật họ cũng loạn cả lên chứ đừng nói là mình. Vô tình lượm được bí kíp nên chia sẻ cho các bạn đỡ bực
要求分析
Khách hàng muốn làm gì
Bao gồm cả những yêu cầu mâu thuẫn nhau
Làm rõ những yêu cầu của khách hàng
Kết quả phân tích được tổng hợp lại gọi là 要求定義書
要件分析
System cần những cái gì
Phân tích và loại bỏ những yêu cầu mâu thuẫn
Làm rõ những yêu cầu hệ thống
Kết quả phân tích được tổng hợp lại gọi là 要件定義書
Và trên thực tế 2 công đoạn phân tích này cũng sẽ được tiến hành đồng thời. Và cái để BrSE cần để làm design đó là 要件定義書.
Để lấy thêm 1 ví dụ cho dễ hiểu về “những yêu cầu mâu thuẫn”. Khách : xây dựng cho tụi ta 1 hệ thống quản lý mà nó vận hành liên tục 24/24. Sau 1 hồi nghĩ ra thêm : à, mà nếu có lỗi thì phải khôi phục lại được nên hằng ngày tụi bây cho back up hệ thống vào khung giờ 0 đến 1h đêm dùm với được không? Đau chưa. Cái vận hành 24/24 gọi là “yêu cầu chức năng” 機能要求, còn cái back up định kỳ gọi là “yêu cầu phi chức năng” 非機能要求. Và nhiệm vụ của mình là giải quyết hoặc … giải thích để họ bỏ mấy cái điên điên đi :D.
Các Bước Tiến Hành
Thu Thập Thông Tin
Họp – hỏi – trả lời – lên danh sách câu hỏi – họp…Vòng lặp (while : khách chưa bực mình). Giỡn chứ hỏi đến khi nào sáng tỏ thì thôi. Để việc thu thập thông tin có hiệu quả thì người phân tích yêu cầu phải làm việc với các bên am hiểu hệ thống để biết cái mà hỏi, ngoài ra còn khuyên khách hàng làm như thế nào cho tốt.
Q&A
Khách đưa yêu cầu : tôi muốn có 1 màn hình để xuất hoá đơn. Cái cần hỏi : hoá đơn bao gồm những gì, giới hạn bao nhiêu record, xuất dạng nào – pdf hay image…, tổng tiền có cần làm tròn không, role gì có quyền xuất … vv…
Phản Hồi Thông Tin
Sau khi làm việc với người có chuyên môn để tham khảo những vấn đề mà mình không rõ hoặc không chắc thì lên danh sách câu trả lời, cái nào làm được, cái nào không, lý do, nên thêm cái gì. Và lên 1 danh sách câu hỏi khác để tiếp tục làm việc trong các buổi họp kế tiếp.
Đến bước này mình sẽ chia nhỏ ra thành các tài liệu riêng để nhóm nội dung lại. Cần có những tài liệu để mô tả hệ thống, danh sách chức năng, flow nghiệp vụ, use case, quản lý issue …
Document List of Requirements Definition
Làm Sao Cho Tốt
Các bạn có thể tham khảo bài viết bên dưới để biết các mẹo trong công đoạn này. Vì lười dịch nên mình chỉ đưa vào 1 phần nhỏ trong phạm vi bài viết này là 5W2H
いつ(When)
Thời hạn – start – end, và status từng giai đoạn
どこから(Where)
Sử dụng nội bộ hay có liên kết với cả hệ thống bên ngoài công ty
誰が(Who)
Ai là người dùng, đối với từng role thì quyền hạn như nào
何の情報を(What)
giải quyết những thông tin gì
どういう理由で(Why)
Tại sao lại cần “cái ấy”
どれぐらいで(How Much/Many)
1 ngày 1 lần hay 1 năm. Bao nhiêu thì tốt. Ví dụ : backup system, 1 tuần 1 lần hay hàng ngày, mỗi lần backup toàn bộ hay chỉ phần quan trọng
どうするのか(How)
KH muốn gì, và với cái đó tui phải làm như thế nào
要件定義書 (Bản định nghĩa yêu cầu):Phải đầy đủ để có thể create được basic design mà không cần hỏi lại khách hoặc hạn chế hỏi nhất. Đảm bảo tính khả thi, cái gì làm được với không được thì điều tra và nói ngay từ đầu, sau này đỡ mất công chỉnh sửa, thậm chí … cãi nhau
Phương thức
Thu thập thông tin
Phản hồi thông tin
Tổng hợp thông tin
Mẹo
Sử dụng 5W2H : nằm ngay trên nè
BrSE cần :
Chịu khó đọc tài liệu
Rèn kỹ năng nghe và hỏi, đặc biệt là hỏi sao cho đỡ mất công hỏi nhiều lần
Rèn kỹ năng mềm : để kiềm chế với các thượng đế đòi hỏi trên trời
Theo số liệu từ trang LinkedIn – trang mạng xã hội cho doanh nghiệp và thị trường việc làm lớn nhất thế giới, số lượng tin tuyển dụng Java đang đứng thứ 2 chỉ sau tin tuyển dụng Python trên hai thị trường Mỹ và Châu Âu.
Nguồn:techrepublic.com
Vậy Java Developer là gì?Lộ trình để trở thành một Java Developer đáp ứng được nhu cầu của thị trường việc làm hiện nay? Bài viết này mình sẽ cùng các bạn tìm hiểu và trả lời cho hai câu hỏi trên nhé.
Java là gì?
Ngôn ngữ lập trình Java được ra đời từ những năm 1990 bởi các lập trình viên đến từ Sun. Nó được tạo ra với phương châm: “Viết code một lần, chạy ở mọi nơi”.
Để làm được điều này, đội ngũ phát triển đã tạo ra một máy ảo (Java Virtual Machine – JVM); nhiệm vụ của nó là biên dịch mã nguồn thành bytecode và chạy chương trình. Từ đó thì bạn có thể đem mã nguồn của mình và chạy trên bất cứ môi trường nào, từ Window, Linux, MacOS, … miễn là nó được cài JVM.
Nguồn:i.ytimg.com
Ưu điểm của Java:
Java được kế thừa trực tiếp từ C/C++, dễ tiếp cận và có thể học được nhanh chóng nếu đã có kiến thức về lập trình cơ bản
Hiệu suất đáp ứng cao nên được sử dụng cho rất nhiều hệ thống có quy mô lớn.
Có thể sử dụng Java để viết ứng dụng chạy trên nhiều nền tảng khác nhau từ PC, Web đến Mobile và các hệ thống nhúng
Chắc hẳn bạn đã tự hình dung được khái niệm Java Developer là gì rồi. Cũng như các ngôn ngữ khác, lập trình viên Java là những người sử dụng ngôn ngữ lập trình để tạo ra các ứng dụng, phần mềm hay các trang web.
Đặc thù Java Developer
Ngoài những yếu tố chung, kỹ năng mà bất cứ một lập trình viên nào cũng phải có là khả năng học hỏi, tìm tòi, kỹ năng làm việc teamwork, … Java Developer có những đặc thù khác như sau:
Java có thể viết được ở cả Frontend và Backend, vì thế nên Java Developer có thể trở thành một Fullstack Developer. Mặc dù vậy thì thực tế trong các dự án, Java thường được chọn để chuyên xử lý dữ liệu cho phía BE nhiều hơn.
Java là một ngôn ngữ lập trình hướng đối tượng – 1 khái niệm mà bạn chắc chắn phải biết khi học Java và lập trình hướng đối tượng OOP. Trong các khóa học về OOP, Java gần như là ngôn ngữ mặc định được sử dụng để học và thực hành. Ngoài ra khi viết Java, các bạn cũng sẽ được giới thiệu về các pattern quen thuộc nhất như MVC, MVP.
Các framework nổi bật của Java: nổi bật nhất là hệ sinh thái Spring (Spring còn có framework dành cho việc phát triển cloud service là Spring Cloud), ngoài ra còn có các framework như Hibernate, Struts dành cho phát triển Web. Trên desktop thì chúng ta có Java Swing hay Java SWT. Với mobile, Java là ngôn ngữ chính để phát triển các ứng dụng Android của Google.
Nhờ sự đa dạng về khả năng phát triển, hệ sinh thái hỗ trợ nên Java Developer có thể là được rất nhiều thứ , có thể thoải mái lựa chọn định hướng cho mình:
Phát triển ứng dụng độc lập: các ứng dụng chạy trên nền desktop dành cho các cơ quan, tổ chức, ví dụ như phần mềm quản lý nhân sự nội bộ, chấm công, …
Phát triển web: như đã đề cập ở trên, Java có thể viết được cả FE và BE cho các ứng dụng web, vì thế nên bạn có thể tự tin hoàn thiện các website từ đơn giản đến phức tạp bằng Java.
Ứng dụng doanh nghiệp: là những ứng dụng lớn đòi hỏi yêu cầu về lượng truy cập, hiệu năng và tính ổn định, tính bảo mật cao. Java với sự tối ưu của mình giúp nó được lựa chọn để xây dựng các Enterprise Application chuyên dụng.
Làm mobile app: Ngoài Android, Java ME cũng là 1 lựa chọn để phát triển các ứng dụng mobile và thiết bị nhúng sử dung Java. Với các thiết bị hạn chế về khả năng xử lý, giới hạn nguồn điện thì Java ME là một lựa chọn tốt để lập trình các ứng dụng.
Automation Testing: Đừng bất ngờ vì điều này, nếu không quá bắt bẻ thì kiểm thử tự động cũng được xem như là 1 lập trình viên để tạo ra các phần ứng dụng kiểm tra. Nếu bạn là 1 lập trình viên mà lại yêu thích việc kiểm thử, Java sẽ giúp bạn với công cụ Selenium. Trở thành 1 Automation Tester là 1 định hướng hoàn toàn khả thi cho bạn.
Để trở thành lập trình viên Java, trước tiên bạn hãy xác định định hướng cụ thể cho mình. Trong phần này mình sẽ chỉ đề cập đến lộ trình để trở thành 1 Backend Java Developer với framework phổ biến nhất hiện nay là Spring/ Spring Boot.
Hãy học tốt những kiến thức cơ bản dưới đây
Cú pháp ngôn ngữ lập trình Java
Khai báo biến, các kiểu dữ liệu
Các khối câu lệnh điều kiện, vòng lặp: if else, switch case, for, while, …
Cấu trúc dữ liệu trong Java
Tìm hiểu về OOP: các khái niệm, đặc trưng, class, interface, …
Các gói (packages) trong Java: Java Util, Java Datetime, Java SQL, …
Cách làm việc với File, giao tiếp thông qua API
Xử lý các ngoại lệ: runtime error như ClassNotFoundException, IOException, SQLException, RemoteException
Đi sâu hơn vào các đặc trưng của Java
Tìm hiểu về JVM, cách nó hoạt động
Garbage Collection hay Memory Management: cách quản lý bộ nhớ, tạo và giải phóng bộ nhớ lưu trữ các biến trong Java
Serialization: cách chuyển đổi trạng thái object trong Java về các dạng data có thể lưu trữ và truyền tải
Networking, Socket: cơ chế mạng trong Java, cách kết nối hay thiết lập mạng giữa các thiết bị
Thread (luồng), multi thread (đa luồng) trong Java
Stream: một bổ sung từ Java 8 cho việc tăng tốc độ xử lý dữ liệu lớn
Sau khi tìm hiểu đến những khái niệm trên thì bạn có thể tự tin với những kiến thức về Java của mình. Cùng đi sâu vào framework để học và thực hành trên những dự án thực tế
Làm việc với Spring/ Spring Boot
Hãy tìm hiểu Spring – một framework cho việc phát triển ứng dụng Web của Java
Spring Boot: giúp cho việc đơn giản hóa các bước cấu hình trong Spring
Để làm Web (nhất là BE), chúng ta cũng không thể thiếu những kiến thức dưới đây:
Cách viết API, REST APIs trong Spring: từ CRUD đơn giản đến các microservices
Tương tác Database: kết nối, truy vấn, đồng bộ. Bạn nên tìm hiểu cả SQL và no SQL vì đơn giản là Java Spring được sử dụng cho cả 2 loại này nhờ khả năng xử lý dữ liệu của nó
Java logging framework: SLF4FJ, TinyLog giúp bạn lưu lại các trạng thái, các lỗi hay nhật ký của hệ thống mà bất cứ BE nào cũng cần.
Testing: viết test được cho ứng dụng của bạn cũng sẽ giúp bạn trở lên chuyên nghiệp hơn và có khả năng học hỏi nhiều hơn.
Nguồn: blogspot.com
Đến đây thì bạn có thể trở thành một keymember trong dự án Java của mình rồi. Sẽ còn nhiều thứ phải học hỏi và tìm hiểu, nhất là về kiến trúc Web và các cấu hình thiết kế để xây dựng hệ thống chuyên nghiệp sử dụng Java nói chung và Spring nói riêng.
Lời kết
Nhu cầu tuyển dụng lập trình viên Java hiện nay rõ ràng là đang rất lớn, chính vì thế việc trở thành lựa chọn Java làm ngôn ngữ cho việc lập trình là một lựa chọn hợp lý cho hiện tại và nhiều năm nữa trong tương lai.
Bài viết này hy vọng đã đem đến cho các bạn một cái nhìn chi tiết về Java Developer là gì, cũng như lộ trình rõ ràng để trở thành một Java Developer trong tương lai. Cảm ơn các bạn đã đọc và ủng hộ, 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 này xin dành trọn cho anh em nào có đủ kỹ năng và kinh nghiệm, với mong muốn tự xây dựng business website cho riêng mình.
Nội dung bài viết được đúc rút và là ý kiến cá nhân của tác giả, mọi góp ý luôn được trân trọng và lắng nghe nhé.
À mà xây dựng business cấp độ cá nhân không có nghĩa là một mình anh em xử hết từ Frontend tới Backend hay tới SEO nhé. Vẫn có đồng đội hoặc nguyên team support anh em, tuy nhiên ý chính là anh em là người đóng vai trò hơn cả Product Owner.
Ví dụ như business anh em cần 3 Backend Developer, 4 Frontend Developer thì bản thân anh em kiêm luôn cả PO, BA, QC và 1 dev BE nếu anh em chuyên backend.
1. Chốt được scope, đóng vai trò PO
Rõ ràng, để tự xây dựng website business hay bất cứ loại hình business nào khác, anh em cần xác định được scope. Scope ở đây bao hàm rất rộng, nhưng cũng có thể tóm gọm lại với MVP (Minimum Viable Product).
Ví dụ, nếu anh em quyết định start business như Mioto, MVP sẽ bao gồm các ý chính sau:
Tài xế xe ô tô có thể đăng ký xe của mình cho thuê
Người dùng có thể tìm kiếm và đặt được xe qua app
Người dùng có thể thanh toán qua nền tảng, app cũng có thể trả tiền cho chủ xe
Ba ý trên là MVP của app, kinh nghiệm cho thấy những business cá nhân đôi khi bị lạc trôi khá xa.
Chính vì vậy lời khuyên tới anh em là nên xác định và giới hạn chính xác MVP và feature business của mình. Một số ý tưởng cần gấp rút về mặt thời gian, một số ý tưởng lại bị ràng buộc về ngân sách
Viết về Mioto vì tuần rồi mới đặt xe đi du hí Vũng Tàu, tiện thấy mô hình kinh doanh này khá hay, biết đâu list ra đây anh em lại có idea phát triển business khác của riêng mình.
Cho anh em nào chưa biết về MVP thì định nghĩa của nó đây.
A minimum viable product is a version of a product with just enough features to be usable by early customers who can then provide feedback for future product development.
MVP là phiên bản của sản phẩm chỉ có đủ các tính năng để những khách hàng ban đầu có thể sử dụng, sau đó họ có thể cung cấp phản hồi để phát triển sản phẩm trong tương lai.
2. Tự quyết định được technical
Ý này tui viết trong trường hợp anh em là technical guys và có cả business idea nhé. Trường hợp một số anh em khác có ý tưởng về business nhưng chưa rõ về công nghệ có thể nhờ tư vấn từ một bên thứ 3 hoặc bạn bè nhé.
Technical stack ở đây là yếu tố quyết định, kiểu dám chơi dám chịu. Nếu ý tưởng là app mobile, thì làm native với Objective C hay Swift, hay đi theo Flutter. Những quyết định technical này cần được cân nhắc dựa trên 3 yếu tố:
Tech Stack đó đã đáp ứng được yêu cầu về business chưa (business requirement)
Tech Stack có familiar với anh em trong đội không?
Tech Stack có thể tăng tốc quá trình phát triển được không?
Một khi đã quyết định được TechStack, anh em có thể transfer và tiến hành phát triển. Việc lựa chọn tech stack càng tốt, business của anh em có cơ hội thành công càng cao.
Việc tự xây dựng business website ngoài ý tưởng ra, tech stack để hiện thực được nó là điều quan trọng thứ 2 nhé anh em.
3. Khả năng truyền đạt
Trường hợp start business cá nhân với ngân sách hạn hẹp, không thể tránh khỏi việc anh em vừa là Technical Leader, vừa kiêm luôn PO.
Việc giải thích cho anh em hiểu được business chính, nhóm tính năng chính, yêu cầu của tính năng là điều bắt buộc. Nếu bản thân các lập trình viên không hiểu họ đang làm gì -> product hoặc business đó chắc chắn fail.
Chính vì vậy, khả năng truyền đạt, giải thích chính xác về model của business cho các thành viên khác hiểu là vô cùng quan trọng.
Xác định anh em mà không hiểu thì product còn không có chứ đừng nói với business có thành công không nha.
4. Bao quát tất cả vấn đề
Một khi đã bắt đầu và xác định sẽ tự xây dựng business riêng, ngoài kiến thức chung về technical, anh em sẽ cần phải học hỏi thêm rất nhiều. Một số câu hỏi khi xây dựng business website:
Về luật pháp đã được công nhận chưa?
Marketing sản phẩm như thế nào?
SEO đã tốt chưa?
Cơ bản mà nói thì lúc này bản thân không còn chỉ handle mỗi một công việc là technical nữa, anh em vừa là Product Owner, vừa là Business Analysts.
Đôi khi còn kiêm của Product Management (giám sát tiến độ), test luôn cả tính năng đã phát triển xem đã đáp ứng được business chưa, có bug gì không?. Đơn giản mà nói thì tự xây dựng business website có thể biến anh em trở thành siêu anh hùng. =))
Business hoàn thành chứ thành công hay không thì còn nhiều yếu tố thiên thời địa lợi nhân hoà nữa nha.
5. Dấn thân ngoài technical
Rõ ràng luôn, xây dựng business website không chỉ bao gồm việc code. Có cả trăm ngàn công việc trong đó không tên, không tuổi. Đôi khi chả liên quan quỷ tha ma bắt gì tới technical
Nhưng muốn thành thì phải làm cho được. Đơn cử có một vài công việc như mình đã trải qua như sau:
Xử Google Rich Result test tối ưu cho SEO
Đăng ký với bộ công thương để website legal
Đăng ký doanh nghiệp Facebook
Và trăm ngàn công việc không tên khác không tên, đảm bảo anh em sẽ học được rất rất chi là nhiều thứ xung quanh. Đơn giản là kinh doanh nó không đơn giản chỉ là website phát triển xong.
Có website mà không có các yếu tố khác, thì website cũng chỉ là một tên miền trơ trọi lạnh lẽo mà thôi.
6. Được và mất khi xây dựng business website
Đúc rút kinh nghiệm bản thân thì thấy học được rất rất nhiều anh em ạ. Control và hiểu tất cả mọi thứ, liệt kê được những thứ cần để xây dựng business website. Thành công không thì chưa biết nhưng học được cực kì nhiều.
Technical, of course, dĩ nhiên là học được. Non technical, kỹ năng mềm, kỹ năng quản lý, những kỹ năng tuyệt vời cho bản thân.
Thế còn mất?. Mất thời gian, tốn thời gian vãi. Đó là cái mất duy nhất.
Cảm ơn anh em đã đọc bài – Thank you so much for your time – Happy coding!
Trong bối cảnh hiện tại của giới lập trình, có thể khẳng định chắc nịch rằng ngôn ngữ Python vẫn đang sống khoẻ và sống êm. Python cũng là ngôn ngữ được dự đoán có tuổi thọ dài và sự bền bỉ liên tục trong bối cảnh Web3 ra đời, ngôn ngữ lập trình trở nên cực kì thông dụng.
Tại sao lại như vậy?
Chắc hẳn anh em cũng biết, một ngôn ngữ lập trình sinh ra, bản thân nó cũng có một vòng đời nhất định. Xưa cổ như ngôn ngữ Cobol những năm 1960 tới tận bây giờ cũng không phải là đã chết, rất nhiều hệ thống tài chính, ngân hàng vẫn đang sử dụng Cobol.
Tuy nhiên, tình thế cạnh tranh của các ngôn ngữ lập trình hiện nay rất khác. Bản thân ngôn ngữ lập tình tốt là chưa đủ, bản thân ngôn ngữ đó cần phải có cộng đồng mạnh, có library được xây dựng tốt và sử dụng dễ dàng.
Chính vì lý do đó, Python, ngôn ngữ được mệnh danh là “tốt nhất dành cho người mới học lập trình” năm 2023 tình hình đang như thế nào?
Thông tin sẽ được cung cấp cho anh em. Vui vẻ tý trước khi bắt đầu!
Khách hàng hỏi: Ai cài Python lên server á mấy cha?
1. Python là gì?
Làm gì làm đôi khi nhiều anh em vừa mới chân ướt chân ráo bước vào tìm hiểu ngôn ngữ lập trình. Nên dù gì đi chăng nữa vẫn phải điểm xuyết lại khái niệm ngôn ngữ.
Mà đã làm Python 2,3 năm đọc cũng không sao. Mỗi lần đọc, một lần nhớ. Gét gô
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics. Its high-level built in data structures, combined with dynamic typing and dynamic binding, make it very attractive for Rapid Application Development
Python là một ngôn ngữ lập trình thông dịch, hướng đối tượng, cấp cao với ngữ nghĩa động. Cấu trúc dữ liệu tích hợp sẵn ở cấp độ cao, kết hợp với tính năng nhập động và liên kết động, làm cho nó trở nên rất là ngon khi muốn phát triển ứng dụng mau lẹ.
Rồi, ngôn ngữ lập trình cấp cao, anh em chắc nhớ hết rồi. Mà tui vẫn phải nhắc, cú pháp nó đơn giản lắm nha.
Bắt đầu bằng một câu chuyện nha, hồi kia ông Steve Huffman có phát biểu một câu ngắn gọn như này. Cho ông nào chưa biết thì ông này là CEO và Co-founder của reddit nha. Đẹp trai, mlem lắm.
Steve Huffman – CEO, founder của Reddit
Mà reddit thì anh em biết rồi đấy, nó là trang trang web tổng hợp tin tức xã hội, xếp hạng nội dung và thảo luận của Mỹ. Người dùng đã đăng ký gửi nội dung đến trang web như liên kết, bài đăng văn bản, hình ảnh hoặc video gì đó đều được. Ổng phán
“I don’t think we’ve yet hired an employee who knew Python,”
Tôi không nghĩ rằng chúng tôi vẫn chưa thuê một nhân viên biết Python
Đại ý là trong Reddit ổng thuê nhiều developer Python lắm rồi. Ông này có lẽ cuồng python, bởi ổng còn nói
‘Everything you write needs to be in Python.’ Just so I can read it. And it’s awesome because I can see from across the room, looking at their screen, whether their code is good or bad. Because good Python code has a very obvious structure
Tất cả anh em cứ viết code bằng Python. Cứ viết để tao còn đọc được. Thật là tuyệt vời vì tao có thể thấy trên màn hình của anh em những dòng code Python, bất kể code ngon hay dở, tốt hay xấu. Bởi vì code Python có một cấu trúc rất chi là rõ ràng.
Tới đây thì không nghi ngờ gì nữa là ổng cuồng Python, mà cũng không phải nói chơi. Reddit lúc đầu viết bằng Lisp, nhưng đổi qua Python chỉ sau 6 tháng. Reddit cũng là một trong những công ty lớn chấp nhận Python, ngôn ngữ vô cùng phổ biến.
Năm 2021, Python xếp hạng đầu tiên trong số các ngôn ngữ “được mong muốn nhất” của Stack Overflow – kiểu most wanted, anh em khao khát nhất. Đây cũng là ngôn ngữ lập trình phổ biến thứ ba. Kể từ tháng 5 năm 2022 vừa rồi đây, thì nó leo lên hẳn top 1 cho chắc cú.
Để mà liệt kê được hết công dụng một ngôn ngữ lập trình thì khá là khó. Vì bản thân ngôn ngữ lập trình, ví dụ như Python, cũng chỉ được xem như là công cụ.
Tức là tuỳ vào nhu cầu mà sử dụng cho linh hoát. Tuy nhiên, tuy nhiên nha. Python được biết tới với một số công dụng chủ yếu sau đây:
Lập trình web với Django và Flask (phát triển web nhanh)
Khoa học dữ liệu (data science)
Machine learning (học máy)
Nhắc tới Python mà không nhắc tới khoa học dữ liệu thì quả thật là thiếu sót to lớn. Các chuyên gia trong lĩnh vực này tận dụng khả năng của ngôn ngữ để hỗ trợ các tính toán phức tạp và khai thác, xử lý và xây dựng hình ảnh trực quan.
Rõ ràng hơn mà nói thì cú pháp Python cực kỳ đơn giản, lại hỗ trợ thêm toán học nữa (math), dẫn tới các nhà khoa học nghiên cứu dữ liệu khoái Python vô cùng.
Hầu hết machine learning book hay course hiện nay đều sử dụng ngôn ngữ Python
Dạo gần đây, khi Machine Learning phát triển, một lĩnh vực con của trí tuệ nhân tạo, thu hút được sức hút, Python thực tế là ngôn ngữ lập trình phổ biến nhất sử dụng cho các chuyên gia, kỹ sư nghiên cứu về Học máy.
Bản cập nhật mới gần đây của Python là bản 3.10. Bản này được release vào ngày 4 tháng 10 năm 2021. Ở bản cập nhật này, ngôn ngữ Python có một số thay đổi đáng lưu ý
Syntax features – cú pháp
Library features – bổ sung cho thư viện
Interpreter improvements – cải tiến trình thông dịch
Iyping features
Some additional removals and restrictions – loại bỏ một số hạn chế
Bản cập nhật mới nhất lại là bản Python 3.10.4, bản này cũng là bản phát hành ổn định hiện tại, fix lỗi và bổ sung 4 lần từ bản Python 3.10, release ngày 24 tháng 3 năm 2022.
Line numbers for debugging and other tools – Bổ sung số dòng debug và một số tools khác
Explicit type aliases – kiểu alias rõ ràng
Parameter specification variables – biến đặc tả tham số
Liệt kê ra đây để anh em biết Python vẫn đang được cập nhật và sửa lỗi liên tục, những tính năng mới, những hỗ trợ tuyệt vời từ ngôn ngữ Python là yếu tố sống còn giúp Python vẫn giữ vững danh hiệu là ngôn ngữ lập trình phổ biến nhất
6. Tương lai ngôn ngữ lập trình Python
Hiện tại, cam kết là anh em đi dạo zòng zòng đâu đâu cũng gặp Python. Phổ biến quá đôi khi gây ra nhàm chán -> một số anh em developer thích hái hoa bắt bướm cho biết.
Nhưng đó là cho anh em đã có kinh nghiệm hái hoa bắt bướm thôi, chứ mà anh em mới bắt đầu học lập trình, Python vẫn luôn là lựa chọn tốt nhất.
Python đã và đang sống khoẻ trong vài chục năm, từ junior cho tới CTO, senior expert ở các công ty lớn vẫn đang tin tưởng lựa chọn Python là ngôn ngữ lập trình chính.
Trong giới Machine Learning, Data Science thì thôi khỏi bàn, trong vài chục năm nữa, khó mà tìm được ngôn ngữ nào thay thế python
Làm gì căng
Cảm ơn anh em đã đọc bài – Thank you so much for your time – Happy coding!
Tác giả: Kiên Nguyễn
Hàng loạt việc làm IT lương cao trên TopDev đang chờ bạn, ứng tuyển ngay!
Fresher, Junior, Senior là gì? Chắc hẳn bạn không ít lần nghe mọi người nhắc đến những từ này nhỉ! Cụ thể, đây là những từ chỉ mức độ kinh nghiệm của người lao động trong nhiều ngành nghề. Những tên gọi này thay đổi tùy theo công ty và tùy theo công việc. Dưới đây, mình sẽ đưa ra một góc nhìn trong yêu cầu công việc và mức độ nhiệm vụ của những cấp bậc này.
Khái quát Fresher, Junior, Senior là gì
Khái niệm
Các cấp bậc như Fresher, Junior, Senior hay các vị trí cao hơn giúp phân loại và đánh giá năng lực, kinh nghiệm của nhân viên, đồng thời tạo ra hệ thống phân cấp công việc rõ ràng trong một tổ chức. Có 3 level cơ bản trong công việc phổ biến như sau:
Fresher là người mới bắt đầu đi làm, thường là sinh viên vừa tốt nghiệp và chưa có kinh nghiệm làm việc thực tế.
Junior là nhân viên đã tích lũy được một chút kinh nghiệm trong công việc (khoảng 1-2 năm), vẫn đang tiếp tục trau dồi
Senior là nhân viên giàu kinh nghiệm (thường từ 3-5 năm trở lên), có khả năng giải quyết các vấn đề phức tạp một cách độc lập và thường có nhiệm vụ training cho các cấp bậc thấp hơn.
Tại sao cần phân chia các cấp bậc Fresher, Junior, Senior
Phân chia cấp bậc công việc có mục đích quan trọng trong việc quản lý và phát triển nhân sự trong tổ chức. Dưới đây là những lý do chính cho việc phân chia cấp bậc:
Quản lý và phân bổ công việc hiệu quả
Phân chia cấp bậc giúp nhà quản lý dễ dàng xác định mức độ phức tạp của từng công việc và giao đúng người có năng lực phù hợp. Những nhiệm vụ khó và đòi hỏi nhiều kinh nghiệm có thể được giao cho nhân viên cấp cao như Senior, trong khi các nhiệm vụ cơ bản hơn có thể phù hợp với Junior hoặc Fresher.
Định hướng lộ trình phát triển nghề nghiệp
Cấp bậc công việc giúp nhân viên hiểu rõ vị trí hiện tại của họ và xác định các mục tiêu cần đạt được để tiến bộ trong sự nghiệp. Nhân viên có thể biết rõ họ cần học hỏi và cải thiện những kỹ năng gì để thăng tiến từ Fresher lên Junior, rồi đến Senior, và xa hơn nữa.
Tạo động lực và định mức lương hợp lý
Phân chia cấp bậc giúp công ty thiết lập các chính sách đãi ngộ phù hợp với từng cấp độ. Cấp bậc cao hơn thường đi kèm với mức lương, phúc lợi tốt hơn, từ đó tạo động lực để nhân viên phấn đấu nâng cao năng lực, kỹ năng của mình.
Xác định vai trò và trách nhiệm rõ ràng
Các cấp bậc giúp phân định rõ ràng trách nhiệm của từng nhân viên trong tổ chức. Senior thường chịu trách nhiệm về các quyết định kỹ thuật quan trọng và hướng dẫn nhóm, trong khi Junior và Fresher tập trung vào học hỏi và hoàn thành các nhiệm vụ được giao. Điều này giúp tránh xung đột và nhầm lẫn trong quá trình làm việc.
Hỗ trợ quá trình tuyển dụng và đào tạo
Phân chia cấp bậc công việc giúp công ty tuyển dụng đúng đối tượng cho từng vị trí và đưa ra kế hoạch đào tạo phù hợp. Một người được tuyển dụng ở cấp độ Junior sẽ cần được đào tạo khác với người ở cấp độ Senior, vì vậy quá trình đào tạo có thể được tùy chỉnh theo cấp bậc của nhân viên.
Tiêu chí đánh giá cấp bậc của một nhân sự
Dưới đây là giải thích chi tiết về các tiêu chí phân chia level công việc dựa trên các yếu tố quan trọng như kinh nghiệm, kỹ năng và khả năng lãnh đạo:
Kinh nghiệm làm việc là tiêu chí đánh giá dựa trên số năm hoặc thời gian một người đã tham gia vào công việc hoặc ngành nghề cụ thể. Nó phản ánh mức độ từng trải trong việc xử lý các tình huống thực tế, dự án, và mức độ thành thạo với quy trình làm việc.
Kỹ năng chuyên môn là khả năng áp dụng kiến thức, công cụ, và quy trình cụ thể trong công việc. Kỹ năng chuyên môn có thể bao gồm cả kỹ thuật (technical skills) và các kỹ năng mềm (soft skills). Ví dụ: Trong lập trình, kỹ năng chuyên môn bao gồm khả năng viết mã, làm việc với cơ sở dữ liệu, xử lý vấn đề kỹ thuật, và sử dụng các công cụ phát triển phần mềm.
Hiệu suất công việc đo lường khả năng hoàn thành các nhiệm vụ được giao đúng thời hạn và chất lượng yêu cầu. Nhân viên có hiệu suất cao thường tự quản lý tốt thời gian, có khả năng ưu tiên công việc, và duy trì chất lượng đầu ra ổn định.
Khả năng hướng dẫn và đào tạo phản ánh khả năng của một nhân viên trong việc chia sẻ kiến thức và kinh nghiệm với các đồng nghiệp khác, đặc biệt là với những người có ít kinh nghiệm hơn. Đây là tiêu chí quan trọng ở các cấp bậc cao như Senior hoặc Lead, khi những người này đóng vai trò hỗ trợ và phát triển năng lực của các thành viên trong nhóm.
Năng lực lãnh đạo đánh giá khả năng dẫn dắt một nhóm hoặc dự án. Người có năng lực lãnh đạo không chỉ giỏi về chuyên môn mà còn biết cách quản lý con người, truyền cảm hứng và điều phối công việc để đạt được mục tiêu chung.
Fresher là gì?
Fresher chỉ những bạn đã có kiến thức chuyên môn nhưng chưa có kinh nghiệm thực chiến. Hoặc các bạn đã tham gia vào dự án thực tế, tuy nhiên đều được giám sát và giúp đỡ bởi những người có kinh nghiệm. Thường Fresher có kinh nghiệm làm việc dưới 6 tháng.
Giai đoạn Fresher là thời gian để họ học hỏi, làm quen với môi trường làm việc và tích lũy kinh nghiệm thực tế.
Yêu cầu chính cho vị trí Fresher
Kiến thức lý thuyết tốt: Có nền tảng vững chắc về lý thuyết trong lĩnh vực họ theo đuổi (ví dụ: lập trình, hệ thống thông tin…).
Tinh thần học hỏi: Sẵn sàng tiếp thu kiến thức mới, cải thiện kỹ năng thông qua việc học từ đồng nghiệp và dự án thực tế.
Kỹ năng mềm cơ bản: Biết cách giao tiếp, làm việc nhóm và tuân thủ quy trình công việc.
Sự chủ động: Dù còn thiếu kinh nghiệm, Fresher cần thể hiện sự chủ động trong công việc và không ngần ngại tìm hiểu để hoàn thành nhiệm vụ được giao.
Khả năng thích ứng: Fresher cần sẵn sàng học hỏi và làm quen với môi trường làm việc chuyên nghiệp, cũng như các công cụ, công nghệ mới.
Phân công công việc
Fresher thường được giao các nhiệm vụ đơn giản, lặp đi lặp lại và không đòi hỏi sự hiểu biết sâu sắc hoặc khả năng giải quyết các vấn đề phức tạp. Các công việc điển hình bao gồm:
Tham gia hỗ trợ các dự án nhỏ hoặc những phần công việc không quá phức tạp.
Thực hiện các nhiệm vụ cơ bản, chẳng hạn như kiểm tra, chỉnh sửa mã (bug fixing), hoặc các công việc hỗ trợ như tạo tài liệu.
Làm quen với các công cụ, quy trình nội bộ, và hệ thống làm việc của công ty.
Junior là level thường có ít hơn 2 năm kinh nghiệm làm việc, đã có một số kiến thức cơ bản về công việc. Junior lúc này đã có khả năng thực hiện các nhiệm vụ đơn giản một cách độc lập nhưng vẫn cần sự hướng dẫn từ các Senior hoặc quản lý khi gặp các tình huống phức tạp.
Ví dụ trong lập trình, mối quan tâm của các bạn Junior Developer xoay quanh việc làm sao để code chạy được.
Yêu cầu chính cho vị trí Junior
Kiến thức cơ bản về chuyên môn, công cụ và công nghệ sử dụng trong công việc.
Hiểu biết về quy trình phát triển và làm việc theo nhóm.
Khả năng hoàn thành các nhiệm vụ cơ bản và học hỏi thêm từ các nhiệm vụ phức tạp.
Tinh thần học hỏi và phát triển bản thân để nâng cao kỹ năng.
Mức độ thực hiện nhiệm vụ
Nhân viên Junior có thể tự hoàn thành các công việc cơ bản nhưng vẫn cần sự hỗ trợ từ các cấp trên đối với các vấn đề phức tạp. Họ có thể làm việc độc lập trong các nhiệm vụ được giao nhưng thường không chịu trách nhiệm cho các phần quan trọng trong dự án:
Tự mình giải quyết các vấn đề đơn giản.
Có khả năng làm việc độc lập nhưng cần sự giám sát định kỳ.
Hỗ trợ Senior trong việc thực hiện các dự án lớn hoặc phức tạp hơn.
Thường được giao các nhiệm vụ giúp họ phát triển thêm kỹ năng và kinh nghiệm.
Middle là gì?
Middle là cấp độ trung bình, nằm giữa Junior và Senior. Nhân viên Middle có kinh nghiệm làm việc từ 2-4 năm, đã tích lũy được kỹ năng chuyên môn đáng kể và có khả năng làm việc độc lập với nhiều nhiệm vụ hơn. Họ có thể xử lý các dự án từ đơn giản đến phức tạp mà không cần nhiều sự giám sát.
Tất nhiên, các task được giao cho Middle không đòi hỏi quá nhiều kiến thức kỹ thuật chuyên sâu, mặc dù đã làm việc độc lập tuy nhiên cũng cần cố vấn của leader.
Yêu cầu chính cho vị trí Middle
Kinh nghiệm làm việc từ 2-4 năm.
Khả năng tự quản lý thời gian và tiến độ công việc.
Kỹ năng giải quyết vấn đề và phân tích tốt hơn.
Có thể hướng dẫn Junior hoặc hỗ trợ họ khi cần.
Có khả năng tham gia hoặc quản lý các dự án nhỏ mà không cần sự giám sát chặt chẽ.
Mức độ thực hiện nhiệm vụ
Nhân viên Middle có thể thực hiện các nhiệm vụ phức tạp hơn mà không cần giám sát nhiều. Họ thường tham gia vào các dự án tầm trung và có thể quản lý một số phần quan trọng của dự án như:
Có thể tự đưa ra quyết định cho các vấn đề ở mức độ trung bình.
Đảm nhận nhiều trách nhiệm hơn và quản lý các phần dự án quan trọng.
Hỗ trợ và hướng dẫn Junior, đồng thời có thể tư vấn cho Senior trong một số trường hợp.
Có khả năng làm việc nhóm hiệu quả và chịu trách nhiệm trực tiếp cho các phần công việc lớn hơn.
Senior là ai?
Chắc hẳn bạn nghĩ rằng trên Middle sẽ là Senior nhưng không hẳn như vậy. Có thể nói, khoảng cách giữa Midde và Senior khá lớn, bạn sẽ phải cố gắng tự phát triển rất nhiều khía cạnh mới có thể trở thành Senior hoặc bạn chỉ có thể mãi mãi dừng lại ở cấp độ Middle.
Xem xét dựa trên sự nỗ lực 110% của các bạn lập trình viên với mong muốn trở thành Senior thì Senior Developer nhìn chung có kinh nghiệm làm việc từ 5 đến 8 năm. Là một Senior bạn hẳn đã phải “kinh” qua rất nhiều lĩnh vực, mắc rất nhiều lỗi, từ đó mới đưa ra được kết luận đúng đắn về quá trình tổng thể.
Senior là cấp độ cao nhất trong các vị trí chuyên môn, với kinh nghiệm làm việc từ 5 năm trở lên. Senior không chỉ có khả năng hoàn thành công việc độc lập mà còn đảm nhận vai trò hướng dẫn, đào tạo, và quản lý các dự án phức tạp. Họ thường chịu trách nhiệm về các quyết định quan trọng trong dự án và có thể lãnh đạo nhóm.
Một Senior trong lĩnh vực phần mềm có thể làm phần lớn các công việc như:
Làm việc với khách hàng để đưa ra nhu cầu, phân tích nghiệp vụ, xây dựng quy trình làm việc và truyền đạt cho team cũng thực hiện.
Senior có thể làm Automation test, DevOps, UI/UX design.
Xây dựng kiến trúc code, trực tiếp code, review code của cấp dưới và hạn chế lỗi code.
Yêu cầu chính cho vị trí Senior
Kỹ năng training, truyền đạt tốt
Kinh nghiệm làm việc từ 5 năm trở lên, nắm vững kiến thức chuyên môn sâu rộng.
Kinh nghiệm chuyên sâu giải quyết vấn đề và thực hiện task với độ phức tạp cao.
Có khả năng phân tích và xây dựng chiến lược cho các dự án lớn.
Mức độ thực hiện nhiệm vụ
Đưa ra giải pháp công nghệ cho những bài toán khó.
Quản lý con người, thời gian, đảm bảo dự án hoàn thành đúng tiến độ.
Traning và giao nhiệm vụ cho các thành viên trong nhóm (Fresher, Junior, Middle).
Tạo tài liệu kỹ thuật cho các chương trình phần mềm mới.
Tóm lại
Những định nghĩa về Fresher, Junior, Senior là gì mình đưa ra với góc nhìn về những yêu cầu chính và mức độ nhiệm vụ sẽ giúp bạn xác định được level của bản thân ở đâu, từ đó nổ lực phát triển lên những level cao hơn. Bên cạnh đó, việc xác định cấp độ của bản thân sẽ giúp bạn tìm việc và thỏa thuận mức lương một cách tự tin hơn. Chúc bạn thành công!
Bạn là Fresher, Junior hay Senior? Bạn đang tìm kiếm cơ hội việc làm? Tham khảo ngay việc làm IT mọi cấp độ trên TopDev!