Về cốt lõi, máy tính là tổng hợp của đại số Boolean và điện. Thành phần trọng yếu đã hợp nhất hỗn hợp của toán và phần cứng này lại là cổng logic. Nó không khác gì với những cái cổng thân thuộc để nước và người đi qua. Cổng logic thực hiện những phép toán đơn giản trong logic Boolean bằng cách chặn hay cho dòng điện đi qua.
Bạn nhớ lại trong chương trước đã đi vào cửa hàng thú cưng và nói dõng dạc, “Tôi muốn một con mèo đực đã thiến, trắng hay nâu đều được; không thì mèo cái đã triệt sản, màu nào cũng được trừ trắng; không có nữa thì tôi sẽ lấy bất cứ con mèo đen nào.” Các tiêu chí này được tóm gọn bằng biểu thức Boolean:
(M × N × (W + T)) + (F × N × (1 – W)) + B
Có thể minh hoạ theo kiểu tương tác biểu thức này bằng một mạch với pin, công tắc và bóng đèn:
Mạch như trên đôi khi được gọi là mạng, tuy nhiên ngày nay thuật ngữ này lại dùng để chỉ các máy tính kết nối với nhau hơn là một tập hợp các công tắc đơn thuần.
Mạch này là sự kết hợp của các công tắc, một số nối tiếp và một số nối song song. Các công tắc nối tiếp thực hiện phép toán logic AND, được biểu diễn trong biểu thức Boolean bằng ký hiệu ×. Các công tắc nối song song thực hiện phép toán logic OR tương ứng với ký hiệu +. Vì tương đương với biểu thức Boolean nên nếu biểu thức Boolean có thể được rút gọn thì mạch cũng có thể được tinh giản.
Đây là biểu thức thể hiện đặc điểm của mèo mà bạn muốn:
(M × N × (W + T)) + (F × N × (1 – W)) + B
Hãy thử rút gọn nó. Dùng quy tắc giao hoán, bạn có thể sắp xếp lại các biến kết hợp với dấu AND (×) và viết lại như thế này:
(N × M × (W + T)) + (N × F × (1 - W)) + B
Nhằm làm rõ điều tôi muốn làm ở đây, tôi sẽ định nghĩa hai kí hiệu mới là X và Y:
X = M × (W + T) Y = F × (1 – W)
Giờ biểu thức cho mèo cần tìm được viết lại là:
(N × X) + (N × Y) + B
Khi nào xong ta sẽ thay X và Y vào lại. Chú ý biến N xuất hiện 2 lần trong biểu thức. Dùng quy tắc phân phối, biểu thức có thể viết lại như này chỉ với 1 N:
(N × (X + Y)) + B
Giờ trả X và Y về:
(N × ((M × (W + T)) + (F × (1 – W)))) + B
Do có quá nhiều ngoặc nên trông nó chả gọn hơn tẹo nào. Nhưng đã giảm bớt một biến nghĩa là bỏ được một công tắc. Phiên bản mới:
Thật sự thì nhìn vào hình này dễ thấy được sự tương đồng với hình trước hơn là so sánh hai biểu thức sau khi rút gọn có như nhau không!
Nhưng vẫn còn quá nhiều công tắc trong mạng này. Có 2 công tắc riêng cho Đực và Cái, nhưng một công tắc là đủ, có thể bật (hoặc đóng) cho Cái và tắt (hoặc mở) cho Đực. Tương tự, có 2 công tắc riêng biệt cho Trắng và Không Trắng.
Hãy tạo một bảng điều khiển chọn mèo ngay nào. Bảng điều khiển đơn giản chỉ gồm năm công tắc (giống với công tắc tắt/mở trên tường nhà bạn để điều khiển đèn) với một bóng đèn gắn trên một tấm bảng.
Bảng chọn mèo
Công tắc bật (đóng) khi được đẩy lên, và tắt (mở) khi đẩy xuống. Công tắc đầu tiên để chọn Đực Cái; cái thứ hai để chọn triệt sản hay chưa. Có ba công tắc để chọn màu: Đen, Trắng và Nâu. Chỉ một trong số chúng được bật tại một thời điểm, hay không có cái nào bật để chọn màu Khác.
Trong thuật ngữ máy tính, bảng công tắc tạo nên một thiết bị đầu vào. Đầu vào là thông tin điều khiển cách mạch hoạt động, trong trường hợp này là để mô tả đặc điểm con mèo cần tìm. Thiết bị đầu ra là bóng đèn. Đèn sáng nếu công tắc mô tả đúng con mèo. Công tắc đang hiện trên bảng đang chọn mèo cái màu đen còn đẻ được. Thoả mãn điều kiện của bạn nên đèn sáng.
Việc ta cần làm bây giờ là thiết kế mạch để nó hoạt động.
Trong chương trước bạn đã thấy thiết bị gọi là rơle đóng vai trò quan trọng thế nào vào hoạt động của hệ thống điện báo. Ở một khoảng cách xa, dây dẫn nỗi các trạm điện báo có điện trở rất lớn. Cần một phương pháp nào đó để gửi đi một tín hiệu mạnh như ban đầu dù nhận một tín hiệu yếu. Rơle làm điều này bằng cách dùng nam châm điện để điều khiển công tắc, tạo hiệu ứng khuếch đại một tín hiệu yếu để tạo tín hiệu mạnh hơn.
Nhưng giờ, ta không cần dùng rơle để khuếch đại tín hiệu yếu. Ta chỉ thích thú với khả năng rơle là một công tắc được điều khiển bằng điện thay vì dùng tay.
Mặc dù rơle ban đầu thiết kế cho điện báo nhưng cuối cùng chúng lại là một phần của mạch chuyển dùng trong mạng lưới rộng lớn của hệ thống điện thoại và như vậy sự linh hoạt của nó trở nên rõ ràng với các kĩ sư điện giàu tưởng tượng.
Như công tắc, rơle có thể được nối nối tiếp hoặc song song thành cổng logic để biểu diễn tác vụ đơn giản của logic. Khi tôi nói những cổng logic này biểu diễn những tác vụ đơn giản trong logic, ý tôi là đơn giản nhất có thể. Rơle có lợi thế hơn công tắc đó là rơle có thể bật tắt bằng một rơle khác chứ không nhất thiết là bằng tay. Có nghĩa là cổng logic có thể kết hợp để thực hiện nhiều tác vụ phức tạp hơn, như các hàm đơn giản trong số học để cuối cùng là vận hành của máy tính.
Việc phát hiện ra rơle có thể được sử dụng để thực hiện các phép toán Boolean thường được ghi nhận cho nhà tiên phong máy tính Claude Elwood Shannon (1916–2001), người có luận văn thạc sĩ nổi tiếng năm 1938 tại MIT có tiêu đề “Phân tích kí hiệu của rơle và mạch chuyển”, nhưng một nghiên cứu tương tự đã được mô tả vài năm trước đó bởi kỹ sư điện Nhật Bản Akira Nakashima.
Bạn có thể nối rơle với công tắc, bóng đèn, và pin như này:
Công tắc trái mở và bóng đèn không sáng. Khi đóng công tắc, viên pin bên trái làm dòng điện chạy qua rất nhiều vòng quấn quanh thanh sắt. Thanh sắt nhiễm từ rồi kéo thanh trục hay thanh động xuống để nối mạch làm đèn sáng:
Khi nam chậm điện kéo thanh kim loại xuống, rơle được nói là đã kích hoạt. Khi công tắc tắt, thanh sắt mất từ tính, và thanh kim loại quay trở về vị trí cũ.
Có vẻ như đây là con đường gián tiếp để bật đèn, và đúng là như vậy. Nếu ta chỉ thích làm cho đèn sáng thôi, ta có thể bỏ đi hết toàn bộ rơle. Nhưng ta lại không muốn thắp đèn. Ta có một mục tiêu xa hơn nữa kìa.
Ta sẽ dùng rất nhiều rơle trong chương này (rồi hầu như là chẳng đụng gì nữa khi tạo được cổng logic), nên tôi muốn đơn giản sơ đồ này lại. Ta có thể bỏ bớt dây dẫn nhờ nối đất và một chữ V (cho điện áp) để đại diện pin, như đã làm trong các chương trước. Trong trường hợp này nối đất đơn giản đại diện cho nối chung không cần phải nối hẳn với bề mặt trái đất. Giờ rơle trông như thế này:
Khi công tắc đóng, một dòng điện chảy giữa V và nối đất tới các vòng dây của nam châm điện. Khiến nam châm điện kéo thanh động xuống. Việc này đã kết nối mạch giữa V, bóng đèn và nối đất. Đèn sáng:
Những đồ hình rơle này vẽ hai nguồn điện áp và hai nối đất, nhưng trong suốt chương, tất cả V có thể nối với nhau và tương tự cho nối đất.
Trừu tượng hơn, rơle có thể được vẽ mà không có công tắc hay bóng đèn mà thay bằng input và output:
Nếu một dòng chạy qua input (ví dụ, công tắc nối input với V), nam châm điện được kích hoạt và output có điện áp.
Input của rơle không nhất thiết là công tắc còn output thì không nhất thiết là bóng đèn. Output của một rơle có thể nối với input của một rơle khác, ví dụ như sau:
Những rơle này được xem là có tính lan truyền (cascade). Khi ta bật công tắc, rơle đầu kích hoạt, sau đó cung cấp điện áp cho rơle sau. Rơle thứ hai này được kích hoạt và đèn sáng:
Nối rơle là chìa khoá để dựng cổng logic.
Cũng như công tắc có thể nối nối tiếp, rơle cũng vậy:
Giờ có 2 công tắc cho 2 rơle. Output của rơle trên cung cấp điện áp cho rơle dưới. Như bạn thấy, khi hai công tắc đều mở, đèn tắt. Ta thử đóng công tắc trên:
Bóng đèn vẫn không sáng vì công tắc dưới vẫn mở và rơle đó không được kích hoạt. Ta có thể thử mở công tắc trên và đóng công tắc dưới:
Đèn vẫn không sáng. Dòng điện không đi tới được đèn vì rơle trên chưa được kích hoạt. Cách duy nhất để thắp sáng đèn là đóng cả hai công tắc:
Giờ hai rơle được kích hoạt và dòng điện có thể chạy qua V, bóng đèn và nối đất.
Như hai công tắc nối tiếp, hai rơle này đang biểu diễn một thực nghiệm logic nhỏ. Đèn sáng chỉ khi hai rơle được kích hoạt. Hai rơle nối tiếp được gọi là cổng AND vì nó biểu diễn phép toán Boolean AND.
Để tránh vẽ nhiều quá mỏi tay, các kĩ sư điện có một kí hiệu cho cổng AND. Như thế này:
Cổng đầu tiên trong sáu cổng logic cơ bản. Cổng AND có hai input và một output. Bạn sẽ thường thấy cổng AND được vẽ với input bên trái và output bên phải. Bởi vì người ta quen đọc từ trái sang phải nên cũng thích đọc sơ đồ mạch điện kiểu vậy. Nhưng nếu vẽ input trên đầu hay trái phải của cổng AND cũng ổn cả thôi.
Mạch cũ với hai rơle được nối nối tiếp được ký hiệu hoá đầy đủ hơn như này:
Để ý là kí hiệu cho cổng AND không chỉ thay thế cho mỗi hai rơle nối nối tiếp mà còn ngầm hiểu là rơle trên được nối với một nguồn điện áp, và cả hai rơle đều nối với đất. Một lần nữa, đèn chỉ sáng khi cả hai rơle trên và dưới đều đóng. Đó là lí do nó được gọi là cổng AND.
Nếu ta xem không có điện áp là 0, và có là 1, output cổng AND phụ thuộc vào input như sau:
Cũng như hai công tắc nối nối tiếp, cổng AND có thể mô tả bằng bảng này:
Input của cổng AND không nhất thiết phải được nối với công tắc và output không nhất thiết phải nối với bóng đèn. Output của cổng AND có thể là input cho cổng AND thứ hai. Như sau:
image.png81.7 KB
Đèn sáng khi cả ba công tắc đóng. Chỉ khi hai công tắc trên cùng đóng mới tạo ra một điện áp ở output cổng AND đầu tiên, và nếu công tắc thứ ba đóng thì output cổng AND thứ hai mới có điện áp.
Cấu hình mô tả bằng kí hiệu này:
Nó được gọi là cổng AND 3-input. Output chỉ là 1 khi cả 3 input là 1. Bạn cũng có thể tạo một cổng AND với nhiều input hơn.
Cổng logic tiếp theo cần hai rơle nối song song như sau:
Để ý là output của hai rơle được nối với nhau. Kết nối này sau đó cung cấp điện cho đèn. Một trong hai rơle là đủ để đèn sáng. Ví dụ, nếu ta đóng công tắc trên, đèn sáng. Đèn nhận năng lượng từ rơle trên:
Tương tự, nếu ta để mở công tắc trên và đóng công tắc dưới, bóng đèn sáng:
Đèn cũng sáng khi đóng cả hai công tắc:
Ta có ở đây là một mạch làm đèn sáng nếu công tắc trên hoặc dưới đóng. Từ khoá ở đây là hoặc, nên cổng này được gọi là cổng OR. Kĩ sư điện dùng kí hiệu cho cổng OR như thế này:
Trông nó hơi giống với kí hiệu cho cổng AND chỉ có khác là phía input cong, giống với chữ O trong OR. (Điều này có thể giúp bạn dễ liên tưởng hơn.)
Output của cổng OR cung cấp một điện áp nếu một trong hai input có điện. Một lần nữa, nếu ta cho không có điện là 0 và có là 1 thì cổng OR có bốn trạng thái:
Giống với cách ta tóm tắt output cổng AND, ta có thể làm như thế với cổng OR:
Cổng OR cũng có thể có nhiều hơn 2 input. Output là 1 nếu bất kì input nào là 1; output là 0 chỉ khi cả tất cả input là 0.
Rơle tôi cho các bạn xem nãy giờ được gọi là rơle chuyển đổi (hay rơle 2 tiếp điểm, rơle double-throw). Ở trạng thái nghỉ, thanh trục kim loại bên trên chạm vào một điểm, khi nam châm điện kéo nó xuống, nó chạm điểm kia. Điểm chạm ở dưới được gọi là output mở bình thường. Đó là cái ta dùng sớm giờ, nhưng ta cũng dùng được điểm chạm trên, được gọi là đóng bình thường. Khi ta dùng điểm chạm trên, output của rơle bị đảo. Bóng đèn sáng khi công tắc đầu vào mở:
Khi công tắc đầu vào đóng, bóng đèn tắt:
image.png105 KB
Một rơle đơn nối theo cách này được gọi là inverter (rơle đảo). Được đại diện bằng một ký hiệu đặc biệt trông như sau:
Nó được gọi là inverter vì nó đảo 0 (không điện thế) thành 1 (có điện thế) và ngược lại:
Đây là thực nghiệm của toán tử Boolean NOT.
Đôi khi người ta nhìn vào inverter bên trên và hỏi "Làm thế nào lại có điện áp ở output trong khi input không có gì? Điện áp đó tới từ đâu?" Nhớ trong đầu inverter là rơle được nối với nguồn điện.
Với inverter, cổng AND và cổng OR ta có thể bắt đầu nối bảng điều khiển tự động tìm mèo. Cùng xem lại nào:
image.png247 KB
Hãy bắt đầu với công tắc. Công tắc đầu tiên đóng cho cái và mở cho đực. Do đó ta sẽ tạo 2 tín hiệu gọi là F và M, như sau:
Khi F là 1, M sẽ là 0 và ngược lại. Tương tự, công tắc thứ hai đóng cho mèo đã triệt sản và mở cho chưa:
Ba công tắc khác chọn màu: đen, trắng hoặc nâu. Dưới đây là cả ba nối vào một nguồn điện:
image.png30.7 KB
Một vài quy tắc đơn giản giúp kiểm soát cách nối cổng và inverter: Output của một cổng (hoặc inverter) có thể là input của một hay nhiều cổng (hoặc inverter) khác. Nhưng đừng nối output của các cổng (hay inverter) lại với nhau.
Bản rút gọn của biểu thức chọn mèo là
(N × ((M × (W + T)) + (F × (1 − W)))) + B
Với mỗi dấu + trong biểu thức, phải có một cổng OR trong mạch. Với mỗi dấu × phải có một cổng AND.
image.png109 KB
Ký hiệu từ trên xuống ở bên trái sơ đồ mạch theo đúng thứ tự trong biểu thức. Những dấu hiệu này đến từ ba sơ đồ trước đó. Chú ý có dùng thêm một inverter cho phần (1 - W) của biểu thức.
Bạn có thể thốt lên là, “Quá trời rơle thế này”, và vâng, đúng vậy đấy. Có hai rơle cho mỗi một cổng AND và OR, và một cho mỗi inverter. Nhưng tôi e là chúng ta sẽ còn dùng nhiều hơn nữa trong những chương tới. Được cái khoẻ là bạn không cần phải mua rồi nối chúng ha. (Trừ khi bạn muốn thế!)
Tôi đã đề cập trước đó là có sáu cổng logic tiêu chuẩn. Bạn đã thấy được ba, giờ là lúc những cái còn lại lên sàn diễn. Hai cái đầu tiên dùng output đóng bình thường của rơle mà inverter đã dùng. Output này có điện áp hiện diện khi rơle không được kích hoạt. Ví dụ, trong cấu hình output từ một rơle cung cấp năng lượng cho rơle thứ hai. Với cả hai input tắt, bóng đèn sáng:
Nếu công tắc trên đóng lại, đèn tắt:
Đèn tắt là bởi vì rơle thứ hai không còn được cung cấp điện nữa. Tương tự, nếu công tắc trên mở còn công tắc dưới đóng, đèn cũng tắt luôn:
Và nếu hai công tắc đều đóng thì cũng vậy:
Hoạt động này đối lập hoàn toàn với cổng OR. Nó được gọi là NOT OR, hay gọn hơn là NOR. Đây là kí hiệu cho cổng NOR:
Trông tương tự với cổng OR trừ điểm tròn nằm ở output. Hình tròn này nghĩa là đảo ngược. Cổng NOR tương đương cổng OR theo sau bởi inverter:
Bảng có kết quả ngược hẳn bảng OR, là 1 nếu chỉ khi một input là 1 và 0 khi cả hai input là 0.
Và còn một cách nối khác cho hai rơle là:
Trong trường hợp này cả hai output tương tự như cổng OR trừ việc dùng điểm chạm khác. Đèn sáng khi cả hai công tắc đều mở.
Đèn vẫn sáng khi công tắc trên đóng vì nó vẫn nhận năng lượng từ rơle dưới:
Tương tự, khi chỉ công tắc dưới đóng thì đèn nhận năng lượng từ rơle trên:
Chỉ khi cả hai công tắc đều đóng thì đèn mới ngủm:
Hoạt động này đối lập hoàn toàn với cổng AND. Nên được gọi là NOT AND, gọn hơn là NAND. Không như NOR từ NAND được đặt riêng để mô tả loại logic này. Từ này ra đời từ năm 1958.
Cổng NAND được vẽ giống cổng AND ngoài việc thêm hình tròn ở output, mang nghĩa đảo của cổng AND:
Nhớ lại là output của cổng AND bằng 1 chỉ khi cả 2 input là 1; còn lại thì output là 0. Output của cổng NAND đối lập.
Tới đây, ta đã thấy có bốn cách khác nhau để nối rơle với hai input và một output. Mỗi cấu hình hoạt động theo một cách hơi khác nhau. Để tránh vẽ đi vẽ lại rơle, ta đã gọi chúng là cổng logic và quyết định dùng kí hiệu như của các kĩ sư điện để đại diện. Output của một cổng logic bất kì phụ thuộc vào input, được tóm tắt trong bảng sau:
image.png139 KB
Inverter trông như này:
image.png9.52 KB
Nó đảo một tín hiệu từ 0 thành 1 hoặc từ 1 thành 0.
Nhân tố cuối cùng hoàn thành chuỗi công cụ này chỉ là một rơle bình thường cũ kĩ:
Được gọi là buffer (đệm), và đây là kí hiệu cho nó:
Tương tự với inverter nhưng không có chấm tròn. Điểm quan trọng của nó là không làm gì nhiều nhặn. Output của buffer tương tự input:
Nhưng bạn có thể dùng buffer khi tín hiệu input yếu. Bạn nhớ lại đây là lí do vì sao rơle được phát minh cho điện báo nhiều năm trước. Trong mạch logic thực tế đời sống, đôi khi một output phải phục vụ cho nhiều input. Nó được gọi là fan out (phân nhánh), và nó có thể khiến cho các output ít năng lượng đi. Buffer có thể giúp tăng cường năng lượng đó. Hoặc có thể được dùng để làm trễ tín hiệu. Là bởi rơle cần thời gian – vài phần giây – để được kích hoạt.
Từ đây trở đi, bạn sẽ ít thấy hình vẽ rơle. Thay vào đó mạch sẽ được dựng từ buffer, inverter, bốn cổng logic 2-input cơ bản, và các mạch tinh vi hơn được tạo từ những cổng logic này. Tất cả những phần tử khác này được làm từ rơle, tất nhiên rồi, nhưng ta không cần phải nhìn vào rơle nữa.
Tua ngược về đầu chương, một bảng điều khiển nhỏ được bày ra cho phép bạn tìm thấy con mèo lý tưởng. Nó có công tắc cho màu đen, trắng và nâu nhưng bỏ qua công tắc cho màu khác - bất kỳ con mèo có màu không phải đen, trắng hay nâu. Nhưng đó là một tín hiệu có thể được tạo từ 3 inverter và một cổng AND 3 input:
image.png41.7 KB
Ba input bị đảo và trở thành input cho một cổng AND. Chỉ khi cả B, W và T là 0 thì tất cả input cho cổng AND mới là 1 và tạo ra output 1.
Đôi khi một cấu hình như thế được vẽ mà không có inverter:
image.png20.7 KB
Chú ý các chấm tròn nhỏ ở input của cổng AND. Chúng có nghĩa là tín hiệu bị đảo tại vị trí đó - 0 (không điện áp) thì thành 1 (có điện áp) và ngược lại.
Nếu bạn phải chọn chỉ một cổng logic trong sáu cái đã xem này, thì hãy chọn hoặc là NAND hoặc là NOR. Bạn có thể dùng nó để tạo tất cả các cổng logic khác. Ví dụ đây là cách để kết hợp tất cả input của cổng NAND để tạo một inverter:
image.png19.1 KB
Bạn có thể dùng nó cho output của một cổng NAND khác để tạo thành cổng AND. Ban đầu, không rõ cách nào để tạo cổng OR từ cổng NAND, nhưng rồi cũng sẽ làm được. Bởi vì cổng NAND với tất cả input đảo hoạt động như cổng NOR:
Output là 1 chỉ khi cả hai input là 0.
Tương tự, cổng OR với hai input bị đảo tương đương với cổng NAND:
Output là 0 chỉ khi cả hai đầu vào là 1.
Hai nhóm mạch tương đồng này đại diện cho một triển khai điện của Luật De Morgan. Augustus De Morgan là một nhà toán học Victoria khác, lớn hơn Boole chín tuổi, cuốn sách Formal Logic của ông xuất bản năm 1847, cùng ngày với (như người đời bảo nhau) The Mathematical Analysis of Logic của Boole. Thật ra Boole có cảm hứng phát minh cổng logic từ thù hằn công khai được phát động giữa De Morgan và một nhà toán học người Anh khác về việc cáo buộc ăn cắp ý tưởng. (De Morgan đã được minh chứng trong sạch bởi lịch sử.) Từ rất sớm, De Morgan nhận ra tầm quan trọng tầm nhìn của Boole. Ông đã không ích kỉ mà động viên Boole, và giúp Boole trên hành trình này, và ngày nay buồn thay hầu hết đã quên mất điều đó ngoại trừ định luật nổi tiếng của ông.
Luật De Morgan được mô tả giản đơn thế này:
A và B là hai toán hạng Boolean. Đường ngang trên đầu thể hiện sự đảo. Trong biểu thức đầu, chúng bị đảo và kết hợp với toán tử AND. Tương đương với kết hợp hai toán hạng với toán tử OR rồi đảo kết quả (NOR). Nó cũng đúng trong tiếng Anh: Nếu trời không mưa và trời không tuyết thì nó không mưa hay tuyết.
Trong biểu thức thứ hai, chúng cũng bị đảo nhưng kết hợp với toán tử OR. Lần này tương đương với kết hợp toán hạng với toán tử AND rồi đảo lại (NAND). Nếu tôi không to lớn hay tôi không mạnh thì tôi không to lớn và mạnh. Luật De Morgan là công cụ quan trọng để rút gọn biểu thức Boolean và do đó đơn giản hoá luôn mạch. Đã từ lâu, đây là ý nghĩa dành cho kĩ sư điện từ bài viết của Claude Shannon. Nhưng việc tối giản mạch không phải là mối quan tâm chính trong cuốn sách này. Sẽ thú vị hơn nếu làm cho thứ gì đó hoạt động được chứ không chỉ là hoạt động đơn giản nhất có thể.
Dự án lớn tiếp theo không gì khác ngoài một máy cộng điện tử được xây dựng hoàn toàn từ cổng logic. Nhưng dự án đó cần phải hoãn lại vài chương trong khi ta quay ngược trở lại cấp tiểu học để học đếm số.
36
Open to Work
Looking for a Fullstack Ruby on Rails developer?
I am open to new remote/hybrid opportunities and contract work.