Sự gia tăng độ phức tạp của các hệ thống là không ngừng, áp bức và cuối cùng làm tê liệt. Đối với tôi là một lập trình viên thế hệ cũ, điều đó cũng thật đáng thất vọng.
Tôi đã lập trình được hơn 40 năm, đã viết mã bằng 50 - 100 ngôn ngữ hoặc phương ngữ khác nhau và trở thành chuyên gia trong 5-10. Lý do tôi có thể yêu cầu rất nhiều là vì hầu hết chúng chỉ là cùng một ngôn ngữ, với các điều chỉnh. Các tinh chỉnh thêm phức tạp, làm cho mọi ngôn ngữ chỉ khác nhau một chút.
Tôi đã thực hiện cùng một số thuật toán vô số lần: bộ sưu tập, chuyển đổi, sắp xếp và tìm kiếm, mã hóa / giải mã, định dạng / phân tích cú pháp, bộ đệm và chuỗi, số học, bộ nhớ, I / O. Mỗi triển khai mới đều tăng thêm độ phức tạp, bởi vì mỗi thứ chỉ khác nhau một chút.
Tôi tự hỏi về phép thuật được tạo ra bởi các nghệ sĩ hình thang bay cao của các khung web và ứng dụng di động, làm thế nào họ có thể tạo ra một thứ gì đó thật đẹp trong một thời gian ngắn như vậy. Sau đó, tôi nhận ra họ không biết bao nhiêu, họ sẽ cần học bao nhiêu về dữ liệu hoặc truyền thông hoặc thử nghiệm hoặc chủ đề hoặc bất cứ điều gì trước khi những gì họ làm trở nên hữu ích.
Tôi đã học được nghề của mình trong kỷ nguyên của các ngôn ngữ thế hệ thứ tư, nơi chúng tôi thực sự tin rằng chúng tôi sẽ tạo ra một chuỗi các ngôn ngữ cấp cao hơn và cao hơn để dần dần nắm bắt được nhiều hơn các phần lặp đi lặp lại của phần mềm viết. Vì vậy, làm thế nào mà bật ra, chính xác?
Microsoft và IBM đã giết chết ý tưởng đó bằng cách quay lại C để viết ứng dụng cho Windows và OS / 2, trong khi dBase / Foxpro và thậm chí Delphi không hoạt động. Sau đó, web đã làm điều đó một lần nữa với bộ ba ngôn ngữ lắp ráp cuối cùng: HTML, CSS và JavaScript / DOM. Tất cả đã xuống dốc từ đó. Luôn luôn có nhiều ngôn ngữ hơn và nhiều thư viện hơn và nhiều khung hơn và phức tạp hơn.
Chúng tôi biết chúng ta nên làm điều đó khác đi. Chúng tôi biết về CoffeeScript và Dart, về Ít và Sass, về mẫu để tránh phải viết HTML. Chúng tôi biết và chúng tôi làm điều đó anyway. Chúng tôi có khuôn khổ của chúng tôi, đầy những trừu tượng bị rò rỉ, và chúng tôi thấy những điều kỳ diệu có thể được thực hiện bởi những người được chọn học những câu thần chú phức tạp, nhưng chúng tôi và các chương trình của chúng tôi bị mắc kẹt bởi các quyết định đưa ra trong quá khứ. Quá phức tạp để thay đổi hoặc bắt đầu lại.
Kết quả là những thứ phải dễ dàng không phải là dễ, và những thứ phải có thể là gần như không thể, vì sự phức tạp. Tôi có thể ước tính chi phí thực hiện các thay đổi để triển khai một tính năng mới trong cơ sở mã đã được thiết lập và tự tin rằng tôi sẽ ổn. Tôi có thể ước tính, nhưng tôi không thể biện minh hay giải thích nó. Nó quá phức tạp.
Để trả lời cho câu hỏi cuối cùng của bạn, tôi đặc biệt khuyên các lập trình viên trẻ nên bắt đầu càng cao trên lớp bánh càng tốt, và chỉ lặn xuống các lớp thấp hơn khi nhu cầu và mong muốn cung cấp động lực. Sở thích của tôi là dành cho các ngôn ngữ không có vòng lặp, ít hoặc không có trạng thái phân nhánh và rõ ràng. Lisp và Haskell đến với tâm trí. Trong thực tế, tôi luôn hoàn thành với C # / Java, Ruby, Javascript, Python và SQL vì đó là nơi có cộng đồng.
Lời cuối cùng: sự phức tạp là kẻ thù tối thượng! Đánh bại điều đó và cuộc sống trở nên đơn giản.