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

Vo Thanh Loc viết ngày 08/12/2017

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.

alt text

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.

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 Classification, Conceptual Modeling, Formal Analysis, System Requirement Specifications, Model 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 Styles, Architectural Structures and Viewpoints, Distribution of Components, Control and Handling of Events, Concurrency, Security, …

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ư: Concurrency, Middleware, Construction Methods for Distributed Software, Construction Methods for Heterogeneous Systems, Performance Analysis and Tuning, State-Based and Table-Driven Construction Techniques, …


Đăng ký newsletter từ Grokking newsletter.grokking.org để đọc các bài viết kỹ thuật hay hàng tuần. a

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Vo Thanh Loc

5 bài viết.
55 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
50 2
(Ảnh) Hồi xưa, có lần mình chở thằng bạn người Singapore sang Việt Nam chơi bằng xe máy ngay một bữa trời mưa. Cả con đường đều ngập nước, có chỗ ...
Vo Thanh Loc viết 4 tháng trước
50 2
White
14 0
(Ảnh) Một tổ chức phi lợi nhuận đến liên hệ bạn nhờ hỗ trợ tư vấn cho họ. Vì họ đã tồn tại rất lâu, nhưng bắt đầu gặp nhiều khó khăn vì lượng ngườ...
Vo Thanh Loc viết 3 tháng trước
14 0
White
4 0
Ở bài viết trước mình có đề cập một sơ đồ về những mảng kiến thức mà một Software Engineer cần biết. Các bạn tham khảo trước ở (Link). Trong bài v...
Vo Thanh Loc viết 3 tháng trước
4 0
Bài viết liên quan
White
1 1
Lập trình đôi (pair programming) là hình thức lập trình trong đó 2 người cùng hợp tác làm việc trên cùng màn hình (có thể khác bàn phím v.v.). Bài ...
Ngoc Dao viết gần 2 năm trước
1 1
White
5 1
Trong quyển sách Beyond Java, xuất bản vài năm trước có đoạn:Java has characteristics that many of us take for granted. You can find good Java deve...
Ngoc Dao viết gần 2 năm trước
5 1
White
3 0
Lập trình viên quá cố người Mỹ Phil Karlton có câu nổi tiếng: There are only two hard things in Computer Science: cache invalidation and naming th...
Ngoc Dao viết gần 2 năm trước
3 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
5 bài viết.
55 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!