Mục đích của kĩ nghệ phần mềm là thiết kế và phát triển phần mềm có chất lượng đáp ứng yêu cầu của khách hàng. Ngày nay kĩ sư phần mềm là việc làm "nóng nhất" trên thế giới và được cần ở mọi công ti vì nhiều công ti đang dựa trên công nghệ thông tin (CNTT) cho doanh nghiệp của họ và vì CNTT thay đổi nhanh chóng, họ cần người có thể điều chỉnh, cải tiến và giữ cho hệ thống CNTT của họ vận hành hiệu quả và hiệu lực.
Kĩ sư phần mềm thiết kế và phát triển nhiều kiểu phần mềm từ trò chơi máy tính tới ứng dụng doanh nghiệp; từ phần mềm kiểm soát máy bay tới phần mềm quản lí tuyến lắp ráp chế tạo. Bởi vì kĩ sư phần mềm bao giờ cũng làm việc trong tổ, sinh viên thường được đào tạo trong làm việc tổ ở năm thứ hai và thứ ba với các dự án nhỏ được phân công cho tổ thay vì cho cá nhân. Kĩ sư phần mềm hiểu rằng để xây dựng sản phẩm chất lượng, họ phải tuân theo qui trình được xác định, là sinh viên họ học về qui trình, vòng đời sớm ngay từ năm thứ nhất. Sinh viên biết chi tiết về mọi pha và cách những pha này làm việc cùng nhau bằng tiến hành kiểm điểm để chắc rằng phần mềm sẽ làm việc đúng.
Tại công việc, người kĩ sư phần mềm bao giờ cũng bắt đầu bằng việc phân tích nhu cầu của người dùng. Họ gặp người dùng sớm trong dự án để kiểm nghiệm hiểu biết của họ về những nhu cầu này và đó là lí do tại sao kĩ năng mềm như trao đổi và lắng nghe là rất quan trọng. Khi các yêu cầu được hiểu, họ bắt đầu kiến trúc hệ thống. Họ dùng biểu đồ hoàn cảnh và biểu đồ luồng dữ liệu để chỉ ra cách hệ thống làm việc; họ nhận diện các cấu phần then chốt của cả phần cứng và phần mềm để tối ưu hiệu năng hệ thống. Trong pha này, họ nhận diện mọi giao diện và xác định những trao đổi dữ liệu để chắc phần cứng và phần mềm làm việc tốt với nhau. Để làm việc tốt, người kĩ sư phần mềm phải có một số tri thức nền tảng về phần cứng tính toán nữa. Kiến trúc là công việc mức cao nơi hầu hết mọi thứ được tổ chức nhưng các chi tiết được thực hiện trong thiết kế. Đây là chỗ mọi cấu phần phần mềm được cân nhắc và các thuộc tính chất lượng được nhận diện. Trong qui trình này người kĩ sư phần mềm tạo ra lưu đồ, biểu đồ cũng như phát triển tập chi tiết các lệnh hay thuật toán để bảo cho máy tính điều cần làm. Sau khi thiết kế được thực hiện, người kĩ sư phần mềm bắt đầu thực hiện thiết kế của họ bằng việc viết các chương trình dùng các ngôn ngữ lập trình như C, C++, Java, Python hay Ruby. Họ cũng áp dụng các kĩ thuật như kiểm điểm thiết kế, giám định mã để chắc rằng công việc của họ có chất lượng cao nhất.
Kĩ sư phần mềm cũng cập nhật, kiểm thử, sửa đổi, và mở rộng chương trình thông tin hiện có. Họ thường dùng các công cụ phần mềm để tiến hành công việc của họ. Một số người dùng các công cụ kĩ nghệ phần mềm có máy tính trợ giúp (CASE) để tự động qui trình viết mã. Những công cụ này cho phép họ tập trung vào viết các phần duy nhất của chương trình. Họ cũng dùng các thư viện mã tái dụng cho các ứng dụng đặc thù. Cách tiếp cận này cho mã tốt hơn và nhất quán và tăng năng suất của họ bằng việc khử bỏ một số bước thường lệ.
Tôi thường nhận được các câu hỏi về khác biệt giữa chương trình Khoa học máy tính (CS) và Kĩ nghệ phần mềm (SWE). Về căn bản, cả hai chương trình này đều yêu cầu nền tảng trong ngôn ngữ lập trình và lí thuyết máy tính cơ sở. Ở nhiều trường, hai năm đầu là gần như nhau. Họ khác nhau trong sự hội tụ vào các chuyên môn. Chương trình Khoa học máy tính có xu hướng nhấn mạnh nhiều vào lí thuyết, cấu trúc dữ liệu, mô hình hoá, và thuật toán v.v. Tương phản lại, chương trình Kĩ nghệ phần mềm hội tụ nhiều vào khía cạnh thực hành, điều được cần trong công nghiệp như phân tích vấn đề, thiết kế phần mềm, kiểm thử phần mềm, chất lượng phần mềm, qui trình phần mềm, và quản lí dự án, v.v. Trong khi cả hai chương trình CS và SWE đều chủ trương làm việc tổ nhưng trong hầu hết chương trình CS, làm việc tổ chỉ được khuyến cáo nhưng trong SWE nó là yêu cầu. Gần như mọi chương trình SWE đều yêu cầu sinh viên phải làm dự án Capstone trong năm cuối của họ nơi sinh viên làm việc trên "dự án thực" được trao cho bởi công nghiệp.
Theo dữ liệu từ công nghiệp CNTT, quãng 75% kĩ sư phần mềm làm trong các công ti phần mềm như Microsoft, Google, Facebook, IBM, Oracle v.v. Quãng 15% làm việc cho cơ quan chính phủ và 10% làm việc như các nhà tư vấn hay nhà thầu độc lập. Trong các công ti nhỏ, các kĩ sư phần mềm làm nhiều thứ, từ gặp gỡ người dùng và khách hàng tới viết mã và kiểm thử. Trong các công ti lớn hơn, kĩ sư phần mềm thường được phân công cho những vai trò nào đó trong các dự án tuỳ theo kinh nghiệm của họ. Những vai trò này là người phân tích yêu cầu, kiến trúc sư, người thiết kế, người phát triển, người kiểm thử, người đảm bảo chất lượng, người quản lí cấu hình, và người quản lí dự án v.v.
Để làm việc như một kĩ sư phần mềm, sinh viên phải có ít nhất là bằng cử nhân từ đại học được công nhận trong hoặc Kĩ nghệ phần mềm hoặc Khoa học máy tính; phải có khả năng chứng tỏ kĩ năng trong lập trình cũng như tri thức về vòng đời phát triển phần mềm và công cụ phần mềm. Các kĩ năng mềm là rất quan trọng trong nghề này và ngoại ngữ là quan trọng để tiến xa hơn. Chẳng hạn ngày nay, nhiều dự án phần mềm lớn được phân bố toàn cầu dựa trên quan niệm có tên “Đi theo mặt trời” nơi việc phát triển được thực hiện 24 giờ và 7 ngày một tuần với các thành viên tổ đặt ở nhiều nước, có ngôn ngữ thứ hai như tiếng Anh là được yêu cầu để tham gia các tổ đó. Trong số mọi nghề với lĩnh vực công nghệ thông tin, kĩ sư phần mềm có lương cao nhất và nhiều phúc lợi đặc biệt hơn. Tưởng tượng rằng người kĩ sư làm việc cho Google mười lăm năm trước khi họ mới bắt đầu; hay làm cho Facebook năm năm trước; hay Instagram vài tháng trước khi bị mua. Ngày nay với hàng trăm công ti mới thành lập, cơ hội là vô hạn.
John Vũ
T3, 01/05/2012 - 06:59