CS Foundation 101 (P1): CS Foundation là gì? 6 yếu tố bạn cần nắm vững là gì?

Theo thống kê, một năm Got It chỉ có thể tuyển khoảng 3% các ứng viên nộp CV đầu vào.

Điều khiến 90% các bạn apply chưa vượt qua được vòng Competency chủ yếu là sự thiếu hụt kiến thức về Computer Science Foundation (CS Foundation). Không chỉ có Got It, các tập đoàn công nghệ lớn trên thế giới và trong nước cũng đều kiểm tra kiến thức CS Foundation.

Rất nhiều ứng viên đã bỏ lỡ cơ hội của mình do CS Foundation không đủ vững
Rất nhiều ứng viên đã bỏ lỡ cơ hội của mình do CS Foundation không đủ vững

Để đồng hành cùng các bạn sinh viên công nghệ thông tin trong quá trình phát triển nghề nghiệp trong ngành IT (công nghệ thông tin), Got It đã tổng hợp các kiến thức quan trọng về CS Foundation trong Series CS Foundation 101. Series gồm ba bài viết, với mong muốn giúp các bạn nắm rõ về: 

CS Blog 1: Khái niệm cơ bản và các thành phần của CS Foundation

CS Blog 2: Các nguồn tài liệu, nguồn học giúp bạn nâng cao vốn kiến thức về CS Foundation 

CS Blog 3: Chia sẻ cách ghi điểm trong vòng phỏng vấn hỏi về CS Foundation

Các bài blog về CS Foundation được xây dựng và chăm chút bởi các Engineer của Got It Việt Nam. Nên đừng bỏ lỡ series này của chúng mình nhé!

Lịch đăng bài CS Foundation trong series CS Foundation 101 của Got It
Lịch đăng bài CS Foundation trong series CS Foundation 101 của Got It

Ở bài blog CS Foundation 1 hôm nay, các Engineer của Got It sẽ chia sẻ tới bạn những điểm cơ bản về CS Foundation. Sau bài viết, bạn sẽ nhận được câu trả lời cho ba câu hỏi quan trọng: 

  • CS Foundation là gì? 
  • Tại sao các công ty lại yêu cầu bạn nắm vững CS Foundation? 
  • Bạn cần lưu ý ôn tập những thành phần nào trong CS Foundation? 

Mong rằng với những ví dụ minh hoạ cụ thể, thực tế, dựa trên kinh nghiệm của các Engineer chúng mình, các kiến thức về CS Foundation sẽ không còn trừu tượng và khô khan với bạn. 

1. CS Foundation là gì?

1.1. Hiểu về CS Foundation

Nếu bạn tra từ điển Britannica về định nghĩa của Computer Science, bạn sẽ nhận được kết quả:

“Computer science, the study of computers and computing, including their theoretical and algorithmic foundations, hardware and software, and their uses for processing information.”

Britannica, “Computer Science”

Như vậy, hiểu đơn giản, Computer Science (CS), hay dịch tiếng Việt là khoa học máy tính, là ngành học về máy tính và điện toán, xoay quanh các kiến thức nền tảng, phần cứng, phần mềm, và ứng dụng của ngành vào việc xử lý thông tin.

Còn CS Foundation chính là kiến thức nền tảng của ngành khoa học máy tính.

CS Foundation chính là kiến thức nền tảng của ngành khoa học máy tính
CS Foundation chính là kiến thức nền tảng của ngành khoa học máy tính

Để giúp bạn tưởng tượng rõ hơn về CS Foundation, Got It xin đưa ra hai ví dụ so sánh.

Đầu tiên, nếu ngành Computer Science là một ngôi nhà, thì CS Foundation có thể được coi là móng nhà. Móng nhà càng vững chắc thì bạn càng dễ xây tầng cao cho ngôi nhà, hay sắp xếp đồ đạc, chạy nhảy trong ngôi nhà mà không lo sẽ có lún hay hỏng hóc. 

CS Foundation chính là kiến thức nền tảng của ngành khoa học máy tính
CS Foundation cũng giống như móng căn nhà mơ ước, giúp các Engineer xây dựng con đường sự nghiệp tương lai

Ví dụ thứ hai giúp bạn hiểu về CS Foundation là khi so sánh CS với âm nhạc. Trong ngành âm nhạc, những khái niệm nhạc lý căn bản như phách, nốt, hợp âm, số chỉ nhịp, cung, hoá biểu là những kiến thức rất cơ bản cần thiết mà bất cứ ai trong lĩnh vực này cũng cần nắm chắc.

Từ ca sĩ hát nhạc thính phòng, đến ca sĩ hát nhạc Indie, từ nhạc sĩ cho đến người làm nhạc điện tử, nếu thiếu đi những nền móng quan trọng đó, chắc chắn họ sẽ không thể làm nghề được. Với CS cũng vậy, trước khi thực sự trở thành một Software Engineer xuất sắc, điều đầu tiên bạn cần học và nắm chắc chính là CS Foundation.

1.2. Các yếu tố trong CS Foundation

Các chương trình học về Computer Science ở các đại học nổi tiếng về công nghệ như MIT, Harvard, hay California Institute of Technology (Caltech) đều có các môn về CS Foundation. Tuy nhiên, môn học nào là bắt buộc, môn học nào không, phụ thuộc vào chương trình giảng dạy của từng trường khác nhau. 

Trong quá trình lên câu hỏi phỏng vấn và dựa trên kinh nghiệm làm việc, Got It đã tổng hợp sáu yếu tố trong CS Foundation mà chúng mình nhận định là bạn cần nắm vững để áp dụng vào công việc. Sáu yếu tố đó bao gồm: Ngôn ngữ lập trình (Programming Languages), Lập trình hướng đối tượng (Object-Oriented Programming), Cấu trúc dữ liệu và Giải thuật (Data Structures & Algorithms), Hệ điều hành (Operating Systems), Mạng máy tính (Networking) và Cơ sở dữ liệu (Databases).

CS Foundation chính là kiến thức nền tảng của ngành khoa học máy tính
CS Foundation có 6 thành phần mà bạn cần nắm chắc

Các yếu tố này có sự liên kết chặt chẽ, giúp bạn có bệ phóng vững chắc để có thể tiến những bước xa hơn với ngành khoa học máy tính. 

2. Tại sao cần nắm vững CS Foundation?

Tuy nhiên, nếu chỉ đọc những so sánh CS Foundation với những hình tượng như “nền móng ngôi nhà” hay “nhạc lý”, bạn có thể vẫn chưa thực sự hiểu về tầm quan trọng của CS Foundation. Tại sao bạn cần hiểu sâu và vận dụng được cả sáu yếu tố? Các yếu tố này liệu có hỗ trợ con đường sự nghiệp của bạn, hay chỉ là những lý thuyết sách vở, thiếu thực tế?

2.1. CS Foundation trong công việc cơ bản của một Software Engineer

Ngành IT đang phát triển ngày một mạnh mẽ. Tuy nhiên, dù có làm ở mảng nào của IT thì công việc của bạn vẫn xoay quanh việc xây dựng các hệ thống nhằm giải quyết một bài toán thị trường đặt ra hay giải quyết pain point (điểm đau) của khách hàng.

CS Foundation chính là kiến thức nền tảng của ngành khoa học máy tính
CS Foundation đóng vai trò quan trọng trong công việc của Software Engineer

Để hoàn thành được nhiệm vụ đó, dù làm ở vị trí nào (Front-end, Back-end, hay DevOps,…), bạn cũng sẽ phải sử dụng đến CS Foundation trong công việc của mình. Ví dụ:

  • Lập trình, cài đặt các chức năng của chương trình: Đây thường là công việc chính của Software Engineer, nơi mà các kiến thức liên quan đến ngôn ngữ lập trình, cấu trúc dữ liệu và giải thuật được sử dụng rất nhiều.
  • Lưu trữ dữ liệu: Thông thường, các chương trình sẽ cần lưu trữ dữ liệu nhằm phục vụ các tác vụ liên quan. Để làm tốt được phần này, cần am hiểu các kiến thức về cơ sở dữ liệu, từ đó lựa chọn loại cơ sở dữ liệu, đưa ra cách tổ chức, thiết kế phù hợp để phục vụ cho việc truy xuất và xử lý dữ liệu hiệu quả. 
  • Giao tiếp giữa các thành phần trong ứng dụng: Một chương trình có thể sẽ cần giao tiếp với các chương trình/service khác hoặc các thành phần (component) nhỏ trong chương trình đó giao tiếp với nhau. Từ đó phát sinh các vấn đề liên quan đến networking.
  • Triển khai (deploy) sản phẩm: Sau khi một chương trình được hoàn tất ta sẽ cần triển khai lên server hoặc cài đặt trên máy của người dùng. Tại đây, cần quan tâm tới các kiến thức liên quan tới hệ điều hành, cấu hình phần cứng để cài đặt và vận hành chương trình một cách trơn tru.
Các Engineer của Got It cũng phải vận dụng linh hoạt các kiến thức CS trong xây dựng sản phẩm

Ngoài ra, các Engineer sẽ phải vận dụng linh hoạt các kiến thức thuộc về CS Foundation ở một số đầu việc.

Ví dụ khi lập trình, chúng ta sẽ cần quan tâm tới cơ sở dữ liệu mình sử dụng là gì để thực hiện các kỹ thuật truy vấn, xử lý dữ liệu phù hợp. Hay trong quá trình thiết kế hệ thống chúng ta sẽ cần đưa ra nhiều quyết định quan trọng như lựa chọn ngôn ngữ lập trình, công nghệ, lựa chọn và thiết kế cơ sở dữ liệu, cách triển khai,…

Do đó, với một CS Foundation vững chắc, bạn sẽ làm tốt phần việc của mình, đồng thời dễ dàng giao tiếp với các team khác hơn, tạo ra hiệu quả và chất lượng cao cho công việc.

2.2. CS Foundation trong nhiệm vụ giải quyết các bài toán phức tạp

Trước khi bước vào chia sẻ sâu hơn về nội dung này, chúng mình muốn chia sẻ với bạn một câu chuyện của team Engineering ở Got It. 

Gần đây, bằng việc vận dụng tốt các kiến thức CS Foundation, chúng mình đã giải quyết hiệu quả một  bài toán liên quan đến việc nhiều người dùng sử dụng chung một tài khoản tại cùng một thời điểm. Đây là một bài toán rất cổ điển trong việc quản lý các tài nguyên sử dụng chung.

2.2.1. Ví dụ về việc áp dụng CS Foundation

Với Excelchat của Got It – sản phẩm giúp kết nối người dùng với các chuyên gia để giải quyết những khó khăn khi làm việc với Excel. Người dùng có thể mua gói cá nhân hoặc gói doanh nghiệp để sử dụng dịch vụ. Với gói doanh nghiệp, một tài khoản có thể có nhiều thành viên tuy nhiên tất cả các thành viên đều sử dụng chung một tài khoản để kết nối với các chuyên gia.

Do vậy, khi tài khoản của doanh nghiệp chỉ còn lại duy nhất một lượt đăng câu hỏi trên hệ thống, nếu hai hay nhiều thành viên của tài khoản đó cùng truy cập và sử dụng sản phẩm một lúc thì chỉ một trong các thành viên có thể đăng câu hỏi thành công, những thành viên còn lại sẽ nhận được thông báo lỗi do số dư không đủ.

Để giải quyết việc này, các kỹ sư của team đã sử dụng các kiến thức foundation liên quan đến lockrace condition để đưa ra giải pháp. Đồng thời, trong quá trình thảo luận team cũng thấy trước được các vấn đề liên quan tới deadlock một tình trạng rất dễ gặp phải khi xử lý race condition nên cũng đã có phương án xử lý phù hợp.

2.2.2. CS Foundation trong các công việc phức tạp

Có thể thấy, việc xử lý các công việc cơ bản của một Engineer như xây dựng ứng dụng, xây dựng web đã cần CS Foundation, thì các nhiệm vụ giải quyết các bài toán phức tạp, đặc biệt là các vấn đề phát sinh sau khi dịch vụ được nhiều người dùng sử dụng lại càng cần sự chắc chắn về CS Foundation. 

Bên cạnh đó, ngoài các Software Engineer lập trình sản phẩm, các DevOps Engineer cũng cần sử dụng CS Foundation trong việc tinh chỉnh hệ thống, giúp hệ thống hoạt động tối ưu nhất.

CS Foundation chính là kiến thức nền tảng của ngành khoa học máy tính
Đội ngũ Engineer Got It luôn phải giải các bài toán phát sinh sau khi người dùng sử dụng sản phẩm

Do vậy, không chỉ cần nắm chắc CS Foundation để làm một sản phẩm, mà các Engineer chúng mình còn phải đào sâu, hiểu bản chất của CS Foundation để hoàn thiện, nâng cao chất lượng sản phẩm, khiến sản phẩm có thể phục vụ số lượng người dùng lớn.

Thử nghĩ đến khi bạn chọn lựa giữa thìa và dĩa, vì hiểu cách hoạt động của chúng, nên bạn có thể dễ dàng lựa chọn dụng cụ phù hợp cho từng món ăn. Ví dụ, bạn sẽ dùng thìa để ăn cháo, hay dĩa để ăn pasta, chứ không làm ngược lại.

Với các công việc của Engineer cũng vậy, chỉ khi bạn hiểu sâu các kiến thức nền tảng, ví dụ như kết cấu lưu trữ trong bộ nhớ (memory) của array và linked list, bạn mới lựa chọn được cách tiếp cận phù hợp và hiệu quả cho từng vấn đề nhất định. 

Engineer cần sử dụng nhiều kiến thức CS Foundation trong công việc
Engineer cần sử dụng nhiều kiến thức CS Foundation trong công việc

Qua hai điểm chính nêu trên, bạn có thể thấy CS Foundation đóng vai trò cực kỳ quan trọng trong công việc của các Engineer. Từ các công việc thường ngày như xây dựng giao diện người dùng, lập trình các tác vụ của chương trình,.. đến các công việc cần chuyên môn phức tạp hơn như là tối ưu hoá sản phẩm, giải quyết các vấn đề phát sinh hay nâng cao trải nghiệm người dùng, bạn đều cần sử dụng CS Foundation. 

3. CS foundation gồm những thành phần nào?

3.1. Ngôn ngữ lập trình

Ngôn ngữ lập trình là ngôn ngữ bao gồm tập hợp các chỉ dẫn để con người sử dụng trong việc triển khai các thuật toán phục vụ mục đích tương tác với máy tính.

Trong lần đầu tiếp cận ngành khoa học máy tính, ngôn ngữ lập trình luôn là một trong số những khái niệm cơ bản chúng ta cần nắm rõ. Các ngôn ngữ lập trình ra đời cho phép chuyển đổi ngôn ngữ con người sang ngôn ngữ máy, việc tương tác với máy tính nhờ đó đã trở nên dễ dàng hơn.

Ngôn ngữ lập trình có thể chia thành 2 loại: ngôn ngữ lập trình bậc thấp (gần với ngôn ngữ máy) và ngôn ngữ lập trình bậc cao. Lưu ý rằng, mỗi ngôn ngữ được thiết kế để tạo điều kiện giải quyết các vấn đề mà ngôn ngữ đó hướng tới. Do đó, một ngôn ngữ có thể tiện lợi để phát triển loại phần mềm này nhưng lại khó dùng để phát triển loại phần mềm khác.

Có rất nhiều ngôn ngữ lập trình dành cho từng lựa chọn nghề nghiệp khác nhau. https://www.fullstackacademy.com/blog/nine-best-programming-languages-to-learn
Có rất nhiều ngôn ngữ lập trình dành cho từng lựa chọn nghề nghiệp khác nhau. Source: Fullstackacademy

Ở Got It, chúng mình sử dụng chủ yếu hai ngôn ngữ là Python và JavaScript. Đây cũng là hai ngôn ngữ có nhu cầu tuyển dụng cao nhất hiện nay. Fun fact nhỏ là các vị trí non-tech ở Got It cũng yêu cầu học và thi lấy chứng chỉ về Python. Từ đó, tất cả các Got It-ians đều có kiến thức cơ bản về lập trình, hiểu được sản phẩm cũng như công việc của đội xây dựng sản phẩm.

3.2. Cấu trúc dữ liệu và giải thuật

Nói một cách ngắn gọn, cấu trúc dữ liệu (data structures) là các cách khác nhau để lưu dữ liệu trên máy tính. 

Giải thuật (algorithms) là một quy trình gồm các bước cụ thể nhằm đạt được một kết quả nào đó.

Giải thuật tốt thường được đánh giá dựa trên thời gian (time complexity) và bộ nhớ (space complexity).

Dữ liệu xuất hiện ở khắp mọi nơi
Dữ liệu xuất hiện ở khắp mọi nơi

Vậy tại sao dữ liệu lại cần được lưu trữ theo nhiều cách? Và tại sao lại cần giải thuật? Một ví dụ điển hình giúp bạn hiểu về vai trò của cấu trúc dữ liệu và giải thuật là danh sách số điện thoại. 

Giả sử tên trong sổ được lưu ngẫu nhiên và cần 10 giây để đọc một trang. Nếu quyển sổ có 10 nghìn trang, để tìm được số điện thoại theo tên, thời gian tối đa là 100 nghìn giây ~ gần 30 tiếng.

Cách tốt ưu hơn để lưu trữ danh sách này là sắp xếp tên theo thứ tự alphabet. Khi đó, bạn có thể tìm số điện thoại của Willie bằng cách:

  • Mở đến giữa sổ và xem các tên ở trang đó.
  • Nếu tên Willie có trong trang đó, quá trình kết thúc.
  • Nếu tên ở trang đó đứng trước Willie (ví dụ: Sammie), kết quả sẽ nằm ở nửa sau sổ. Nếu đứng sau, kết quả nằm ở nửa trước sổ.
  • Coi nửa quyển sổ mà bạn giới hạn được là 1 quyển sổ và lặp lại quá trình trên.

Như vậy “quyển sổ” sẽ nhỏ dần từ 10000 trang → 5000 → 2500 → 1250 → 625 → 313 → 157 → 79 → 40 → 20 trang. Nếu mỗi thao tác mất 20s thì bạn cũng chỉ mất vài phút, nhanh đáng kinh ngạc so với 30 tiếng ban đầu.

Dữ liệu xuất hiện ở khắp mọi nơi
Mỗi cách chọn cấu trúc dữ liệu sẽ phù hợp với từng bài toán khác nhau

Như vậy, việc lưu tên theo thứ tự nhất định là một cách chọn cấu trúc dữ liệu (ở ví dụ này là sorted array), và cách tổ chức này cho phép ta áp dụng một giải thuật để đạt được mục đích tìm kiếm (giải thuật được sử dụng là binary search).

Vậy, nếu không có cấu trúc dữ liệu và giải thuật, bạn chỉ giải các bài toán/giải quyết vấn đề đặt ra không theo chiến thuật cụ thể nào, thì sẽ gây tốn tài nguyên không cần thiết cho hệ thống.

Lưu ý: Cấu trúc dữ liệu và Giải thuật là các khái niệm lý thuyết, do đó, bạn có thể triển khai trên bất kỳ ngôn ngữ lập trình nào.

3.3. Lập trình hướng đối tượng

Sơ đồ minh hoạ về lập trình hướng đối tượng
Sơ đồ minh hoạ về lập trình hướng đối tượng

Hiểu rõ cốt lõi của lập trình hướng đối tượng luôn là thách thức lớn đối với những người bắt đầu học lập trình. Bạn có thể tự hỏi, tại sao phải sử dụng lập trình hướng đối tượng? 

Một trong các cách tiếp cận hay được nhiều bạn sinh viên sử dụng là Procedural Programming (PP). Phương pháp lập trình này yêu cầu bạn chia nhỏ các vấn đề lớn thành các phần nhỏ và giải quyết chúng bằng các function (hàm) riêng biệt.

Khác với PP, cách tiếp cận OOP, cho phép bạn tổ chức chương trình dưới dạng các đối tượng bao gồm dữ liệu và hành vi của đối tượng đó, chứ không phải các hàm. Chúng mình sẽ minh hoạ rõ hơn về các điểm mạnh của OOP qua ví dụ dưới đây.  

Giả sử, trong chương trình về những chiếc xe hơi này, bạn sử dụng cách tiếp cận PP và có sẵn hai biến là xe con và xe bảy chỗ. Khi chương trình mở rộng nội dung, yêu cầu thêm hai biến: xe đua và xe limousine, bạn sẽ phải làm khá nhiều việc, bao gồm: định nghĩa lại từ đầu và viết code mới cho hai biến này.

Đây là lúc cách tiếp cận OOP giúp bạn tiết kiệm thời gian. Thực tế, mỗi loại xe, kể cả như xe bốn chỗ, xe bảy chỗ,… thì đều có bản chất là xe (car). Vậy, khi sử dụng OOP, bạn định nghĩa một lớp cha – Car duy nhất.

Có rất nhiều các loại xe khác nhau, nhưng chúng đều có những điểm chung nhất định
Có rất nhiều các loại xe khác nhau, nhưng chúng đều có những điểm chung nhất định

Từ đó, khi mở rộng phần mềm, bạn chỉ cần thêm những lớp con (RaceCar, LimousineCar) và các lớp con này sẽ có chung những tính chất của lớp cha (chiếc xe). Đồng thời, bạn vẫn có thể thêm những đặc tính đặc trưng cho các lớp con. Quan trọng hơn cả, khi bạn viết code mới để thay đổi phần đặc tính chung, tự động tất cả những lớp con sẽ được kế thừa phần code mới đó.

Nhờ tính hiệu quả của mình, lập trình hướng đối tượng ngày càng được sử dụng nhiều hơn trong môi trường làm việc của các Engineer.

3.4. Cơ sở dữ liệu

Cơ sở dữ liệu là tập hợp dữ liệu được cấu trúc phục vụ cho việc lưu trữ, truy vấn, sửa đổi, xóa thông tin.

Trong thời đại bùng nổ thông tin hiện nay, cơ sở dữ liệu đang khẳng định vị thế của nó hơn bao giờ hết. Không chỉ đóng vai trò quan trọng trong thế giới khoa học máy tính, cơ sở dữ liệu là chìa khóa thành công của doanh nghiệp. Chúng ta sử dụng và tương tác với cơ sở dữ liệu ở khắp mọi nơi: sử dụng mạng xã hội, mua vé máy bay, đồ ăn ở siêu thị, đọc blog của Got It,..

Một ví dụ về hệ thống cơ sở dữ liệu đơn giản (Database System) chính là blog của Got It. Khi bạn đang đọc đến đây, bạn chính là một người dùng của hệ thống, bạn đã gửi yêu cầu đến hệ thống để lấy được nội dung. Thông qua hệ quản trị cơ sở dữ liệu (Database Management System), hệ thống lấy được nội dung bài viết từ cơ sở dữ liệu (đã được thêm vào cơ sở dữ liệu từ trước đó) rồi hiển thị nội dung cho bạn.

Got It blog cũng là một ví dụ của hệ thống cơ sở dữ liệu đơn giản
Got It blog cũng là một ví dụ của hệ thống cơ sở dữ liệu đơn giản

Tuy nhiên, khi lượng dữ liệu lớn hơn và bao gồm nhiều loại dữ liệu hơn, việc thiết kế và quản lý cơ sở dữ liệu trở nên phức tạp, yêu cầu chúng ta phải có kiến thức sâu hơn về cơ sở dữ liệu.

Facebook không phải là mạng xã hội đầu tiên và duy nhất, tuy nhiên đây là mạng xã hội có nhiều người dùng nhất hiện nay. Một trong những điều khiến Facebook thành công là do cách lưu trữ và xử lý dữ liệu của họ với khả năng đáp ứng nhu cầu của hàng tỷ người dùng.

3.5. Mạng máy tính

Networking là nhánh của Computer Science để quản lý việc trao đổi thông tin giữa các máy tính. 

Lấy ví dụ trong giao tiếp của con người. Để hai người có thể nói chuyện hiệu quả, họ phải có khả năng nghe và nói của chung một ngôn ngữ. Nếu một người không nghe rõ, họ có thể yêu cầu người còn lại nhắc lại thông tin. Ngoài ra, chúng ta cũng có những cách nhất định để bắt đầu, duy trì và kết thúc cuộc trò chuyện.

Tóm lại, con người phải tuân theo một loạt các quy tắc để giao tiếp hiệu quả. Máy tính cũng tương tự như vậy. Một bộ quy tắc chuẩn được định nghĩa và tuân thủ chặt chẽ bởi các máy tính nhằm mục đích liên lạc được gọi là giao thức mạng (network protocol). Đây chính là một trong những khái niệm quan trọng nhất của môn Networking.

Một network đơn giản gồm 5 thiết bị kết nối với nhau và với Internet
Một network đơn giản gồm 5 thiết bị kết nối với nhau và với Internet

Để bạn không cảm thấy quá mông lung, chúng mình xin đưa ra một ví dụ điển hình về sự cần thiết của Networking trong công việc như sau.

Khi chúng ta vận chuyển dữ liệu thông qua Internet, có 2 giao thức (protocols) chính là UDP và TCP:

  • TCP là giao thức có cơ chế liên lạc 2 chiều giữa người cung cấp và người nhận, đảm bảo được:
    • Thông tin không bị thất lạc
    • Thông tin giữ đúng được thứ tự khi đến tay người nhận
  • Ngược lại, giao thức UDP không có các cơ chế này, nhưng nhanh và hiệu quả hơn.
Sự khác biệt giữa TCP và UDP. Source: Freecodecamp.org
Sự khác biệt giữa TCP và UDP. Source: Freecodecamp.org

Vậy với sản phẩm streaming phim như Netflix, sẽ có một số bài toán thường gặp như: làm thế nào để video và audio chạy mượt mà, hay tự động điều chỉnh độ phân giải thông qua việc giám sát lượng băng thông giữa người dùng và Netflix.

Để giải quyết những mối lo ấy, các software engineer khi phát triển Netflix phải có kiến thức về networking để lựa chọn TCP làm giao thức chính, giúp đảm bảo UX tốt cho người dùng.

3.6. Hệ điều hành

Hệ điều hành là cầu nối giữa phần mềm và phần cứng trên máy tính của bạn. 

Hầu hết thời gian khi các chương trình máy tính chạy, tất cả chúng đều cần truy cập vào những tài nguyên dùng chung như bộ xử lý trung tâm, bộ nhớ và nơi lưu trữ. Hệ điều hành điều phối tất cả những điều này để đảm bảo mỗi chương trình đều có được tài nguyên cần thiết và đảm bảo hệ thống chạy mượt mà.

Có kiến thức về hệ điều hành là điều tối quan trọng và cực kì cần thiết để trở thành một lập trình viên chuyên nghiệp. Việc bạn hiểu rõ các nguyên tắc cơ bản sẽ khiến bạn hiểu rõ cấu trúc và các luồng hoạt động của chương trình.

Ở Got It, chúng mình phải xử lý những bài toán tối ưu hệ thống, khi source code (mã nguồn) không có lỗi nhưng performance (hiệu quả vận hành) lại không đạt được như kỳ vọng. 

Có kiến thức về hệ điều hành là điều tối quan trọng để trở thành lập trình viên chuyên nghiệp
Có kiến thức về hệ điều hành là điều tối quan trọng để trở thành lập trình viên chuyên nghiệp

Lúc này để tìm ra nguyên nhân tận gốc của vấn đề, vì hệ thống rất phức tạp với nhiều thành phần, team đã phải “quay ngược thời gian”, bóc tách từng lớp và đặt rất nhiều câu hỏi.

  • Chương trình liệu đã tận dụng được hết khả năng xử lý đa luồng của hệ điều hành?
  • Bộ nhớ được cấp phát cho từng thành phần liệu có đủ hay bị thiếu?
  • Việc đọc ghi dữ liệu ở file ảnh hưởng đến hiệu năng như thế nào và cần làm gì để giảm thời gian của hệ thống dành cho những tác vụ như thế này?
  • Các vấn đề về concurrency, mutual exclusion, deadlock liệu có xuất hiện?

Rõ ràng, có những kiến thức cơ sở về việc chúng ta đang làm sẽ giúp chúng ta tự tin hơn khi đối đầu với những vấn đề khó khăn.

4. Lời kết

Như vậy, bạn đã cùng Got It chúng mình tìm hiểu về định nghĩa CS Foundation, tầm quan trọng của CS Foundation trong công việc của Engineer cũng như sáu yếu tố quan trọng trong CS Foundation. CS Foundation có thể khô khan, nhưng là nền móng không thể thiếu giúp bạn phát triển trong ngành IT. 

Mong rằng các chia sẻ trên đây đã giúp bạn bớt “ngần ngại” khi học ôn CS Foundation. Nếu quan tâm đến Series CS Foundation của Got It, hãy subscribe blog ngay để nhận thông báo mới nhất về các bài viết của chúng mình. Hẹn gặp các bạn trong bài viết tới!   

Người viết: Các Engineer Team Pro – Got It Vietnam (Nguyễn Phú Kế, Nguyễn Ngọc Hải, Nguyễn Việt Hưng, Khương Lê Trung Hiếu, Khúc Thuỳ Trang, Nguyễn Tiến Trường, Lê Hải Dương)

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

https://vn.got-it.ai/blog/wp-content/uploads/2021/04/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
May 03, 2021
Share this post to:
Tags:
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback
CS Foundation 101 (P3): Làm thế nào để ghi điểm trong vòng phỏng vấn Competency tại Got It? - Blog | Got It AI
7 days ago

[…] phần 1 và phần 2 của series CS Foundation 101, bạn đã biết được các khái niệm, sáu […]

Các bài viết liên quan
CS Foundation 101 (P3): Làm thế nào để ghi điểm trong vòng phỏng vấn Competency tại Got It?

CS Foundation 101 (P3): Làm thế nào để ghi điểm trong vòng phỏng vấn Competency tại Got It?

Sau phần 1 và phần 2 của series CS Foundation 101, bạn đã biết được các khái niệm, sáu yếu tố quan trọng trong CS Foundation, cũng như những khóa học giúp nâng cao kiến thức CS Foundation.  Bài viết cuối của series sẽ chia sẻ tới các bạn một số điểm cần lưu ý […]
CS Foundation 101 (P2): Nguồn tài liệu tham khảo CS Foundation hay nhất

CS Foundation 101 (P2): Nguồn tài liệu tham khảo CS Foundation hay nhất

Thống kê cho thấy, tuy kiến thức nền tảng ngành Computer Science (CS Foundation) thường được dạy trong các tín chỉ tại các trường Đại học, Cao đẳng, nhưng có đến hơn 90% ứng viên đã từng “fail” Got It vì chưa nắm chắc CS Foundation. Nguyên nhân lớn nhất được các Engineer của Got […]
CS Foundation 101 (P1): CS Foundation là gì? 6 yếu tố bạn cần nắm vững là gì?

CS Foundation 101 (P1): CS Foundation là gì? 6 yếu tố bạn cần nắm vững là gì?

Theo thống kê, một năm Got It chỉ có thể tuyển khoảng 3% các ứng viên nộp CV đầu vào. Điều khiến 90% các bạn apply chưa vượt qua được vòng Competency chủ yếu là sự thiếu hụt kiến thức về Computer Science Foundation (CS Foundation). Không chỉ có Got It, các tập đoàn công […]
Chàng trai 25 tuổi và những ảnh hưởng công nghệ không thể thay thế tại Got It

Chàng trai 25 tuổi và những ảnh hưởng công nghệ không thể thay thế tại Got It

Chỉ trong 3 năm từ sau khi tốt nghiệp, Thắng đã tạo ra nhiều kết quả quan trọng, mang đến những ảnh hưởng không thể thay thế tới sự phát triển của Got It. Ngoài làm những công việc thường nhật của một Software Engineer, chàng trai 25 tuổi còn đặt nền móng cho sự […]
Từ 6 tháng Intern ngắn hạn đến 1 năm Gap Year rực rỡ

Từ 6 tháng Intern ngắn hạn đến 1 năm Gap Year rực rỡ

Ngày làm việc cuối tháng 4 vừa rồi, Got It chúng mình chào tạm biệt cậu bạn intern “ngắn hạn” – Bill. “Ngắn hạn” vì ban đầu Bill chỉ dự kiến gắn bó với Got It nhiều nhất là 6 tháng. Tuy nhiên, với quyết định đầy táo bạo của mình, câu chuyện của Bill […]
CS Foundation 101 (P3): Làm thế nào để ghi điểm trong vòng phỏng vấn Competency tại Got It?

CS Foundation 101 (P3): Làm thế nào để ghi điểm trong vòng phỏng vấn Competency tại Got It?

Sau phần 1 và phần 2 của series CS Foundation 101, bạn đã biết được các khái niệm, sáu yếu tố quan trọng trong CS Foundation, cũng như những khóa học giúp nâng cao kiến thức CS Foundation.  Bài viết cuối của series sẽ chia sẻ tới các bạn một số điểm cần lưu ý […]