Trang chủ > Tùy bút tiểu thuyết > Nội dung chính

Nguyên lý tăng entropy trong thế giới lập trình


Người ca sĩ không có quá nhiều phàn nàntai ban ca, việc tồn tại cần đầu tư nhiều suy nghĩ và năng lượng hơn.
Thế entropy của vũ trụ đang gia tăngkeo 88, sự trật tự đang giảm dần, như đôi cánh đen vô tận của chim bằng, đè nặng lên tất cả mọi thứ tồn tại, đè nặng lên tất cả mọi thứ. Tuy nhiên, các vật thể có entropy thấp lại khác biệt; entropy của chúng vẫn đang giảm, và sự trật tự tiếp tục tăng lên, như ánh lửa phốt pho lấp lánh trên mặt biển đen kịt. Điều này chính là ý nghĩa, ý nghĩa ở mức cao nhất, vượt xa cả ý nghĩa của niềm vui. Để duy trì ý nghĩa đó, các vật thể có entropy thấp cần phải tồn tại và tiếp tục tồn tại.

Những người bạn nào từng tiếp cận qua chút ít về thể loại khoa học viễn tưởng có lẽ đã đoán ra được nguồn gốc của đoạn văn nàykeo 88, nó đến từ cuốn tiểu thuyết "Tam Thể". Đây chắc chắn là một trong những đoạn văn phức tạp và đầy thách thức nhất trong toàn bộ tác phẩm "Tam Thể".

thể thấp entropy

Theo như lời đồnkeo 88, đối với nhiều nhà vật lý, định luật vật lý quan trọng nhất trong lịch sử khoa học không phải là Định luật Newton về chuyển động hay thuyết tương đối và lý thuyết Big Bang, mà là Định luật Thứ hai của Nhiệt động lực học. Đây là một quy luật có vị trí tối cao trong hệ thống các quy luật vật lý bởi vì nó điều khiển cơ bản hướng đi của sự tiến hóa vũ trụ mà chúng ta đang sống. Định luật này khẳng định rằng: bất kỳ hệ thống khép kín nào cũng chỉ có thể tiến triển theo chiều hướng gia tăng entropy – nghĩa là sự rối loạn hoặc bất ổn trong hệ thống sẽ luôn tăng lên theo thời gian. Điều này không chỉ ảnh hưởng đến cách mà các ngôi sao, hành tinh và toàn bộ vũ trụ vận hành mà còn ám chỉ những giới hạn sâu sắc trong khả năng dự đoán và kiểm soát của con người đối với tự nhiên.

Entropi là gì? Nói cách kháctai ban ca, nó có thể được hiểu là mức độ hỗn loạn hoặc sự bất ổn trong một vật thể hoặc hệ thống. Khi không có lực lượng bên ngoài can thiệp, theo thời gian, mức độ hỗn loạn của một hệ thống sẽ ngày càng gia tăng. Khi cho đá viên vào nước ấm, đá sẽ tan chảy và hòa lẫn với nước, bởi vì mức độ bất ổn của nước ấm cao hơn so với đá. Một bộ bài poker, dù đã được sắp xếp gọn gàng theo chất và thứ tự, nhưng sau nhiều lần xáo trộn ngẫu nhiên, cuối cùng sẽ trở nên rối loạn và khó kiểm soát. Còn một căn phòng gọn gàng, nếu lâu ngày không có ai dọn dẹp, sẽ dần trở nên bừa bộn và mất vệ sinh. Entropy không chỉ xuất hiện trong các thí nghiệm khoa học mà còn tồn tại ở khắp mọi nơi trong cuộc sống hàng ngày. Nó là quy luật tự nhiên mà mọi thứ đều bị ảnh hưởng. Từ những phân tử nhỏ bé trong thế giới vi mô cho đến các hiện tượng lớn hơn trong thiên nhiên, tất cả đều phải tuân theo quy tắc này. Chính vì vậy, việc duy trì sự cân bằng và trật tự đòi hỏi nỗ lực liên tục từ con người, đặc biệt là khi đối mặt với các quá trình tự nhiên không thể tránh khỏi.

thể thống thấp entropy

Khi nhìn lại toàn bộ lịch sử phát triển của nhân loạitai ban ca, con người đã biến những cánh đồng hoang vu thành những cánh đồng màu mỡ, dẫn dắt dòng sông trở thành nguồn nước nuôi dưỡng cuộc sống và chấm dứt lối sống du cư để hình thành nên các làng mạc. Song song đó, trong suốt hàng ngàn năm qua, loài người cũng không ngừng xây dựng nên nền văn minh đô thị rực rỡ. Những con đường trong thành phố được quy hoạch khoa học, các tòa nhà cao tầng xếp đặt ngăn nắp; hệ thống đường sắt đô thị vận hành trật tự và nhịp nhàng; mạng lưới ống ngầm dưới lòng đất phức tạp, đảm bảo cung cấp điện và nước cho từng gia đình; những công nhân vệ sinh mỗi ngày đều bận rộn quét dọn rác thải và phân loại chúng cẩn thận trước khi chuyển đến nơi xử lý phù hợp... Từ những cánh đồng trống trải đến những khu vực sầm uất hiện đại, tất cả đều phản ánh sự sáng tạo và tinh thần đoàn kết của con người. Mỗi chi tiết nhỏ trong thành phố, từ ánh sáng ban đêm đến dòng chảy của nước sạch, đều mang đậm dấu ấn của sự lao động bền bỉ và trí tuệ vô tận.

Tất cả những điều này đã giúp thế giới của chúng ta tránh xa trạng thái vô trật tựbxh ngoai hang anh, giữ mức entropy ở một giá trị rất thấp.

Tuy nhiêntai ban ca, ngay khi rời xa sự duy trì và hoạt động của thực thể "thấp entropy" mà con người đại diện, tất cả trật tự và sự ngăn nắp ấy sẽ tan biến không dấu vết. Thậm chí khi một cá nhân con người qua đời, cơ thể hữu cơ của họ cũng không còn khả năng duy trì bản thân. Nó sẽ dần mục rữa theo thời gian, cuối cùng trở thành phần đất của thế giới. Trong dòng chảy vô tận của vũ trụ, con người không khác gì những hạt cát nhỏ bé. Dù từng là một thực thể sống động với ý thức và hành động, nhưng sau khi chết đi, mọi thứ sẽ quay về với trạng thái tự nhiên nhất - đó là hòa mình vào lòng đất, trở thành nguồn dinh dưỡng cho muôn loài sinh vật khác.


Nhớ lại khi đang phát triển... MicroLove Trong quá trình phát triển ứng dụng MicroLovekeo 88, chúng tôi từng thực hiện tính năng chủ đề giao diện như sau:

Screenshot cài đặt chủ đề MicroLove

Dựa trên hình ảnh chụp màn hình được hiển thị ở trênbxh ngoai hang anh, người dùng có thể tùy chỉnh giao diện phần mềm thành một trong số nhiều chủ đề khác nhau (trong hình chụp màn hình đã cho thấy 8 chủ đề tùy chọn). Tất nhiên, tại thời điểm bất kỳ, người dùng chỉ có thể chọn một chủ đề duy nhất.

Một trong những kỹ sư của chúng tôi đã thiết kế cấu trúc lưu trữ theo cách sau: mỗi chủ đề sẽ được biểu diễn bằng một đối tượngtai ban ca, và trong đối tượng này sẽ lưu trữ thông tin mô tả liên quan đến chủ đề đó, cũng như trạng thái cho biết chủ đề có đang được người dùng chọn (là chủ đề hiện tại) hay không. Tất cả dữ liệu ban đầu của các đối tượng này đều được tải từ máy chủ, do đó cần phải lưu trữ lâu dài trên thiết bị cục bộ. Dưới đây là định nghĩa cấu trúc dữ liệu của các đối tượng (dạng mã giả): ```plaintext class ChuDe { tenChuDe: string; // Tên của chủ đề moTa: string; // Mô tả chi tiết về chủ đề daDuocChon: boolean; // Trạng thái xem chủ đề có đang được chọn hay không } ``` Định dạng này cho phép chúng ta dễ dàng quản lý và thao tác với từng chủ đề một cách hiệu quả, đồng thời duy trì tính nhất quán giữa dữ liệu từ máy chủ và dữ liệu lưu trữ cục bộ.

								
									/**
public
									 class
									 Theme
									 {
									
    // ID của chủ đề này
    public
									 int
									 themeId
									;
									
    // Tên của chủ đề này
    public
									 String
									 name
									;
									
    // Địa chỉ hình ảnh chủ đề này
    public
									 String
									 picture
									;
									

    // Các trường mô tả khác
    ......
									

    // Chủ đề này có được chọn hay không
    public
									 boolean
									 selected
									;
									
}
									

/** * Cấu hình toàn cục: Lưu trữ dữ liệu cấu hình của các chủ đề khác nhau. * Lấy từ bộ nhớ lưu trữ lâu dài. */
Theme
									[]
									 themes
									 =
									 getFromLocalStore
									();
									

								

Logic hiển thị trạng thái chủ đề đã chọn trong giao diện như bên dưới (mã giả):

								
									// Tham số đầu vào:
// Các View tầng hiển thị các chủ đề khác nhau trong giao diện
View
									[]
									 themeViews
									;
									

......
									

for
									 (
									int
									 i
									 =
									 0
									;
									 i
									 <
									 themeViews
									.
									length
									;
									 i
									++)
									 {
									
    if
									 (
									themes
									[
									i
									].
									selected
									)
									 {
									
        // Hiển thị chủ đề thứ i ở trạng thái đã chọn
        displaySelected
									(
									themeViews
									[
									i
									]);
									
    }
									
    else
									 {
									
        // Hiển thị chủ đề thứ i ở trạng thái chưa chọn
        displayNotSelected
									(
									themeViews
									[
									i
									]);
									
    }
									
}
									

								

Khi người dùng thay đổi chủ đềtai ban ca, logic chọn như sau (mã giả):

								
									// Tham số đầu vào:
// Các View tầng hiển thị các chủ đề khác nhau trong giao diện
View
									[]
									 themeViews
									;
									
// Chỉ mục chủ đề mới mà người dùng muốn chọn
int
									 toSelect
									;
									

......
									

// Tìm chủ đề đã chọn cũ
int
									 oldSelected
									 =
									 -
									1
									;
									
for
									 (
									int
									 i
									 =
									 0
									;
									 i
									 <
									 themes
									.
									length
									;
									 i
									++)
									 {
									
    if
									 (
									themes
									[
									i
									].
									selected
									)
									 {
									
        oldSelected
									 =
									 i
									;
									 // Đã tìm thấy
        break
									;
									
    }
									
}
									

if
									 (
									toSelect
									 !=
									 oldSelected
									)
									 {
									
    // Cập nhật dữ liệu chủ đề đã chọn hiện tại
    themes
									[
									toSelect
									].
									selected
									 =
									 true
									;
									
    // Hiển thị chủ đề đã chọn hiện tại ở trạng thái đã chọn
    displaySelected
									(
									themeViews
									[
									toSelect
									]);
									

    if
									 (
									oldSelected
									 !=
									 -
									1
									)
									 {
									
        // Cập nhật dữ liệu chủ đề đã chọn cũ
        themes
									[
									oldSelected
									].
									selected
									 =
									 false
									;
									
        // Hiển thị chủ đề đã chọn cũ ở trạng thái chưa chọn
        displayNotSelected
									(
									themeViews
									[
									oldSelected
									]);
									
    }
									

    Cuối cùngtai ban ca, lưu trữ dữ liệu chủ đề đã cập nhật xuống cơ sở dữ liệu.
    saveToLocalStore
									(
									themes
									);
									
}
									

								

Những đoạn mã này dường như không có vấn đề logic nào. Tuy nhiêntai ban ca, sau một thời gian sử dụng, chúng tôi nhận được các báo cáo từ người dùng với những hình ảnh chụp màn hình giống như dưới đây:

Screenshot lỗi chọn chủ đề MicroLove

Thật bất ngờ khi cả hai chủ đề này đều được chọn cùng lúc! Mặc dù chúng tôi đã thử nghiệm nhiều lần và kiểm tra kỹ lưỡng mã nguồnbxh ngoai hang anh, nhưng vẫn không thể tái hiện vấn đề này. Mọi thứ dường như đều ổn, không có dấu hiệu nào cho thấy có sai só

Vậy rốt cuộc chuyện gì đã xảy ra?

Sau khi cân nhắc kỹ lưỡngtai ban ca, chúng tôi cuối cùng cũng nhận ra rằng, theo cách thực hiện này, hệ thống có "entropy" cao hơn một chút so với giá trị lý thuyết. Chính vì điều đó mà nó mới có khả năng xuất hiện trạng thái hỗn loạn lớn hơn, như tình huống mà cả hai lựa chọn đều được chọn cùng lúc.

Gì? Một hệ thống phần mềm cũng có entropy à? Mọi người đừng vộibxh ngoai hang anh, hãy để tôi từ từ giải thích.

Luật thứ hai của nhiệt động lực họcbxh ngoai hang anh, mà chúng ta thường gọi là nguyên lý tăng entropy, là quy luật phổ quát tối cao trong vũ trụ, và tất nhiên, nó cũng áp dụng cho thế giới lập trình. Trong lĩnh vực lập trình, sự hỗn loạn và mất trật tự dường như không thể tránh khỏi khi các hệ thống ngày càng trở nên phức tạp hơn. Các chương trình ban đầu có thể gọn gàng và dễ hiểu, nhưng theo thời gian, chúng có xu hướng trở nên khó quản lý và đầy rẫy lỗi, giống như cách một căn phòng dần lộn xộn nếu không được sắp xếp lại thường xuyên. Điều này nhắc nhở chúng ta rằng dù ở bất kỳ đâu, từ vũ trụ rộng lớn đến những dòng mã nhỏ bé, mọi thứ đều vận hành theo những quy luật nhất định.

Để giải thích bản chất của nguyên lý tăng entropy từ góc nhìn của một lập trình viênkeo 88, chúng ta hãy phân tích kỹ hơn ví dụ về việc xáo bài mà tôi đã đề cập trước đó. Lần đầu tiên tôi tiếp cận ví dụ này là trong cuốn sách có tên gọi Bất Hợp Lý: Giải Mã 9 Bí Mật Lớn Nhất Trong Lịch Sử Khoa Học. Không có ví dụ nào khác có thể minh họa rõ ràng và dễ hiểu như vậy về nguyên lý tă Trong thế giới lập trình, khi chúng ta nói đến sự rối loạn hoặc trật tự, nó liên quan chặt chẽ đến các thuật toán và cấu trúc dữ liệu. Ví dụ về bài poker được sắp xếp ban đầu giống như một mảng dữ liệu có thứ tự cao. Khi bạn bắt đầu xáo bài, nó giống như một quá trình ngẫu nhiên hóa dữ liệu, làm cho hệ thống trở nên hỗn loạn hơn và không còn dễ kiểm soát như trước. Cuốn sách này không chỉ giúp tôi hiểu sâu sắc hơn về nguyên lý vật lý mà còn khiến tôi nhận ra rằng ngay cả trong lập trình, việc duy trì sự cân bằng giữa thứ tự và ngẫu nhiên cũng là một thách thức lớn. Nó nhắc nhở chúng ta rằng dù ở lĩnh vực nào, việc duy trì trạng thái ổn định luôn đòi hỏi sự can thiệp và điều chỉnh liên tục.

Hãy tưởng tượng rằng bạn bắt đầu với một bộ bài được sắp xếp gọn gàng theo màu sắc và kích thướctai ban ca, sau đó ngẫu nhiên xáo trộn chúng. Ngay lập tức, bộ bài sẽ trở nên rối loạn, không còn sự trật tự nào nữa. Tuy nhiên, nếu ngược lại, việc khôi phục lại trình tự ban đầu từ một trạng thái hỗn loạn gần như là điều không thể xảy ra. Giờ đây, hãy thử nghĩ đến tình huống: bạn đang cầm trên tay một bộ bài đã bị xáo trộn hoàn toàn, tiếp tục xáo thêm vài lần nữa, nhưng bất ngờ thay, nó tự nhiên trở về đúng thứ tự ban đầu – các quân bài được sắp xếp theo màu sắc và giá trị một cách hoàn hảo. Bạn chắc chắn sẽ cảm thấy đây là một phép màu, hoặc ít nhất cũng là một kỹ thuật ảo thuật tinh vi!

Tại sao sự biến đổi của hệ thống lại thể hiện xu hướng rõ ràng này? Về bản chất là do sự khác biệt về số lượng trạng thái hệ thống.

Những bông hoa và kích thước được sắp xếp theo thứ tự nhất địnhtai ban ca, chỉ có duy nhất một trường hợp, do đó số lượng trạng thái là 1; còn đối với các cách sắp xếp hỗn loạn không theo quy luật, con số này lại cực kỳ, cực kỳ lớn. Chỉ cần áp dụng một chút kiến thức về tổ hợp, chúng ta có thể tính ra rằng tất cả các cách sắp xếp ngẫu nhiên sẽ có tổng cộng (54! - 1) khả năng, trong đó 54! đại diện cho giai thừa của 54. Số lượng trạng thái hỗn loạn này nhiều đến mức không thể đếm xuể, vì vậy quá trình trộn bài luôn khiến thứ tự bài tiến triển theo hướng bất ổn và phức tạp hơn. Mỗi khi trộn bài, dường như vận may và xác suất đã tạo nên một vũ điệu đầy bí ẩn, nơi mà mọi sự sắp xếp trước đây bị phá vỡ hoàn toàn để nhường chỗ cho những kết quả không lường trước được. Điều này cũng gợi ý rằng, dù bạn có cố gắng kiểm soát hay sắp xếp lại bài theo ý muốn, thì việc đạt được một trạng thái hoàn toàn trật tự sau mỗi lần trộn vẫn gần như là điều không thể.

Và mặt đối lập của sự hỗn loạn vô trật tự — sự ngăn nắp có trật tựkeo 88, Về bản chất có nghĩa là hạn chế số lượng trạng thái có thể của hệ thống. Với bộ bài gồm 54 látai ban ca, việc chỉ cho phép chọn một thứ tự cụ thể chính là cách để tạo ra sự gọn gàng. Tương tự như vậy, trong một căn phòng ngăn nắp, tất cả mọi thứ đều có chỗ của nó và không có thứ gì nằm sai vị trí, chẳng hạn như tất không xuất hiện trong nồi hay ở bất kỳ nơi nào khác. Đây cũng chính là một dạng giới hạn đối với những trạng thái được chấp nhận.

Quá trình lập trình của chúng ta giống như việc đi từ một trạng thái hỗn loạnkeo 88, từ đó lần lượt phân nhánh và làm rõ các điều kiện, dần dần thu hẹp phạm vi hoạt động để đạt được sự trật tự. Hệ thống mà chúng ta xây dựng càng có những ràng buộc chặt chẽ đối với số lượng trạng thái có thể chấp nhận được, thì mức độ entropy (tổn entropy) của hệ thống sẽ càng thấp. Điều này đồng nghĩa với việc số lượng trạng thái mà hệ thống có thể đạt được sẽ giảm xuống, và khả năng rơi vào trạng thái hỗn loạn (cũng là những gì chúng ta không mong muốn) cũng sẽ ít hơn. Khi viết mã, mỗi dòng code chúng ta thêm vào đều như một quy tắc mới, một rào cản ngăn chặn sự hỗn loạn lan rộng trong hệ thống. Quy trình lập trình không chỉ đơn thuần là việc tạo ra chức năng mà còn là quá trình kiểm soát và định hình hành vi của hệ thống, giúp nó vận hành theo cách mà chúng ta mong muốn. Nhờ đó, hệ thống trở nên dễ quản lý hơn và hiệu quả hơn trong việc xử lý các yêu cầu phức tạp.

Quay trở lại ví dụ về chủ đề mà chúng ta vừa đề cậptai ban ca, giả sử có tất cả 8 chủ đề, và theo cách thực hiện trước đó, mỗi chủ đề đều có hai trạng thái: "được chọn" và "chưa được chọn". Vậy tổng số trạng thái có thể xảy ra trong hệ thống sẽ là "2 mũ 8", nghĩa là 256 trạng thái. Trong số đó, chỉ có 8 trạng thái được mong muốn (tức là các trạng thái có thứ tự, tương ứng với từng trường hợp một chủ đề được chọn duy nhất). Số còn lại, tức là 256 trừ đi 8, sẽ là những trạng thái hỗn loạn hoặc sai lệch. Ví dụ như tình huống trước đó khi hai chủ đề cùng lúc được chọn chính là một trong những trạng thái sai này. Trạng thái hỗn loạn này xuất hiện do sự kết hợp không mong muốn giữa các chủ đề, dẫn đến việc vi phạm quy tắc mà chúng ta đã đặt ra cho phép mỗi chủ đề chỉ ở trong một trạng thái "được chọn" hoặc "chưa được chọn". Điều này nhấn mạnh tầm quan trọng của việc kiểm soát trạng thái trong thiết kế hệ thống, đặc biệt là khi có nhiều yếu tố cần phối hợp nhịp nhàng để tránh các lỗi không đáng có.

Trong các thực hiện cụ thể trước đâykeo 88, logic của chương trình đã cố gắng hết sức để giới hạn trạng thái hệ thống ở 8 trạng thái có thứ tự. Tuy nhiên, trong quá trình vận hành thực tế, hệ thống vẫn rơi vào một trạng thái hỗn loạn. Vậy nguyên nhân là gì? Có lẽ vấn đề nằm ở cách quản lý trạng thái không được tối ưu hóa hoàn toàn. Dù đã thiết lập các điều kiện kiểm soát chặt chẽ, nhưng các yếu tố như sự tương tác giữa các thành phần khác nhau trong hệ thống hoặc những tác động từ môi trường bên ngoài có thể đã làm thay đổi các giá trị dự kiến. Điều này dẫn đến việc một số biến điều khiển hoặc bộ đệm dữ liệu không còn phản ánh đúng tình trạng thực tế, từ đó gây ra hiện tượng mất ổn định. Bên cạnh đó, các kịch bản xử lý lỗi cũng cần được xem xét kỹ hơn. Nếu không có cơ chế kiểm tra và khắc phục kịp thời khi gặp phải tình huống bất thường, nguy cơ xảy ra trạng thái không xác định sẽ cao hơn. Vì vậy, việc bổ sung thêm các đoạn mã kiểm tra trạng thái và tái khởi tạo hệ thống nếu phát hiện dấu hiệu bất thường sẽ là giải pháp khả thi để cải thiện tình hình.

Do việc triển khai một dự án cụ thể thường phải đối mặt với vô số chi tiết kỹ thuật phức tạpbxh ngoai hang anh, hiếm có logic nào có thể được thực hiện hoàn hảo. Có thể sẽ xảy ra tình huống không mong đợi ở một chi tiết nhỏ trong quá trình triển khai, hoặc có thể khi xử lý lưu trữ dữ liệu, giao dịch chưa được áp dụng đúng cách. Thậm chí, đôi khi các yếu tố bên ngoài hệ thống cũng có thể gây ra những tác động không mong muốn. Có rất nhiều yếu tố cần được xem xét kỹ lưỡng trong giai đoạn thiết kế và thực thi. Các nhà phát triển luôn phải đối phó với sự không chắc chắn của môi trường làm việc, từ những vấn đề liên quan đến phần cứng cho đến các thay đổi đột ngột trong yêu cầu từ phía khách hàng. Điều này khiến cho việc lập trình trở nên khó khăn hơn và đòi hỏi sự cẩn trọng cao độ để đảm bảo chất lượng sản phẩm cuối cùng.

Tuy nhiênkeo 88, đối với ví dụ này, chúng ta hoàn toàn có thể cải thiện hơn trong việc giới hạn trạng thái của hệ thống. Có lẽ một số bạn đã nhận ra rằng việc lưu trữ trạng thái "được chọn" và "chưa được chọn" cho từng chủ đề (lớp Theme) là không cần thiết. Thay vào đó, chúng ta nên lưu giữ một ID chủ đề hiện tại đang được chọn trên toàn hệ thống. Điều này giúp giảm số lượng trạng thái có thể xảy ra xuống chỉ còn 8 thay vì lưu trữ riêng lẻ trong mỗi đối tượng chủ đề. Hãy tưởng tượng rằng nếu chúng ta giữ nguyên cách làm cũ, mỗi khi thay đổi chủ đề, hệ thống sẽ phải cập nhật trạng thái của tất cả các chủ đề. Điều này không chỉ làm tăng gánh nặng cho bộ nhớ mà còn khiến việc quản lý trở nên phức tạp hơn. Ngược lại, bằng cách sử dụng một biến toàn cục để lưu trữ ID chủ đề hiện tại, chúng ta có thể dễ dàng kiểm soát và tối ưu hóa hiệu suất. Ngoài ra, việc tách biệt trạng thái khỏi từng đối tượng chủ đề cũng mang lại sự linh hoạt cao hơn. Ví dụ, nếu một ngày nào đó chúng ta muốn thêm tính năng cho phép người dùng tùy chỉnh nhiều chủ đề cùng lúc, việc duy trì trạng thái theo cách mới sẽ giúp chúng ta dễ dàng mở rộng chức năng mà không gặp khó khăn.

Kết cấu dữ liệu sau khi sửa đổi như sau (mã giả):

								
									/**
public
									 class
									 Theme
									 {
									
    // ID của chủ đề này
    public
									 int
									 themeId
									;
									
    // Tên của chủ đề này
    public
									 String
									 name
									;
									
    // Địa chỉ hình ảnh chủ đề này
    public
									 String
									 picture
									;
									

    // Các trường mô tả khác
    ......
									
}
									

/**
Theme
									[]
									 themes
									 =
									 ...;
									

/** * Cấu hình toàn cầu: ID chủ đề hiện đang được chọn. * Giá trị ban đầu là ID của chủ đề mặc định. */
 int
									 currentThemeId
									 =
									 getFromLocalStore
									(
									DEFAULT_CLASSIC_THEME_ID
									);
									

								

Logic hiển thị sau khi sửa đổi như sau (mã giả):

								
									// Tham số đầu vào:
// Các View tầng hiển thị các chủ đề khác nhau trong giao diện
View
									[]
									 themeViews
									;
									

......
									

for
									 (
									int
									 i
									 =
									 0
									;
									 i
									 <
									 themeViews
									.
									length
									;
									 i
									++)
									 {
									
    if
									 (
									themes
									[
									i
									].
									themeId
									 ==
									 currentThemeId
									)
									 {
									
        // Hiển thị chủ đề thứ i ở trạng thái đã chọn
        displaySelected
									(
									themeViews
									[
									i
									]);
									
    }
									
    else
									 {
									
        // Hiển thị chủ đề thứ i ở trạng thái chưa chọn
        displayNotSelected
									(
									themeViews
									[
									i
									]);
									
    }
									
}
									

								

Khi người dùng thay đổi chủ đềtai ban ca, logic chọn đã sửa như sau (mã giả):

								
									// Tham số đầu vào:
// Các View tầng hiển thị các chủ đề khác nhau trong giao diện
View
									[]
									 themeViews
									;
									
// Chỉ mục chủ đề mới mà người dùng muốn chọn
int
									 toSelect
									;
									

......
									

// Tìm chủ đề đã chọn cũ
int
									 oldSelected
									 =
									 -
									1
									;
									
for
									 (
									int
									 i
									 =
									 0
									;
									 i
									 <
									 themes
									.
									length
									;
									 i
									++)
									 {
									
    if
									 (
									themes
									[
									i
									].
									themeId
									 ==
									 currentThemeId
									)
									 {
									
        oldSelected
									 =
									 i
									;
									 // Đã tìm thấy
        break
									;
									
    }
									
}
									

if
									 (
									toSelect
									 !=
									 oldSelected
									)
									 {
									
    // Cập nhật cấu hình chủ đề đã chọn toàn cục
    currentThemeId
									 =
									 themes
									[
									toSelect
									].
									themeId
									;
									
    // Hiển thị chủ đề đã chọn hiện tại ở trạng thái đã chọn
    displaySelected
									(
									themeViews
									[
									toSelect
									]);
									

    if
									 (
									oldSelected
									 !=
									 -
									1
									)
									 {
									
        // Hiển thị chủ đề đã chọn cũ ở trạng thái chưa chọn
        displayNotSelected
									(
									themeViews
									[
									oldSelected
									]);
									
    }
									

    Cuối cùngtai ban ca, lưu trữ dữ liệu chủ đề đã cập nhật xuống cơ sở dữ liệu.
    saveToLocalStore
									(
									currentThemeId
									);
									    
}
									

								

Ví dụ này tuy đơn giản nhưng lại rất tốt để minh họa khái niệm về giá trị entropy trong hệ thống phần mềm.

Quá trình lập trình thực chất là việc chúng ta liên tục cung cấp các quy tắc cho hệ thống. Dựa trên những quy tắc nàytai ban ca, chúng ta kiểm soát và định hình trạng thái vận hành của hệ thống chỉ trong phạm vi những gì ta cho là hợp lệ (tức là trạng thái có thứ tự). Do đó, việc ngăn chặn hệ thống rơi vào bất kỳ trạng thái không hợp lệ hoặc không cần thiết nào (tức là trạng thái hỗn loạn) là điều mà chúng ta cần nỗ lực hết sức để thực hiện, ngay cả khi những trạng thái đó ban đầu có vẻ vô hại. Những trạng thái như vậy đôi khi có thể dẫn đến hậu quả khó lường, vì vậy việc phòng ngừa từ sớm luôn là ưu tiên hàng đầu trong quá trình phát triển phần mềm.


Ví dụ thứ hai

Cách đây vài nămbxh ngoai hang anh, khi chúng tôi phát triển ứng dụng Web trên một nền tảng mở, đã xảy ra một câu chuyện như vậy.

Khi đótai ban ca, một trong những kỹ sư backend của chúng tôi đã nảy ra ý tưởng tạo ra dữ liệu khởi tạo (dạng UserData) cho người dùng mới khi họ lần đầu tiên truy cập vào ứng dụng của chúng ta. Đồng thời, trong cùng yêu cầu truy cập hiện tại, hệ thống cũng sẽ hiển thị dữ liệu người dùng này cho họ. Điều này có nghĩa là nếu người dùng cũ quay lại, dữ liệu được hiển thị sẽ là những gì mà họ đã tích lũy và cập nhật từ trước đến nay. Còn đối với người dùng mới, dữ liệu mà họ nhìn thấy sẽ là dữ liệu vừa được tạo ra ngay khi lần đầu tiên truy cập ứng dụng.

Do đókeo 88, kỹ sư này đã thiết kế và thực hiện giao diện như sau:

								
									
										UserData
									 createOrGet
									(
									long
									 userId
									);
									

								

Trong việc triển khai giao diện nàykeo 88, chương trình sẽ đầu tiên kiểm tra trong cơ sở dữ liệu để tìm kiếm thông tin về UserData. Nếu tìm thấy dữ liệu, có nghĩa đây là người dùng cũ và chương trình sẽ trả về ngay lập tức thông tin UserData đã tìm được. Ngược lại, nếu không tìm thấy dữ liệu, điều đó cho thấy đây là người dùng mới. Khi đó, chương trình sẽ tạo ra một bản ghi UserData mới, lưu nó vào cơ sở dữ liệu và cuối cùng trả về thông tin của bản ghi UserData vừa được khởi tạo. Quy trình này giúp đảm bảo rằng mọi trường hợp đều được xử lý một cách chính xác và hiệu quả nhất.

Nếu dữ liệu người dùng (UserData) ở đây thực sự chỉ là một tập hợp các thông tin cơ bản về người dùng và việc triển khai giao diện trên đã được mã hóa đúng cáchtai ban ca, thì cách làm này không có vấn đề lớn. Đối với hầu hết các ứng dụng, thông tin cơ bản của người dùng thường được tạo ra khi họ đăng ký và được truy xuất khi họ đăng nhập. Còn đối với các ứng dụng web nhúng trong nền tảng mở, yêu cầu truy cập đầu tiên thường vừa mang tính chất đăng ký vừa mang tính chất đăng nhập, do đó việc kết hợp cả quá trình tạo mới và truy xuất dữ liệu là hoàn toàn hợp lý. Điều này giúp tối ưu hóa quy trình và giảm thiểu số lần tương tác không cần thiết giữa người dùng và hệ thống.

tái sử dụng mã nguồn

Dựa trên các phân tích trước đó trong bài viếtbxh ngoai hang anh, chúng ta dễ dàng nhận thấy vấn đề nằm ở cách tiếp cận này: nó vô tình làm gia tăng entropy của hệ thống. Thay vì tập trung vào nhánh logic dành cho việc thực hiện truy vấn, chương trình lại phải đối mặt với những logic và trạng thái bổ sung liên quan đến việc tạo ra thứ gì đó. Những trạng thái không cần thiết này làm tăng khả năng hệ thống rơi vào tình trạng hỗn loạn. Ngoài ra, việc này còn khiến mã nguồn trở nên khó bảo trì hơn, vì các lập trình viên phải luôn cẩn trọng khi thêm hoặc sửa đổi bất kỳ phần nào liên quan. Điều này không chỉ ảnh hưởng đến hiệu suất tổng thể mà còn gây khó khăn trong việc duy trì chất lượng code theo thời gian.

Ví dụ thứ ba

Trong phần nàybxh ngoai hang anh, chúng ta sẽ thảo luận một ví dụ hơi phức tạp hơn liên quan đến hàng đợi gửi tin nhắn.

Giả sử chúng ta đang phát triển một ứng dụng nhắn tin (IM) giống như WeChat. Khi gửi tin nhắn (message)tai ban ca, việc chỉ thực hiện một yêu cầu mạng đơn thuần là chưa đủ. Chúng ta cần phải xem xét thêm nhiều yếu tố để đảm bảo trải nghiệm người dùng mượt mà và hiệu quả. Đầu tiên, ứng dụng cần có cơ chế kiểm tra kết nối internet trước khi gửi tin. Điều này giúp tránh tình trạng tin nhắn bị mất hoặc lỗi do mạng không ổn định. Ngoài ra, chúng ta nên thêm tính năng lưu trữ tin nhắn tạm thời trên thiết bị nếu người dùng đang ở vùng phủ sóng kém. Sau đó, khi kết nối được cải thiện, hệ thống sẽ tự động gửi đi những tin nhắn đã lưu. Một điểm quan trọng khác là cần có cơ chế xác nhận rằng tin nhắn đã đến đích thành công. Nếu không may tin nhắn bị thất bại, ứng dụng cần thông báo cho người dùng biết lý do và cung cấp tùy chọn gửi lại. Điều này không chỉ giúp tăng cường độ tin cậy mà còn làm tăng sự hài lòng của người dùng. Tóm lại, việc gửi tin nhắn không chỉ đơn giản là một lần gửi qua mạng mà đòi hỏi cả một quy trình phức tạp để tối ưu hóa hiệu suất và mang lại trải nghiệm tốt nhất cho người sử dụng.

  • Trước tiênbxh ngoai hang anh, các yêu cầu gửi tin nhắn trước và sau phải xếp hàng;
  • Thứ haitai ban ca, khi yêu cầu thất bại do môi trường mạng không ổn định, nên có khả năng retry yêu cầu một cách hợp lý.
  • Thứ bakeo 88, hàng đợi yêu cầu phải được lưu trữ lâu dài, để khi phần mềm khởi động lại, các tin nhắn chưa gửi xong có thể tiếp tục được gửi.

Vì vậytai ban ca, chúng ta cần tạo một hàng đợi gửi tin nhắn có chức năng xếp hàng, retry và lưu trữ cục bộ.

Về vấn đề duy trì trạng thái (persistent storage)tai ban ca, bên cạnh việc hàng đợi gửi tin nhắn cần được lưu trữ tại chỗ, các tin nhắn mà người dùng nhập vào và nhận được cũng cần phải được lưu trữ cục bộ. Khi một tin nhắn được gửi thành công, hoặc sau khi đã cố gắng gửi nhiều lần nhưng vẫn thất bại, thì bản ghi của tin nhắn trong hàng đợi sẽ bị xóa khỏi kho lưu trữ của hệ thống hàng đợi, nhưng vẫn sẽ được giữ lại trong kho lưu trữ dành riêng cho tin nhắn trò chuyện. Điều này giúp đảm bảo rằng mọi thông điệp quan trọng đều có thể được truy cập và kiểm tra lại nếu cần thiết, ngay cả khi quá trình gửi gặp sự cố.

Sau phân tích trênbxh ngoai hang anh, giao diện gửi tin nhắn của chúng tôi (send) được thực hiện như sau (mã giả):

								
									
										public
									 void
									 send
									(
									Message
									 message
									)
									 {
									
    // Chèn vào cơ sở dữ liệu lưu trữ tin nhắn lâu dài
    appendToMessageLocalStore
									(
									message
									);
									
    // Chèn vào cơ sở dữ liệu lưu trữ hàng đợi gửi
    // Lưu ý: Các bước lưu trữ này nên được thực hiện trong một giao dịch DB cùng một lúckeo 88,
    // Để dễ dàng trình bàybxh ngoai hang anh, đoạn mã giao dịch đã bị lược bỏ ở đây
    appendToMessageSendQueueStore
									(
									message
									);
									

    // Đặt vào hàng đợi trong bộ nhớ hoặc gửi yêu cầu ngay lập tức (bao gồm retry)
    queueingOrRequesting
									(
									message
									);
									
}
									

								

Trong đóbxh ngoai hang anh, lớp Message đại diện cho tin nhắn, được định nghĩa như sau (mã giả):

								
									/**
public
									 class
									 Message
									 {
									
    // ID của tin nhắn này
    public
									 long
									 messageId
									;
									
    // Loại của tin nhắn này
    public
									 int
									 type
									;
									

    // Các trường mô tả khác
    ......
									
}
									

								

Như đã đề cập trước đókeo 88, khi điều kiện mạng không ổn định và dẫn đến thất bại trong việc gửi yêu cầu, hàng đợi gửi sẽ cố gắng thực hiện lại yêu cầu. Tuy nhiên, nếu liên tục gặp phải lỗi nhiều lần, cuối cùng hàng đợi gửi cũng sẽ thông báo rằng việc gửi đã thất bại. Khi điều này xảy ra, trên giao diện trò chuyện của người dùng thường sẽ có một dấu hiệu cảnh báo (ví dụ: đặt biểu tượng dấu chấm than màu đỏ bên cạnh tin nhắn). Người dùng có thể chờ đợi cho đến khi mạng được cải thiện, sau đó nhấn vào tin nhắn đó để gửi lại nội dung. Điều này giúp đảm bảo rằng tin nhắn không bị mất đi mà vẫn có cơ hội được truyền tải khi điều kiện mạng thuận lợi hơn.

Bạn có thể sử dụng lại giao diện send ban đầu để thực hiện việc gửi lại tin nhắn. Tuy nhiêntai ban ca, vì lúc này tin nhắn đã tồn tại trong hệ thống lưu trữ bền vững (persistent storage), nên không cần gọi hàm appendToMessageLocalStore nữa. Tất nhiên, nếu giữ nguyên giao diện của send, chúng ta hoàn toàn có thể phân biệt giữa việc gửi lần đầu và gửi lại thông qua một thao tác truy vấn thích hợp. Điều này giúp đảm bảo rằng quá trình xử lý sẽ không bị trùng lặp hoặc gây lỗi trong hệ thống.

Thực hiện của giao diện send đã sửa đổi như sau (mã giả):

								
									
										public
									 void
									 send
									(
									Message
									 message
									)
									 {
									
    Message
									 oldMessage
									 =
									 queryFromMessageLocalStore
									(
									message
									.
									messageId
									);
									
    if
									 (
									oldMessage
									 ==
									 null
									)
									 {
									
        // Không tìm thấy tin nhắn nàytai ban ca, nghĩa là lần gửi đầu tiên
        // Chèn vào cơ sở dữ liệu lưu trữ tin nhắn lâu dài
        appendToMessageLocalStore
									(
									message
									);
									
    }
									
    else
									 {
									
        // Tìm thấy tin nhắn nàytai ban ca, nghĩa là resend
        // Chỉ cần cập nhật trạng thái tin nhắn trò chuyện là đủ
        // Chuyển trạng thái từ thất bại sang đang gửi
        modifyMessageStatusInLocalStore
									(
									message
									.
									messageId
									,
									 STATUS_SENDING
									);
									
    }
									
    // Chèn vào cơ sở dữ liệu lưu trữ hàng đợi gửi
    // Lưu ý: Các hoạt động tra cứu trước đó và thao tác chèn và cập nhật
    // Nên được thực hiện trong một giao dịch DB cùng một lúctai ban ca,
    // Để dễ dàng trình bàytai ban ca, đoạn mã giao dịch đã bị lược bỏ ở đây
    appendToMessageSendQueueStore
									(
									message
									);
									

    // Đặt vào hàng đợi trong bộ nhớ hoặc gửi yêu cầu ngay lập tức (bao gồm retry)
    queueingOrRequesting
									(
									message
									);
									
}
									

								

Tuy nhiênkeo 88, nếu nhìn nhận theo nguyên lý tăng entropy trong lập trình mà bài viết trước đã phân tích, việc sửa đổi hàm send ở đây đã làm cho hệ thống có xu hướng tă Ban đầu, khi chưa gọi đến hàm send, trạng thái giữa lần gửi đầu tiên và lần gửi lại là rất rõ ràng và khác biệt. Nhưng sau khi đi vào thực thi hàm send, chúng ta lại mất đi thông tin này. Do đó, để giải quyết vấn đề này, chúng ta cần phải dựa vào kết quả của một lần kiểm tra lại trong phần triển khai của hàm send để xác định hai trường hợp (hai trạng thái) này một cách chính xác.

Quá trình vận hành của một chương trình về bản chất là việc đi từ đỉnh cây logicbxh ngoai hang anh, lần lượt di chuyển xuống từng lớp, dựa trên các điều kiện phân nhánh để lựa chọn một đường dẫn thực thi duy nhất, cuối cùng dừng lại tại một nút lá nào đó. Mỗi khi chương trình tiến vào một lớp sâu hơn, nó sẽ hiểu rõ hơn về trạng thái hiện tại của hệ thống, nghĩa là số lượng trạng thái cần xử lý cũng giảm đi chút ít. Khi đạt đến nút lá, điều đó đồng nghĩa với việc hệ thống đã xác định được một trạng thái cụ thể, và từ đó có thể thực hiện các thao tác tương ứng để giải quyết vấn đề.

Việc chỉnh sửa liên quan đến lệnh "send" lại dẫn đến việc số lượng trạng thái cần xử lý trong quá trình chạy chương trình tăng lênkeo 88, điều này đồng nghĩa với việc entropy (độ bất định hoặc độ phức tạp) của hệ thống cũng gia tăng. Điều này có thể khiến các nhà phát triển phải đối mặt với nhiều thách thức hơn trong việc quản lý và tối ưu hóa hiệu suất của ứng dụng.

Dữ liệu không hợp lệ

								
									
										public
									 void
									 resend
									(
									long
									 messageId
									)
									 {
									
    Message
									 message
									 =
									 queryFromMessageLocalStore
									(
									messageId
									);
									
    if
									 (
									message
									 ==
									 null
									)
									 {
									
        // Trường hợp không thể xảy ratai ban ca, xử lý lỗi
        return
									;
									
    }
									

    // Chỉ cần cập nhật trạng thái tin nhắn trò chuyện là đủ
    // Chuyển trạng thái từ thất bại sang đang gửi
    modifyMessageStatusInLocalStore
									(
									message
									.
									messageId
									,
									 STATUS_SENDING
									);
									
    // Chèn vào cơ sở dữ liệu lưu trữ hàng đợi gửi
    // Lưu ý: Các bước lưu trữ này nên được thực hiện trong một giao dịch DB cùng một lúcbxh ngoai hang anh,
    // Để dễ dàng trình bàytai ban ca, đoạn mã giao dịch đã bị lược bỏ ở đây
    appendToMessageSendQueueStore
									(
									message
									);
									

    // Đặt vào hàng đợi trong bộ nhớ hoặc gửi yêu cầu ngay lập tức (bao gồm retry)
    queueingOrRequesting
									(
									message
									);
									
}
									

								

Có những học sinh có thể phản bác rằng cách thêm một giao diện mới này dường như phá vỡ sự thống nhất của giao diện. Dù là lần đầu gửi hay gửi lạibxh ngoai hang anh, cả hai đều là hành động gửi, nếu sử dụng cùng một giao diện, sẽ gọn gàng hơn. Tuy nhiên, việc tách biệt các loại hành động gửi này cũng có thể giúp tăng tính rõ ràng và dễ quản lý trong mã nguồn. Điều này không chỉ giảm thiểu nguy cơ nhầm lẫn khi triển khai mà còn hỗ trợ quá trình bảo trì hệ thống về lâu dài.

Đúng vậytai ban ca, ở đây tồn tại vấn đề lựa chọn giữa các phương án.

Việc đưa ra bất kỳ lựa chọn nào đều đi kèm với cái giá phải trả. Còn việc chọn như thế nàokeo 88, tùy thuộc vào việc bạn coi trọng logic rõ ràng hay sự thống nhất trong giao diện hơn. Có lẽ điều quan trọng không chỉ dừng lại ở việc bạn cần quyết định giữa hai yếu tố này, mà còn nằm ở cách bạn đánh giá mức độ ảnh hưởng của chúng đối với mục tiêu dài hạn. Một khi đã xác định được ưu tiên, bạn sẽ dễ dàng hơn trong việc tìm ra phương án tối ưu nhất. Tuy nhiên, đừng quên rằng đôi khi việc cân bằng cả hai cũng là một chiến lược khôn ngoan, giúp bạn tránh những sai sót không đáng có trong tương lai.

Tất nhiênkeo 88, cá nhân tôi thích cách tiếp cận logic rõ ràng hơn.


Dưới sự chi phối của nguyên lý tăng entropybxh ngoai hang anh, sự tiến hóa của hệ thống cho thấy rõ ràng tính hướng tâm, luôn dịch chuyển về phía các trạng thái đại diện cho sự hỗn loạn và mất trật tự. Điều này như một quy luật bất di bất dịch mà mọi hiện tượng vật lý trong vũ trụ đều phải tuân theo, từ sự tan rã của ngôi sao cho đến sự phân hủy của các chất hữu cơ trong môi trường tự nhiên.entropy không chỉ là một khái niệm khoa học, mà còn là một lời nhắc nhở rằng ngay cả trong sự thay đổi, vẫn tồn tại một trật tự tiềm ẩn mà chúng ta cần khám phá.

Việc lập trình của chúng takeo 88, cũng như mọi hoạt động sống có trật tự, đều đang chống lại nguyên lý tối thượng này.

Hiểu sâu hơnbxh ngoai hang anh, hướng đi của sự biến đổi hệ thống theo nguyên lý tăng entropy thực chất chính là hướng đi của mũi tên thời gian.

Điều đó cho thấy thời gian luôn tiến về phía trướcbxh ngoai hang anh, không thể đảo ngược. Tất cả mọi thứ trên đời đều dần chịu sự tàn phá của thời gian, từ hư hại đến mục nát, già nua, và thậm chí có thể mất đi ranh giới rõ ràng với môi trườ Những tác động của thời gian như một dòng chảy vô hình không chỉ khiến vật chất trở nên mong manh hơn mà còn làm thay đổi bản chất vốn có của chúng theo cách mà đôi khi con người khó lòng kiểm soát được.

Nó là quy luật sắt đá trong tay thần thời gian.

Mã nguồn cũng giống như các vật khácbxh ngoai hang anh, không thể tránh khỏi sự phân hủy theo thời gian.

Cách duy nhất để giải quyết là tiêu tốn trí thông minh của chúng takeo 88, không ngừng duy trì nó. Như sự tiếp nối của văn minh.

Ngoại trừ —

Có một ngày nào đó,

Trí tuệ nhân tạo xuất hiện.

Có lẽtai ban ca, đến lúc đó, thế giới của chúng ta mới có thể duy trì vận hành với mức entropy thấp mãi mãi.

Thể hệ thấp entropy sau này có thể sẽ giống như người ca sĩtai ban ca, nhẹ nhàng ngân nga bài hát cổ xưa:

Tôi nhìn thấy tình yêu của tôi
Tôi bay đến bên cạnh cô ấy
Tôi trao cho cô ấy món quà của mình
Đó là một mảnh thời gian đông cứng
Thời gian có những đường nét đẹp đẽ
Cảm nhận mềm mại như bùn biển nông
……

(Kết thúc)


Phụ lục

Bài viết này đã trình bày tổng cộng ba ví dụ thực tế về lập trình. Tôi chọn những ví dụ này không phải vì chúng là những ví dụ xuất sắc nhấtbxh ngoai hang anh, mà bởi vì chúng tương đối độc lập và dễ trình bày rõ ràng. Trên thực tế, trong công việc lập trình hàng ngày, các cân nhắc, đánh đổi và quyết định liên quan đến việc biểu thị và duy trì trạng thái hệ thống - chủ đề chính của bài viết này - thường xuyên diễn ra, đặc biệt là khi thiết kế giao diện. Tuy nhiên, nhiều suy nghĩ phát sinh từ đó có thể chỉ thoáng qua như ánh sáng chớp, biến mất ngay sau đó. Bài viết này cố gắng tập hợp những ý tưởng nhỏ bé đó thành một chuỗi, hy vọng sẽ mang lại chút ít sự giúp đỡ cho người đọc. Điều thú vị là, dù chúng ta có thể không nhận ra ngay lập tức, nhưng mỗi quyết định nhỏ trong lập trình đều góp phần tạo nên nền tảng cho các dự án lớn hơn. Từ việc lựa chọn một hàm cụ thể để xử lý dữ liệu, cho đến việc xác định cách quản lý tài nguyên hệ thống, tất cả đều đòi hỏi sự cân nhắc cẩn thận. Điều này cũng đặt ra câu hỏi: liệu có cách nào để chúng ta học hỏi từ những kinh nghiệm nhỏ nhặt này, để cải thiện khả năng giải quyết vấn đề trong tương lai?

Các bài viết được chọn lọc khác


Bài viết gốcbxh ngoai hang anh, vui lòng ghi rõ nguồn và bao gồm mã QR bên dưới! Nếu không, từ chối tái bản!
Liên kết bài viết: /32pyzrn3.html
Hãy theo dõi tài khoản Weibo cá nhân của tôi: Tìm kiếm tên "Trương Tiết Lệ" trên Weibo.
Tài khoản WeChat của tôi: tielei-blog (Trương Tiết Lệ)
Bài trước: Chính thống và dị đạo trong công nghệ
Bài sau: Những mô hình phản xạ của lập trình viên