Lập trình nhúng là một ngành có cơ hội nhưng cũng đòi hỏi nhiều kiến thức và kĩ năng. Trong bài này mình sẽ giải thích một cách chi tiết nhất về nghành này, sau khi đọc các bạn có thể đưa ra quyết định là có nên theo đuổi nghành này hay không nhé.
Lập trình nhúng là gì?
Lập trình nhúng (embedded programing) là công việc của một embedded developer (lập trình viên nhúng) có nhiệm vụ viết các phần mềm để nạp vào vi điều khiển hoặc vi xử lý, để chúng điều khiển các phần tử trong mạch điện hoạt động theo đúng yêu cầu.
Các mạch điện có thể lập trình được thường được gọi là mạch nhúng.
Các hệ thống bị chi phối hoạt động bởi vi điều khiển hoặc vi xử lý gọi là hệ thống nhúng.
Tại sao lại gọi là hệ thống nhúng?
Lấy một ví dụ cho đơn giản. Bạn có 1 cái ly, nước và 1 gói trà. Cái ly là cố định không thể thay đổi, nhưng nước và gói trà có thể thay đổi. Khi chúng ta thay đổi gói trà, thì ly nước đó sẽ có vị khác nhau. Người ta gọi nôm na là “nhúng”.
Vì vậy một hệ thống có sự góp mặt của phần cứng (cái ly) và phần mềm (nước trà) là hệ thống nhúng.
- Phần cứng sẽ là phần không thể thay đổi: mạch điện, vi xử lý
- Phần mềm chính là phần có thể lập trình và thay đổi theo yêu cầu của khách hàng.
Tuy nhiên phần cứng và phần mềm sẽ có sự liên kết chặt chẽ với nhau, người viết phần mềm nhúng cũng phải tuân theo những thiết kế về phần cứng.
Vì vậy nếu nói học lập trình nhúng chúng ta sẽ chia thành 2 phần:
- Embedded hardware: Thiết kế phần cứng
- Embedded software (hoặc firmware): Thiết kế chương trình cho phần cứng đó
Học lập trình nhúng ra làm cái gì?
Dạo trên các trang tuyển dụng như viettnamwork, itviec,… chúng ta sẽ thấy có nhiều công ty tuyển các kĩ sư lập trình nhúng. Công việc chủ yếu cũng sẽ xoay quanh 2 thành phần đó là:
- Thiết kế phần cứng
- Lập trình phần mềm
- Làm cả 2, còn gọi là full stack embedded
Lập trình nhúng cũng chia thành nhiều cấp độ khác nhau, tuy không phải công ty nào cũng sử dụng các cấp chia này, nhưng các bạn có thể lấy để tham khảo.
- Fresher: Mới ra trường, ít kinh nghiệm, chủ yếu vừa học vừa làm
- Junior: Đã có kiến thức, có thể join vào dự án, code hoặc làm các thành phần trong dự án
- Senior: Có kinh nghiệm và cái nhìn tổng thể về dự án, có thể tự làm hoặc giao việc cho các thành phần khác trong team
- Poject Manager: Thêm kĩ năng quản lý dự án, quản lý thành viên để hoàn thiện dự án đúng thời hạn
- Ngoài ra còn có Product Owner (PO), Bussiness Analytics (BA): Làm việc với khách hàng, phân tích yêu cầu, thiết kế sản phẩm và đưa cho team dev thực hiện
- Tester, QC: Test và quản lý chất lượng cho sản phẩm
Ngoài ra các bạn có thể phát triển theo hướng IOT (Internet of Things), làm mảng devide IOT (thiết bị IOT) hoặc cả hệ thống thì sẽ có thêm những mức khác nữa. Mình sẽ nói chi tiết trong bài: Lộ trình học lập trình IOT từ A tới Z
Về lương thì sao?
Đây là một trong những nghành có tiềm năng phát triển vậy nên mức lương cũng tương đối cao so với các nghành khác. Mức độ cạnh tranh cũng thấp hơn, do yêu cầu trình độ cao hơn.
Với nghành này khi ra trường các bạn có thể sẽ thường có mức lương 7 – 12tr (thời điểm mình viết bài này nhé ^^), sau đó có kinh nghiệm sẽ lên 12 – trên 20tr. Ngoài ra với nhu cầu nhân lực của nước ngoài cũng lớn, nếu các bạn có thể làm cho công ty nước ngoài có thể có lượng >2k$ /tháng là điều rất bình thường.
So sánh với các nghành IT khác như lập trình web, lập trình mobile, thì ban đầu nghành nhúng sẽ có mức lương thấp hơn một chút. Tuy nhiên nếu bạn thực sự giỏi thì mức lương khủng là một điều hoàn toàn có thể đạt được.
Bạn có nên chọn học lập trình nhúng?
Để đưa ra quyết định cho bất cứ điều gì, chúng ta sẽ chia ra thành 2 phần khó khăn và cơ hội, sau đó đặt lên bàn cân của chính mình. Nếu cảm thấy phù hợp thì mới chọn.
Khó khăn
- Khó học: Không phải ai cũng có thể học được lập trình nhúng bởi ngoài kiến thức về lập trình các bạn còn phải có kiến thức về phần cứng, phần cứng khác nhau lập trình cũng sẽ hơi khác 1 chút.
- Thời gian đào tạo lâu: Để học được tất cả các kiến thức đó cần 1 khoảng thời gian nhất định thường là 1, 2 năm nếu chăm chỉ. Khi học nghành này các bạn quên ngay cái câu chuyện học vài ba tháng là có thể đi làm nhé
- Tốn tiền cho phần cứng: Học cái này các bạn phải mua sắm phần cứng, phải mua cái ly thì mới có nước đổ vào được chứ. Ngoài ra các loại cảm biến và thiết bị khác cũng sẽ khá tốn tiền. Vậy nên nếu bạn quá khó khăn về kinh tế cũng đừng nên học ngành này
Cơ hội
- Lương khá cao: Lương mình cũng đã nói rồi đó, nếu bạn làm việc tốt thì lương không phải là vấn đề bạn cần suy nghĩ
- Khả năng khởi nghiệp cao: Không như các nghề khác chỉ là một mắt xích trong công ty, với nghề này các bạn có thể chế tạo sản phẩm phục vụ nhu cầu cần thiết và bán chúng, tạo ra nhiều giá trị cho xã hội
- Xu thế phát triển của xã hội: Các máy móc thông minh đang dần dần khẳng định vị thế của mình, thế giới luôn luôn cần sự đổi mới, và bạn là một trong những người đi đầu trong việc đổi mới đó. Nghề của bạn sẽ không bao giờ bị outdate do thị trường không cần sử dụng nữa
Lời khuyên của mình
Nếu các bạn thực sự có đam mê thì mới học lập trình nhúng, vì thời gian bỏ ra là khá nhiều. Mình đã chứng kiến rất nhiều người bỏ ngang khi đang học, thâm chí sau khi đi làm, để kiếm một công việc lương cao hơn.
Nhưng bạn nên hiểu, thành bại do con người, do chính bản thân bạn. Vậy nên nếu bạn cảm thấy phù hợp và có thể đi đường dài thì mới nên chọn, trên con đường này bạn vẫn phải liên tục học tập không ngừng nghỉ, đừng chọn vì lương, đừng chọn vì xu thế, hãy chọn vì bản thân mình.
Lộ trình để trở thành Embedded Hardware developer (Kĩ sư thiết kế phần cứng)
Roadmap
Các kiến thức cần học:
- Kiến thức điện cơ bản
Dòng điện là gì
Các công thức tính toán cơ bản
Các định luật cơ bản - Linh kiện học
Các loại linh kiện và chức năng của chung
Cách đọc datasheet của linh kiện
Các loại linh kiện thường sử dụng hiện nay - Mạch điện
Các mạch điện đơn giản
Mạch nguồn
Các mạch Opamp
Cách mạch công xuất, cách ly - Sử dụng các công cụ
Công cụ đo đạc.: đồng hồ, oscillocope
Công cụ hàn mạch: mỏ hàn, máy khò, thiếc,…
Công cụ mô phỏng: proteus… - Thiết kế mạch in
Thiết kế mạch nguyên lý
Vẽ mạch in
Làm chủ 1 phần mềm: Altium, kicad…
Các công cụ cho việc sản xuất mạch in - Sản xuất mạch in
Các phương pháp chế tạo mạch in: cảm quang, in nhiệt, cắt khắc cnc…
Phương pháp sx mạch: SMT, Nhúng,….
Mục tiêu
- Thiết kế được mạch nguyên lý theo yêu cầu
- Vẽ được mạch in đúng chất lượng
- Đo đạc, phân tích mạch điện
- Sản xuất mạch điên thực tế
Lộ trình để trở thành Embedded Software (firmware) developer (Kĩ sư phát triển phần mềm)
Road map
Các kiến thức cần học:
- Ngôn ngữ lập trình
Ngôn ngữ máy là gì
Ngôn ngữ ASM
Ngôn ngữ C
Giải các bài toán lập trình đơn giản - Cấu trúc dữ liệu và giải thuật
Các kiểu dữ liệu
Các giải thuật
Xử lý bài toán lập trình - Kiến trúc vi điều khiển
Kiến trúc của vi xử lý và vi điều khiển
Bộ nhớ
Ngoại vi - Kiến trúc một chương trình nhúng
Các lớp trong lập trình nhúng
Cách biên dịch chương trình nhúng
Kiến thức về IDE và cách sử dụng - Lập trình điều khiển thanh ghi
Thực chất lập trình thanh ghi là gì?
Cách đọc reference manual
Cách tạo các file định nghĩa cho vđk
Cách thay đổi giá trị của thanh ghi
Lập trình với các ngoại vi: ADC, I2C, SPI, UART, ….
Làm 1 số bài toán cụ thể - Lập trình driver
Cách đọc datasheet linh kiện
Viết thư viện cho linh kiện - Lập trình vi điều khiển với thư viện
Tại sao chúng ta nên sử dụng thư viện
Chọn công cụ và thư viện
Lập trình các ứng dụng cụ thể
VD: Lập trình STM32 từ A tới Z với thư viện HAL - Hệ điều hành thời gian thực RTOS
- Hệ điều hành linux
Mục tiêu
- Lập trình nhúng cho bất kì dòng vi điều khiển nào
- Lập trình được driver cho bất kì loại cảm biến nào
- Hiểu về các lớp trong lập trình
- Sử dụng thành thạo các thư viện của hãng
- Làm được các dự án thực tế
Lời khuyên cho các bạn học lập trình nhúng
Nhìn rõ lộ trình, chia nhỏ mục tiêu
Để bắt đầu học về bất cứ điều gì các bạn hãy tạo cho mình 1 lộ trình và cố gắng đạt được những target trong lộ trình đó. Việc này là rất cần thiết vì các bạn sẽ định vị được bản thân đang ở đâu, cần đi đâu, cần học những gì để đạt được mục tiêu lớn của bản thân.
Đó cũng là một kĩ năng quan trọng trong bất cứ việc nào sau này, giống như việc mình viết bài này vậy. Mình đã tạo ra 1 lộ trình để cho bạn đọc biết mình đang ở đâu và làm gì. Hãy cố gắng tạo cho bản thân mình 1 lộ trình như vậy nhé.
Nên nhớ: Thành công lớn là tập hợp của rất nhiều thành công nhỏ
Đam mê dẫn lối, kỉ luật đồng hành
Đam mê chưa bao giờ là đủ, hầu hết những người mình gặp khi hỏi đều nói mình có đam mê với nghành này. Thế nhưng không phải ai cũng thực sự thành công. Vậy bí quyết để thành công là gì?
Đó chính là sự kỉ luật, kỉ luật trong cách học tập, kỉ luật trong cách sống, kỉ luậ với bản thân mình, kỉ luật chính là sức mạnh tạo nên sự thành công. Không phải ngẫu nhiên mà quân đội lại quan trọng kỉ luật đến vậy.
Để đạt được mục đích thì kỉ luật chính là chìa khóa, còn đam mê chỉ là ngọn hải đăng, chỉ ra nơi bạn muốn đến. Chỉ nhìn và mơ mộng mà không đi thì rốt cuộc bạn cũng sẽ chỉ dậm chân tại chỗ mà thôi.
Làm dự án, cách nhanh nhất để học
Đã bao giờ bạn nghĩ mình học để làm gì không? Đơn giản bạn chưa biết được kiến thức mình ứng dụng vào thực tế như thế nào. Cũng như việc người ta nói rằng Toán chỉ nên học hết cấp 2, vì các kiến thức như đạo hàm, tích phân, vi phân đâu có áp dụng gì trong cuộc sống.
Tương tự như vậy, nếu các bạn học lạp trình nhúng một cách hàn lâm và thiếu tính thực tiễn, bạn sẽ đi rất chậm. Tốt nhất đó là áp dụng nó vào một bài toán cụ thể.
Mình lấy ví dụ: Mẹ bạn làm nông, suốt ngày phải thức khuya dậy sớm để đi tưới nước, bạn làm 1 hệ thống tưới hẹn giờ cho mẹ. Khi làm dự án thực tế, bạn sẽ vấp phải những khó khăn mà bạn không bao giờ được học trên trường, bạn giải quyết được những vấn đề đó chính là kiến thức, kinh nghiệm của bạn mà không ai có thể truyền đạt được, đó cũng là cách làm việc sau này của bạn tại các công ty.
Nên nhớ: Học đi đôi với hành
Thể hiện bản thân mình
Mình biết những bạn học lập trình thường hướng nội, ngại thể hiện. Thế nhưng nếu bạn giỏi mà cả thế giới đều không biết bạn giỏi thì làm sao những cơ hội tốt đến với bạn được.
Cũng như việc mình viết Blog này, nó chả đem lại thu nhập gì cho bản thân, còn mất thêm tiền. Thế nhưng nó là nơi mình thể hiện bản thân, từ đó cơ hội sẽ đến dễ dàng hơn.
Nếu là được sản phẩm tốt hãy không ngừng nói về nó, nếu bạn học được điều hay, hãy chia sẻ nó tới nhiều người, hãy đi thi những cuộc thi về khoa học kĩ thuật, những hoạt động KHKT. Từ đó nhiều người biết đến bạn, cơ hội sẽ tìm đến bạn.
Kết
Học lập trình nhúng có thể rất gian nan, thế nhưng nếu bạn có trong mình niềm đam mê và không từ bỏ. Sớm muộn gì bạn cũng sẽ gặt hái được những thành công cụ thể. Mình viết bài này mong muốn chia sẻ cho bạn cái nhìn tổng quan về nghành và nghề, nếu cảm thấy có ích, hãy chia sẽ nó với những người xung quanh.
Đừng quên gia nhập Hội Anh Em Nghiện Lập trình để giao lưu và học hỏi nhé!!!
Làm nhúng thì có nhiều cty nhận internship hay fresher không thế anh?
Cảm ơn bạn, bài viết rất hay. Mình năm nay đã 32 tuổi và đag chạy Grab, ở tuổi này liệu mình có thể trở thành Embedded Software (firmware) developer có còn quá muộn ko? Mình đam mê điện tử và lập trình, chủ yếu là tự học từ các tài liệu và video trên youtube. Bạn cho mình một lời khuyên, cảm ơn
Hi bạn! Cảm hứng ơn bài viết khá hay. Mình cũng đang muốn tìm hiểu học về lập trình nhúng. Nhưng k biết ứng dụng của nó có đáp ứng được yêu cầu của mình k nữa. Mình muốn xây dựng phần mềm, cứng để điều khiển robot 2d, 3D hoặc robot 6 bậc tự do. Vậy lập trình nhúng có đáp ứng dc k bạn. Rất cảm ơn nếu bạn rành chút thời gian trao đổi trực tiếp. Mong có được sự trợ giúp của bạn.
Hi bạn! Cảm hứng ơn bài viết khá hay. Mình cũng đang muốn tìm hiểu học về lập trình nhúng. Nhưng k biết ứng dụng của nó có đáp ứng được yêu cầu của mình k nữa. Mình muốn xây dựng phần mềm, cứng để điều khiển robot 2d, 3D hoặc robot 6 bậc tự do. Vậy lập trình nhúng có đáp ứng dc k bạn. Rất cảm ơn nếu bạn rành chút thời gian trao đổi trực tiếp. Mong có được sự trợ giúp của bạn.
Cảm ơn anh về những chia sẻ. Ngoài những thông tin đó thì hiện tại anh và mọi người có biết trung tâm nào uy tín để theo học về lập trình nhúng k ạ.
Cảm ơn ad đã tạo ra trang wed này …chân thành cảm ơn bạn
chào anh, e ms hk C nhưng lại không biết lấy bài tập ở đâu để làm bài tập những gì mình đã học. Anh có thể chỉ e một số trong để luyện không ạ