The Tar Pit – Vũng “đen”

I. Giới thiệu

Bài viết này là nội dung đút kết từ bài báo khoa học “The Tar Pit”, cùng với kinh nghiệm thực tế của tớ trong việc lập trình hệ thống chương trình lớn.

II. Khái niệm

1. “The Tar Pit” – nó có nghĩa là gì?

The Tar Pit có nghĩa đen là một vũng (hồ) nhựa đường. Vậy tại sao người ta lại dùng “nhựa đường” để nói đến một vấn đề trong việc lập trình?

Nhựa đường là một dạng của hợp chất Hidro Cacbon có tính chất là đặc quánh khi ở nhiệt độ cao và cứng khi ở nhiệt độ thường.(1) Nó được ứng dụng để làm đường – hiển nhiên. Nó thể hiện cho những khó khăn ban đầu (đặc quánh) nhưng “lỏng” và có thể cố gắng giải quyết được, nhưng rốt cuộc, nó cũng sẽ “đông” lại sau một quá trình “chậm hóa” và sẽ thành một khối “rắn” và không dễ gì “phá vỡ” được.

Cùng quay về thời tiền sử, khi trên trái đất còn tồn tại những loài vật to lớn như khủng long, voi ma mút và loài hổ răng kiếm. Khi đó, để sinh tồn, 3 loài vật này phải đấu tranh lẫn nhau để tồn tại và đó chính là sự kiềm hãm sự phát triển của chúng. Và rốt cuộc là không có một loài nào trong số chúng đủ mạnh, đủ khéo léo để thống trị. Chúng ta xem điều đó dường như là sự kiềm hãm trong nhựa đường. Ban đầu, chúng cố gắng “thống trị lẫn nhau”, nhưng dần dần những mất mát về số lượng (nóng và đặc quánh), buộc chúng phải dừng lại và “tránh mặt” nhau, điều đó dẫn đến sự song song cùng tồn tại (“chậm hóa”), chứ không thể tồn tại duy nhất một loài được (“đông” lại thành một khối).

2. Sự liên quan đến việc lập trình các hệ thống

Bản chất vấn đề của The Tar Pit (1) cũng tồn tại trong việc lập trình hệ thống. Nếu xem xét lịch sử phát triển những hệ thống có thể lập trình được trong những thập kỷ gần đây, đã có những thứ mạnh mẽ và tuyệt vời, đó chính là sự vượt qua những khó khăn trong vũng “đen”. Những hệ thống máy tính mới được xây dựng với khả năng có thể giải quyết được những vấn đề như tìm câu trả lời, lên lịch, hay thống kê ngân sách. Những hệ thống đó có thể to hoặc nhỏ, đồ sộ hay giản đơn (về mạch điện), nhưng hết đội phát triển này đến đội phát triển khác dần dần gặp những khó khăn trong quá trình phát triển (“chậm hóa”). Ví dụ, hết máy ENIVAC, ta đã có máy UNIVAC tốt hơn, nhưng cuối cùng, những hệ thống này đề dần lạc hậu và biến mất khỏi thị trường. Chính sự tích tụ ngày càng nhiều của những khó khăn, làm cho sự phát triển những hệ thống lớn dần dần chậm lại. Khi nghe vấn đề này, mọi người có thể thấy nó lạ, vì sao mà những hệ thống này có thể phát triển chậm trong khi nó đang rất hiện đại như thế này? Rất khó để có thể phân biệt bản chất của nó, nhưng để làm đươc một hệ thống lớn, bạn phải hiểu nó!

Vì thế, qua bài viết này, chúng ta sẽ cùng nhau xác định niềm vui và khó khăn trong việc lập trình.

3. Chương trình?

Chắc hẳn, bạn biết đến ông Bill Gates, một trong những người sáng lập ra công ty Microsoft. Cùng quay lại lịch sử lúc ông cùng người cộng sự Paul Allen bỏ học đại học và làm việc trong một gara nhỏ, sau đó đã viết nên một chương trình cực kỳ quan trọng vượt qua mọi nổ lực cố gắng của mọi nhóm khác. Câu chuyện về hai ông được xem như là chuyện tổ tích, vì từ phần mềm của hai ông có thể viết bất kì phần mềm nào có hiệu quả lớn hơn việc thống kê 1000 báo cáo trong một năm từ mội đội thống kê trong ngành công nghiệp. Bạn thử nghĩ xem, làm một báo cáo phải cần những gì, tốn thời gian bao lâu, thống kê rất nhiều dữ liệu,… và mới BASIC – chương trình thông dịch phần mềm trên hệ máy Altair của hai ông, mọi thứ trở nên đơn giản hơn nhiều!

Chúng ta sẽ bắt đầu từ hình ở góc trái trên cùng, đó là “A program”. Một chương trình đơn giản được đóng gói thực hiện một chức năng nhất định nào đó, tương tự như các bài toán tin trong thời phổ thông.

Từ vị trí đó, và đi xuống dưới, ta sẽ dừng chân ở vị trí “A programming product”. Nếu một chương trình chỉ đơn thuần là cách giải các bài toán bằng máy tính thì A Programming Product là tập hợp những A program nhỏ hơn với khả năng thử nghiệm, có thể sữa chữa, có thể phát triển thêm bởi tất cả mọi người. Những phần mềm dạng này đã được phát triển một cách ổn định và đóng gói sẵn sàng sử dụng, nó đã được viết đầy đủ các hướng dẫn,… để mọi người đều có thể dùng đươc. Ví dụ như các phần mềm Microsoft Office, LOL,… Nó tốn ít nhất 3 lần công sức để viết nên một chương trình. Vì sao? Khi bạn viết xong một chương trình, bạn còn phải viết hướng dẫn sử dụng, thử nghiệm các điều kiện của input và output,…

Bên phải của ô “A program” là ô “A Program System”. Đây là tập hợp các chương trình giao tiếp phần cứng, nó buộc phải hạn định trong một lượng tài nguyên nhất định, phải hoạt động ổn định với những module khác của hệ thống …, các chương trình phải được viết theo một quy tắc nhất định và thống nhất giữa các chương trình. Việc xây dựng một A Program System cũng tốn ít nhất 3 lần công sức so với A Program, và chi phí xây dựng nó sẽ tăng cao hơn nữa nếu có nhiều module trong một hệ thống.

Cuối cùng, ô dưới cùng bên phải là “A Programming Systems Products”, nói một cách đơn giản, nó tốn 9 lần công sức so với việc xây dựng A Program. Dạng phần mềm này là đích đến thật sự mà những chương trình kia muốn hướng đến. Nói một cách khác, A Programming Systems Products, chính là một hệ thống ngôn ngữ lập trình bậc cao kết hợp với giao diện đồ họa (basic, processing, java,…). “A program” là một ngôn ngữ việc ở những cấp thấp hơn như C, hợp ngữ và mã máy. 2 đối tượng phần mềm còn lại là tập hợp các “A program” theo nhữựg quy tắc nhất định.

III. Sự thú vị trong lập trình và những khó khăn tồn tại

1. Sự thú vị trong việc lập trình

Nếu bạn biết lập trình, thì chắc hẳn phải cảm thấy có ít nhất một điều khiến bạn thích thú với việc lập trình. Ở đây, chúng ta sẽ cùng nhau tìm hiểu những điều gì làm ta thấy thú vị với lập trình.

Thứ nhất, đó là niềm vui. Bạn thấy vui khi được làm một việc gì đó mà chính tay bạn tự làm, do chính bạn đầu tư công sức,… chẳng hạn như xây một căn nhà, viết một chương trình,… Với tớ, đó là niềm vui khi làm được những phần mềm do chính tay mình viết, làm nên những chú robot do chính tay mình hàn, ráp mạch,…

Thứ hai, đó là niềm vui khi được làm một điều hữu ích cho người khác. Sâu vào bên trong tâm hồn, bạn mong muốn người khác sử dụng sản phẩm của bạn và hi vọng họ cảm thấy thoải mái và tìm được những điều hữu ích từ nó. Với tớ, đó là những ước muốn, mong muốn những phần mềm, robot mình có thể làm được, và nuôi dưỡng giấc mơ nó được mọi người đón nhận.

Thứ ba, đó là sự lôi cuốn của phong cách lập trình. Không như những bài văn, bài thơ bắt bạn phải canh dòng, căn chữ, ngữ nghĩa,… một đoạn chương trình có thể xem như một chương thơ, từng dòng như những áng thơ và cả một chương trình như những tuyển tập thơ dài kì bất hũ. Các cú pháp, cách biểu các khối lệnh, cách đặt tên biết,… đó là một sự cuốn hút không thể chối cãi. Và với tớ, xem việc học và nghiên cứu nhiều ngôn ngữ lập trình cũng giống như việc học ngoại ngữ trong thế giới thực. Nhưng không hiểu sao, ngôn ngữ lập trình lại dễ lôi cuốn tớ hơn!

Thứ tư, đó là niềm vui khi luôn luôn được học hỏi, lò mò, lọ mọ tìm ra những lỗi, giải quyết từng vấn đề nãy sinh trong quá trình lập trình. Nó chỉ đơn giản là những dấu chấm, nhưng ngốn của ta hơn vài giờ ( (1 / 2 = 0) != (1 / 2.0 = 0.5)). Nhưng khi giải quyết được điều đó, bạn sẽ thấy sướng như đi trên mây. Với tớ, việc tìm ra một ý tưởng sáng tạo đã khó và thích thú, nhưng gặp các vấn đề khi tiến hành triển khai nó và cuối cùng là vượt qua các thử thách đó một cách hoàn hảo không bao giờ là chán cả!

Cuối cùng, việc xây dựng một chương trình sẽ đem lại cho bạn những niềm vui mà bạn sẽ không bao giờ có thể ngờ tới. Nó sẽ cho bạn cảm giác như vẽ một bức tranh (trong khi khả năng vẽ bằng các dụng cụ truyền thống của bạn dỡ tệ), như sáng tác một bài hát, một giai điệm (trong khi bạn không quá rành về các nhạc cụ),… Đó có thể xem là việc thần thoại hay huyền thoại trở thành sự thật trong thế giới này. Chỉ cần một câu thần chú chính xác trên bàn phím, một hiển thị chính xác trên màn hình và điều chứng minh một điều đúng hoặc không!

Tóm lại, lập trình làm chúng ta vui bởi vì, nó làm hài lòng khát khao sâu ẩn bên trong chúng ta và nhấn mạnh cái cảm giác chúng ta có điểm chung với tất cả mọi người!

2. Những khó khăn bạn sẽ gặp phải

Con đường thành công không phải lúc nào cũng trải thảm đỏ, nó sẽ có những gai góc và chỉ dành cho người dám vượt qua chúng. Và nếu bạn biết những khó khăn bạn sẽ gặp phải thì bạn sẽ cảm thấy dễ chịu hơn khi đối đầu với nó!

Điều đầu tiên, có thể là khó khăn nhất đó là cú pháp của chương trình. Một câu thần chú sẽ không hiệu nghiệm nếu bạn đọc sai. Điều đó dẫn đến phép màu sẽ không diễn ra nữa.

Tiếp theo, đối lập với niềm vui được xây dựng cái do chính tay mình làm nên. Đó là bạn việc phải làm một công việc theo yêu cầu của một người, cung cấp một số quyền hạn nhất định,… Việc phụ thuộc vào một người khác, không được tự do theo suy nghĩ của mình đó âu cũng là sự cần thiết nhưng đôi khi nó gây là ảnh hướng đến tiêu cực đến suy nghĩ và cách làm việc của bạn. Giống như việc bạn phải bỏ hàng giờ học và sửa những phần trong một hệ thống mà của một người khác trước bạn đã làm nên, anh ta bị đuổi việc và bạn thay thế vị trí của anh ý.

Bi ai tiếp theo dành cho bạn đó là việc lập trình sẽ có những thời gian buồn chán và bạn phải chịu khó ngồi làm những phần việc mình bắt dầu. Giống như việc nghĩ ra ý tưởng thì rất dễ và vui, nhưng bạn có thể sẽ bối rối khi không biết mình phải làm gì để vượt qua những gì mình đã đề ra. Việc hoạt động sáng tạo cũng sẽ đến lúc buồn chán, và lúc đó là thời gian thử thách sự kiên trì và ý chí của bạn. Chỉ cần nghĩ đơn giản, ai cũng như ai thì không có ai nổi bật, nếu bạn vượt qua điều này, bạn sẽ là người nổi bật nhất!

Tiếp đến, là việc debug, nhiều khi bạn mắc phải những lỗi lớn và bạn biết nó là gì. Nhưng để giải quyết nó, bạn phải chia nó thành các phần nhỏ hơn, và rồi lại “bí”. Cứ như thế, nó tốn rất nhiều thời gian cho việc debug. Hãy xem lại bi ai bạn phải học và sửa những phần lỗi của người khác. Thật đau đầu!

Cuối cùng, và dườm như trong một số trường hợp là cái gây ra sự buồn chán nhất (nếu cái thứ nhất không là điều khó với bạn). Đó là khi bạn phát triển một phần mềm quá lâu, và đến lúc bạn ra mắt phần mềm đó, nó đã lỗi thời; hoặc các đối thủ cạnh tranh của bạn đã ra một sản phẩm khác trước đó có cùng trước năng,... và mọi ưu điểm của bạn đã bị đối thủ “dành” mất! Lúc đó, bạn sẽ cảm thấy lạc lõng, cô đơn, thất vọng, buồn chán, và phần lớn mọi người sẽ từ bỏ. Nhưng hãy nhìn những gì Steve Jobs đã trải qua, bạn sẽ thấy điều này chả là gì cả!

IV. Kết luận

Tất nhiên, công nghệ được xây dựng trên những thứ thường xuyên hiện hữu. Và sẽ sớm đến lúc, một thiết kế trở nên lạc hậu. Bạn phải biết quản lý nguồn lực, phải đi theo một hướng khác với những hướng khác đã tồn tại, và không mâu thuẫn với điều bạn thực hiện, đó là một thách thức nhưng đồng thời cũng là một nhiệm vụ và bạn phải giải quyết, để cuối cùng bạn sẽ tìm ra giải pháp các vấn đề mà bạn mong muốn thực hiện, và điều đó sẽ thật tuyệt vời nếu đó là giấc mơ của bạn.

Việc phấn đấu của bạn trong lập trình cũng chính là bạn đươn đầu với những thức thách trong một vũng “đen” hắc in lớn, bạn càng giải quyết nhiều vấn đều và xây dựng nhiều vấn đề mới, thì bạn sẽ phát triển hơn nữa. Nhưng nếu cứ để những vấn đề “dồn cục” thì sẽ khó khăn hơn rất nhiều! Đối với nhiều người, họ xem niềm vui nhiều hơn tai họa, vì vậy họ thành công, ít người hơn trong số đó cực kì thành công vì họ xem tai họa là kinh nghiệm, là mẹ dẫn đến thành công. Và phần còn lại chấp nhận thực tế khó khăn và chán nản, rẻ đủ hướng cuối cùng rơi vào vòng luẩn quẩn khủng long, ma mút, hổ răng nanh. Tôi và bạn đều tin rằng, ta sẽ không từ đó, nhưng hãy chứng minh điều đó bằng hành động đi nào!

lên
5 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Cách lập trình nhiều con LED 7 đoạn (loại đơn)

Ở bài viết này, tôi sẽ giúp các bạn điều khiển nhiều con LED 7 đoạn với Arduino hoặc ATTiny13. Từ đây, bạn có thể tự xây dựng cho mình một màn hình số để làm một máy tính bỏ túi cực kỳ đơn giản. Và quan trọng hơn, đó là những thứ do chính tay bạn tự làm ra!

lên
40 thành viên đã đánh giá bài viết này hữu ích.

Điều khiển NHIỀU NÚT BẤM chỉ với một chân của Arduino

Qua quá trình làm việc với Arduino, mình thấy có một giải pháp rất hay về việc sử dụng button với Arduino. Đó là chỉ cần sử dụng một chân analog với các nút nhấn và các điện trở có trị số khác nhau, ta có thể làm ra một bàn phím. Qua bài viết này, mình xin chia sẻ thư viện mình mới viết cho vấn đề này.

lên
14 thành viên đã đánh giá bài viết này hữu ích.