Một Software Engineer cần biết những “kiến thức nền tảng” gì? (p1)

Trong một bài viết gần đây của một bạn CTO chia sẻ về việc như thế nào là một Software Engineer giỏi, bạn có đề cập đến việc một software engineer giỏi thì cần phải có kỹ năng, đồng thời nắm vững kiến thức nền tảng. Đọc bài chia sẻ này ở đây để hiểu thêm.

Vậy, kiến thức nền tảng mà một bạn Software Engineer cần là những gì?

Dưới đây là một sơ đồ đơn giản mô tả những mảng kiến thức (Knowledge Areas) được tổng hợp bởi IEEE Computer Society, một tổ chức quy tụ những kỹ sư giàu kinh nghiệm làm việc trong ngành Software mà bạn có thể tham khảo.

Lưu ý: Bản thân Software Engineering là một ngành rất rộng và nhiều thay đổi, cập nhật liên tục. Nên những mảng kiến thức được liệt kê dưới đây, dù khá tổng quát, nhưng cũng sẽ không thể nào mô tả hết được một cách trọn vẹn tất cả những kiến thức hiện tại đang có trong ngành.

Đồng thời, những mảng kiến thức này cũng mang tinh khái quát hóa rất cao. Nên để viết một website, để làm một mobile app, bạn không nhất thiết phải nắm tất cả những mảng kiến thức trong này vẫn có thể làm tốt. Nhưng để định vị bản thân trở thành một software engineer chuyên nghiệp, hướng tới việc xây dựng những hệ thống software ngày càng hoàn thiện, chất lượng cao, bảo trì ổn, cũng như quy mô ngày càng lớn thì việc vận dụng những kiến thức nền tảng như thế này là cần thiết.

Kiến thức được sử dụng như thế nào, là tùy ở người đọc, người học. Hy vọng bài viết dưới đây sẽ giúp bạn có những thông tin cần thiết để tự quyết định con đường phát triển trở thành một Software Engineer giỏi trong tương lai.

Programming Languages

Rõ ràng, trừ khi bạn muốn viết phần mềm bằng mã máy, còn không thì bạn cần nắm vững ít nhất một ngôn ngữ lập trình bậc cao nào đó để có thể hiện thực ra thành những website / mobile / app / script / …

Một số ngôn ngữ lập trình phổ biến hiện nay có thể kể đến như C/C++, Java, Ruby, PHP, Python, Javascript, …

Kiến thức về Software Requirements

Software Requirements tập hợp những chủ đề (Topics) liên quan đến việc thu thập, đánh giá, phân tích, mô tả yêu cầu phần mềm (software requirements).

Dù công ty của bạn làm outsource với requirements được mô tả cụ thể và chi tiết từ đầu, hay công ty của bạn làm product, với requirements được mô tả khái quát và dần dần định hình sau mỗi vòng lặp phát triển (sprint) thì những topic này đều là cần thiết đối với bạn.

Một số topic trong mảng này có thể kể đến như: Requirements ClassificationConceptual ModelingFormal AnalysisSystem Requirement SpecificationsModel Validation, …

Kiến thức về Software Design

Software Design được định nghĩa là quá trình xác định kiến trúc (architecture), thành phần (components), giao diện (interfaces), và những yếu tố khác làm thành hệ thống phần mềm. Cũng giống như bạn hoàn toàn có thể xây một ngôi nhà nhỏ mà không cần một bản vẽ thiết kế nào, chỉ đơn thuần dựa trên kinh nghiệm của thợ xây, bạn hoàn toàn có thể xây dựng một website, một ứng dụng mobile đơn giản mà không cần phải “design” gì cả.

Nhưng rõ ràng, việc xây dựng như thế này là không hiệu quả. Khi gặp phải một yêu cầu xây dựng một hệ thống lớn, phức tạp hơn, nhiều components hơn, tương tác với nhiều third-party hơn, thì việc áp dụng một số kỹ thuật, phương pháp đã được chứng minh là đúng từ trước đó là hoàn toàn cần thiết.

Một số chủ đề con của mảng kiến thức về Software design mà bạn có thể tham khảo: Architectural StylesArchitectural Structures and ViewpointsDistribution of ComponentsControl and Handling of EventsConcurrencySecurity, …

Software Constructions

Thực tế khi làm software, giai đoạn gây hứng thú nhất chính là lúc bắt tay vào “code”, hiện thực hóa những yêu cầu, những ý tưởng trong đầu thành từng dòng lệnh cụ thể. Tuy nhiên, để code hiệu quả và sạch đẹp cũng có nhiều thứ bạn cần phải cân nhắc.

Mảng kiến thức về Software Constructions bao hàm một số quy tắc, kỹ thuật, … mà bạn có thể vận dụng trong quá trình hiện thực hóa phần mềm của mình như: ConcurrencyMiddlewareConstruction Methods for Distributed SoftwareConstruction Methods for Heterogeneous SystemsPerformance Analysis and TuningState-Based and Table-Driven Construction Techniques, …

(còn tiếp)

One thought on “Một Software Engineer cần biết những “kiến thức nền tảng” gì? (p1)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s