Những kỹ năng toán học nào là cần thiết cho một Software engineer?

Mathematical Foundation.png

Hình trên tổng hợp những kiến thức nền về toán học mà một bạn Software Engineer nên biết.

Set, Relations, Functions

Lý thuyết tập hợp là một trong các khái niệm nền tảng của toán học. Việc hiểu đúng về lý thuyết tập hợp bao gồm cả khái niệm cũng như các loại công thức không những giúp các bạn vận dụng trong lập trình dùng cấu trúc dữ liệu dạng tập hợp, mà còn giúp các bạn hiểu đúng trong thiết kế database.

Lý thuyết về cơ sở dữ liệu quan hệ (Relational Database) được xây dựng dựa trên Lý thuyết về tập hợp đấy nhé.

Basic Logic

Logic mệnh đề (Propositional Logic) và Logic vị từ (Predicate Logic) cũng là hai loại kiến thức thường được vận dụng trong lập trình.

Ví dụ như cách chọn những hàm If-Else, cách thiết kế các điều kiện thoát của hàm, làm sao để biến những logic được mô tả bởi các bên Sales, Marketing thành các mệnh đề logic phù hợp là những ứng dụng của những kiến thức này.

Proof Techniques

Chủ đề này nghe có vẻ không cần thiết cho dân lập trình lắm. Nhưng giả sử bạn cần sinh 1 lượng lớn dữ liệu để làm demo cho bộ phận Sales, yêu cầu là bộ dữ liệu phải thỏa mãn tiêu chí X, Y, Z. Bạn sẽ chứng minh điều đó bằng cách nào?

Basics of Counting

Bạn viết một function có 3 tham số, mỗi tham số có 100 trường hợp xảy ra, trong đó có khoảng 20% trường hợp sẽ cho output không phù hợp. Bạn sẽ viết hàm này như thế nào? Việc chia nhỏ thành các hàm con dùng để filter các tham số liệu có giúp giảm số trường hợp cần xử lý hay không? Cần viết bao nhiêu test cases để cover hết function này? Việc hiểu đúng về việc “Counting” đôi khi sẽ giúp bạn nâng cao hiệu suất công việc với những tasks như thế này.

Graphs and Trees

Đối với cấu trúc dữ liệu và giải thuật thì lý thuyết về đồ thị và cây là nền tảng rồi. Và đối với dân Software Engineer, thì cấu trúc dữ liệu và giải thuật lại là một phần không thể thiếu.

Discrete Probability

Hệ thống của bạn có khả năng chịu tải tối đa là bao nhiêu? Với một lượng người dùng online mỗi ngày là 5000 thì tại một thời điểm, có bao nhiêu người online? Vậy thì API nào có khả năng chịu tải cao nhất, và hiện giờ có thể chịu được tải không? …

Làm việc với các hệ thống càng ngày càng lớn thì đôi lúc bạn không thể đưa ra những quyết định về mặt kỹ thuật dựa trên số lượng người dùng cụ thể, đo đếm được, mà phải dựa vào số lượng ước tính, xác suất xảy ra hành vi, …. Và để làm những việc này thì xác suất là một mảng kiến thức không thể thiếu.

Finite State Machines (FSM)

Bên cạnh ứng dụng khi xây dựng các Parser, tạo ra một ngôn ngữ lập trình mới, việc vận dụng máy trạng thái cũng sẽ giúp các bạn tổ chức chương trình của mình một cách khoa học hơn. Ví dụ như khi xây dựng một chương trình quản lý hồ sơ với nhiều trạng thái như hồ sơ mới, hồ sơ cần bổ sung thông tin, hồ sơ cần nhập liệu, hồ sơ cần review, hồ sơ cần chữ ký, … việc biểu diễn các trạng thái này dưới dạng FSM sẽ giúp logic của chương trình rõ ràng và dễ hiểu hơn rất nhiều.

Grammars

Grammar ở đây là ám chỉ văn phạm của các loại ngôn ngữ hình thức (formal language). Ví dụ như RegEx, ngôn ngữ Go Lang, SQL, …

Khi bạn cần xây dựng một ngôn ngữ script dùng để mô tả business rules để sử dụng trong phạm vi hệ thống ecommerce của bạn, thì những hiểu biết về cách xây dựng Grammars là một phần không thể thiếu.

Numerical Precision, Accuracy, and Errors

Lâu lâu khi lập trình, bạn sẽ gặp một vài con bug phát sinh do trong một chuỗi tính toán số liệu có một thông số đã bị làm tròn một cách không hợp lý. Ví dụ như giá trị đầu vào là 0.0034237.

Một bạn lập trình viên đã làm tròn thành 0.003 trong khi hệ thống lại yêu cầu độ chính xác là 4 chữ số.

Tùy vào hệ thống mà đòi hỏi độ chính xác đến mức nào. Nhưng việc hiểu rõ về độ chính xác, khoản lỗi, … sẽ giúp bạn quyết định được khi nào thì độ chính xác nên bao nhiêu chữ số, khi nào thì cần làm tròn, … một cách chính xác thay vì dựa vào … hên xui

Number Theory và Algebraic Structures

Đối với hai nhóm chủ đề này hơi thiên sâu về mặt lý thuyết toán, bản thân người viết cũng chưa đụng gì nhiều cần phải dùng đến những kiến thức này, trừ số nguyên tố nên chỉ liệt kê ra đây để các bạn có thể tìm hiểu sâu hơn.

Bài viết được viết dựa theo SWEBOK v3.0

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 )

Facebook photo

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

Connecting to %s