Lập Trình Viên Cần Học Những Gì.

Hi. Chào mừng các bạn đến với chủ đề :  Chia sẻ ngành nghề tại blog Phát Triển Phần Mềm 123AZ.

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, và đặc biệt là các bạn có định hướng sẽ trở thành một lập trình viên tương lai.

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, 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 và có định hướng muốn học thêm và là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 mà các bạn có thể sẽ bị bất ngờ, choáng ngợp hoặc không chuẩn bị sẵn tâm lý để đương đầu sau 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ề và 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ử và các bài tập dài, và phần lớn nó quyết định cho điểm số và 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 và các yêu cầu công việc.

+ Áp lực về thời gian làm việc và ngồi liên tục trên máy tính.

+ Áp lực về con người. và 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 và bước vào công việc thực sự.

III. Những kiến thức một lập trình viên cần học.
1. Định hướng mục tiêu nghiên cứu, học tốt kiến thức lập trình cơ bản

Bạn nên xác định ngay cho mình mục tiêu mình cần theo đuổi khi xác định trở thành 1 lập trình viên. Bạn sẽ theo mảng nào ?

+ Lập trình web.

+ Lập trình mô phỏng đồ họa 2d 3d.

+ Lập trình game .

+ Các ứng dụng mobile.

+ Các ứng dụng windows, desktop.

+ 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ử.

Ok. Bạn phải xác định được mục tiêu mình theo đuổi. Và 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.

Và hãy hài lòng với 50% cho mỗi cái, còn lại là phải chấp nhận.

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 đó, và 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 đồ họa mô phỏng và chọn c++ để thực hiện, thì hãy học tốt kiến thức cơ bản về c++ như là:

-> kỹ thuật lập trình hướng đối tượng, kế thừa, đa hình.

-> Con trỏ, hàm, biến, phương pháp lập trình module hóa….

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.

Trong trường học có thể các bạn được học nhưng có thể không.

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 và 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 thật khó khăn.

+ 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. Như vậy nếu team nhiều member, dự án lớn, thì việc thủ công đó không hiệu quả, tốn thời gian, dễ mắc lỗi và khó kiểm soát.

+ 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ác chức năng lại giữa các thành viên trong nhóm, quản lý được ai sửa code, ai check code.

+ 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ả, và nhanh gọn.

Do đó version control là một kiến thức cần thiết mà các bạn nên tìm hiểu và áp dụng nó cho các demo nghiên cứu của mình ngay từ khi còn là sinh viên. Như khi ra trường các bạn đã có kiến thức tốt về nó và điều đó thuật lợi cho vấn đề xin việc và tiếp cận công việc tốt hơn khi vào dự á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 và các bạn có thể tìm hiểu 2 ông này với rất nhiều document trên mạng.

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 hay và quan trọng, 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 tài liệu mô tả.

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 rất hiểu quả.

+ 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, bao nhiêu yêu cầu đã xong, đang code, đang test, đã đóng.

+ kiểm soát được thời gian thực hiện, sớm hay muộn hay không đủ.

+ Đá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 lập trình viên sẽ phải học và biết 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 riêng họ, và 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 cho công ty, hoặc cho các thành viên mới vào dự án.

+ 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 đề ngoài rìa của dự án.

+ Công ty sử dụng email Outlook và 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. Tiếng Anh.

Không phủ nhận tiếng anh có vai trò quan trọng trong công việc. 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.

Và khi vào dự án, ít nhất các bạn cũng phải sử dụng nó để đọc dịch tài liệu, hoặc viết email trao đổi với khách hàng.

Và mức độ cao hơn là chát skype hỏi khách hàng, hay giao tiếp trực tiếp trong các buổi họp meeting.

Tiếng anh tốt giúp cho công việc của bạn thuận lợi hơn và con đường sự nghiệp của bạn cũng nhanh hơn.

6. Kỹ năng mềm.

Bạn đừng nghĩ nó không quan trọng, thực sự nó rất quan trọng và là một kiến thức ảnh hưởng rất nhiều đến công việc của bạn.

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à sự nghiệp khác nhau.

Và do đó để hòa hợp được, thống nhất được, làm chung được => ĐÓ LÀ MỘT ĐIỀU KHÔNG DỄ DÀNG.

Nếu trong một team, hòa hợp được, thì việc khó đến đâu cũng thành và 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.

Bên cạnh đó các yếu tố như : so sánh, sự lười biếng, sự tham lam, sự áp đặt, sự nhiệt tình thái quá, sự bảo thủ có thể làm cho team tan giải thể rất nhanh.

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 thân ai không 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. Bạn cần 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 team hiểu được là sản phẩm không tốt hay chưa ổn là do công đoạn nào làm chưa tốt.

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 và 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ó hay hay không hay, nó cũ hay 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à hay.

Từ đó bạn sẽ dần dần từ một coder -> developer -> sau đó là kỹ sư phần mềm -> và tiến đến kiến trúc sư phần mềm

Phân tích và 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 và 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 đáo, để có thể marketing và 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 đề, chứ không phải là 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.

_________________________________________________________________

Pass Pham

 

One thought on “Lập Trình Viên Cần Học Những Gì.

  • 3 May, 2018 at 7:08 pm
    Permalink

    thanks you for sharing

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.