Lập trình và Thiền

Lập trình và Thiền

Profile image
Hữu Nghị
Th04 04, 2025 • 17 min read

Có những người thích sống thầm lặng, yên tĩnh, tách biệt – và với họ, code là một liệu pháp chữa lành. Là chốn nương náu. Là một "cánh cửa" mở ra nhiều hy vọng giữa một thế giới đầy rối loạn và khó nắm bắt.


Ở tuổi 38, tôi quyết định trở thành một Lập trình viên toàn diện (full-stack developer).

Nghe có vẻ như một quyết định điên rồ phải không? Khi hầu hết mọi người ở độ tuổi này đã ổn định với sự nghiệp, tôi lại bắt đầu học một thứ hoàn toàn mới. 

Không phải vì tôi muốn chuyển nghề, mà vì tôi cần nó để giải quyết vấn đề của chính mình. Tại công ty mà tôi sáng lập, mọi thứ vận hành xoay quanh một website, chạy trên một máy chủ, do một đối tác công nghệ thuê ngoài quản lý.

Qua một vài biến cố làm lộ ra những điểm yếu của dịch vụ thuê ngoài, tôi nhận ra mình cần phải nắm bắt, "sở hữu" năng lực, hoặc ít nhất là hiểu được những yếu tố công nghệ cốt lõi để giữ cho máy chủ được vận hành ổn định.

Tôi bắt đầu với việc "cắp sách đi học" môn "quản trị máy chủ Linux" ở cấp độ nền tảng nhất. Đó là khoảng cuối năm 2020, với suy nghĩ đơn giản rằng, nếu như tôi đã có thể trở thành Giám đốc Marketing sau 10 năm, thì tôi cũng sẽ có thể trở thành Giám đốc Công nghệ sau 10 năm. Và những gì một cậu sinh viên 20 tuổi có thể học, tôi cũng có thể học được, với sự từng trải hơn của tuổi 40.

Sau khi học xong Linux, tôi học qua những ngôn ngữ lập trình khác, với sự tò mò và động lực mong muốn bản thân có thể tự xây dựng một sản phẩm website hoàn chỉnh.

Rồi tôi nhận ra mình yêu thích lập trình vì những lý do hoàn toàn khác với những điều đã khiến tôi bắt đầu.


Những dòng lệnh "chữa lành"

Nếu "lập trình" là con người, đó là một người rất đơn giản.

Bạn viết đúng, nó chạy. Bạn viết sai, nó báo lỗi. Thông báo lỗi cũng rất rõ ràng: dòng code nào, ở file nào, thiếu cái gì, sai chỗ nào...

Khi bạn không biết điều gì, bạn hỏi AI. Hỏi dài ngắn, thử sai, ngây ngô thế nào cũng được. AI không phàn nàn, không đánh giá bạn. Nó kiên nhẫn giải thích cho bạn, động viên bạn, giải quyết vấn đề cùng bạn.

Code rất thẳng thắn và không vòng vo.

Nó không có cảm xúc, tâm trạng hay quan điểm. Nó không khiến bạn phải đoán già đoán non, phải phân tích từng lời nói, từng cử chỉ, chỉ để bạn có thể nói hoặc làm điều đúng đắn.

Ở giai đoạn tháng 6-7/2023, khi gặp phải 3 mối quan hệ công việc tiêu cực và vô lý, thì học và viết code giống như dành thời gian với một người bạn ổn định, đủ tin cậy để giữ cho tâm trí tập trung và thư giãn.

Ngồi trước màn hình code, tôi tìm thấy sự bình yên. Ở đây, mọi thứ đều có logic rõ ràng. Nếu có lỗi, tôi có thể tìm ra và sửa. Nếu muốn cải thiện, tôi biết chính xác phải làm gì. Tôi biết cái tôi biết và tôi cũng biết cái tôi không biết. Hành trình khám phá cái "tôi không biết" vừa thử thách, vừa thú vị đồng thời.

Khi bật màn hình code lên, tôi tạm thời thoát khỏi "thế giới quản trị" hằng ngày của mình. Nó giống như một buổi tập chạy bộ "thiền định" cho trí não.

Coi vậy chứ cuộc sống của một lập trình viên không chỉ là những dòng code. Sự bình yên mà người lập trình viên tìm thấy không hề cô độc hay đáng thương.

Lập trình giống như giải những bài toán nhỏ – nhưng không phải kiểu toán khô khan, mà là những bài toán có hồn. Những dòng lệnh làm được việc. Chúng có thể xuất bản một bài viết ra toàn thế giới, tự động hóa một công việc nhàm chán, hoặc chỉ đơn giản là hiển thị một bức ảnh bạn yêu thích lên màn hình.

Một lập trình viên biết rằng họ có thể tạo ra giá trị cho hàng nhiều người, cảm thấy mình hữu ích, được "chữa lành" mà không nhất thiết phải được biết đến.


Tạo giá trị một cách ẩn danh

Sau 8 tháng học Linux và 4 tháng tự học Javascript, tôi quyết định đúc kết kiến thức thành một dự án "tốt nghiệp" nho nhỏ: Hires.vn. Đây là một website đơn giản để chia sẻ "hình Việt Nam chất lượng cao", miễn phí.

Ý tưởng đến từ việc team tôi cần tìm hình ảnh minh họa có chủ đề, thương hiệu, bối cảnh, con người Việt Nam. Mà đa phần các thư viện hình miễn phí của nước ngoài đều có rất nhiều hình nhưng lại khá ít ảnh chủ đề Việt Nam.

Tôi bắt đầu từ việc chụp ảnh trong những chuyến đi, những khoảnh khắc đời thường. Rồi tôi viết từng dòng code, thiết kế giao diện, xây dựng hệ thống tải ảnh, gắn thẻ, tìm kiếm...

Mỗi tính năng nhỏ đều là một thử thách lập trình mới. Mỗi ngày code một ít, trong nhiều ngày, nhiều tuần, nhiều tháng. Tôi mất 6 tháng để ra mắt phiên bản đầu tiên, để rồi 1 năm sau đó tôi tự đập đi xây lại trên một hệ thống hoàn toàn khác.

Một trong những niềm vui của tôi là ngồi xem số liệu về lượt xem và tải ảnh. Tôi biết những tấm ảnh nào được xem nhiều nhất, được tải nhiều nhất. Đôi khi tôi cảm thấy ngạc nhiên về lý do tại sao một tấm ảnh lại được dùng nhiều.

Thỉnh thoảng có người gửi email cảm ơn, nhưng đa phần, họ chỉ tải về và sử dụng im lặng.

Tôi thấy ổn với sự ẩn danh này.

Sản phẩm của tôi chắc hẳn là có ích cho ai đó. Nếu ảnh tôi chụp đẹp và xài được, người ta sẽ dùng. Nếu không, họ sẽ tìm nơi khác. Đơn giản, thẳng thắn, công bằng.

Họ không cần biết tôi là ai, không cần phải chịu đựng tính cách hay những vấn đề cá nhân của tôi. Họ chỉ cần tải ảnh, sử dụng, và tiếp tục công việc của họ. 

Tôi cũng không cần họ phải biết đến, gặp gỡ, mời mọc hay cảm ơn mình. Mà nếu "lỡ" thành công, thì cũng chưa chắc tôi đã muốn gặp từng người trong số họ, tại chắc gì chúng tôi đã cùng một "hệ tư tưởng" trong cuộc trò chuyện.

Đó là mối quan hệ trong sáng, đơn giản.

Nó khiến tôi thấy có ích với những người cần đến mình, thông qua sản phẩm tôi lập trình ra.

Trong giới lập trình, những sản phẩm, con người như vậy không hiếm.

Linus Torvalds - một sinh viên Phần Lan 21 tuổi - tạo ra Linux từ phòng ngủ của mình vào năm 1991, ban đầu chỉ như một dự án cá nhân "for fun". Giờ đây Linux chạy trên hầu hết các máy chủ lớn, từ Google đến Facebook, từ Netflix đến cả những chiếc smartphone Android.

Fabrice Bellard - một lập trình viên người Pháp cực kỳ tài năng - viết FFmpeg, thư viện xử lý video được sử dụng bởi YouTube, Netflix, và hầu hết các nền tảng streaming. Chắc đây là lần đầu tiên bạn nghe đến cái tên này nhỉ?

Hay team đằng sau Ghost CMS - là 2 cái tên John O'NolanHannah Wolfe - họ tạo ra một nền tảng viết blog mã nguồn mở đẹp và mạnh mẽ được hàng triệu blogger và tổ chức sử dụng trên toàn thế giới, trong đó có Hires.vn.

Những lập trình viên Việt Nam không thua kém. Có người tạo ra các ứng dụng "Gõ Tiếng Việt / Unikey" mà hàng triệu người dùng miễn phí mỗi ngày. Có người tạo ra game mobile được chơi bởi cả triệu người. 

Hầu hết chúng ta không biết tên họ. Chúng ta không cũng quan tâm họ mặc gì, nói gì, sống ở đâu, hay có tính cách ra sao. Chúng ta chỉ cần sản phẩm của họ hoạt động tốt, giải quyết được vấn đề của chúng ta.

Đó chính là vẻ đẹp "thiền định" của công việc lập trình, là "cánh cửa" cho người hướng nội, những người không thích ồn ào hay phô trương, vẫn có thể tạo ra tác động lớn đối với nhiều người.

Họ ngồi trong góc yên tĩnh, với một tách cà phê và chiếc laptop, tạo ra giá trị bằng những dòng code. Họ để sản phẩm nói thay mình. Điều này khác với một số nghề, nơi mà danh tiếng cá nhân thường quan trọng để thực hiện công việc.

Trong lập trình, bạn có thể là người cực kỳ hướng nội, thậm chí có những "lo âu về giao tiếp xã hội (social anxiety)", nhưng vẫn tạo ra những sản phẩm hữu ích cho nhiều người.

Đó là vẻ đẹp của việc lập trình mà tôi thấy. Nó khiến tôi cảm thấy hạnh phúc, thỏa mãn.

Và sự thỏa mãn đủ đầy đó không chỉ đến từ bên ngoài, nó còn đến từ những dòng lệnh bên trong.


Giúp tư duy rành mạch, logic, đơn giản

Để code tốt, phải có sự tường minh trong tư duy.

Một website trông có vẻ phức tạp, nhiều tính năng, nhưng thật ra được xây dựng từ nhiều hàm (function), quy trình nhỏ bên trong. Mỗi hàm, mỗi tính năng, tiếp tục lại là những logic đơn giản, vận hành trong chính phạm vi xử lý (scope) của nó.

Các hàm trả ra kết quả đơn giản như đã hứa, để rồi nhiều thứ đơn giản cùng với nhau trả ra một kết quả trông có vẻ phức tạp hơn.

Vậy nên, một lập trình viên phải biết rõ mình muốn gì từ cốt lõi, phải hiểu rõ bản chất của vấn đề trước khi bắt tay vào giải quyết. Không thể mơ hồ, không thể "làm xong rồi tính". Mỗi hàm, mỗi đoạn lệnh đều phải có mục đích rõ ràng.

Mà để hiểu rõ bản chất của vấn đề, lại phải tiếp tục hiểu rõ bản thân mình muốn gì, muốn đi theo định hướng nào.

Chẳng phải hiểu rõ bản thân luôn là mục tiêu của các phiên thiền định sao? Khi tôi code, cách tiếp cận cũng tương tự như vậy.

Tôi chia mỗi vấn đề lớn thành những vấn đề nhỏ. Rồi chia những vấn đề nhỏ thành những bước cụ thể, rõ ràng, đơn giản. Mỗi bước là một mục trong danh sách "to-do" của tôi.

Mỗi ngày, tôi mở danh sách đó và chọn một mục để giải quyết. Tôi chỉ dành đúng từ 1 đến 2 giờ mỗi ngày để "theo đuổi đam mê", còn lại để giải quyết công việc thường nhật.

Sự sắp xếp và logic của những dòng code thể hiện rất nhiều tính cách cá nhân: sự tỉ mỉ, gọn gàng, cẩn thận.

Khi xem lại code của mình sau một thời gian, tôi có thể thấy rõ trạng thái tinh thần lúc viết. Những ngày tâm trạng tốt, code sạch sẽ, có ghi chút rõ ràng. Những ngày vội vã, code sẽ hơi rối và thiếu tính thẩm mỹ, dễ bỏ qua các bước hoặc rút ngắn giai doạn.

Những đoạn code tốt thì rành mạch, đơn giản. Nó cũng thể hiện sự tường minh trong tư duy. Code càng đơn giản thì lại càng dễ quản lý những dự án phức tạp. Tôi học được rằng sức mạnh thực sự nằm ở việc biết cách chia nhỏ và đơn giản hóa. Lập trình dạy tôi sự chú tâm vào những thứ nhỏ nhặt, lại có thể mang đến sự kết nối rõ ràng, dễ dàng đến những thứ lớn hơn.

Mỗi hàm, mỗi tính năng hoàn thành là một chiến thắng nhỏ, một cảm giác hiểu rõ hơn mình muốn gì. Code của tôi chính là con người tôi. Ngẫm lại từ việc tư duy cho những dòng code, chúng ta lại càng hiểu rõ bản thân và mong muốn của mình hơn.

Có một sự lặng lẽ rất đẹp trong thế giới đó. Những dòng lệnh trông khó hiểu và vô hồn nhưng lại tạo ra những thứ đẹp đẽ, và nói lên nhiều điều về người viết ra nó.


Tốt hơn mỗi ngày

Một niềm vui khác đến từ việc liên tục học hỏi và cải thiện.

Sau hơn một năm rưỡi, khi đã thành thạo Javascript cơ bản, tôi bắt đầu học React để "chuyên nghiệp hóa" việc lập trình giao diện người dùng, rồi học Node.js để đào sâu cách xây dựng hệ thống quản lý hạ tầng. Mỗi công nghệ mới là một thế giới mới cần khám phá.

Tôi gần như đã "bỏ cuộc" với React (vì quá "khó nhằn"), nhưng các khái niệm của khóa học ở giai đoạn đó đã giúp tôi "nâng tầm" nhiều điều về cách quản lý các thành phần.

Dưới đây là 3 khái niệm lập trình mà tôi thấy khá hữu ích khi áp dụng cho cuộc sống:

  • Version Improvement: Không có một sản phẩm nào đã hoàn thiện từ lần ra mắt đầu tiên. Bạn cần hoạch định sự tiến bộ, hay sự hoàn thiện (cho dù là của sản phẩm, của kế hoạch, hay của bản thân) theo từng bước, từng giai đoạn, từng thứ quan trọng. Đừng hoạch định một thứ quá lớn có thể khiến bạn cảm thấy nản chí để bắt đầu. Thay vào đó, hãy nỗ lực hoàn thiện "version 1" với những tính năng cần thiết tối thiểu, cảm thấy tự hào, nghỉ ngơi một chút, rồi tiếp tục đi tiếp đến những "version 2.1", "version 3.5.3"... xịn xò hơn, hoàn chỉnh hơn.
  • Commits & Releases: mỗi phiên bản có thể cần rất nhiều sự phát triển, điều chỉnh. Commits nghe giống "Commitments", hay hiểu đơn giản là "cam kết mỗi ngày", giống như lưu lại những nỗ lực của bạn cho nhiệm vụ của ngày hôm đó. Có những version khó, những tính năng lớn, cần nhiều "commits" hơn những phiên bản khác. Commits giúp bạn ghi nhận sự thay đổi từ lúc bắt đầu đến lúc kết thúc một ngày hoặc một giai đoạn công việc. Và bạn chỉ cần hoàn thành các danh sách "to-do" mỗi ngày bằng các "commits" cho đến khi "version" tiếp theo được ra mắt (releases).
  • Refactoring: Sau khi hoàn thành một tính năng, tôi thường dành 1-2 ngày để xem xét cách cải thiện, dọn dẹp, ghi chú, chia tách, tối ưu, giảm số lượng dòng code. Hành động đó gọi là refactor lại code, làm nó chạy nhanh hơn, sạch hơn, dễ bảo trì, phân công, bàn giao hơn. Rồi có những lúc tôi quyết định đập bỏ toàn bộ một tính năng đã viết, để viết lại từ đầu với cách tiếp cận mới, mà có thể khiến cho số lượng dòng code giảm đi (và hiệu suất tăng thêm) đáng kể. Đó là cảm giác như được sinh ra lần thứ hai.

Chẳng hạn, chỉ với một tính năng "trông có vẻ đơn giản" là cho phép thành viên tải hình lên, tôi đã có nhiều version như sau:

  1. Upload hình
  2. Upload hình, có thanh tiến độ
  3. Upload nhiều hình cùng lúc, có nhiều thanh tiến độ
  4. Kiểm tra bảo mật, sau đó mới cho phép Upload nhiều hình cùng lúc, có nhiều thanh tiến độ
  5. Kiểm tra bảo mật, sau đó mới cho phép Upload nhiều hình cùng lúc, có nhiều thanh tiến độ, trích xuất thông tin EXIF và dữ liệu màu sắc của các tấm ảnh

Mỗi lần viết lại code với kiến thức mới, tôi thấy mình trưởng thành hơn. Những dòng code tôi viết 6 tháng trước giờ nhìn lại thấy ngây thơ và vụng về. Nhưng tôi không xấu hổ, tôi biết ơn. Vì nó cho tôi thấy mình đã đi được bao xa.

Tốt lên từ từ, từng bước. Cam kết mỗi ngày một ít. Và liên tục sắp xếp lại cuộc sống, tìm cách tối ưu hạnh phúc. Đó chẳng phải là những hành động có thể làm cho cuộc sống và công việc của bạn tốt hơn mỗi ngày sao?

Có lẽ đó là lý do tôi thích code. Nó cho tôi hy vọng rằng mọi thứ luôn có thể tốt hơn chỉ bằng những hành động nhỏ, nỗ lực nhỏ mỗi ngày.


Tôi không nói rằng ai cũng nên học code hay đam mê nó. Nhưng với tôi, việc ngồi xuống, giải từng bài toán nhỏ – từng dòng, từng lỗi – là một hình thức thiền định.

Ở thế giới đó, không ai đánh giá bạn. Chỉ có bạn và logic. Chỉ có hệ thống đang chờ bạn tinh chỉnh, hiểu nó, và cải tiến nó. Nó dạy bạn cách chia nhỏ những thứ to lớn thành những thứ nhỏ bé có thể xử lý được. Nó dạy bạn cách kiên nhẫn, đơn giản hóa, làm từng bước, tốt hơn mỗi ngày, theo tốc độ của bạn.

Quan trọng nhất, nó dạy bạn rằng trong một thế giới đầy rẫy những điều không kiểm soát được, bạn vẫn có thể tạo ra một góc nhỏ hoàn toàn thuộc về mình. Một nơi mà logic thay thế cho cảm xúc, nơi mà nỗ lực của bạn có thể tạo ảnh hưởng lên nhiều người khác, nơi mà bạn có thể là chính mình mà không sợ bị phán xét.

Và khi bạn "đập đi xây lại" một hệ thống – một hệ thống mà bạn từng tự tay tạo ra – để xây lại theo cách mới, đơn giản hơn, bền vững hơn... biết đâu, bạn cũng đang học cách xây lại chính mình. Một phiên bản tốt hơn, nhẹ hơn, và đủ sức sống lâu hơn trong thế giới này.

5 năm sau khi bắt đầu, tôi cảm thấy lập trình sẽ là thứ đi cùng với mình trong 20 năm tiếp theo.

Hires.vn vẫn đang hoạt động. Mỗi vài tháng tôi vẫn thêm ảnh mới, sửa lỗi, cải thiện tính năng. Không phải vì tôi kiếm được tiền từ nó, mà vì nó nhắc nhở tôi rằng có những thứ mà một người hướng nội có thể tạo ra không chỉ để phục vụ bản thân, mà còn để làm cho thế giới tốt đẹp hơn một chút.

Và mỗi khi cuộc sống trở nên quá phức tạp, quá nhiều "drama", quá nhiều tiếng ồn, tôi biết mình luôn có thể quay về với những dòng code yên tĩnh. Nơi duy nhất mà tôi có thể thiền trong lúc này.

Code không chỉ là nghề nghiệp hay sở thích. Với tôi, nó là "liệu pháp chữa lành".

Có một đoạn trong cuốn Life in Code của Ellen Ullman khiến tôi nhớ mãi: "Cho đến khi tôi trở thành lập trình viên, tôi mới thực sự hiểu được giá trị của sự cô lập: sự tĩnh lặng, sự giản lược của cuộc sống vào trong tư duy và hình thức."