Lập Trình Viên Cần Học Những Gì.
Hi. Xin chào các bạn.
Ngày hôm nay thì tôi sẽ chia sẻ một chù đề đặc biệt, không liên quan đến kỹ thuật.
Nhưng có thể nó lại rất cần thiết cho các bạn.
Chủ đề : Chia sẻ ngành nghề.
Chủ đề này sẽ chia sẻ các bài viết ngoài lề của ngành công nghệ thông tin nói chung và nghề lập trình viên phần mềm nói riêng.
Bài viết đầu tiên trong chủ đề mới mẻ này, tôi muốn chia sẻ với các bạn về nội dung.
Những kiến thức một lập trình viên cần phải học.
I. Lời nói đầu.
Xuất phát từ những trăn trở của các bạn sinh viên theo học ngành công nghệ thông tin.
có định hướng tương lai sẽ trở thành một lập trình viên phần mềm, kỹ sư phần mềm.
Các bạn thường đặt ra nhiều câu hỏi như là:
=> Theo học ngành IT thì nên theo mảng nào trong IT.
=> Lập trình viên thì nên học ngôn ngữ nào.
=> Nghề IT thì công việc làm là gì, có vất vả không, mức lương ra sao, cơ hội và tương lai thế nào.
=> Em muốn làm lập trình viên trong tương lai thì em cần phải học những gì.
=> Em sắp ra trường muốn tìm hiểu về kinh nghiệm phỏng vấn .
Và có nhiều thắc mắc khác nữa mà các bạn luôn đặt ra và
mong muốn được chia sẻ giải đáp để có thể có những tâm lý
chuẩn bị định hướng cho ngành nghề, mục tiêu theo đuổi sau này.
Do đó chủ đề này mình sẽ viết một số bài viết chia sẻ những vấn đề như vậy cho:
các bạn sinh viên bắt đầu vào học, các bạn chuẩn bị ra trường,
các bạn học trái ngành có định hướng muốn học thêm về lập trình.
Các bạn có đam mê về lập trình và muốn làm các sản phẩm công nghệ.
II. Sự khác nhau giữa đi học và đi làm.
Đi học và đi làm là một sự khác nhau rất lớn và điều này có thể làm cho nhiều bạn bất ngờ khi rời ghế nhà trường.
Khi đi học phần lớn bạn học kiến thức một cách tổng quan về ngành nghề,
các kiến thức cần thiết cho chuyên ngành.
Nhưng khi đi làm bạn chỉ làm một phần nhỏ chuyên môn hóa trong sản phẩm của dự án.
Bạn đi học, bạn chịu áp lực của thi cử, bài tập dài, nó quyết định cho điểm số, kết quả học tập của bạn.
Đi làm bạn chịu áp lực của :
+ Tiến độ dự án phải hoàn thành trong thời gian xác định.
+ Độ khó của bài toán, các yêu cầu công việc của khách hàng.
+ Áp lực về thời gian làm việc, cường độ ngồi liên tục trên máy tính.
+ Áp lực về con người. các mối quan hệ.
+ Áp lực về vấn đề lương thưởng, con đường sự nghiệp.
Đi học, các sản phẩm bạn thực hiện chỉ là ở dạng nghiên cứu.
Nhưng đi làm, cái bạn làm là một phần của 1 sản phẩm thương mại.
Do đó bạn phải làm nhiều công đoạn khác nhau trong một quy trình sản xuất một sản phẩm thương mại.
Đó là những thức cơ bản cho sự khác nhau giữa đi làm và đi học.
Và vì thế bạn cần chuẩn bị tâm lý và những kiến thức cần thiết khi chuẩn bị ra trường.
Điều này sẽ giúp bạn có nhiều thuận lợi khi bước vào công việc thực tế.
III. Những kiến thức một lập trình viên cần học.
1. Định hướng được mục tiêu.
Bạn nên xác định ngay cho mình mục tiêu mình cần hướng đến là mạng nào.
+ Lập trình web, để tạo ra các sản phẩm web phục vụ cho ngành thương mại điện tử
+ Lập trình game:
+ Các ứng dụng mobile.
+ Các phần mềm ứng dụng chạy trên máy destok, các nền tảng windows, mac, linux.
+ Phần mềm về xử lý dữ liệu, cơ sở dữ liệu.
+ Lập trình mã hóa, truyền thông.
+ Lập trình nhúng cho các thiết bị điện tử.
+ Lập trình AI, các sản phẩm trí tuệ nhân tạo
+ Lập trình tích hợp. Tạo thêm các chức năng tích hợp vào một phần mềm sẵn có.
Ok. Như vậy bạn phải xác định được mục tiêu mình theo đuổi.
Làm thế nào để xác định được, hãy dựa trên 2 yếu tố cơ bản như sau.
+ Bạn thực sự có năng khiếu và có cảm hứng với mảng đó hay không ?
+ Sự phát triển của mảng đó trong xã hội, và xu thế trong tương lai như thế nào.
Chỉ cần một tỷ lệ khoảng 60 đến 70% là có thể chấp nhận được.
Sau khi xác định được hướng nghiên cứu, bạn hãy chọn ngôn ngữ phù hợp cho mảng đó.
=> Học thật tốt kiến thức cơ bản của ngôn ngữ lập trình.
Ví dụ bạn theo mảng lập trình phần mềm ứng dụng máy tính.
Vậy thì bạn phải học thành thạo các ngôn ngữ lập trình như c++, c#
Học các kiến thức cơ bản như cách sử dụng hàm, biến, sử dụng con trỏ,
sử dụng hướng đối tượng, sử dụng template.
-> Học các thư viện làm giao diện, các thư viện opensource hỗ trợ
2. Tìm hiểu về Version Control.
Version control hiểu đơn giản là các hệ thống quản lý mã code.
Hầu hết các dự án trong các công ty đều phải sử dụng version control để quản lý mã code.
Đa phần các bạn sinh thường ít được nhà trường dạy về mảng kiến thức này.
Do đó nhiều bạn còn bỡ ngỡ khi sử dụng version control trong dự án công việc.
Giải thích sơ qua về version control.
Tôi giả sử nếu trong một dự án lớn với hàng trăm file, và hàng trăm ngàn dòng code.
Team phát triển có 3 người. Nếu không sử dụng version control thì điều gì sẽ xảy ra.
+ Bạn code trong 2 hoặc 3 ngày sửa vài chục file và vài ngàn dòng code.
Sau đó bạn không biết là mình đã sửa những chỗ nào, những file nào trong 2 ngày qua.
Bạn sửa lung tung thậm chí làm hỏng cả những đoạn code của người khác
hoặc những đoạn code chuẩn trước đó.
Bạn muốn undo lại phiên bản ngay từ lúc chưa sửa nhưng không thể được
+ Bạn làm một chức năng A, một dev khác làm chức năng B.
Vậy khi hợp 2 chức năng lại thì phải làm sao.
Không lẽ chúng ta dùng cách thủ công là copy code ông B sang ông A rồi lại copy lại từ ông A sang ông B. Đó không phải là cách làm hiệu quả, nhất là khi dự án lớn.
+ Vấn đề bảo mật không đảm bảo, code bị hacker xâm nhập lấy toàn bộ, hoặc bị virus phá hoại làm mất.
Như vậy bạn sẽ thấy nếu không có version control quản lý
thì dự án của bạn sẽ gặp rất nhiều vấn đề mà tiêu biểu trong đó là ba vấn đề được nêu ở trên.
Do đó vai trò của version control là rất quan trọng và cần thiết.
Nó giúp bạn:
+ Quản lý mã code rất chặt chẽ, biết được ngày giờ chỉnh sửa, nội dung chỉnh sửa, có thể lưu lại hoặc undo.
+ Merge code của các thành viên trong nhóm, quản lý được ai code chức năng nào, ai sửa thời điểm nào.
+ Bảo mật tốt, vì luôn có một server chứa code với những tiêu chuẩn được đảm bảo.
+ Quản lý tiến trình dự án rất hiệu quả, nhanh gọn.
Do đó version control là một kiến thức cần thiết mà các bạn sẽ phải học.
Và sẽ tốt hơn nếu các bạn trang bị cho nó khi còn là sinh viên.
Như vậy khi ra trường, bạn sẽ tiếp cận công việc rất nhanh, và điều đó thuận lợi sự nghiệp của bạn.
Một số hệ thống version control phổ biến đó là: SVN, Github, TFS, Source Safe.
Về cơ bản thì SVN và Github khá phổ biến, các bạn nên trang bị hai hệ thống này, đặc biệt là git.
3. Kiến thức về hệ thống quản lý dự án
Đây cũng là một trong những kiến thức cần thiết.
các công ty phần mềm luôn áp dụng một hệ thống quản lý cho dự án của mình.
Nó khác gì so với version control.
Nó không quản lý mã code mà nó quản lý các vấn đề của dự án như là:
+ Các yêu cầu dự án.
+ Tài liệu dự án.
+ Lịch trình thực hiện dự án.
+ Các bug dự án
Các bạn tưởng tưởng thế này:
Khi một dự án bắt đầu được triển khai:
Team phát triển sẽ họp với nhau cùng đọc và phân tích yêu cầu dự án.
Sau khi phân tích và tìm hiểu rõ ràng các yêu cầu dự án thì team sẽ lên ý tưởng thiết kế cho dự án.
Họ sẽ phân tích và liệt kê ra xem có bao nhiêu yêu cầu, chức năng cần được thực hiện, và thực hiện trong khoảng thời gian bao lâu.
Như vậy mỗi yêu cầu, hay mỗi nhiệm vụ sẽ có:
+ Tiêu đề .
+ Phần mô tả chi tiết.
+ Tài liệu, hình ảnh đi kèm.
+ Người tạo yêu cầu.
+ Người thực hiện yêu cầu (dev).
+ Tester thực hiện nhiệm vụ test.
+ Độ khó của yêu cầu: (ví dụ 5 point, 5 sao, cấp 5…).
+ Thời gian dự kiến (estimate).
+ Trạng thái yêu cầu (open, coding, testing, commit, waiting, release, closed…).
Như vậy người ta không thể làm thủ công bằng cách viết ra các file giấy trắng rồi đưa cho mọi người.
Mà người ta sẽ dùng các hệ thống phần mềm để thực hiện và quản lý các yêu cầu như vậy
Như vậy các hệ thống quản lý dự án sẽ giúp cho team phát triển quản lý dự án được các vấn đề sau:
+ Vấn đề giao việc thực hiện trên hệ thống.
+ Kiểm soát được tình hình công việc dự án, đang code, đang test, đã đóng.
+ kiểm soát được thời gian thực hiện, sớm hay muộn hay thừa giờ hay thiếu giờ.
+ Đánh giá được độ khó của yêu cầu.
+ Kiểm soát chất lượng sản phẩm thông qua số lượng bug.
+ Đánh giá được chất lượng của nhân viên trong team.
Do đó hệ thống quản lý dự án là một trong những kiến thức quan trọng mà các bạn sẽ được học và trang bị về nó
Thông thường trong trường phần lớn các bạn sẽ không được học
mà chỉ khi đi làm người ta áp dụng vào dự án các bạn mới có cơ hội đươc học.
Một số công ty họ sử dụng các hệ thống bên ngoài như: Track, redmine….
Một số công ty lớn, tập đoàn, họ tự xây dựng các hệ thống của riêng họ, chỉ khi vào dự án các bạn mới được học.
Nhưng về cơ bản thì cấu trúc là như nhau.
Các bạn có thể học redmine hoặc track, hoặc tham khảo bài viết dưới đây.
11 hệ thống quản lý dự án phần mềm tốt nhất
4. Kiến thức về Office.
Khi đi làm office cũng là kiến thức cần thiết mà các bạn cần phải trang bị cho mình.
+ Bạn có thể viết tài liệu mô tả dự án, mô tả chức năng của sản phẩm.
+ Bạn có thể viết các tài liệu trainning về một chủ đề nào đó.
+ Bạn có thể sử dụng excel để viết các tài liệu thống kê về dữ liệu của phần mềm.
+ Team có thể sử dụng One Note để quản lý các vấn đề riêng của dự án
+ Công ty thường sử dụng email Outlook, bạn phải biết cách dùng nó.
+ Đôi khi cần sử dụng công cụ vẽ biểu đồ, bảng biểu với visio, smart draw….
5. Ngoại ngữ (Tiếng Anh, Tiếng Nhật)
Không phủ nhận ngoại ngữ có vai trò quan trọng trong công việc.
Đặc biệt là hai ngôn ngữ: Tiếng anh và tiếng Nhật
Khi ra trường nó là điều kiện cần giúp cho các bạn có cơ hội tìm được những công việc ngon hơn,
có điểm cộng hơn trong mắt nhà tuyển dụng.
Nếu bạn làm cho công ty của Nhật, có tiếng Nhật sẽ giúp bạn offer được mức lương cao hơn hẳn.
Bạn sẽ sử dụng nó ít nhất là cho việc đọc dịch tài liệu.
Sau đó là viết emil, QA để hỏi khách hàng.
Và cuối cùng, để làm được quản lý, bắt buộc bạn phải giao tiếp được với khách hàng.
6. Kỹ năng mềm.
Nhiều người thường bỏ qua kiến thức kỹ năng mềm.
Không chỉ riêng các bạn sinh viên ra trường, chưa được trang bị.
Mà ngay cả những người đi làm nhiều năm cũng thiếu kỹ năng mềm, thậm chí là các senior, team lead, leader.
Họ thường ít khi chú ý đến mảng kiến thức này
Bạn vẫn thường nghe người ta nói, “Đôi khi, thái độ quan trọng hơn trình độ“.
Khi đi xin việc, năng lực của các bạn giúp cho các bạn có cơ hội tìm được một công việc ưng ý phù hợp. Nhưng để làm tốt được công việc, thì kỹ năng mềm lại là nhân tố quan trọng quyết định điều này.
Khi bạn đi làm, bạn phải tham gia vào dự án và làm việc nhóm, dự án càng to thì nhóm càng đông.
Bạn sẽ phải làm việc và tiếp xúc với rất nhiều các mẫu người khác nhau và họ chẳng giống bạn chút nào.
Mỗi người có một tâm lý khác nhau. Nó thể hiện ở chỗ:
-> Tính cách khác nhau.
-> Quan niệm sống khác nhau.
-> Khí chất khác nhau
-> Mục đích cuộc sống và định hướng sự nghiệp khác nhau.
Do đó để hòa hợp được, thống nhất được, => LÀ MỘT ĐIỀU KHÔNG DỄ DÀNG.
Nếu một team có thể hòa hợp được, thì việc khó đến đâu cũng thành,
bạn đi làm cảm giác vui vẻ thoải mái, hào hứng, động lực.
Nhưng ngược lại, nếu một team mà ai cũng có cái tôi quá lớn, ai cũng có ý kiến riêng,
không hòa hợp, không thống nhất được, thiếu mất sự đoàn kết.
Thì dù là một vấn đề nhỏ cũng không thể giải quyết được.
Rất nhiều vấn đề phát sinh giữa mối quan hệ con người với con người trong xã hội.
Đặc biệt là trong công việc.
Cách tiếp cận công việc khác nhau ===> cũng cãi nhau
Cách giao việc không khéo, cách từ chối việc không tế nhị ===> sẽ sinh ra mâu thuẫn
Sự so sánh về trình độ năng lực với nhau
Sự so sánh về lương thưởng, thành tích.
Rất nhiều vấn đề khác phát sinh trong quá trình làm việc.
Và điều n phần lớn dẫn đến tâm lý chán nản, muốn nghỉ việc với hầu hết mọi người, sau một thời gian gắn bó.
Do đó để có thể làm việc được với nhau hòa hợp được với nhau, biết tính khí của từng người để có thể lúc cương lúc nhu.
Ai có thể thân ai không nên thân, ai có thể đùa, ai không thể đùa, và ai lên tranh luận, ai không.
Thì bạn cần phải trang bị cho mình các kiến thức về kỹ năng mềm thật tốt.
Hãy học các kỹ năng cơ bản như là:
Kỹ năng nói.
kỹ năng nghe.
kỹ năng hỏi, báo cáo.
Kỹ năng viết email.
Kỹ năng quản lý thời gian.
Kỹ năng giao tiếp, làm việc nhóm.
Kỹ năng khen chê.
Và đặc biệt là kiến thức về Tâm lý học.
7. Tìm hiểu về quy trình phát triển phần mềm.
Nó có thể không quá cần thiết để học sớm, học trước, nhưng nó cần thiết khi bạn đã ổn định công việc.
Phần mềm cũng là một sản phẩm, và chúng ta có ngành công nghệ phần mềm, do đó chúng ta cũng có các quy trình phát triển phần mềm. Và bạn phải nắm được quy trình phát triển phần mềm của dự án của công ty đang áp dụng.
Bạn sẽ phải hiểu được để cho ra một sản phẩm phần mềm, thì team phải thực hiện qua những công đoạn nào khi bắt đầu dự án.
Và điều đó giúp cho bạn hiểu được kỹ hơn về quá trình sản xuất sản phẩm
Một số mô hình các bạn có thể tìm hiểu đó là: waterfall, v model, rad model và phổ biến hiện này là Agile
8. Kiến thức về sản phẩm, loại hình đối tượng mà phần mềm thực hiện.
Ví dụ bạn làm phần mềm mô phỏng đồ họa cho cơ khí, thì bạn có kiến thức về cơ khí,
Phần mềm làm cho kế toán thì cũng nên biết cơ bản kiến thức về kế toán.
Phần mềm làm cho giáo dục thì cũng có kiến thức về giáo dục…
Nghĩa là kiến thức của các đối tượng mà sản phẩm phần mềm hướng đến.
9. Kiến thức về phân tích thiết kế.
Đây cũng là kiến thức quan trọng, hầu hết khi ra trường các bạn chưa có kinh nghiệm,
Các bạn mới chỉ ở mức thực hiện theo yêu cầu được vạch ra.
Khi các bạn đã làm lâu rồi, các bạn phải có kiến thức phân tích và thiết kế các chức năng cho phần mềm.
Nghĩa là:
Trước yêu cầu dự án, bạn phải phân tích rõ được yêu cầu đó là gì,
nó là một yêu cầu tốt, hay yêu cầu không tốt, nó đã lỗi thời hay nó rất mới,
bạn phải đưa được ý tưởng thiết kế cho yêu cầu đó và chứng minh được thiết kế như vậy là chất lượng.
Từ đó bạn sẽ dần dần từ một:
coder -> developer -> kỹ sư phần mềm -> kiến trúc sư phần mềm
Phân tích, thiết kế có vai trò quan trọng trong việc định hướng sự phát triển của sản phẩm phần mềm.
Nó quyết định đến vấn đề thương mại, marketing của sản phẩm.
Sản phẩm có gì hay, có gì độc đáo để có thể marketing, và thu hút được nhiều người quan tâm.
10. Kiến thức về khả năng tìm kiếm và giải quyết vấn đề.
Công nghệ phần mềm là một ngành luôn đòi hỏi sự sáng tạo, mới mẻ, phát minh từ các lập trình viên.
Do đó các lập trình viên giỏi là những người phải biết tìm kiếm thông tin rất tốt từ mọi nguồn:
sách, tài liệu, giáo trình và đặc biệt là google với các loại ngôn ngữ.
Bên cạnh đó, khi những vấn đề khó phát sinh, điều mong muốn của các lãnh đạo, người quản lý dự án đó là:
có tìm được giải pháp xử lý hay không, hoặc có cách nào khác, ý tưởng nào khác để giải quyết vấn đề không ? Họ không thích bạn nói mãi về những khó khăn, tình trạng khúc mắc của bài toán.
Một lập trình viên giỏi giải quyết các vấn đề, giỏi tìm ra giải pháp sẽ luôn được đánh giá cao.
Ok. Trên đây là những vấn đề cơ bản mà một lập trình viên cần phải học và tích lũy được.
Để từ một lập trình viên trở thành một lãnh đạo, hay quản lý dự án, hay kiến trúc sư trưởng phần mềm,
thì còn rất nhiều kiến thức khác cần phải học.
Nhưng trước mắt, các bạn hãy học tốt và tích lũy tốt những kiến thức cơ bản ở trên.
Các bạn sẽ rất vững vàng khi cầm hồ sơ đi xin việc.
Chúc các bạn thành công.
ptPham
thanks you for sharing