Là một lập trình viên, tôi có nên biết ngôn ngữ lập trình cấp thấp và cấp cao không? [đóng cửa]


18

Tôi đã được liên hệ để thực hiện một số công việc đèn LED điều khiển từ xa hiển thị qua TCP / IP, nhưng kinh nghiệm và sự chuẩn bị của tôi chủ yếu là về ngôn ngữ lập trình cấp cao. Tôi đã nói điều đó với người liên hệ với tôi về công việc và anh ấy nói với tôi rằng:

"nếu bạn gọi cho mình một lập trình viên, bạn nên biết tất cả những điều này"

Một lập trình viên có nên thực sự biết các chi tiết về lập trình cấp thấp? Hoặc tôi có thể coi nó như một khái niệm hộp đen, như kiến ​​thức lý thuyết nhưng không nhất thiết phải thực hiện nó hoặc thực hiện các giải pháp ngôn ngữ cấp thấp, trong tâm trí rằng lập trình cấp thấp không phải là chuyên môn của tôi?


8
Khi lập trình ở cấp độ cao, bạn phải che giấu mức độ trừu tượng thấp hơn, nếu không bạn sẽ không làm được gì. Mặc dù nó khá hữu ích để có thể làm việc ở các cấp thấp hơn, nhưng đừng cố gắng làm mọi thứ từ tất cả các cấp độ trừu tượng cùng một lúc. Bạn không cần, nhưng nếu không, đừng áp dụng cho các công việc cấp thấp.

1
@delnan: Khi làm việc ở cấp độ cao, tất nhiên cần phải che dấu các chi tiết cấp thấp hơn. Tuy nhiên, tôi nghĩ mọi lập trình viên cũng nên biết các máy mà họ đang lập trình hoạt động ở cấp độ thấp như thế nào. Kiến thức không cần phải quá chi tiết - chỉ cần biết cách xây dựng một máy tính cơ bản từ đầu là khá đủ.
SCHEDLER

4
"Nếu bạn tự gọi mình là một lập trình viên, bạn nên biết tất cả những điều này" Nếu họ muốn bạn tệ đến mức họ nguyền rủa vì sự thiếu nền tảng của bạn, có điều gì đó rất sai. Tôi sẽ coi nhẹ bình luận của họ là không có ý nghĩa gì cả. Họ muốn bạn với lý lịch của bạn, hoặc họ không muốn bạn và không nên nguyền rủa bạn vì lý lịch mà bạn không có.
S.Lott

3
Một trường hợp khác, "Whew, rất vui vì tôi đã bỏ lỡ viên đạn đó!" Bạn không thực sự muốn làm việc cho hoặc với một kẻ hợm hĩnh như vậy phải không?
Edward Strange

2
@Schedler - và nếu họ không đốt bảng của mình, họ sẽ hoàn toàn mới.
Edward Strange

Câu trả lời:


37

Liên hệ của bạn không biết họ đang nói về cái gì. Có nhiều ngôn ngữ, phương pháp, công nghệ, v.v ... mà một người không thể biết rõ tất cả các chi tiết cần thiết. Những gì bạn phải biết khi là một lập trình viên là làm thế nào để học những gì bạn cần để hoàn thành công việc và có cách tiếp cận giải quyết vấn đề mà bạn có thể áp dụng để đi đến một giải pháp, bất kể bạn cần sử dụng ngôn ngữ lập trình nào.

Thừa nhận những gì bạn không biết là ổn, nhưng bạn cũng có thể chứng minh rằng bạn có thể học đủ để đạt được kết quả mong muốn, bất kể bạn đang phải đối mặt với điều gì. Lập trình viên giỏi chỉ đơn giản là người giải quyết vấn đề tốt có thể thực hiện các giải pháp của họ bằng nhiều ngôn ngữ lập trình khác nhau.

Tôi sẽ không làm việc cho một người có thái độ liên lạc của bạn.


4
+1: Nhận xét không có ý nghĩa ở vị trí đầu tiên.
S.Lott

Mặc dù tôi sẽ cá rằng có rất nhiều nhà phát triển chỉ lắp ráp, những người sẽ vui vẻ tính tiền theo giờ.
Erik Reppen

22

"nếu bạn gọi cho mình một lập trình viên, bạn nên biết tất cả những điều này"

Tôi hoàn toàn không đồng ý với tuyên bố này. Điều này sẽ giống như yêu cầu một đầu bếp nấu bất cứ thứ gì, một người lái xe để vận hành bất kỳ loại xe cơ giới nào, hoặc bác sĩ để biết tất cả các bệnh, đó là một giả định vô lý.

Để trở thành một lập trình viên, người ta phải biết cách viết phần mềm bằng một số ngôn ngữ để thực hiện một số nhiệm vụ theo cách tự động. Ngôn ngữ và nhiệm vụ sẽ thay đổi từ lập trình viên sang lập trình viên, giống như những món ăn mà đầu bếp biết cách chế biến, tài xế biết cách vận hành hoặc bác sĩ biết cách chẩn đoán sẽ khác nhau tùy thuộc vào cách chuyên môn muốn làm trong mỗi nghề nghiệp.


2
Vâng, cho đến khi một sự trừu tượng bị phá vỡ và họ không biết tại sao mã của họ lại có vấn đề về hiệu năng, tại sao một số thư viện bên ngoài bị hỏng / làm hỏng dữ liệu, v.v. Theo kinh nghiệm của tôi, các lập trình viên chỉ biết ngôn ngữ cấp cao đơn giản là không tốt trong công việc của họ là những người có thể làm cả hai.
Ed S.

4
Thiếu điểm của bạn. Có các lập trình viên cấp cao sẽ có thể hiểu được các khía cạnh cấp thấp nhưng anh ta có nên biết cách viết nâng cấp firmware cho bộ định tuyến Linksys không?
maple_shaft

7
Tôi nghĩ rằng họ nên biết làm thế nào để tìm hiểu làm thế nào, mặc dù. Một phần lớn của lập trình hiện đại là biết những gì cần nhớ và những gì để nộp làm tài liệu tham khảo.
Michael K

8

Nói như một người không bao giờ viết một dòng mã trong cuộc sống của mình. Đây sẽ là cùng một người sẽ cảm thấy bạn sẽ có thể làm điều đó trong một nửa thời gian bạn trích dẫn. Đừng tranh cãi với một thằng ngốc.

Bạn đã thể hiện nhiều kiến ​​thức và tính cách hơn bằng cách biết giới hạn của mình. Người này nói về những điều anh ta không biết gì.

Tôi đoán mỗi thợ mộc nên biết làm thế nào để khắc một mảnh đồ nội thất trang trí công phu. Nếu một phi công có thể bay một máy bay, cô ấy có thể bay tất cả.


Tôi đồng ý, vì tôi thích nói rằng vì bạn là bác sĩ nên bạn biết cách phẫu thuật tim hở. Nhưng trong cuộc sống thực, bạn biết anh ấy phải là một chuyên gia để làm điều đó, nhưng trong lập trình, sự khác biệt khó có thể nhận ra khi bạn chỉ nhìn từ bên ngoài như 'tất cả các lập trình viên hùng mạnh'.
công việc

6

Hầu hết các chương trình CS ở trường sẽ cung cấp cho bạn một số kiến ​​thức về lập trình cấp thấp. Tôi, ví dụ, có các lớp trình biên dịch sử dụng bộ xử lý 8088 (OK ... để hẹn hò với tôi một chút). Tuy nhiên, tôi nghĩ rằng rất nhiều trường thương mại ngày nay bỏ qua kiến ​​thức đó - đưa ra nhận xét nếu điều đó không đúng.

Tóm lại, thật tốt khi biết điều gì xảy ra ở cấp độ chip - bên cạnh đó, ngôn ngữ cấp cao của bạn cuối cùng sẽ kết thúc ở đó khi nó được chạy.

Tuy nhiên, để có ai đó nói với bạn rằng bạn không phải là lập trình viên vì hiện tại bạn không biết lập trình cấp thấp là không biết gì. Nếu bạn cần phải có những kỹ năng đó cho dự án hiện tại, thì bạn nên có đủ thông minh hoặc động lực để học các kỹ năng bạn cần và sau đó áp dụng chúng.

Tôi sẽ phải nghiêm túc cân nhắc việc không tham gia dự án đó nếu khách hàng đã nói chuyện với bạn theo cách đó - bạn không bao giờ biết nơi đó có thể đi.


6

Tôi thực sự coi thường nó khi mọi người nói "Bạn cần biết X để tự gọi mình là lập trình viên". Có thật không? Vâng, một số người làm việc trên COBOL cả ngày và YÊU NÓ. Họ có thể đã nhận được rất tốt về nó và miền vấn đề của họ mà bên cạnh họ, tất cả chúng ta đều là những kẻ giả vờ.

Nghiêm túc, hãy tôn trọng mọi người để giải quyết các vấn đề họ gặp phải theo những cách hay và thú vị. Hiểu rằng giải quyết vấn đề tuyệt vời đến từ một loạt các nền tảng. Không phải là họ đã thành thạo một "danh sách kiểm tra" các kỹ năng mà mọi người phải biết để tất cả họ có thể nghĩ giống nhau. Đó là OPPOSITE CHÍNH XÁC của những gì chúng ta muốn. "Danh sách kiểm tra" của mọi người là và nên khác nhau. Càng khác biệt càng tốt. Lập trình là giải quyết vấn đề những ngày này. Tôn trọng những người làm điều đó tốt và hiểu rằng tất cả mọi người đến với bàn với những thế mạnh khác nhau. Đó là cách duy nhất chúng tôi sẽ giúp nhau làm việc hiệu quả như một đội. Chỉ vì biết "C" hoặc thứ gì đó thực sự giúp anh chàng này trở nên tuyệt vời, không có nghĩa là vì bạn không '


3

Tôi đề nghị bạn đọc nó:

http://www.joelonsoftware.com/articles/LeakyAdstrilities.html

Như đã giải thích, khi bạn sử dụng một sự trừu tượng, những gì ở cấp độ thấp hơn luôn có ảnh hưởng đến những gì bạn đang làm. Điều này có thể là hiệu suất, nguyên nhân thất bại, lý do bảo mật, và như vậy.

Vì vậy, chắc chắn, bây giờ bạn nên về những thứ này. Không đặc biệt là một chuyên gia về kiến ​​trúc asm hoặc CPU. Nhưng biết đủ để ghi lại chính mình khi bạn cần biết nhiều hơn, thực sự, là phải có.


Có lẽ tôi cần phải làm rõ rằng tôi biết cách thức hoạt động của TCP / IP =), quan điểm của tôi là triển khai một cái gì đó như ổ cắm trên TPC / IP nằm ngoài sự hiểu biết của tôi, tôi có thể học nó nhanh không? Tất nhiên, tôi có muốn học nó không? không thực sự, chủ yếu là vì tôi không cảm thấy tự tin rằng kết quả cuối cùng sẽ được chứng minh đầy đủ cho môi trường sản xuất hoặc sẽ tuân thủ tất cả các yêu cầu trong thời gian nhất định. Tôi chỉ nghĩ rằng trong thời gian đó, tôi đã đạt đến trình độ chuyên môn về ngôn ngữ cấp cao và tôi không nghĩ rằng thời gian đã cho là đủ để biết tất cả các vấn đề, điều đó mang lại cho tôi cảm giác mạo hiểm.
công việc

Đây là điểm: bạn không cần phải là một chuyên gia. Nhưng bạn cần biết những điều cơ bản. Vì vậy, bạn sẽ biết giới hạn của sự trừu tượng mà bạn đang sử dụng là gì - đó là mức tối thiểu và biết cách tự ghi lại tài liệu khi đạt đến giới hạn.
deadalnix

2

Lập luận của ông là một ví dụ điển hình về ngụy biện logic No True Scotsman .

Tuy nhiên, sự khác biệt giữa lập trình cấp thấp và cấp cao không phải là ngôn ngữ, đó là miền kiến ​​thức ứng dụng. Gán một giá trị thành true có thể có nghĩa là bật đèn LED hoặc cho phép các sự kiện nhấp chuột trên một tiện ích. Ngôn ngữ không quan tâm.

Ví dụ, hãy xem thư viện này để làm việc với ma trận LED trên một arduino. Đây không phải là khoa học tên lửa ở đây, và thực sự bất kỳ lập trình viên nào cũng có thể hiểu nó với một chút nỗ lực nếu họ không đưa ra một "cấp độ thấp ồ không!" khối tâm thần.


1

Mỗi ngôn ngữ lập trình có ưu và nhược điểm riêng. Học một vài thứ, sẽ cho bạn một nhận thức tuyệt vời về những gì nên sử dụng và làm thế nào để sử dụng nó một cách hiệu quả khi đưa ra một dự án.

Là một lập trình viên, bạn có thể chuyên về một PL cụ thể, sử dụng nó như là công cụ duy nhất của bạn để giải quyết bất kỳ vấn đề nào, bạn cũng có thể biết rất nhiều PL nhưng chuyên về không có gì và nhiều hơn nữa giữa các thái cực này.

Có thể người nói với bạn rằng "Cụm từ" bị thất vọng, có lẽ bạn không phải là người liên lạc duy nhất mà anh ấy đã nói chuyện.

biết vấn đề và biết bộ kỹ năng nào là cần thiết để có thể giải quyết vấn đề một cách hiệu quả là một đặc điểm tốt của một lập trình viên. Than ôi trong trường hợp của bạn, vì bạn không có bộ kỹ năng cần thiết, có lẽ bạn có thể giới thiệu người liên hệ của mình với một lập trình viên khác với bộ kỹ năng cần thiết.

chúc mừng

phường


1

Có kiến ​​thức lý thuyết là tốt. Có thể học ngôn ngữ cấp thấp khi cần thiết là rất quan trọng.

Nhưng đối với "nếu bạn gọi cho mình một lập trình viên, bạn nên biết tất cả những điều này", ai có thể biết mọi thứ về mọi thứ? Trước khi họ làm chúng?


-2

Tôi sẽ diễn đạt lại

"nếu bạn gọi cho mình một lập trình viên, bạn nên biết tất cả những điều này"

ĐẾN

"nếu bạn gọi cho mình một lập trình viên, bạn nên biết đủ để bạn có thể nhanh chóng học được tất cả những điều này"

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.