Tìm hiểu về ngành công nghệ phần mềm (software engineering).

Đây là một chủ đề khá cũ và đã được thảo luận ở rất lâu trước đây, mình cũng từng đọc qua rất nhiều các bài viết, các bài thảo luận ngành công nghệ phần mềm này từ khi bắt đâu theo nghiệp công nghệ thông tin, bài viết này mình sẽ tập hợp và biên chỉnh lại để các bạn có thể hiểu rõ hơn về ngành công nghệ phần mềm này, và hi vọng có thể giúp ích gì đó cho các bạn sinh viên trong việc định hướng công việc của ngành này.


Phần mềm là gì?

Để có thể hiểu được ngành công nghệ phần mềm là gì? thì bạn cần phải hiểu trong tâm chính của ngành này "phần mềm" (software) là gì? Có lẽ các bạn cũng chẳng lạ lẫm gì với từ này khi mà ngày nay tai nước ta các thiết bị điện tử, tin học, máy vi tính, điện thoại, hầu nhừ đã có mặt ở khắp nơi trên nước ta, và các bạn đều nghe hoặc biết các tên gọi như phần mềm nghe nhạc, phần mềm xem phim, phần duyệt web, phần mềm karaoke,... ok nếu bạn đã biết các phần mềm này thì  bạn đã hiểu được phần mềm là gì dù rằng không để đưa ra khái miện hoặc giải thích được, tuy nhiên đôi lúc nhiều thứ chỉ cần chúng ta hiểu là được chả cần đi sâu vào làm gì :>>

Mình xin mạn phép đưa ra khái niệm "phần mềm là tập hợp các câu lệnh có hệ thống được lập trình viên viết bởi một ngôn ngữ lập trình nào đó, để giải quyết một vấn đề nào đó, để xử lý một việc gì đó, để điểu khiển một cái gì đó, để thao tác xử lý một điều gì đó." để hiểu rõ hơn bạn xem một số ví dụ bên dưới.


Là một tập hợp những câu lệnh được viết bằng một hoặc nhiều ngôn ngữ lập trình theo một trật tự xác định nhằm tự động thực hiện một số chức năng hoặc giải quyết một bài toán nào đó

Mở rông một chút phầm mềm (software) ở đây không có nghĩa là nó đi kèm với máy tính, hoặc điện thoại thông minh (smartphone) và nó chỉ tồn tại ở trên máy tính hoặc smartphone, mờ nó tồn tại trên mọi thiết bị điện thử, tin học, vi tính.

Lấy ví dụ là chiếc tivi lấy ti vi trắng đen hồi xư luôn cho chuẩn để chuyển đổi kênh thì  bạn phải sử sụng thiết bị điều khiển (remote) và việc remote có thể chuyển đổi kênh được thì cần phần có một phần mềm điều khiển để thực hiện việc đó.

Lấy ví dụ là chiếc điện thoại đập đá Nokia hồi xưa (đúng là thời thế thay đổi hồi xưa anh nào mà cầm được con này là mấy em mê tít, giờ thì...) chắc bạn chả bao giờ nghe nói tới từ phần mềm trên chiếc điện Nokia đen trắng này, tuy nhiên thực sự trên nó có rất nhiều software như là xem đồng hồ nè, xem lịch nè, đồng hồ đếm thời gian nè, game nè,...

Lấy thêm một ví dụ ngoài luôn khác là các cỗ máy điều khiển trong công nghiệm hay sản xuất, ví như máy in, cánh tay robo, hay các thiết bị gia dụng điên tử như là máy giặt, máy điều hòa, bếp điện từ,... thì bản thân chúng đều có tồn tại cái thứ được gọi là "phần mềm" bên trong nó.

Mình đã đưa ra một số ví dụ và chắc rằng bạn có thể thấy rằng phần mềm tương tác với phần cứng hoặc tồn tại trên phần, một số bạn cũng cho rằng như vây, điều này không sai và như trong khái miện mình đưa ra phần mềm có thể tương tác với bất cứ gì (anything) thông qua phần cứng, tuy nhiên nó còn có thể tương tác với chính nó tức là "phần mềm tương tác với phần mềm", để hiểu rõ khái niệm này bạn có thể cần phải có một chút kiến thức về lập trình.

Lấy ví dụ thế này bạn viết một chương trình nghe nhạc bằng 3 ngôn ngữ C++, C#, và Java và chúng đề hiển thị được chương trình trên thiết bị máy tính, tại sao chúng làm được như vậy khi chỉ thực hiện trên một máy tính, chẳng lẽ máy tính thông minh dữ vậy? thực tế để chạy được và hiển thị chương trình trên máy tính thì cúng đều phải chạy qua một trình biên dịch hay gọi phần mềm biên dịch cho dễ hiểu để chuyển đổi các lệnh lập trình thành mã máy (có thể hiểu phần mềm thực hiện thao tác làm cho máy tính hiểu các tập lệnh), thì lúc nay ta có thể hiểu phần mềm biên dịch này tương tác với phần mêm nghe nhạc mà ta đã viết để máy tính có thể hiểu được và hiển thị ra cho người dùng.

Trên thực tế phát biểu "phần mềm tương tác với phần mềm" tại rất nhiều ví như để sử các phần mềm nghe nhac, xem phim, duyệt web, chơi game, ta đều phải thực hiện nó trên một trong các phần mềm được gọi là hệ điều hành ví như Windows, Mac, Linux,... ok hiểu tới đây là dư xài rùi, thôi chúng ta sẽ tìm hiểu tiếp phần tiếp theo.

Ngành công nghệ phần mềm là gì?

Khi đã hiểu được phần mêm là gì? thì việc hiểu ngành công phần mềm là gì vô cùng đơn giản chỉ là là ngành (hay công việc) có liên quan tới phần mềm, một điều cần lưu lý là đừng hiểu nhầm ngành lập trình phần mềm là ngành công nghệ phần mềm nó chỉ chỉ một nhánh của ngành công nghệ phần mềm thôi, nói tóm lại thì ngành công nghệ phần mềm còn có nhiều nhánh (ngành con) khác hay gọi là các ngành công nghệ thành mềm cho dễ hiểu, theo mình tìm hiểu và biết thì hiện nay ngành công nghệ mềm có các nhánh chính chính sau:
  • Yêu cầu phần mềm: Phân tách, phân tích, đặc tả và phê chuẩn các yêu cầu đối với phần mềm.
  • Thiết kế phần mềm: Việc thiết kế phần mềm thường được hoàn thành bằng các công cụ Computer-Aided Software Engineering (CASE) và sử dụng các tiêu chuẩn định dạng, như Unified Modeling Language (UML).
  • Phát triển phần mềm: Xây dựng phần mềm thông qua việc dùng các ngôn ngữ lập trình.
  • Kiểm thử phần mềm
  • Bảo trì phần mềm: Các hệ thống phần mềm thường có nhiều vấn đề và cần được cải tiến trong một thời gian dài sau khi đã được hoàn tất vào lần đầu tiên. Lĩnh vực con này xem xét các vấn đề đó.
  • Quản lí cấu hình phần mềm: Bởi vì các hệ thống phần mềm rất phức tạp, cấu hình của chúng (ví dụ như kiểm soát phiên bản và mã nguồn) phải được quản lí bằng các phương pháp chuẩn và có cấu trúc.
  • Quản lí kĩ nghệ phần mềm: Quản lí hệ thống phần mềm vay mượn rất nhiều khái niệm từ quản lí dự án, nhưng có nhiều khác biệt nhỏ gặp trong phần mềm mà không gặp trong các ngành quản lí khác.
  • Quy trình phát triển phần mềm: Quy trình xây dựng phần mềm là điều tranh cãi giữa các nhà thực hành; một số quy trình nổi tiếng là Mô hình Thác nước, Mô hình Xoắn ốc, Phát triển Tăng tiến và Lặp, và Phát triển Linh hoạt.
  • Các công cụ kĩ thuật phần mềm: hình liên tới việc tìm hiểu các kỹ thuật hay công nghệ phần mềm.
  • Chất lượng phần mềm: cái này hình như liên quan tới việc kiểm tra chất lượng phần mềm nằm ở phái khách hàng.
Ok ngành này rất rộng mình thì không biết hết nổi nên chỉ copy và chỉnh lại một chút theo cách hiểu của mình thôi, tuy nhiên thì các nhánh trên cũng là rất rộng và cũng thường ít gặp trong thực tế, và trong đó còn các nhánh nhỏ nhỏ và nhỏ khác mà bạn có thể thưởng gặp, mình xin đưa một số nhánh quen thuộc sau:

STT Công việc Mô tả khái quát Yêu cầu/ Kỹ năng cần có
1 Lập trình viên Là những người "viết" nên các chương trình, phần mềm ứng dụng cho việc điều khiển các hệ thống máy móc cơ khí, xử lí các dữ liệu... như hệ thống điều khiển máy hàn, máy tiện, điều khiển camera, các phần mềm xử lý văn bản, hình ảnh, âm thanh... Bạn cần có những kĩ năng về các kĩ thuật Activex X, C#, Visual Basic, .Net hay Java... Thêm vào đó, bạn cũng cần phải có khả năng giải quyết và phân tích vấn đề, khả năng giao tiếp, làm việc theo nhóm cũng như làm việc độc lập.
2 Thiết kế web Công việc của chuyên viên thiết kế web là thiết kế website sao cho thân thiện, dễ dàng sử dụng, nhìn bắt mắt với các nút bấm, các banner, màu sắc các liên kết, độ đậm, nhạt của kiểu chữ... Được đào tạo chương trình thiết kế, có năng khiếu mỹ thuật, có khả năng sử dụng thành thạo các phần mềm đồ họa như Photoshop, Corel Draw, Flash, Dreamwave,... và có thêm kiến thức về lập trình web.
3 Phát triển web Tập hợp các yêu cầu kinh doanh, phát triển các chi tiết kĩ thuật cho các phần mềm ứng dụng cho web và giúp đỡ các chuyên gia quản lý trang web về kĩ thuật. Nắm rõ về Internet, các chương trình ứng dụng cho web cũng như chiến lược kinh doanh thương mại điện tử. Các kĩ năng về .Net, C#, Java cũng sẽ được đề cao.
4 Tester Là những người chuyên thử nghiệm, kiểm tra để tìm ra lỗi của các ứng dụng, phần mềm do các lập trình viên "viết" ra. Đây là một vị trí rất quan trọng trong một dự án viết ứng dụng, phần mềm bởi lẽ họ sẽ hoàn thiện các ứng dụng đó. Để làm được công việc này, bạn cũng cần phải được đào tạo bài bản trong các trường đại học và nắm chắc các kỹ thuật như một lập trình viên. Công việc khá nhẹ nhàng và phù hợp với nữ giới.
5 Xây dựng và quản lý dữ liệu Thiết kế các chương trình ứng dụng ví dụ giao diện sử dụng, giao dịch giữa khách/chủ trong toàn mạng và các bộ phần cấu thành hệ thống. Bạn cần cung cấp thông số kĩ thuật cho đội phát triển phần mềm, thiết kế, kiểm tra việc mã hoá. Cần có kiến thức về kĩ thuật, lên kế hoạch, điều phối và khả năng giao tiếp. Những kiến thức về DB2, các sản phẩm dữ liệu Orracle, XML, C+++ sẽ gây ấn tượng đến các nhà tuyển dụng.
6 Quản lý dự án Quản lý toàn bộ việc điều phối các dự án phát triển phần mềm ứng dựng công nghệ thông tin, từ khi lên kế hoạch đến quá trình thực hiện. Công việc cũng đòi hỏi lập mục tiêu dự án, các vấn đề được ưu tiên, ngân sách, thời hạn hoàn thành, lên kế hoạch cũng như đàm phán với những người giữ tiền đặt cọc dự án. Yêu cầu tối thiểu bạn cần phải có là bằng cử nhân về lĩnh vực công nghệ thông tin, bằng quản lý kinh doanh, kiến thức cơ bản về các chương trình ứng dụng. Bên cạnh đó, bạn cũng cần phải có kinh nghiệm trong việc quản lý dự án, sự giao tiếp đối với các thành viên trong đội nhóm...
7 Quản trị mạng Công việc của các chuyên viên quản trị và an ninh mạng là thiết kế, vận hành và theo dõi sát xao các hệ thống mạng an toàn và bảo mật, nắm được các kỹ thuật xâm nhập và các biện pháp phòng, chống tấn công của các hacker (tin tặc) hiệu quả. Thiết kế và duy trì hệ thống tường lửa hay nhận dạng và sửa chữa các lỗ hổng trên hệ thống mạng của đơn vị, triển khai và giám sát hệ thống phát hiện tấn công... Một chuyên viên an ninh mạng giỏi nghề thường lên kế hoạch bất ngờ tạo độ an toàn vững chắc nhằm ngăn chặn, phát hiện sự xâm nhập trái phép. Điều này đòi hỏi tư duy nhanh nhạy và sáng tạo rất cao.
8 Phát triển game (GD) GD không chỉ là vẽ đồ họa 2D, 3D mà còn làm quản lý dự án, phát triển ý tưởng, thiết kế kịch bản trò chơi, màn chơi, lập trình và người chuyên chơi để tìm lỗi của game. Bởi vậy, đây là một công việc rất giàu tính sáng tạo chứ không hề khô cứng như nhiều người lầm tưởng về những nghề liên quan đến máy móc. Đối với những GD chuyên thiết kế hình ảnh thì tư duy mỹ thuật là một điều rất quan trọng bởi lẽ hình ảnh của game đẹp hay xấu là phụ thuộc vào những chuyên viên thiết kế này. Ngoài ra, tư duy logic rất cần thiết cho những GD chuyên lập trình.
9 Kỹ thuật máy tính Nghiên cứu và thiết kế các bộ phận chức năng của máy tính, tham gia làm việc trong các dự án sản xuất các thiết bị máy tính cho các tập đoàn lớn trên thế giới như: Intel, IBM, Samsung, Nidec... Nắm vững các nguyên lý cơ bản và thực tiễn trong lĩnh vực kỹ thuật máy tính, đặc biệt là lĩnh vực thiết kế vi mạch.
10 SEO SEO là viết tắt tiếng Anh của thuật ngữ Search Engine Optimization (Tối ưu hóa công cụ tìm kiếm), là một quá trình làm nội dung trang web dễ dàng được các công cụ tìm kiếm tìm thấy, và hiển thị. Công việc tối ưu hoá website có thể hiểu cách khác là một tập hợp các phương pháp nhằm nâng cao thứ hạng của một website trong các trang kết quả của các công cụ tìm kiếm và có thể được coi là một tiểu lĩnh vực của tiếp thị qua công cụ tìm kiếm

Nên chọn ngành nào trong ngành công nghệ phần mềm?


Hôm nay bỗng dưng xuất thần viết một bài hoành tráng, đọc lại kể ra mình cũng biết nhiều dữ, nhưng thực sự lại không sâu, đây cũng là mộ trong những nguyên nhân mình thất bại trong ngành này, nên cũng chia sẻ một chút kinh nghiệm bản thân.

hồi đó thấy cái gì hay là bay do học thí dụ lúc đầu thây cài đặt lắp rắt máy hay quá bay dô học, học xong đi làm cài máy sửa máy dạo, rồi lại tự học Office, một thời gian rồi thấy quản trị mạng hay quá bay qua học tiếp, học quản trị mạng xong (có bằng hẳn hoi nha :)) học quản trị mạng xong thì thấy lập trình ứng dụng hay quá bay học lập trình (cũng tốt nghiệp đàng hoàng :)), lập trình ứng dụng rùi bữa thằng bạn nhờ hỗ trợ làm các chương trình thao tác với thiết bị bằng C và robot (lập trình điện tử thi robot com :)) thấy vui quá bay do vọc, vọc được thời gian phát hiện ra một điều điều chơi không nổi tốn tiền để mua thiết bị phần cứng vãi cả đạn rùi lại bỏ, tiếp theo lại thấy lập trình web hay quá bay tiếp qua học lập trình web, lập trình web xong rùi thấy nó xấu quá lại bay qua học tiếp đồ họa, thiết kế web, photoshop, AI, bây giò nhìn lại biết thì biết nhiều đó, làm thì cũng làm được đó, mà giờ có người hỏi lại bạn biết gì? hiểu sâu không? bạn nhớ gì không? thì không dám dấu chả biết, chả nhớ gì hết.

Tóm lại với kinh nghiệm đau thương thì mình có lời khuyên nho nhỏ cho các bạn mới vào ngày này, nếu bạn thích ngành này thì nó có một ma lực lôi kéo bạn tìm hiểu rất nhiều thứ kể cả đam mê, công việc hay tiền bạc tuy nhiên bạn cần xác định rõ con đường chính là gì.

Ví vụ bạn quyết đi theo JAVA thì bạn phải đi theo nó tới cùng, ở đây ý mình là bao gồm cả lý thuyết, thực hành, kỹ năng, công nghệ, nền tảng JAVA bạn phải học và hiểu càng sâu càng tốt, lấy ví dụ bản thân mình thế này là mình có thể viết chương trình bằng JAVA đấy, cũng có thể mình hiểu luôn cách mà JAVA hoạt động đó, nhưng nếu nó người nào đó hỏi mình một vấn đề JAVA thì mình không trả lời được, tuy rằng mình hiểu đấy nhưng không trả lời được, hoặc hỏi mình JAVA 6 và JAVA 7 khác nhau chỗ nào thì cũng bó tay luôn, hoặc nhưng một Framework(nền tảng) JAVA mới hoặc cũ thì cũng không biết luôn, hoặc sử dụng JAVA để làm web chẳng hạn trước giờ viết application không có viết web đâu mà biết viết, hoặc có thằng nào yêu cầu bạn viết game, hay đồ họa xử lý hình với JAVA chẳng hạn thì cũng không biết luôn, làm được JAVA trên điện toại không? cũng không nốt, tượng tự các ngôn ngữ khác cũng vậy.

Có thể bạn thấy nhảm tôi học JAVA Application thì tôi chỉ cầ biết nó thôi biết JAVA Web, JAVA Mobile để làm gì, biết các Framework JAVA khác để làm gì? Thì câu trả lời là để bạn trở thành chuyên viên JAVA ở các cấp độ cao hơn, từ đó bạn sẽ dễ thành công hơn, có được các công việc lập trình cao cấp cấp hơn nếu bạn muốn đi theo hướng lập trình viên chuyên nghiệp, hay thực tế là bạn sẽ có được mức lương cao tới mức mà bạn không tưởng :)), và không sợ thất nghiệp vì khi có mọi kiến thức, kỹ năng liên quan tới JAVA thì bạn có thể đáp ứng bất kỳ yêu cầu công việc nào liên quan JAVA để khỏi bị hỏi à anh biết JAVA Web không? không biết? À vậy chúng tôi rất tiếc :))

Tuy nhiên dù bạn xác định con đường nào thì khi đi theo con đường này thì bạn luôn phải nhớ chữ "HỌC" vì công nghệ thay đổi vù vù như JAVA 4 vèo cái lên JAVA 8, các ngành khác trong công nghệ phần mềm cũng vậy.

Lưu ý mình không nói các bạn không tìm hiểu về các công nghệ khác các nền tảng khác, tuy nhiên bạn nên xác định khi  mình biết thêm những thức khác thì nó có giúp ích được gì cho con đường mà bạn đã chọn không và không nên đi xa quá như trong bài hát "em đi xa anh quá, em đi luôn nhá..."

Thôi xin kết thúc tại đây cảm ơn các bạn đã chịu khó bỏ thời gian ra theo dõi bài viết của mình, bài này bỗng nhiên có cảm xúc quá nên viết hơi dài nhưng hay :)) một chút :))... hi vong bài này có thể giúp ích gì đó cho bạn.




Writer: +Bui Ngoc Son





No comments:

Post a Comment