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

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

Ở 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 ở đây.

Trong bài viết này sẽ 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 dựa theo SWEBOK.

alt text

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


Đăng ký newsletter từ Grokking newsletter.grokking.org để đọc các bài viết kỹ thuật hay hàng tuần từ nhiều nguồ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.
60 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
53 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 9 tháng trước
53 2
White
25 5
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 ...
Vo Thanh Loc viết 8 tháng trước
25 5
White
15 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 8 tháng trước
15 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 hơn 2 năm trước
1 1
White
32 6
Mình có một anh bạn người Pháp tên là Aurelien, anh này có một biệt tài đó là convert được màu RGB sang mã Hex chỉ bằng cách tính nhẩm. Phương phá...
Huy Trần viết 1 năm trước
32 6
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
5 bài viết.
60 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á!