Tại sao các dev thường ghét PHP?

PHP là ngôn ngữ được sử dụng rộng rãi nhất trên thế giới trong lập trình web. Nó cũng bị ghét nhất. Nhưng tại sao nhiều developer lại ghét nó đến vậy? Hôm nay chúng ta hãy cùng tìm hiểu lý do xem chúng có thuyết phục không nhé ^_^
Tại sao các dev thường ghét PHP?
Tại sao các dev thường ghét PHP?

Ghét vì đam mê

Nếu mình nói rằng PHP bị cả thế giới ghét bỏ thì đó không phải là ý kiến cá nhân của mình. Trong cuộc khảo sát mới nhất trên stackoverflow, các developer từ khắp nơi trên thế giới đã xếp PHP vào top 5 ngôn ngữ đáng sợ nhất. Cuộc khảo sát mới nhất của Hired đưa nó vào top 2 bị ghét nhất. Còn rất nhiều thứ nữa và mình thậm chí không nói về những gì đang diễn ra trên Reddit.

Mình đã làm qua rất nhiều dự án với Laravel, và mình thích cũng rất thích Laravel. Thành thật mà nói, nó khá tốt. Lúc ấy mình đã tự đặt câu hỏi: tại sao mọi người lại có quá nhiều ác cảm với PHP?

 

Quá khứ rắc rối của PHP

Để hiểu điều gì sẽ xảy ra tiếp theo, chúng ta có thể cần xem lại lịch sử một chút.

Năm 1994, Rasmus Lerdorf đang phát triển một bộ tookit bằng C. Bộ công cụ này được sử dụng để quản lý trang web cá nhân của anh ấy. Rasmus làm điều đó chỉ vì nhu cầu của chính mình vào thời điểm đó. Anh ta không hề muốn biến nó thành một ngôn ngữ lập trình. Không có gì trong bộ công cụ này được thiết kế để trở thành một ngôn ngữ lập trình.

Một năm sau, Rasmus phát hành bộ công cụ mã nguồn mở này được gọi là: PHP / FI. Và nó trông như thế này:

<!--include /text/header.html-->

<!--getenv HTTP\_USER\_AGENT-->
<!--ifsubstr $exec\_result Mozilla-->
  Hey, you are using Netscape!<p>
<!--endif-->

<!--sql database select \* from table where user='$username'-->
<!--ifless $numentries 1-->
  Sorry, that record does not exist<p>
<!--endif exit-->
  Welcome <!--$user-->!<p>
  You have <!--$index:0--> credits left in your account.<p>

<!--include /text/footer.html-->

 

Đối với phần còn lại của câu chuyện:

  • Code được tiếp quản bởi một nhóm phát triển và PHP / FI2 được phát hành vào năm 1997.
  • Năm 1998, một phần core được viết lại, sau đó PHP3 được phát hành.
  • Năm 1999, phần core của PHP được viết lại hoàn toàn để tạo ra Zend.
  • PHP4 tiếp nối vào năm tiếp theo và PHP5 được phát hành vào năm 2004 với Zend2.
  • PHP6 đã bị hủy bỏ vì quá trình phát triển đã biến nó thành một đống hổ lốn.
  • PHP7 được phát hành vào năm 2015 sau một bản refactor core siêu to khổng lồ.

Nhưng ban đầu, Rasmus chỉ đang code thứ của riêng mình. Năm 2003, anh ấy đã thực hiện một cuộc phỏng vấn và kể một số điều khó tin.

Tôi thực sự không thích code. Tôi đã xây dựng công cụ này để code ít hơn, và cũng để tôi tái sử dụng code dễ dàng hơn… Tôi không biết làm thế nào để dừng nó lại, tôi chưa bao giờ có ý định viết một ngôn ngữ lập trình […]. Tôi không biết làm thế nào để viết một ngôn ngữ lập trình cả [...].

Hoang Mang VL

Mẹ nó, thật sự là méo hiểu chuyện gì đang xảy ra - Rasmus =)).

 

Thiếu nhất quán và thiết kế tồi

Các developer ghét PHP vì nó là một ngôn ngữ không nhất quán về mặt kỹ thuật đi kèm với một thiết kế tồi tệ. Khi bạn so sánh nó với các ngôn ngữ khác, sự tương phản là rõ ràng.

Nếu sau khi tìm hiểu về nó, bạn vẫn không thể thừa nhận rằng PHP có một số vấn đề, thôi toang - PHP đã trở thành tín ngưỡng của bạn, và thuyết phục một kẻ cuồng tín là điều bất khả thi.

PHP Best Practices

Sử dụng PHP, rất dễ tạo ra smell code. Các ngôn ngữ khác có nhiều phương pháp hạn chế điều này hơn. Chúng ta cũng thấy rất nhiều vấn đề về bảo mật với PHP.

Tuy nhiên, bạn sẽ không gặp lỗ hổng bảo mật hay phải chịu cảnh smell code nếu bạn viết code PHP đúng cách. Các developer ghét PHP vì họ có nhiều khả năng gặp lỗi khi làm việc với một ngôn ngữ có quá ít ràng buộc.

 

Bị ghét bởi vì quá thành công

Có một yếu tố quan trọng khác xung quanh sự thù hận này. Các developer ghét PHP vì nó được sử dụng ở mọi nơi. Blog này cũng đang chạy trên PHP7 - Laravel. PHP giúp mình thực hiện công việc một cách đơn giản.

Bản thân ngôn ngữ không phải là tốt nhất, nhưng ai quan tâm chứ? Nó đáp ứng nhu cầu của mình một cách nhanh chóng và dễ tiếp cận. Cũng vì lý do này mà 80% web chạy bằng PHP.

Với sự ra đời của WordPress, thứ thống trị Internet theo đúng nghĩa đen, hầu hết các developer mà mình quen đều sẽ từng chơi với PHP.

developers-hate-php

Bên cạnh đó, mình đang nói với bạn như thể ngôn ngữ này chỉ có thể làm một vài website đơn giản như cái blog này của mình, nhưng rõ ràng không phải như vậy.

Facebook, Wikipedia, Yahoo, Flickr, Tumblr tất cả các trang web này đều chạy bằng PHP và chào đón hàng triệu người dùng mỗi tháng mà vẫn phẻ re. PHP đã và sẽ làm rất tốt điều này trong một thời gian dài.

 

Tương lai phát triển

Tầm năm 2011, lúc mình mới bắt đầu lên TP HCM đi học, mình đã nghe nói:

PHP sắp chết rồi, mày học nó làm gì? 

Hay một vài câu nói mông lung hơn:

PHP là cái thứ ngôn ngữ vừa chậm chạp lại vừa cẩu thả. Học nó làm gì cho tốn thời gian?

Oh ho. Vậy mà nó vẫn ở đây. Bất chấp thời gian và công nghệ mới nhất, nó vẫn chưa chết.

Thực sự mà nói, một công nghệ chỉ thực sự chết đi "khi đã không còn tương lai phát triển" hoặc "không còn ai sử dụng nó nữa".

Trong suy nghĩ của nhiều developer, PHP vẫn ở phiên bản 4 - khi ngôn ngữ này còn không ổn định, hiệu suất cùi bắp và không hỗ trợ OOP. Các developer ghét PHP vì họ tin rằng ngôn ngữ này đã quá trì trệ trong suốt hơn 20 năm qua. Nhưng PHP ngày nay đã khác xa với PHP4.

PHP7 nhanh hơn Python và Ruby. PHP cũng hỗ trợ strongly typed nếu bạn muốn.

Công cụ cũng đang phát triển với các bộ static parsers đã xuất hiện trong những năm gần đây.

Các framework như Laravel, Symfony hoặc Zend buộc bạn phải follow kiến trúc chuẩn.

Các phiên bản mới được phát hành hàng năm với một lịch trình chính xác.

PHP7.4 hiện tại có hiệu suất thậm chí còn cao hơn.

Mình sẽ không liệt kê mọi thứ đang xảy ra trong PHP hiện tại vì quá dài. Nếu bạn muốn biết mọi thứ mình mời bạn đọc bài viết này. Đã đến lúc thay đổi cách nhìn của bạn về thứ ngôn ngữ không liên quan gì đến nó trước đây.

omg thank you

PHP tuy còn nhiều điểm hạn chế, nhưng thực sự nó vẫn có rất nhiều thứ tốt khác và phù hợp cho hầu hết thể loại websites.

Với việc miễn phí bộ .NET Core đến từ Microsoft, rất nhiều developer lo lắng về vị thế và nhu cầu của PHP trong tương lai, nhưng thực sự mà nói điều đó thật sự rất khó, ít nhất là trong tương lai gần.

Hầu hết các developer ghét PHP đều ghét nó vì chủ nghĩa hoàn hảo hoặc thiếu hiểu biết. Dù bằng cách nào thì điều đó cũng thật ngu ngốc. Bạn phải chọn một công nghệ dựa trên những gì bạn cần. PHP rất hữu ích và mạnh mẽ trong nhiều trường hợp. Nếu bạn loại bỏ nó chỉ vì danh tiếng của nó (trước đó) thì chắc chắn không phải là một ý kiến hay.

Comments

Bài viết nổi bật

Dạo gần đây đi đâu cũng nghe nói về microservices, người người nhà nhà rục rịch chuyển dịch hệ thống sang microservices. Trước khi đưa ra sự so sánh, mình sẽ khái quát một chút về Monolith Application và MicroServices một chút cho các bạn chưa biết nắm rõ hơn nhé.
PHP là ngôn ngữ được sử dụng rộng rãi nhất trên thế giới trong lập trình web. Nó cũng bị ghét nhất. Nhưng tại sao nhiều developer lại ghét nó đến vậy? Hôm nay chúng ta hãy cùng tìm hiểu lý do xem chúng có thuyết phục không nhé ^_^
Lúc trước mình hay sử dụng cách này trên laptop phụ của mình, giờ mua license luôn rồi. Hôm nay mình xin chia sẻ cho bạn nào cần nhé.
JWT Tokens là một cách thức lưu trữ thông tin xác thực hiệu quả, nhưng làm cách nào để chúng ta có thể giúp chúng an toàn hơn? Có 2 cách thường dùng để lưu trữ JWT Tokens là LocalStorage và Cookies. Bây giờ chúng ta sẽ bắt đầu "mổ xẻ" các ưu - nhược điểm của mỗi loại nhé.
Có khá nhiều bạn đã yêu cầu mình một bài viết về Repository Design Pattern. Vậy mục đích của nó là gì? Nó có thực sự cần thiết cho ứng dụng của bạn hay không? Những điểm mạnh, điểm yếu của nó là gì? Chúng ta cùng đi sâu tìm hiểu qua bài viết này nhé.

Mục lục

Related posts

Triển khai Saga Pattern trong microservices với NodeJS và Choreography-Based Saga
Mô hình Saga đưa ra một giải pháp có cấu trúc để giải quyết thách thức này. Nó cung cấp một phương pháp có hệ thống để quản lý transaction qua nhiều microservices. Điều này giải quyết những phức tạp của các transaction phân tán và hoàn toàn tương thích với các nguyên tắc của kiến trúc microservices, được đặc trưng bởi sự kết nối lỏng lẻo và khả năng triển khai độc lập của các service.
Một API cho phép giao tiếp hai chiều giữa các ứng dụng phần mềm thông qua các requests. Một Webhook là một API nhẹ, hỗ trợ chia sẻ dữ liệu một chiều được kích hoạt bởi các events.
Một trong những câu hỏi được đặt thường xuyên nhất về TypeScript là liệu chúng ta nên sử dụng interface hay type. Câu trả lời cho câu hỏi này, giống như nhiều câu hỏi lập trình khác, là nó phụ thuộc vào tình hình cụ thể. Trong một số trường hợp, một cái có lợi thế rõ rệt hơn cái kia, nhưng trong nhiều trường hợp, chúng có thể thay thế cho nhau.
Đây là các types cơ bản nhưng cũng phổ biến nhất trong Typescript. Một số types khác phức tạp hơn cũng được xây dựng dựa trên những types cơ bản này.
Trong thế giới lập trình, trách nhiệm lớn nhất của chúng ta không phải chỉ làm cho code chạy được, mà còn phải đảm bảo rằng các đoạn code mà chúng ta viết có thể dễ dàng kiểm tra và bảo trì trong một khoảng thời gian dài.
Phân trang - một thành phần không thể thiếu trong các ứng dụng có lượng dữ liệu lớn. Tuy nhiên, bạn hiểu được bao nhiêu về nó?
Javascript là một thành phần không thể thiếu đối với frontend developers. Tuy nhiên, ngay từ lúc ra đời, nó đã tồn tại khá nhiều vấn đề cần khắc phục. Đó là lý do tại sao từ 2015 (ES6) tới 2021 (ES12) ra đời nhằm giúp Javascript trở nên tốt hơn.
Dạo này mình làm việc với mấy bạn trên github, thấy hay xài mấy từ viết tắt mà mình không hiểu lắm. Thôi thì tổng hợp lại một list các từ viết tắt hay dùng trong github luôn cho ai cần :D
Dạo gần đây đi đâu cũng nghe nói về microservices, người người nhà nhà rục rịch chuyển dịch hệ thống sang microservices. Trước khi đưa ra sự so sánh, mình sẽ khái quát một chút về Monolith Application và MicroServices một chút cho các bạn chưa biết nắm rõ hơn nhé.
Cách bỏ qua câu lệnh --set-upstream quen thuộc cho các con lười
Mình sẽ giới thiệu 2 cách để xóa một property trong Javascript Object. Một cách sử dụng mutable - toán tử delete, một cách còn lại là immutable - tính năng Object Restructuring.

Tin mới nhất

Triển khai Saga Pattern trong microservices với NodeJS và Choreography-Based Saga
Mô hình Saga đưa ra một giải pháp có cấu trúc để giải quyết thách thức này. Nó cung cấp một phương pháp có hệ thống để quản lý transaction qua nhiều microservices. Điều này giải quyết những phức tạp của các transaction phân tán và hoàn toàn tương thích với các nguyên tắc của kiến trúc microservices, được đặc trưng bởi sự kết nối lỏng lẻo và khả năng triển khai độc lập của các service.
Một API cho phép giao tiếp hai chiều giữa các ứng dụng phần mềm thông qua các requests. Một Webhook là một API nhẹ, hỗ trợ chia sẻ dữ liệu một chiều được kích hoạt bởi các events.
Một trong những câu hỏi được đặt thường xuyên nhất về TypeScript là liệu chúng ta nên sử dụng interface hay type. Câu trả lời cho câu hỏi này, giống như nhiều câu hỏi lập trình khác, là nó phụ thuộc vào tình hình cụ thể. Trong một số trường hợp, một cái có lợi thế rõ rệt hơn cái kia, nhưng trong nhiều trường hợp, chúng có thể thay thế cho nhau.
Trong phần này, chúng ta sẽ tìm hiểu một số khái niệm cơ bản nhất về AWS là gì và một số lợi ích khi sử dụng AWS.
Trở thành một software developer hiệu suất cao không phải là điều dễ dàng. Điều này đòi hỏi bạn phải có kỹ năng và kiến thức về lập trình, cũng như cách tiếp cận và giải quyết các vấn đề phức tạp. Tuy nhiên, nếu bạn có chút kiên nhẫn và sự nỗ lực, bạn hoàn toàn có thể trở thành một developer tài năng và thành công.
Đây là các types cơ bản nhưng cũng phổ biến nhất trong Typescript. Một số types khác phức tạp hơn cũng được xây dựng dựa trên những types cơ bản này.
Trong thế giới lập trình, trách nhiệm lớn nhất của chúng ta không phải chỉ làm cho code chạy được, mà còn phải đảm bảo rằng các đoạn code mà chúng ta viết có thể dễ dàng kiểm tra và bảo trì trong một khoảng thời gian dài.
Thông tin được định nghĩa dưới dạng dữ liệu, kiến thức về thông tin, và trí tuệ về tri thức.
Phân trang - một thành phần không thể thiếu trong các ứng dụng có lượng dữ liệu lớn. Tuy nhiên, bạn hiểu được bao nhiêu về nó?
Javascript là một thành phần không thể thiếu đối với frontend developers. Tuy nhiên, ngay từ lúc ra đời, nó đã tồn tại khá nhiều vấn đề cần khắc phục. Đó là lý do tại sao từ 2015 (ES6) tới 2021 (ES12) ra đời nhằm giúp Javascript trở nên tốt hơn.
Dạo này mình làm việc với mấy bạn trên github, thấy hay xài mấy từ viết tắt mà mình không hiểu lắm. Thôi thì tổng hợp lại một list các từ viết tắt hay dùng trong github luôn cho ai cần :D
Triển khai Saga Pattern trong microservices với NodeJS và Choreography-Based Saga
Mô hình Saga đưa ra một giải pháp có cấu trúc để giải quyết thách thức này. Nó cung cấp một phương pháp có hệ thống để quản lý transaction qua nhiều microservices. Điều này giải quyết những phức tạp của các transaction phân tán và hoàn toàn tương thích với các nguyên tắc của kiến trúc microservices, được đặc trưng bởi sự kết nối lỏng lẻo và khả năng triển khai độc lập của các service.
Một API cho phép giao tiếp hai chiều giữa các ứng dụng phần mềm thông qua các requests. Một Webhook là một API nhẹ, hỗ trợ chia sẻ dữ liệu một chiều được kích hoạt bởi các events.
Một trong những câu hỏi được đặt thường xuyên nhất về TypeScript là liệu chúng ta nên sử dụng interface hay type. Câu trả lời cho câu hỏi này, giống như nhiều câu hỏi lập trình khác, là nó phụ thuộc vào tình hình cụ thể. Trong một số trường hợp, một cái có lợi thế rõ rệt hơn cái kia, nhưng trong nhiều trường hợp, chúng có thể thay thế cho nhau.
Đây là các types cơ bản nhưng cũng phổ biến nhất trong Typescript. Một số types khác phức tạp hơn cũng được xây dựng dựa trên những types cơ bản này.