Việc sử dụng các ngôn ngữ lập trình ngày càng cao hơn có thể dẫn đến sự thiếu hụt các lập trình viên có kiến ​​thức về kiến ​​trúc máy tính không?


15

Trích dẫn từ Wikipedia của bài viết "Ngôn ngữ lập trình cấp cao":

Ngôn ngữ lập trình cấp cao là ngôn ngữ lập trình có sự trừu tượng hóa mạnh mẽ từ các chi tiết của máy tính. So với các ngôn ngữ lập trình cấp thấp, nó có thể sử dụng các yếu tố ngôn ngữ tự nhiên, dễ sử dụng hơn hoặc dễ di chuyển hơn trên các nền tảng. Các ngôn ngữ như vậy ẩn các chi tiết của hoạt động CPU như mô hình truy cập bộ nhớ và quản lý phạm vi.

Tức là, khi mức độ ngôn ngữ lập trình tăng lên, lập trình viên càng đi xa khỏi phần cứng mà chương trình chạy.

Bây giờ tôi không biết số liệu thống kê về việc sử dụng ngôn ngữ theo các cấp độ, nhưng tôi sẽ nghi ngờ rằng các ngôn ngữ cấp cao hơn ngày càng thay thế các ngôn ngữ cấp thấp hơn. Nếu vậy, điều này có thể dẫn đến sự thiếu hụt các lập trình viên với kiến ​​thức kiến ​​trúc máy tính? Đây sẽ là một vấn đề cho ngành công nghiệp?

Câu trả lời:


16

Nó có thể , nhưng có khả năng sẽ không dẫn đến một vấn đề.

Đó chỉ là kinh tế. Nếu đại đa số mọi người mất khả năng hiểu kiến ​​trúc cơ bản và vẫn còn NHU CẦU rất lớn để hiểu kiến ​​trúc cơ bản, thì những người làm sẽ có việc làm và được trả nhiều tiền hơn, trong khi những người không chỉ có những công việc không cần thiết (và vẫn có thể được trả nhiều hơn ... ai biết?).

Có hữu ích không? Chắc chắn rồi. Bạn sẽ có khả năng tốt hơn. Có cần thiết trong hầu hết các trường hợp? Không. Đó là lý do tại sao sự trừu tượng là rất lớn, chúng ta đứng trên vai những người khổng lồ mà không cần phải là người khổng lồ (nhưng sẽ luôn có những người khổng lồ xung quanh).


4
Nhưng tất cả trừu tượng đều bị rò rỉ. Biết kiến ​​trúc cơ bản là điều bắt buộc nếu bạn muốn trở thành người quyết định xử lý sự trừu tượng bị rò rỉ.
dsimcha

5
@dsimcha, Đồng ý, nhưng để trở thành chàng trai bạn cần "người khác" đến với bạn ;-) Nếu mọi người cần biết tất cả mọi thứ, sự trừu tượng đã thất bại thảm hại.
Preets

1
@Preets, Và đó là lý do tại sao nhiều bản tóm tắt đã thất bại thảm hại. Thậm chí còn có chỗ cho một anh chàng cờ vây tồn tại là bằng chứng cho thấy một sự trừu tượng đã thất bại.
Pacerier

@Ryan, Nó thực sự sẽ dẫn đến một vấn đề trong tương lai thế giới tràn ngập các ứng dụng đầy lỗi tinh vi do các lớp trên các lớp trừu tượng bị rò rỉ. Bây giờ đủ tuyệt vời khi các công ty như Google có tài nguyên vô hạn vẫn có thể có lỗi trong các ứng dụng cốt lõi của họ.
Pacerier

3
@Pacerier google có nguồn tài nguyên vô hạn và họ làm cho các ứng dụng có độ lớn phức tạp hơn và bao gồm một số dòng mã có cường độ lớn hơn hầu hết các dòng khác. tuyên bố tất cả mọi người nên biết công cụ máy tính lowlevel vì tất cả các khái niệm trừu tượng có thể bị rò rỉ cũng giống như nói rằng mọi người nên biết cách xây nhà từ đầu bằng cách không sử dụng công cụ vì cơn bão có thể đến và phá hủy nhà của họ. chỉ là không khả thi (hoặc thông minh) để chi tiêu tài nguyên như vậy.
sara

9

Tôi nghĩ vậy. Đó là một xu hướng khiến tôi lo lắng. Không trừu tượng là hoàn hảo ; nếu có một cách hoàn hảo để đơn giản hóa bất kỳ vấn đề phức tạp nào, nó sẽ thay thế bản gốc rất nhanh. (Điều đó đã xảy ra trong quá khứ, đôi khi với máy tính và thường xuyên hơn trong các lĩnh vực khác không lo lắng nhiều về khả năng tương thích ngược như chúng ta làm, chẳng hạn như vật lý.)

Điều này có nghĩa là mỗi khi bạn sử dụng một sự trừu tượng, có một phần phức tạp quan trọng mà nó ẩn giấu khỏi bạn. Nếu bạn không biết đó là gì, tại sao nó ở đó và nó đang làm gì, cuối cùng bạn sẽ vô tình viết ra những vụ đắm tàu ​​lớn và không biết cách khắc phục chúng vì bạn không biết chuyện gì đang thực sự xảy ra.

Bất cứ ai cố gắng nói với bạn khác là bán dầu rắn hoặc đơn giản là không có nhiều kinh nghiệm với phần mềm nghiêm trọng. Trong công việc, tôi làm việc trong một chương trình chạy một tỷ lệ tốt của tất cả các đài truyền hình và đài phát thanh ở Hoa Kỳ. Khi các trạm và mạng trở nên lớn hơn và phức tạp hơn, các kỹ thuật nhanh và bẩn hoạt động tốt để thiết kế một sản phẩm cho một trạm nhỏ cuối cùng đã va vào các bức tường kỹ thuật lớn khi được triển khai cho một mạng với 50 trạm và 200 kênh! Nếu không có sự hiểu biết sâu sắc về cách thức hoạt động của ngôn ngữ, (và một ngôn ngữ hiệu quả ngay từ đầu), và sự hiểu biết sâu sắc về cách thức hoạt động của cơ sở dữ liệu, các lập trình viên của chúng tôi sẽ không bao giờ có thể thực hiện quy mô sản phẩm thành công.

Đây cũng không phải là một câu chuyện đơn độc. Phần mềm tiếp tục phát triển ngày càng phức tạp, không đơn giản và tôi sợ rằng trình độ chuyên môn kỹ thuật này sẽ trở thành một thứ gì đó bị mất đi và các chương trình ngày mai sẽ tồi tệ hơn ngày nay, không tốt hơn.


5
Tôi đã nghe nó thể hiện là "bạn cần biết sự trừu tượng một lớp từ nơi bạn làm việc". Chà, nó khá cứng hơn; trí nhớ của tôi bị khiếm khuyết. Vì vậy, nếu bạn đang làm việc trong C hoặc Delphi, bạn nên biết cách hoạt động của lắp ráp. Nếu bạn đang làm việc trong Smalltalk hoặc Java, bạn nên biết VM của bạn hoạt động như thế nào. (Có thể cho rằng, bạn phải luôn biết điều gì đó về lắp ráp!) Nếu bạn đang làm việc với TCP, bạn nên biết IP hoạt động như thế nào. Và như thế.
Frank Shearar

1
Ý tôi là, bạn có thể đưa nó đi xa hơn: tại sao chỉ cần biết lắp ráp là đủ? đó chỉ là một sự trừu tượng hóa ở mức độ cao đối với các hướng dẫn CPU nhị phân. nhưng chờ đã mã máy? đó chỉ là một sự trừu tượng! bạn cần học cách CPU được xây dựng bằng cách sử dụng bóng bán dẫn để xây dựng cổng logic! và xe buýt và sổ đăng ký. nhưng chờ đã Linh kiện bán dẫn? đó chỉ là một sự trừu tượng cho một cấu hình nhất định của các nguyên tử. và các nguyên tử chỉ là một sự trừu tượng đối với sự dao động trong các trường lượng tử. cuối cùng, điều này chỉ javascript:alert("Hello world")đòi hỏi một tiến sĩ về lý thuyết dây.
sara

1
@kai Bạn hơi vô lý . Tôi có xu hướng đồng ý với bạn rằng thường thì bạn không cần phải hiểu nhiều lớp cho hầu hết các ứng dụng. Nhưng chúng ta đang nói về các trường hợp cạnh, không phải mọi thứ hàng ngày. Chắc chắn, bạn không cần biết hệ thống ống nước hoạt động như thế nào để làm các món ăn. Nhưng nếu nước bẩn bắt đầu làm đầy bồn rửa của bạn, có lẽ bạn nên tìm hiểu một chút về nó trước khi bạn cố gắng sửa nó. Hoặc, bạn chỉ có thể ram một miếng cốt thép xuống cống cho đến khi nó hoạt động trở lại, và ai quan tâm nơi nước chảy. (tiếp ...)
DrewJordan

1
@DrewJordan Quan điểm của tôi chỉ là: trừ khi bạn là một người chuyên nghiệp cần biết và khắc phục một loại vấn đề nhất định (hoặc chỉ có một mối quan tâm riêng tư), thì thật vô lý khi cho rằng bạn cần phải biết các hoạt động bên trong và sự tinh tế kỳ lạ của mọi công cụ bạn đang sử dụng. Tôi chỉ rút ra quan điểm cho kết luận hợp lý của nó. chắc chắn, biết cách xây dựng cáp ethernet sẽ cho phép bạn xây dựng một công cụ mới, được cung cấp đúng công cụ khi kết nối internet của bạn không thành công, nhưng dành thời gian và tiền bạc để có được kiến ​​thức khi bạn làm việc 20 lớp ở trên chỉ là lãng phí.
sara

1
@DrewJordan tất nhiên MỘT SỐ người cần biết tất cả những thứ này để ai đó có thể sửa nó khi một sự trừu tượng bị phá vỡ, nhưng toàn bộ ĐIỂM trừu tượng là giữ cho số lượng người cần biết chi tiết đến mức tối thiểu để đại đa số có thể tập trung vào hoàn thành công việc nơi bạn tự ý vẽ đường mà mọi thứ trở nên "mức độ quá thấp" chỉ phụ thuộc vào những gì cá nhân bạn xảy ra để làm việc, như được minh họa với đối số quảng cáo vô lý của tôi (không phải là ngụy biện, tôi sẽ biết!)
sara

5

Vâng, tôi nghĩ mọi người sẽ hiểu phần cứng ít hơn nhiều khi ngôn ngữ tiến triển (và, tương tự, khi bộ hướng dẫn tiến triển). Nhưng như đã được lưu ý ở nhiều nơi khác, hạn chế chính đối với hầu hết các chương trình hiện nay không phải là thời gian hay hiệu quả của CPU, mà là thời gian lập trình viên. Nếu những người thiết kế ngôn ngữ tiếp tục thực hiện công việc trừu tượng hóa hiệu quả và nếu mọi người tiếp tục sử dụng những trừu tượng này đúng cách, thì sự hiểu biết về kiến ​​trúc máy tính là không hoàn toàn cần thiết; ít nhất một kiến thức hoàn chỉnh không phải là cơ bản để trở thành một lập trình viên giỏi ngày nay.


2
Về lý thuyết, yeah, nhưng đó là một vài ifs khá lớn .
Mason Wheeler

1

Không, nó sẽ không dẫn đến sự thiếu hụt các lập trình viên có kiến ​​thức về kiến ​​trúc máy tính. Ngôn ngữ được sử dụng để giải quyết các vấn đề trong một lĩnh vực cụ thể. Nếu bạn muốn giải quyết một vấn đề cụ thể, bạn sử dụng ngôn ngữ phù hợp hoặc một ngôn ngữ đủ tốt cho tài nguyên của bạn.

Trong thực tế, những lĩnh vực nào thực sự cần kiến ​​thức về kiến ​​trúc của máy tính? Điều đó cần phải được gắn với một kiến ​​trúc phần cứng cụ thể? Các hệ điều hành? Trình điều khiển thiết bị? Chắc chắn, nhưng ngay cả sau đó chỉ các phần của mã như vậy cần kiến ​​thức kiến ​​trúc cụ thể.

Cải thiện hiệu suất? Có, bạn có thể áp dụng kiến ​​thức về kiến ​​trúc của máy tính để cải thiện hiệu suất của các thuật toán. Nhưng hai yếu tố khác có tác động lớn hơn đến hiệu suất: việc sử dụng các thuật toán và kiến ​​thức tốt hơn về môi trường thời gian chạy của ngôn ngữ.

Về bản chất, các ngôn ngữ lập trình trừu tượng hơn giải quyết các vấn đề mà chi tiết về kiến ​​trúc máy tính là không cần thiết. Họ cho phép nhiều vấn đề được giải quyết. Những người sử dụng chúng không sử dụng chúng để giải quyết các vấn đề phụ thuộc vào máy. Những người cần giải quyết các vấn đề phụ thuộc vào máy sẽ tiếp tục sử dụng các ngôn ngữ có khả năng của máy. Đây không phải là một vấn đề tổng bằng không.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.