Nhà phát triển có nên biết hoạt động bên trong của phần cứng của máy tính không? [đóng cửa]


13

Tôi không chỉ nói về cách phân bổ bộ nhớ và quản lý bộ nhớ (ví dụ: những thứ bạn có thể học từ C) mà là khía cạnh phần cứng và cách mỗi thành phần của phần cứng máy tính hoạt động bên trong và cách chúng giao tiếp với nhau.

Có bao nhiêu bạn biết tất cả những điều này?

Câu trả lời:


31

Nó phụ thuộc vào những gì bạn làm.

Nếu bạn là nhà phát triển nhúng (và bạn đang viết rất gần kim loại trong một thiết bị rất nhỏ), bạn cần biết mọi thành phần trong và ngoài mọi thành phần trong hệ thống.

Nếu bạn là nhà phát triển hệ thống (và đang viết hệ điều hành hoặc trình điều khiển thiết bị hoặc thậm chí là cơ sở dữ liệu), thì bạn sẽ cần biết mọi thứ cần biết về giao diện phần cứng cấp thấp.

Nếu bạn là nhà phát triển trò chơi và chậm trễ trong dự án của bạn (nơi bạn đang tối ưu hóa mọi thứ), bạn cần biết các cấu trúc bộ nhớ cache và kiến ​​trúc đồ họa CPU mà bạn sẽ sử dụng.

Nếu bạn là nhà phát triển ứng dụng, bạn không cần biết bất kỳ điều gì ngoại trừ việc giữ mức sử dụng bộ nhớ ở mức hợp lý.

Nếu bạn là nhà phát triển web, sẽ rất hữu ích khi biết các giao thức internet, nhưng không có nội dung nào khác là cần thiết ngoại trừ cách xử lý các vấn đề về bộ nhớ.


20
Hiểu biết về máy của bạn luôn giúp bạn trở thành một nhà phát triển tốt hơn, ngay cả khi bạn chỉ làm các ứng dụng kinh doanh trực tuyến. Kiến thức như vậy có thể không được yêu cầu, nhưng nó chắc chắn là quan trọng.
Robert Harvey

@Robert Harvey: Đúng, đó là lý do tại sao tôi nói "không cần biết." Dù sao thì chắc chắn sẽ không đau khi biết những điều này. :)
greyfade

2
+1, nhưng tôi biết (hơn) một số nhà phát triển web không bao giờ xem xét việc sử dụng bộ nhớ.
Tim Post

-1 cho "Nếu bạn là nhà phát triển ứng dụng, bạn không cần biết bất kỳ điều gì ngoại trừ việc giữ mức sử dụng bộ nhớ ở mức hợp lý." Một số vấn đề lớn hơn trong các hệ thống quanh đây là do các nhà thiết kế ứng dụng không biết cách sử dụng cơ sở dữ liệu và sau đó đổ lỗi cho dba khi "mọi thứ đang chạy chậm, và đó không phải là mã của tôi; xem, có hồ sơ".
Andrew Hill

@AndrewHill: Khi nào thì đó là vấn đề phần cứng và không phải là thuật toán? Câu hỏi là về việc hiểu hành vi phần cứng cấp thấp, không phải thuật toán cấp cao.
greyfade

12

Không, bạn không cần phải có , nhưng tôi nghĩ đó là một ý tưởng tuyệt vời. Học một cái nhìn tổng quan về cách mọi thứ hoạt động ở cấp độ logic đã thực sự giúp tôi phát triển.


6

Tôi nghĩ rằng các ý kiến ​​về các nhà phát triển ứng dụng và nhà phát triển web là sai.

Ví dụ: nếu ai đó đang phát triển một ứng dụng web có nhiều nội dung bảo mật như ssh hoặc một số thuật toán mã hóa khác, điều quan trọng là họ phải biết loại phần cứng nào họ đang chạy để họ có thể xác định xem máy có thực sự xử lý được không khối lượng công việc. Một ví dụ khác có thể bao gồm một máy chủ lưu trữ một số loại nội dung được tải xuống. Bạn nên biết rõ hơn về khả năng của ổ đĩa và bất kỳ loại giao diện bus nào được đính kèm nếu bạn mong đợi một lượng yêu cầu khá lớn.

Từ quan điểm ứng dụng, nếu bạn đang phát triển một loại chương trình CAD nào đó, hoặc một cái gì đó hiển thị 3d, bạn có thể mong đợi ứng dụng này được tính toán chuyên sâu cả về mặt thuật toán và đồ họa. Sẽ là khôn ngoan để hiểu phần cứng để đảm bảo ứng dụng đáp ứng và có thể sử dụng.

Tôi không nói rằng bạn phải đi xa đến mức hiểu được những thứ giống như giao thức PCI, nhưng bạn hiểu rõ hơn về giao diện và phần cứng có khả năng gì.

Cuối cùng, điều quan trọng là bất kể loại phát triển nào bạn làm. Mức độ chi tiết cần thiết để bạn hiểu là gây tranh cãi.


2

Đối với một lập trình viên chuyên nghiệp, tôi nhìn vào nó như là một tổng thể cách tiếp cận để hiểu toàn bộ hệ thống , chứ không phải chỉ biết cú pháp của một ngôn ngữ lập trình cho du jour . Tôi thấy nó giúp các lập trình viên (và các nhà phân tích) đưa ra quyết định thiết kế thông minh và đưa ra các lựa chọn cấu trúc dữ liệu và thuật toán thông tin hơn.

Theo kinh nghiệm của riêng tôi, các lập trình viên giỏi nhất có xu hướng biết về hoạt động bên trong, ở các mức độ khác nhau, cho dù đó là hiểu hướng dẫn lắp ráp gốc cho nền tảng đích, khóa học tổ chức máy tính giới thiệu ở trường, điện tử kỹ thuật số thô sơ hoặc có thể hiểu chi tiết mô tả về lõi CPU và GPU trong các mô hình mới nhất, tốt nhất có kiến ​​thức đầy đủ hơn so với các đồng nghiệp ít xuất sắc hơn.


1

Tôi không chắc nó có giúp ích gì không, nhưng tôi cảm thấy thoải mái hơn khi tôi biết nhiều hơn về hệ thống tôi đang làm việc hơn là tôi thực sự cần. Khi tôi còn trẻ, tôi không muốn biết ngôn ngữ lắp ráp của hệ thống mà tôi đang làm việc; hoặc tôi đã thay đổi hoặc tôi đã học được đủ nhiều điều mà một lần nữa sẽ không mở rộng cảm nhận của tôi đối với hệ thống. Tôi chưa bao giờ là một người phần cứng, nhưng tôi có thể tách rời một máy tính và đặt tên cho các hệ thống con khác nhau và cách chúng tương tác.


0

Những gì tôi biết tôi đã học được trong một lớp kiến ​​trúc máy tính gần 25 năm trước và trên một kiến ​​trúc phi thực tế ở đó.

Tôi chủ yếu lập trình ứng dụng trên nhiều nền tảng. Có một khoảng thời gian tôi đang phát triển mã để chạy trên không chỉ phần cứng hàng hóa x86, mà còn trên Sparc, PA-RISC và các kiến ​​trúc máy chủ khác. Kiến thức ở cấp độ đó đơn giản là không cần thiết cho công việc tôi làm.


0

Tôi dạy lập trình Java như một lớp trung học AP. Tôi đã thấy rằng khi sinh viên biết điều gì đó về hoạt động bên trong của máy tính, nó sẽ giúp họ hiểu các khái niệm lập trình.

Tôi không quá nhiệt tình - chỉ những khái niệm đơn giản như cách mọi thứ được lưu trữ trong bộ nhớ dường như giúp ích cho học sinh.


0

Tôi sẽ trả lời điều này khi được hỏi trong tiêu đề:

Có, một nhà phát triển nên biết hoạt động bên trong của phần cứng. Bao nhiêu tùy thuộc vào loại nhà phát triển & mục tiêu của họ, thời gian có sẵn và sở thích cá nhân. Tất nhiên, ưu tiên nên là các công cụ, kỹ thuật tức thời, vv, mà họ sử dụng trong khu vực của họ. Ý kiến ​​này là dọc theo đường lối là một cá nhân tròn trịa. Bạn càng biết nhiều thứ bên ngoài nghề của mình, mà không phải hy sinh nghề của mình thì càng tốt.

Điều đó không có nghĩa là bạn cần phải phát điên với Cheese Whiz. Có một cái nhìn tổng quan về phần cứng, cách các phần tương tác, cách các hệ điều hành sử dụng chúng. Dọc theo những dòng này, tôi khuyên bạn nên đọc một cuốn sách khái niệm hệ điều hành cho tất cả các nhà phát triển.

Tôi có biết tất cả những điều này không? Chết tiệt không. Tôi đã quên rất nhiều thông tin vô dụng về SCSI đến nỗi nó thậm chí không hài hước. Tuy nhiên, học về nó là một kinh nghiệm vô giá. Tôi cũng đã quên rất nhiều chi tiết liên quan đến phần cứng khác, nhưng nhớ lại các khái niệm quan trọng mà tôi học được từ kiến ​​thức đó.

Vì vậy, tôi chắc chắn đề nghị tìm hiểu về phần cứng. Làm điều đó với một tốc độ hợp lý, tùy thuộc vào nhu cầu của bạn. Tìm hiểu càng nhiều chi tiết càng tốt, nhưng tập trung vào các khái niệm.


0

Mọi nhà phát triển nên biết các khái niệm cơ bản liên quan đến kỹ thuật máy tính: số học nhị phân, chuyển đổi cơ sở, đại số Boolean, cổng logic, thành phần của CPU (và các thành phần làm gì), bộ nhớ cache, bộ nhớ ảo, nén, phát hiện lỗi và sửa lỗi ...

Mức độ mà những điều này nên được biết phụ thuộc vào công việc của lập trình viên. Giống như những người khác đã nói, một nhà phát triển hệ thống nhúng sẽ phải quen thuộc hơn rất nhiều với khả năng phần cứng và cách viết phần mềm sử dụng phần cứng tốt nhất so với nhà phát triển web.

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.