Wednesday, July 29, 2015

PHP là ngôn ngữ lập trình được thiết kế rất tồi

Lời bàn của Vinacode:

Đôi lúc mình thử nghĩ, nếu bạn là một fan của ngôn ngữ lập trình PHP và mình tiến đến trước mặt bạn mà nói rằng “PHP là ngôn ngữ rất dở” thì có lẽ bạn sẽ nhảy xổ vào túm lấy cổ áo mình… cứ như thể là mình vừa báng bổ tôn giáo hay đức tin của bạn vậy.

Bạn không tin điều đó ư? Gần đây blog ITviec có đăng một bài viết về “Xu hướng ngôn ngữ lập trình năm 2014″, nhưng vì người dịch bài là một maketer nên dịch chắp vá lung tung, dẫn đến cảnh râu ông nọ cắm cằm bà kia; phía đầu bài viết chỉ ra rằng PHP đang được sử dụng rất phổ biến, trong khi cuối bài viết thì khuyên rằng “Tránh xa PHP. Nó là một ngôn ngữ được thiết kế tồi.” Dẫn đến cảnh cộng đồng nhảy vào “ném đá”. Mình cứ tưởng phen này chắc oánh nhau to, nhưng may thay ở ITviec toàn là cao thủ về marketing, nên họ đã biến dịp này thành một cơ hội ngàn vàng để quảng bá thương hiệu, bằng cách xoa dịu những cái đầu nóng với những chiếc áo mang dòng chữ “This guy can code”. Ai cũng hả hê ra về vì “vừa được ăn, được nói, lại được gói mang về”.

PHP thì cũng giống như anh chàng ca sĩ Justin Bieber vậy.
PHP thì cũng giống như anh chàng ca sĩ Justin Bieber vậy.

Thực ra thì đúng là PHP có nhiều điểm dở, bằng chứng là một developer đã bỏ công sức ra viết một bài tràng giang đại hải để liệt kê ra những điểm dở đó tại link này. Vậy thì bạn có thể đặt câu hỏi rằng tại sao nó dở mà lại có mặt khắp mọi nơi, đến những mạng xã hội lớn như Facebook cũng sử dụng một phần PHP trong đó? Mình thử đi tìm câu trả lời, thì thấy hóa ra rất nhiều lập trình viên nổi tiếng từ Âu Mỹ cho đến Ấn Độ đều chê ngôn ngữ này thậm tệ. Nhưng có lẽ nó trở nên phổ biến chính là vì nó ra đời“đúng lúc, đúng chỗ”, và được sự hỗ trợ của nhiều yếu tố khác nên mới như ngày hôm nay.

Trước khi đi vào bài viết của lập trình viên nổi tiếng Jeff Atwood này, mình xin trích một câu nói mỉa mai PHP mà cộng đồng developer nước ngoài hay dùng:

“PHP thì cũng giống như anh chàng ca sĩ Justin Bieber, chẳng cần phải giỏi cũng trở nên nổi tiếng.”

Bạn hãy nhìn đồ vật lạ lùng mà gã Ian Baker đã tạo ra này. Hãy quan sát nó thật kỹ!

PHP thì giống như cái búa mà có hai đầu đều là mấu dùng để nhổ đinh.

PHP thì giống như cái búa mà có hai đầu đều là mấu dùng để nhổ đinh.

Đồ vật mà bạn đang nhìn thấy không phải là đã bị chỉnh sửa bằng Photoshop. Xin thề trước Chúa, đó là một bức hình thực sự trong thế giới thực, một cây búa với hai đầu có mấu dùng để nhổ đinh. Một thứ như thế này có tồn tại sao? Đó không phải là một điều đáng kinh ngạc ư? Và có lẽ nó sẽ tạo cho bạn một chút bối rối nào chăng?

Cái búa kỳ lạ này là một sự thú vị trong thế giới thực, và nó tạo cảm hứng cho một bài blog tràng giang đại hải có tên là PHP: Một ngôn ngữ được thiết kế tồi.

“Tôi thậm chí không thể nói có điều gì sai ở ngôn ngữ PHP, bởi vì hãy tưởng tượng bạn có một bộ đồ nghề gồm các dụng cụ khác nhau. Trông mọi thứ có vẻ ổn vì các dụng cụ thì đều có ở đây.

Bạn lôi ra một chiếc tuốc-vít, và bạn nhìn thấy nó là một cái tuốc-vít kỳ dị vì nó chỉ có 3 chấu trên đầu. Vâng, cũng được, nó không có ích lắm đối với bạn, nhưng ít ra thì nó đôi lúc cũng được việc.

Bạn lôi ra một chiếc búa, nhưng chiếc búa làm bạn hết hồn vì nó có phần mấu dùng để nhổ đinh ở cả hai phía. Tuy nhiên nó vẫn có ích, ý tôi là bạn có thể đóng đinh bằng cách xoay nó sang một bên và đóng bằng phần giữa của đầu búa.

Bạn lôi ra vài cái kìm, nhưng chúng không có những bề mặt răng cưa, mà phẳng phiu và nhẵn nhụi. Chúng không có ích mấy, nhưng dù gì thì vẫn có thể vặn mấy con bu-lông, hay cái gì giống vậy.

Và bạn tiếp tục khám phá. Mọi thứ trong hộp đồ nghề đó thì đều kỳ quặc và khác thường, nhưng không đủ để khiến cho chúng hoàn toàn trở nên vô dụng. Không có vấn đề rõ ràng nào cùng với bộ đồ nghề nói trên, và nó vẫn chứa đầy đủ các loại dụng cụ.

Bây giờ hãy tưởng tượng rằng bạn gặp hàng triệu người thợ mộc đang sử dụng bộ công cụ này, và họ nói với bạn rằng “Ơ, có vấn đề gì với những dụng cụ này đâu. Chúng tôi đã từng sử dụng tất cả những dụng cụ này và chúng làm việc rất tốt!” Những gã thợ mộc này chỉ cho bạn những ngôi nhà mà họ đã xây dựng, nơi mà mỗi phòng đều có hình ngũ giác và phần mái thì lộn ngược lên trời. Khi bạn gõ tay vào cửa trước thì cánh cửa đột ngột đổ sập vào trong nhà và tất cả các tay thợ mộc hét toáng lên rằng bạn đang đập phá cánh cửa của họ.

Đó chính là cái không ổn của ngôn ngữ PHP.”

Bạn hãy nhớ lại phản ứng của mình khi lần đầu tiên nhìn thấy một chiếc búa có hai đầu dùng để nhổ đinh? Đó chính xác là phản ứng của hầu hết các lập trình viên chuyên nghiệp khi họ lần đầu tiên chạm trán với ngôn ngữ lập trình web PHP.

Điều này đã diễn ra trong nhiều năm. Tôi đã đăng một bài viết về chủ đề này vào năm 2008 với tiêu đề PHP thì rất tồi, nhưng điều đó không có vấn đề gì.

“Tôi không phải là một chuyên gia về ngôn ngữ lập trình, nhưng việc thiết kế ra một ngôn ngữ lập trình thì rất khó. Đó là lý do mà chỉ một số ít nhà khoa học máy tính nổi tiếng nhất trên thế giới là những người thiết kế ra các ngôn ngữ lập trình. Và thật đáng hổ thẹn khi không ai trong số họ từng có cơ hội làm việc với ngôn ngữ PHP. Theo quan sát của tôi thì, PHP không phải là một ngôn ngữ lập trình mà nó là một tập hợp ngẫu nhiên của các chất liệu tùy tiện, với rất nhiều từ khóa và hàm. Nên nhớ rằng nó là sản phẩm của một gã lúc đó vừa mới bỏ bú ngôn ngữ BASIC, một ngôn ngữ lập trình mà chỉ nhận được sự tôn trọng ngang với danh hài Rodney Dangerfield. Vì vậy tôi không quen thuộc với thể loại này.”

Bây giờ đã là năm 2012 rồi mà những đồng nghiệp của tôi vẫn đang ngồi viết một bài “diễn văn” để than khóc về những nhược điểm khủng khiếp của ngôn ngữ PHP.

Điều gây thất vọng lớn nhất với tôi thì không phải do PHP là một ngôn ngữ được thiết kế tồi kinh khủng. Cái mà thực sự làm nản lòng đó là có quá ít sự thay đổi trong ngôn ngữ đó. Chỉ một năm trước đây thôi, hacker huyền thoại Jamie Zawinski cũng đã nói về PHP như sau:

“Trước đây tôi từng nghĩ rằng PHP là đống rác lớn nhất và hôi thối nhất mà ngành công nghiệp máy tính đã mang tới cuộc đời tôi trong một thập kỷ.”

Vậy PHP có dở tệ đến nỗi không thể hoạt động được? Không, rõ ràng là không. Tội ác lớn nhất của PHP là nó hoàn toàn tầm thường. Sự tiếp tục phổ biến của nó là một bằng chứng sống rằng chất lượng thì chẳng liên quan gì cả; mà rẻ, bình dân và có mặt khắp mọi nơi luôn luôn dành chiến thắng.PHP thì cũng giống như ban nhạc rock cùi bắp Nickelback trong các ngôn ngữ lập trình. Và vâng, ngoài việc nản lòng với tình trạng hiện nay, gần đây tôi cũng đã đề cập đến Rasmus Lerdorf (cha đẻ của ngôn ngữ PHP) như là một con quỷ lớn nhất trong lịch sử. Tôi đã tự nói với lòng mình hàng triệu lần rằng hãy dừng ngay việc làm lớn chuyện này lên.

Phép ẩn dụ về cái búa thì rất hay, bởi vì chúng ta đang nói về việc sử dụng công cụ thích hợp trong công việc. Như theo lời của Alex Papadimoulis (người lập ra trang web nổi tiếng The Daily WTF) đã nói trước đây:

Một khách hàng đã hỏi tôi về việc xây dựng và lắp đặt một hệ thống giá sách. Tôi đang ở giai đoạn cần phải đóng đinh giá sách lên tường, nhưng tôi không biết chắc mình nên dùng dụng cụ gì để đóng những cái đinh cả. Liệu tôi nên sử dụng đế một chiếc giày cũ hay là một cái chai thủy tinh để đóng đinh?

Bạn sẽ trả lời câu hỏi này như thế nào? Có 2 phương án sau:

a. Nó thì còn tùy. Nếu bạn đang tìm cách đóng một cái đinh nhỏ vào một bức tường chẳng hạn, thì bạn sẽ nhận thấy việc sử dụng một cái chai có vẻ dễ hơn, đặc biệt là trong trường hợp chiếc giày hơi bẩn. Tuy nhiên, nếu bạn đang cố đóng một chiếc đinh lớn vào một khúc gỗ, thì hãy sử dụng chiếc giày: vì nếu sử dụng cái chai thì nó sẽ vỡ tan thành từng mảnh trong tay bạn.

b. Có một điều gì đó sai lầm về mặt cơ bản đối với cách mà bạn đang xây dựng; bạn cần sử dụng những công cụ thực sự phù hợp. Có thể bạn phải di chuyển đi lấy hộp đồ nghề (hoặc đánh xe đến tiệm bán dụng cụ gần nhà), nhưng nếu làm đúng cách thì sẽ giúp tiết kiệm rất nhiều thời gian, tiền bạc và kéo dài tuổi thọ sản phẩm của bạn. Bạn cần phải dừng ngay việc xây dựng mọi thứ chỉ vì tiền cho tới khi bạn hiểu được về những điều cơ bản trong quy trình xây dựng.

Điều mà chúng ta nên làm không phải là ngồi mà kể ra PHP dở kinh khủng như thế nào — mặc dù sự tồi tệ của nó vẫn còn tiếp tục chịu sự buộc tội và nguyền rủa trong tương lai — nhưng các lập trình viên chúng ta có thể thay thế một công cụ hết sức không hoàn thiện bằng một công cụ tốt hơn.Làm thế nào để chúng ta có thể cổ vũ những lập trình viên mới vào nghề tránh nhặt lấy một chiếc búa mà có hai đầu dùng để nhổ đinh, và chọn lấy một cái búa bình thường?

Điều này không có gì là khó hiểu hoặc hàn lâm đối với tôi. Tôi đang bắt đầu một dự án web mã nguồn mở với mục tiêu là tạo ra code có thể chạy một cách tự do và dễ dàng ở nhiều nơi nhất có thể. Mặc dù có những vấn đề nghiêm trọng trong PHP, tôi bắt buộc phải học hỏi sự thành công trong việc phổ biến của nó. Nếu bạn muốn tạo ra code hoạt động trong bất cứ môi trường nào và chạy trên hầu hết mọi server trên thế giới này mà không bị xung đột hoặc phải cấu hình phức tạp, thì PHP đáng nguyền rủa là sự lựa chọn duy nhất của bạn. Nếu điều đó không làm bạn kinh hãi, thì hãy đưa tay sờ lên ngực kiểm tra xem tim của bạn còn đập không, bởi vì có lẽ bạn đã chết rồi cũng nên.

PHP giống như mì ăn liền, hoặc là loại nước sốt rẻ tiền thông dụng mà ai cũng ăn.

PHP giống như mì ăn liền, hoặc là loại nước sốt rẻ tiền thông dụng mà ai cũng ăn.
Vì vậy, tôi muốn đưa ra một lời đề nghị khiêm tốn tới các đồng nghiệp lập trình viên của mình rằng. Lần tới nếu bạn cảm thấy bị thôi thúc để viết một bài blog tràng giang đại hải để chỉ trích PHP nữa, thì hãy nên quan tâm tới điều này:

  1. Tất cả chúng tôi đều đã biết tỏng về nó rồi. PHP thì rất kinh khủng, nhưng lại được sử dụng ở khắp mọi nơi. Thử đoán xem tại sao lại như vậy? Nó thì kinh khủng vào năm 2008, năm 2005, và từ năm 2002. Bạn đã nhận ra vấn đề chưa? Bạn phải quan sát thật kỹ mới thấy điều đó, vì vấn đề đó rất tinh tế. Mà thôi, bạn đừng bận tâm. Vì có lẽ bạn không đủ thông minh để nhận ra điều đó đâu!
  2. Cách tốt nhất để đấu lại một cái gì đó mà đã tràn lan khắp nơi và có cấu trúc tồi tệ như là PHP thì không phải là cứ ngồi đó mà chỉ ra tất cả rất (nhiều, nhiều, nhiều) khuyết điểm của nó, mà hãy xây dựng một cái gì đó thay thế hấp dẫn hơn và đảm bảo rằng những sự thay thế đó cũng có tính lan tỏa tương đương, dễ dàng cài đặt và sử dụng nhất có thể.
Chúng ta sẽ phải trải qua một hành trình dài phía trước. Một trong những mục tiêu dứt khoát trong dự án kế tiếp của tôi là làm bất cứ việc gì mà chúng ta có thể để tạo ra một hệ sinh thái ngôn ngữ mã nguồn mở, đến mức nó có thể cạnh tranh sòng phẳng với PHP trong việc dễ dàng cài đặt và triển khai.

Từ góc nhìn của tôi, việc lôi tất cả những điểm dở của PHP ra để nói rằng “PHP là cùi bắp” thì không chỉ là một lời phàn nàn, mà nó nhằm giúp cho việc định hướng và cảnh báo cho những lập trình viên mới vào nghề trong tương lai khi họ bắt đầu lựa chọn ngôn ngữ cho mình. Chắc chắn là có một số sản phẩm và các công việc trước đây đã được làm bằng PHP cũng tốt, bất chấp những đặc điểm dở tệ của nó. Nhưng bây giờ chúng ta cần phải làm việc cùng nhau để sửa chữa những điểm dở đó. Cách tốt nhất để sửa chữa các vấn đề của PHP vào lúc này đó là tạo ra những phương án thay thế mà nó phải nổi bật như thể việc lựa chọn cái búa tốt hơn là điều hiển nhiên.

Đó chính là điều mà tôi đang hy vọng tạo ra một cái gì đó Đặc Biệt. Tôi đang cố gắng hết sức để làm phần việc của mình để điều đó xảy ra. Thế còn bạn thì sao?

No comments:

Post a Comment