Sự khác biệt là gì?
Sự khác biệt thực sự và quan trọng giữa một ngôn ngữ lập trình và các ngôn ngữ khác là:
HTML và CSS mô tả trình bày , trong khi ngôn ngữ lập trình mô tả
chức năng
Tôi dự định sẽ minh họa tại sao sự khác biệt này lại quan trọng, nhưng việc giáo dục về vấn đề này đôi khi bị đặt sai chỗ.
Một câu chuyện có thật :
Có lần tôi đã dành vài tháng để phát triển một hệ thống quản lý hiệu suất phức tạp bằng ngôn ngữ lập trình "phù hợp". Nó tự động hóa quá trình thu thập dữ liệu từ nhiều hệ thống khác nhau, thực hiện các thao tác khác nhau trên dữ liệu đó và sau đó trình bày kết quả trong một bảng đơn giản.
Khi nó còn hoạt động, một quản lý cấp cao đã nhìn thấy một công cụ được viết cho một doanh nghiệp tương tự và hỏi liệu chúng tôi có thể thay thế những gì tôi đã viết bằng cách sử dụng thay thế của họ không. Hơn nữa, anh ấy rất buồn vì tôi đã dành nhiều tuần để phát triển giải pháp của mình, nơi ứng dụng mới này đã được viết trong vài ngày.
Điều tra sâu hơn cho thấy rằng tùy chọn ưa thích của người quản lý là tất cả các bản trình bày không có chất: có rất nhiều màu sắc và biểu tượng và đồ thị, nhưng hoàn toàn không có logic đằng sau chúng. Tất cả các dữ liệu phải được thu thập và thao tác bằng tay. Mặc dù giao diện đẹp, ứng dụng về cơ bản là vô dụng.
Tôi rất vui khi nói rằng người quản lý trong câu hỏi đã thuyết phục rằng cách tiếp cận của tôi là cách đáp ứng nhu cầu kinh doanh thực sự của anh ấy.
Tầm quan trọng của việc trình bày :
Thường có một hàm ý rằng các kỹ năng về HTML, CSS, vv bằng cách nào đó kém hơn các kỹ năng về ngôn ngữ lập trình "thực". Đây là một sai lầm nghiêm trọng.
Trong câu chuyện của tôi, người quản lý cấp cao cảm thấy rằng thiết kế rất quan trọng đối với anh ta, đến mức ban đầu anh ta đã chuẩn bị để bỏ qua chức năng có lợi cho nó. Bây giờ, nếu đây là một sự cố cô lập, tôi có thể đề nghị rằng người quản lý chỉ là ngớ ngẩn. Nhưng nó đã không. Hết lần này đến lần khác, tôi đã gặp những người dùng bị ấn tượng bởi đồ họa hào nhoáng và các vật dụng điên cuồng, nhưng không bị ấn tượng bởi chức năng thô và thành tựu kỹ thuật của tôi. Tôi nghĩ rằng có một số bài học để tìm hiểu ở đây:
- Mọi người đánh giá phần mềm theo tiêu chí mà họ hiểu. Họ thường hiểu sự khác biệt giữa đẹp trai và xấu xí, nhưng hiếm khi đánh giá cao các sắc thái kỹ thuật.
- Mọi người bị đánh lừa bởi vẻ bề ngoài. Đây có thể không phải là một điều tốt, nhưng đó là một thực tế mà chúng ta phải sống cùng.
- Xuất hiện ảnh hưởng đến cách mọi người cảm nhận về phần mềm. Cách mọi người cảm nhận về phần mềm rất quan trọng đối với họ. Thật vậy, đôi khi mọi người thích phần mềm làm cho họ cảm thấy tốt hơn phần mềm có chức năng vượt trội. Thật vậy, họ có thể làm việc hiệu quả hơn với các công cụ cảm thấy tốt hơn so với các công cụ kỹ thuật vượt trội. Ở mức độ này, người dùng của chúng tôi không bị lừa. Họ đang thực sự đưa ra một lựa chọn khôn ngoan và chu đáo.
- Là lập trình viên, chúng ta thường bỏ qua vai trò của việc trình bày khi chúng ta tập trung vào chức năng. Ở một mức độ nào đó, điều này là đúng và đúng. Tuy nhiên, điều quan trọng là phải nhận ra rằng có một khía cạnh khác trong công việc của chúng tôi là quan trọng đối với khách hàng của chúng tôi.
Vì vậy, các ngôn ngữ hướng trình bày (HTML, CSS) rất quan trọng. Không nên đánh giá thấp giá trị gia tăng của những người có thể sử dụng các công cụ này một cách hiệu quả.
Tầm quan trọng của ngôn ngữ lập trình thực
Như OP đã chỉ ra, các ngôn ngữ lập trình "thực" là Turing Complete. Là một người đam mê buồn thích hợp, tôi thấy điều này rất hấp dẫn. Điều đó có nghĩa là, đối với bất kỳ chương trình nào được viết bằng ngôn ngữ TC, một chương trình tương đương về chức năng có thể được viết bằng bất kỳ ngôn ngữ TC nào khác . Tất nhiên, điều này không có nghĩa là tất cả các ngôn ngữ đều giống nhau. Họ đều có điểm mạnh và điểm yếu khiến họ ít nhiều phù hợp với một số nhiệm vụ nhất định. Tuy nhiên, I / O sang một bên, điều này có nghĩa là tất cả các chương trình có thể được viết bằng tất cả các ngôn ngữ lập trình thực sự.
(Ngẫu nhiên, điều quan trọng là TC. Khai báo so với mệnh lệnh là một cá trích đỏ ở đây. Ví dụ, SQL là khai báo nhưng cũng là ngôn ngữ lập trình phù hợp vì nó là TC.)
Tất nhiên, điều tương tự không đúng với ngôn ngữ đánh dấu như HTML hoặc CSS. Trên thực tế, có rất nhiều loại vấn đề mà các ngôn ngữ này không thể giải quyết được . Nơi tôi có thể lập trình bất cứ điều gì tôi muốn bằng một ngôn ngữ lập trình thực sự - bao gồm các công cụ bố trí - không thể đạt được những điều tương tự với các ngôn ngữ không phải là TC.
Như được nhấn mạnh trong câu chuyện của tôi, HTML và ilk của nó được sử dụng để tạo bài thuyết trình. Ngôn ngữ lập trình thực được sử dụng để sản xuất chức năng.
Tại sao các lập trình viên mô phạm về tất cả?
- Các lập trình viên dành rất nhiều thời gian, công sức và tiền bạc để phát triển các kỹ năng của họ. Mọi người tự nhiên coi trọng những thứ họ đầu tư ("trái tim của bạn là nơi tiền của bạn").
- Các lập trình viên thường cảm thấy cần phải chứng minh lượng thời gian cần thiết để tạo ra kết quả so với kết quả nhanh chóng đạt được của các nhà thiết kế UI. Để làm điều này, họ cần phải phân biệt giữa những gì hai nhóm thực sự làm .
- Bởi vì nhà tuyển dụng cần áp dụng đúng người vào đúng việc. Trừ khi chúng tôi làm rõ sự khác biệt (thường là kỹ thuật), các nhà quản lý dễ dàng thực hiện các cuộc gọi sai.
- Bởi vì có một sự khác biệt thực sự và cơ bản , như đã nêu ở trên.
Có phải nó luôn luôn thích hợp để trở thành pedantic?
Chúng ta hãy đối mặt với nó, vì các lập trình viên chúng ta là một người rất tự nhiên . Nó đi với lãnh thổ. Nó không giúp ích gì cho nhiều người trong chúng ta đã bị đốt cháy khi những người không phải là lập trình viên không hiểu những gì chúng ta làm.
Tuy nhiên (và thành thật mà nói, điều này đi ngược lại với bản năng tự nhiên của tôi), tôi không nghĩ rằng chúng ta cần phải gọi mọi người ra ngoài bất cứ khi nào họ lướt qua mọi sự khác biệt nhỏ .
Những điều quan trọng ở đây là bối cảnh
và quan điểm .
Tôi đã nói rằng, từ quan điểm của một nhà sinh học, cà chua là một loại trái cây. Nhưng khi tôi mua chúng trong siêu thị, tôi tìm chúng trong số các loại rau. Tại sao? Bởi vì sự khác biệt kỹ thuật không quan trọng trong bối cảnh cụ thể đó. Hơn nữa, sự khác biệt thực sự sẽ cản trở sự hữu ích của chúng: ví dụ nếu tôi đủ để đưa cà chua vào món salad trái cây.
Nó giống với ngôn ngữ máy tính. Có những lúc sự khác biệt giữa ngôn ngữ lập trình và ngôn ngữ khác thực sự có vấn đề . Tuy nhiên, khá thường xuyên, tất cả chúng ta có thể giao tiếp hoàn hảo một cách hiệu quả khi chỉ cần gộp tất cả chúng lại với nhau. Trong trường hợp câu hỏi được liên kết bởi OP, thực sự không có vấn đề gì về ngôn ngữ là ngôn ngữ lập trình thực sự và ngôn ngữ nào không. Chỉ ra sự khác biệt không thúc đẩy cuộc thảo luận dưới bất kỳ hình thức nào. Rất may, ngoài việc thêm một chút tiếng ồn (và trở thành tác nhân kích thích cho một cuộc thảo luận thú vị!), Việc đi bộ được liên kết bởi OP không có kết quả. Tuy nhiên, điều tồi tệ nhất là nghề giáo có thể khuấy động những cảm xúc tiêu cực và làm hỏng các mối quan hệ ... ít nhất là theo vợ tôi.
:-)
Làm thế nào để đối phó với nghề giáo viên trong số các lập trình viên
Một người bạn thuyết giáo của tôi đã từng giảng một bài giảng có tên:
Đây có phải là một ngọn đồi đáng chết?
Ông đã đề cập đến các tướng lĩnh đánh giá chiến lược về những trận chiến nào đáng để chiến đấu: những lợi ích có đáng phải trả không?
- Có thực sự đáng làm gián đoạn dòng chảy của cuộc thảo luận để làm cho sự khác biệt này?
- Có phải nghề giáo của tôi bắt nguồn từ cảm giác kiêu ngạo hoặc từ quá khứ bị tổn thương?
- Nhận xét của tôi có coi trọng kỹ năng của người khác cũng như của chính tôi không?
Tất nhiên, có những lúc cần phải phân biệt. Mục tiêu của tôi là, khi tôi đóng góp, nó sẽ tăng thêm giá trị cho những nỗ lực tập thể của chúng tôi.
Đó là, sau tất cả, công việc của mọi lập trình viên thực sự .