Tại sao tôi lại sử dụng ngôn ngữ Ruby để xây dựng Discourse?

Bài viết được dịch từ blog Coding Horror

Tính đến nay tôi đã là một nhà phát triển phần mềm trên nền tảng Microsoft trong nhiều thập kỷ. Tôi đã tận hưởng rất nhiều hương vị của Microsoft Basic, và tôi đã có công việc lập trình được trả lương đầu tiên của mình bằng Microsoft FoxPro, Microsoft Access và Microsoft Visual Basic. Tôi đã nhìn thấy tương lai của lập trình là những ứng dụng CRUD dễ sợ chạy trên những cái hộp Wintel (máy tính chạy hệ điều hành Windows + chíp Intel = Wintel).

Liệu ngôn ngữ lập trình Ruby có phù hợp cho một dự án mã nguồn mở?Liệu ngôn ngữ lập trình Ruby có phù hợp cho một dự án mã nguồn mở?


Dĩ nhiên, chúng tôi đã xây dựng trang web Stack Overflow bằng công nghệ Microsoft .NET. Đó là lý do chính mà nó vẫn còn chạy nhanh như hiện nay. Vì vậy một trong những câu hỏi thường xuyên nhất sau khi chúng tôi thông báo về nền tảng diễn đàn mới Discourse đó là:

Tại sao anh lại không xây dựng Discourse bằng công nghệ .NET luôn đi?

Cho phép tôi được làm sáng tỏ về một điều là: tôi yêu .NET. Một trong những cảm xúc rộn ràng nhất trong nghề nghiệp lập trình của mình đó là lúc có cơ hội được dán một tấm sticker có in hình logo Coding Horror lên cánh tay của ông Anders Hejlsberg. Xin thứ lỗi cho lòng hâm mộ của tôi trong chốc lát, nhưng tôi vẫn còn cảm giác bồi hồi. Chỉ có khoảng 50 chuyên gia thiết kế ra các ngôn ngữ máy tính hàng đầu trên hành tinh này. Và Anders là một trong số họ, người mà đã tạo ra 2 ngôn ngữ lập trình là Turbo Pascal và Delphi. Phải cảm ơn tới những chỉ dẫn chuyên môn của Anders mà .NET đã trở thành một ngôn ngữ được thiết kế tốt nổi bật – đúng là cái mà Java nên có trong mỗi cấp độ có thể hiểu được – và nó vẫn tiếp tục phát triển trong những cách thực thực tiễn đáng chú ý trên 10 năm vừa qua, là sức mạnh đòn bẩy cho những ngôn ngữ lập trình có ảnh hưởng khác.

Ngôn ngữ lập trình PascalTất cả để nói lên một điều rằng, thật là đúng khi tôi cố tình chọn không sử dụng .NET cho dự án tiếp theo của mình. Vì vậy bạn có thể mong chờ để tìm thấy một sự tức giận, nhưng tôi đã hạnh phúc như thế nào khi gỡ bỏ được cái xiềng xích ngột ngạt của một người chuyên gia trong công nghệ Microsoft. Cuối cùng cũng được tự do, ít nhất cũng được tự do, cảm ơn Chúa toàn năng vì cuối cùng con cũng được tự do!

Xin lỗi. Tôi đã viết những dòng này 5 năm trước đây.

Giống như bất kỳ một lập trình viên thực dụng nào, tôi nhặt lấy một công cụ thích hợp cho công việc của mình. Và tôi càng yêu .NET nhiều bao nhiêu, thì sẽ là một lựa chọn tồi bấy nhiêu cho một dự án 100% mã nguồn mở như là Discourse. Tại sao ư? Có 3 lý do chính như sau:

  1. Vấn đề giấy phép. Lạy Chúa, lại là vấn đề giấy phép. Nó cũng không phải là quá nhiều tiền, ngoài sự phức tạp và rối rắm trong việc đảm bảo rằng tất cả phần mềm của bạn đều có giấy phép hợp lệ: phải xác định rõ về ‘level’ hoặc ‘edition’ nào mà bạn đã được cấp giấy phép, ai là người được cấp giấy phép để sử dụng, những máy chủ nào đã được cấp giấy phép… đợi đã, có chuyện gì vậy? Xin lỗi, tôi như bị chết đứng ở đây trong vòng một phút khi bị tấn công bởi những loại giấy phép chết tiệt đó.

    Tôi không có ý định tạo ra một tuyên bố vĩ đại về tương lai của phần mềm, nhưng nếu có bất kỳ cái gì đó giết chết phần mềm thương mại, thì để tôi nói với bạn, nó sẽ không phải là phần mềm mã nguồn mở. Chúng chẳng cần bận tâm. Phần mềm thương mại sẽ tự vui sướng bóp cổ mình cho đến chết bởi những điều khoản về giấy phép của chính nó.
  2. Sự xung đột. Nếu bạn muốn xây dựng một phần mềm mã nguồn mở có thể thực sự sống được, thì bạn cần mọi người đóng góp tới dự án của bạn, vì điều đó giúp nó có thể sống, thở và lớn lên. Và bạn phải có thể tải về tất cả phần mềm mà bạn cần để vọc vậy trên dự án của bạn một cách tự do từ khắp nơi trên thế giới Internet, không có một ràng buộc nào cả.

    Nếu việc phát triển trang web Stack Overflow có thể dạy tôi một điều gì đó, thì đó là chúng ta bây giờ đang sống trong một thế giới mà những kỹ sư phần mềm vĩ đại tiếp theo có thể đến từ bất cứ đâu trên cái hành tinh này. Tôi đang nói về những nơi mà những gã lập trình viên Mỹ xấu xí chưa từng bao giờ nghe nói tới, nơi mà họ nói những thứ tiếng xì xồ xì xào mà tôi không thể hiểu được. Nhưng có một điều này. Bạn đừng để tôi đánh lạc hướng suy nghĩ của bạn: những lập trình viên tài giỏi đó sẽ vẫn viết code trong cùng bộ từ khóa như chúng ta! Tôi biết, điều này thật là khùng, phải không nào?

    Nếu sử dụng nền tảng của Microsoft thì chỉ đơn giản là quá khó cho một lập trình viên tại Argentina, hoặc Nepal, hoặc Bulgaria. Các hệ điều hành, ngôn ngữ và công cụ mã nguồn mở cũng có chất lượng tương đương, và là nền tảng để cho những lập trình viên tài giỏi thế hệ kế tiếp trên khắp trái đất sẽ giúp chúng ta thay đổi thế giới này.
  3. Hệ sinh thái. Khi tôi còn ở Stack Exchange thì chúng tôi đã cố gắng hết sức để khiến cho cơ sở hạ tầng của mình trở thành mã nguồn mở nhiều nhất có thể. Chúng tôi đã thể hiện rõ ràng trong những hướng dẫn, ý tưởng rằng tất cả chúng ta đều bị phán xét bởi số lượng đóng góp mà chúng ta làm cho cộng đồng, và cố gắng để lại phía sau nhiều sản phẩm có ích nhất mà chúng ta có thể. Bởi vì tất cả Stack Exchange, từ những ngày đầu tiên, được xây dựng trên giấy phép Creative Commons mà tất cả chúng ta đều sở hữu?

    Bạn có thể có khả năng xây dựng phần mềm mã nguồn mở bằng .NET. Nhưng nó sẽ chẳng bao giờ cảm thấy tự nhiên và đúng đắn cả. Không có ai chấp nhận bản vá của bạn tới một thư viện lõi .NET cho dù bạn có cố gắng đến mức nào đi chăng nữa. Nó luôn giống như là bạn đang bơi ngược dòng, trong một thế giới của các doanh nghiệp nhỏ và lớn đang sử dụng .NET mà thực ra không cảm thấy thú vị khi phải chia sẻ code của họ với thế giới này – có lẽ bởi vì họ biết sẽ rất dở nếu họ làm như vậy, dù sao đi nữa. Nó chỉ không phải là một phần tự nhiên của văn hóa Microsoft .NET để khiến thứ gì đó thành mã nguồn mở, đặc biệt là không phải những thứ kém chất lượng. Nếu bạn sợ những thứ mà bạn chia sẻ là dở, thì nỗi sợ đó biểu hiện sự bất tài của bạn.

    Với bất kỳ tác vụ trong .NET nào của bạn – nếu bạn may mắn – có thể có hai thư viện khá tốt. Ngược lại trong bất kỳ một ngôn ngữ mã nguồn mở phổ biến nào, bạn sẽ dễ dàng có một tá các lựa chọn cho cùng tác vụ đó. Vâng, có thể 6 trong số chúng sẽ bị hỏng, lỗi thời, hoặc không sử dụng được, hoặc chỉ là vớ vẩn. Nhưng này, thậm chí nhiều giải pháp bị hỏng như vậy, nhưng bạn vẫn có gấp 3 lần sự lựa chọn so với mã nguồn đóng! Người chiến thắng chính là bạn!

Như tôi đã viết 5 năm về trước:

Tôi là một người thực dụng. Hiện tại, tôi lựa chọn sống trong thế giới của Microsoft. Nhưng điều đó không có nghĩa rằng tôi lờ đi cuộc sống của một nửa còn lại. Có nhiều hơn một cách để làm việc, và chỉ bởi vì tôi chọn một cách nào đó không có nghĩa nó là một hướng đi đúng– hoặc thậm chí một hướng đi đặc biệt tốt. Việc lựa chọn trở thành những ốc đảo riêng biệt là một con đường chắc chắn sẽ dẫn tới sự ngu dốt. Hãy tìm hiểu xem một nửa còn lại sống như thế nào. Tìm hiểu một số lập trình viên mà không sống trong cùng thế giới của bạn. Tìm hiểu xem họ đang sử dụng những công cụ nào, và tại sao. Nếu sau khi bạn đặt chân mình trên cả hai phía của “bờ dậu”, bạn quyết định rằng nửa kia thì đang sống tốt hơn và bạn muốn gia nhập vào với họ, thì tôi sẽ dành cho bạn một lời tạm biệt.

Tôi không còn sống trong vũ trụ của Microsoft chút nào nữa. Đúng, sai, tốt, xấu, đó chỉ là nó phù hợp cho dự án mà chúng tôi muốn xây dựng.

Tôi chọn ngôn ngữ lập trình RubyTuy nhiên, tôi cũng trở thành một kẻ nói dối nếu không chỉ ra rằng tôi hoàn toàn tin tưởng kiểu dự án mà chúng tôi đang xây dựng trong Discourse là hiện thân của hầu hết phần mềm tương lai. Nếu bạn liếc mắt sang nhìn một chút, tôi nghĩ bạn có thể nhìn thấy một tương lai không quá xa trong cái khoảng cách nơi mà .NET là một ngách chuyên biệt bên ngoài xu hướng chủ đạo.

Nhưng tại sao lại là Ruby? Vâng, câu trả lời ngắn và không phải là rất hay đó là tôi đã thu hẹp sự lựa chọn xuống còn hoặc là Python hoặc Ruby, và co-founder đầu tiên của tôi là Robin Ward đã có kinh nghiệm xây dựng nhiều ứng dụng lớn trên Rails từ năm 2006. Vì vậy tôi đã chọn nó.

Tôi đã luôn có một chút thích thú ngôn ngữ Ruby, phần lớn là bởi những lời khen ngợi về ngôn ngữ này của một người mà tôi hâm mộ là Steve Yegge vào năm 2006. Tôi sẽ chẳng bao giờ quên được điều đó.

Điểm quan trọng nhất là Ruby đã lấy phần xử lý chuỗi của Perl và tích hợp kiểu Unix, nghĩa là cú pháp giống hệt, và vì vậy bạn đã có phần tốt nhất của Perl. Và đó là một điểm bắt đầu tuyệt vời, đặc biệt nếu bạn không lấy luôn phần còn lại của ngôn ngữ Perl.

Nhưng sau đó tác giả ngôn ngữ Ruby là Matz đã lấy thêm phần tốt nhất của khả năng xử lý danh sách từ ngôn ngữ Lisp, và phần tốt nhất về hướng đối tượng từ ngôn ngữ Smalltalk và những ngôn ngữ lập trình khác, và phần lặp tốt nhất từ CLU, và rất nhiều phần tốt nhất của bất cứ thứ gì từ bất cứ ngôn ngữ nào khác.

Và anh ta bằng một cách nào đó đã khiến tất cả chúng làm việc cùng với nhau rất tốt đến nỗi bạn thậm chí không thể nhận ra rằng tất cả chúng được gom lại từ những ngôn ngữ khác. Tôi đã học Ruby nhanh hơn bất cứ ngôn ngữ nào khác, có thể nhanh hơn từ 30 đến 40 lần; nó khiến tôi mất khoảng 3 ngày trước khi tôi thấy thoải mái khi sử dụng Ruby nhiều hơn là tôi sử dụng Perl, sau 8 năm kinh nghiệm làm việc với Perl. Nó cũng rất nhất quán và bạn bắt đầu có khả năng đoán mọi thứ sẽ làm việc như thế nào, và bạn hầu như luôn đúng. Nó thì rất đẹp. Rất vui. Và thực tế.

Steve là một trong những lập trình viên thành thạo nhiều ngôn ngữ lập trình, tôi tôn trọng ông đến nỗi tôi về cơ bản sẽ chấp nhận bất cứ quan điểm nào của ông ta, dù là quan điểm đó nói về một cái gì đó khùng khùng như là dự luật kiểm soát súng hoặc vấn đề bình đẳng giới hoặc về ban nhạc T’Pau, và chấp nhận đó như một thực tế.

Tôi xin lỗi Steve. Bởi vì phải mất 7 năm kể từ lúc tôi đọc bài viết đó của ông đến lúc tôi bắt tay vào sử dụng ngôn ngữ Ruby. Nhưng dù sao việc đợi một khoảng thời gian dài như vậy cũng mang lại nhiều thuận lợi hơn đối với tôi:

  • Ruby là một ngôn ngữ thực thi rất tốt, nhưng bạn thực sự cần phải ném cho nó những phần cứng nhanh để nó có thể làm tốt công việc thực thi của mình. Vâng, tôi biết các ngôn ngữ thông dịch là chính những gì chúng có, từ caching, database, network, blah blah blah. Tuy nhiên, chúng tôi kiếm được những CPU nhanh nhất mà bạn có thể mua cho các máy chủ Discourse, 4.0 Ghz Ivy Bridge Xeons, và tốc độ thực thi thì chỉ … tốt vào ngày nay. Không phải là tuyệt vời, mà chỉ là tốt thôi.

    Vâng, tôi sẽ thừa nhận rằng mình đã hoàn toàn hưởng lợi từ bộ biên dịch thực thi JIT của .NET. Đó là cái mà tôi đã từng sử dụng. Tôi thỉnh thoảng cũng nhớ lại những ngày tồi tệ của .NET khi mà chúng tôi có thể tạo ra các trang có tốc độ đáp ứng dưới 50 milli giây mà không cần phải suy nghĩ về nó quá nhiều.Các ngôn ngữ thông dịch thì không có khả năng để vươn tới những cấp độ thực thi đó. Nhưng tôi chỉ có thể tưởng tượng tốc độ thực thi của Ruby sẽ nặng nề ra sao khi quay trở lại những ngày đen tối của năm 2006 khi mà các CPU và máy chủ lúc đó vẫn có tốc độ chỉ bằng 1/5 ngày nay! Tôi cảm thấy rất vui sướng rằng mình đang sử dụng ngôn ngữ Ruby vào thời điểm này, cùng với rất nhiều cải tiến về tốc độ phần cứng theo định luật Moore.
  • Ruby thì đang trưởng thành và tinh vi hơn trong phiên bản 2.0, điều này xảy ra không lâu hơn một tháng sau khi chúng tôi thông báo về Discourse. Vì vậy, vâng, nhược điểm đó là Ruby thì khá chậm. Nhưng ưu điểm đó là có rất nhiều cách để tăng tốc độ thực thi trên đất của Ruby. Trên Discourse chúng tôi đã có thể thấy tốc độ thực thi được cải tiến tăng lên 20% ngay sau khi cập nhật lên phiên bản Ruby 2.0, và chúng tôi gần như đã có thể tăng gấp đôi tốc độ thực thi của mình bằng cách tăng giới hạn của bộ dọn rác (garbage collection) mặc định của Ruby. Nếu quan sát viễn cảnh tương lai tốc độ thực thi, thì Ruby càng ngày càng tốt hơn.
  • Ruby thì không còn “hot” chút nào nữa. Vâng, bạn có nghe tôi nói không. Nó không còn “hot” để viết code Ruby chút nào nữa cả. Tất cả những người “cool” đã chuyển sang những ngôn ngữ “hot” như Scala và Node.js nhiều năm về trước. Dự án của chúng tôi cũng chẳng “cool”, nó chỉ là một bó code Ruby cũ kỹ và nhàm chán. Về mặt cá nhân, tôi cảm thấy hồi hộp rằng Ruby bây giờ đây đã đủ trưởng thành mà cộng đồng không còn cần phải bận tâm với sự khoe khoang để trở thành đứa trẻ cool nhất nữa. Điều đó nghĩa là chúng ta chỉ muốn công việc được hoàn thành, và có thể xắn tay áo lên để tập trung vào nhiệm vụ xây dựng ra những sản phẩm với những đồng nghiệp của mình, chứ không phải là điên cuồng chạy theo và thử nghiệm và tìm hiểu về một công nghệ sáng chói tiếp theo.

dĩ nhiên cộng đồng Ruby thì luôn đáng kinh ngạc. Chúng ta sẽ chẳng bao giờ muốn những viên ngọc và những người đóng góp cho mã nguồn mở nào tuyệt vời hơn. Theo quan điểm của tôi, bây giờ là thời điểm tuyệt vời để nhảy vào Ruby, cho dù nền tảng của bạn là gì đi chăng nữa.

(Tuy nhiên, cũng thật đáng giá khi đề cập đến Discourse, nó thậm chí phần nhiều là một dự án JavaScript còn hơn cả một dự án Ruby on Rails. Bạn không tin tôi ư? Vậy thì hãy truy cập vào địa chỉ try.discourse.org và view source lên xem thử. Một Discourse forum cũng gần như là một ứng dụng JavaScript chạy trong trình duyệt của bạn.)

Dù bạn sẵn lòng và thích thú với dự án đó, thì vẫn còn một chút sợ hãi khi phải thay đổi toàn bộ trường phái lập trình của bạn đã theo đuổi hơn hai thập kỷ chỉ sau có một đêm. Tôi luôn luôn tin rằng những lập trình viên vĩ đại thường học cách yêu nhiều hơn một ngôn ngữ và môi trường lập trình – và tôi hy vọng rằng dự án Discourse sẽ là một cơ hội cho bất kỳ ai để học tập và phát triển, không chỉ riêng mình tôi. Vì vậy hãy gia nhập với chúng tôi trên GitHub ngay hôm nay nhé!

Câu hỏi của Vinacode:

Bạn hãy dành chút thời gian trả lời câu hỏi khảo sát của blog Vinacode dưới đây với nhé! Cảm ơn bạn rất nhiều.

  1. Bạn đang sử dụng ngôn ngữ lập trình nào cho công việc hàng ngày của mình?
  2. Nếu có thời gian để học thêm một ngôn ngữ lập trình mới, thì bạn sẽ chọn học ngôn ngữ nào?

Các bài viết liên quan:

Về tác giả bài viết:

Jeff_atwood_coding_horrorJeff Atwood là một chuyên gia công nghệ tại Mỹ, hiện đang sinh sống và làm việc tại Berkeley, CA. Anh là một kỹ sư phần mềm chuyên về công nghệ Microsoft .NET, và là một blogger nổi tiếng trong cộng đồng công nghệ với blog Coding Horror, anh là người sáng lập và kiêm Giám đốc điều hành (CEO) của trang web hỏi đáp uy tín Stack Overflow và cũng là đồng sáng lập của Stack ExchangeDiscourse.

10 comments on “Tại sao tôi lại sử dụng ngôn ngữ Ruby để xây dựng Discourse?

  1. Mình thì đang nghịch ngợm với .NET hàng ngày. Vẫn còn rất nhiều thứ đẻ vọc vạch nghiên cứu thêm nhưng năm nay mình đang có kế hoạch viết một app nho nhỏ trên Android nên sẽ dành thời gian để học thêm JAVA 🙂

  2. Em đang học lớp 8, nhờ tham gia đội tuyển học sinh giỏi tin nên có cơ hội được học Pascal. Em mong muốn ngôn ngữ kế tiếp của mình là C.

  3. Cảm ơn vinacode về bài chia sẻ nhiều ý nghĩa này.
    – Mình thì đang lập trình trên nền tảng .Net (C#), và dùng CMS là chủ yếu.
    – Thời gian rồi thì mình có tìm hiểu thêm PHP và khá thích thú với WordPress. Do đó nếu bỏ thời gian tìm hiểu và học thêm ngôn ngữ nào khác thì mình sẽ tìm hiểu chuyên sâu về PHP hay nền tảng mã mở nào mình thích.

    P/s: Chúc các thành viên và đọc giả vinacode một năm mới SỨC KHOẺ – THÀNH CÔNG và vinacode sẽ luôn tổng hợp, chia sẻ những bài viết hay cho cộng đồng.

  4. Trước đây mình có làm việc với chủ yếu là PHP, nhưng hiện tại thì mình đang học và làm Ruby on Rails. Mình muốn nắm chắc nó trước khi chuyển cái khác, nhưng song hành thì mình vẫn trau dồi các kiến thức javascript, đặc biệt muốn tìm hiểu NodeJs và React

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s