2009-04-19 24 views
17

Tôi đã cố gắng theo kịp C++ kể từ khi họ giới thiệu 1998 ANSI/ISO C++. Tôi đã hấp thụ các khái niệm mới và cố gắng hiểu chúng. Tôi đã học về xử lý ngoại lệ, các khuôn mẫu và các không gian tên. Tôi đã đọc về các cơ chế đúc mới và làm việc với thư viện STL.Tôi có nên từ chối C++ bởi vì nó đang trở thành một juggernaut?

Tất cả các khái niệm này đòi hỏi nhiều năng lượng. Nhưng bây giờ tôi hơi lo lắng về tương lai của C++ khi có một cái nhìn tại tiêu chuẩn C++0x mới.

Mọi thứ ngày càng trở nên phức tạp hơn. Ngôn ngữ này đang trở thành một con quái vật.

Tôi không chắc chắn rằng tôi muốn theo kịp ngôn ngữ nữa, vì tôi không thực hiện việc hack hàng ngày trong C++. Tôi chủ yếu sử dụng ngôn ngữ phiên dịch hoặc bytecode.

Vậy tại sao tôi phải bận tâm tìm hiểu ngôn ngữ khó, đặc biệt mạnh mẽ này? Tôi có thể làm 95% doanh nghiệp của mình với Python và cộng sự. Với 5% còn lại, tôi có thể xử lý đồng bằng cũ C++ hoặc C mà không gặp rắc rối.

Bạn nghĩ sao?

+3

Tại sao phải giảm giá? Nó không phải là tôi không có tình yêu với ngôn ngữ này. Tôi không muốn thô lỗ hoặc trắng trợn về C++. Tôi nghĩ rằng nó sẽ tồn tại hầu hết các ngôn ngữ khác. Tôi quan tâm đến vị trí của bạn cho chủ đề này. Bạn không có bất kỳ? – prinzdezibel

+0

điều này là chủ quan và tranh luận, tôi sẽ tranh luận. Tôi đã không tìm thấy nó có giá trị downvoting, nhưng vẫn còn nhiều câu trả lời có thể là "oh có c + + - crap" để "không, c + + là tốt bạn đang đầy shit". –

+1

"Ngôn ngữ này đang trở thành một con quái vật." Nó chưa phải là? C++ sẽ luôn luôn có một vị trí đặc biệt trong trái tim tôi, nhưng tôi không bỏ lỡ làm việc với nó một chút. Tôi nghĩ rằng nó sẽ được xung quanh cho tương lai gần, mặc dù. –

Trả lời

20

Nghe những gì Bruce Eckel {tác giả của hai trong số những cái gọi là tốt nhất C++ books} commented on C++ một vài tuần trước:

Điều đó nói rằng, tôi hầu như không bao giờ sử dụng C++ nữa. Khi tôi làm, hãy kiểm tra mã số di sản hoặc viết các phần quan trọng về hiệu suất, thường nhỏ nhất có thể là được gọi từ mã khác (cách ưa thích của tôi là viết nhanh ứng dụng theo số Python, sau đó là hồ sơ và nếu cần cải thiện hiệu suất bằng cách gọi các phần nhỏ của C++ bằng cách sử dụng thư viện ctypes của Python).

Vì tôi đã tham gia Ủy ban tiêu chuẩn C++ , tôi thấy các quyết định này là được thực hiện. Tất cả chúng đều cực kỳ được xem xét một cách cẩn thận , nhiều hơn so với nhiều quyết định được đưa ra trong Java.

Tuy nhiên, khi mọi người đã đúng chỉ ra, kết quả ngôn ngữ là phức tạp và đau đớn để sử dụng và đầy đủ các quy tắc lạ mà tôi quên như sớm càng tôi ra khỏi nó cho một chút khi - và tôi đã tìm ra những quy tắc từ nguyên tắc đầu tiên trong khi tôi viết sách, không chỉ bằng cách ghi nhớ chúng.

Ngoài ra, bạn nên đọc this threadDanny Kalev's predictions on C++.

Tuy nhiên, sự phức tạp ngày càng tăng của C++ sẽ tạo áp lực hướng tách ngôn ngữ thành tiếng địa phương chính thức. Chúng ta có thể thấy xu hướng này ngày hôm nay; nó có thể sẽ tăng cường trong tương lai.

EDIT:

Bạn nên có một cái nhìn tại cuộc thảo luận này, quá:

C++ - Anyone else feel like C++ is getting too complicated?

+0

Liên kết thảo luận thú vị. Cảm ơn. – prinzdezibel

+1

+1. "những quy tắc kỳ lạ mà tôi quên ngay sau khi tôi rời xa nó một chút" khá nhiều tiền cho tôi. :/ –

+5

Tôi sẽ không gọi tư duy trong C++ một trong những cuốn sách hay nhất về C++. Ngoài ra, bạn nên đọc toàn bộ bài viết của Artima. Nó làm tổn thương Java và C++ bởi lời khen ngợi mờ nhạt bằng cách làm cho họ trông giống như họ là những ngôn ngữ kế thừa; không phải là một bất ngờ lớn xem xét như thế nào nhiệt tình Bruce Eckel là về ngôn ngữ năng động như Python. – rpg

1

Bạn không cần phải biết mọi tiêu chuẩn xuất phát từ trái tim. Nó không giúp đỡ để biết về bức tranh lớn mặc dù. 5% mà bạn thực hiện mã có thể giúp bạn phát minh lại bánh xe không thường xuyên. Tùy thuộc vào bao nhiêu thời gian, tầm quan trọng mà 5% có (nghĩ Pareto) bạn cần phải thực hiện một cuộc gọi.

Ngoài ra, bất kỳ lý do cụ thể nào (như phụ thuộc mã kế thừa) tại sao bạn không thể di chuyển 5% đó sang python?

+1

Lần khi tôi không thể sử dụng Python: Khi tôi xử lý mã cũ hoặc khi hiệu suất là rất quan trọng. – prinzdezibel

8

Bạn không bị buộc phải sử dụng mỗi tính năng ngôn ngữ cung cấp. Tôi không sử dụng setjmp/longjmp trong C mặc dù nó đang ở đó. Tôi cũng không sử dụng mọi khía cạnh của các bộ sưu tập Java.

Nếu bạn cho rằng các tính năng mới sẽ làm cho việc phân phối mã của bạn tốt hơn (chất lượng nhanh hơn hoặc cao hơn hoặc cả hai), thì hãy sử dụng chúng. Nếu không thì bỏ qua chúng.

Thật hữu ích khi biết ở mức cao tất cả những gì họ đều có, nếu chỉ để giúp bạn qua các cuộc phỏng vấn xin việc, nhưng một nửa nội dung họ thêm vào ngôn ngữ là không cần thiết theo ý kiến ​​của tôi.

Tôi chưa bao giờ sử dụng các mẫu C++ trước khi chuyển sang Java, nhưng tôi biết chúng là gì.

Không phải lúc nào cũng là việc học mới nhất và tuyệt vời nhất. Phần mềm (ít nhất là trong công việc của bạn) là về việc phân phối sản phẩm. Điều đó có thể được thực hiện trong COBOL hoặc FORTRAN nếu bạn đủ thành thạo.

+2

@Pax, đây chỉ là giải pháp khả thi nếu bạn lập trình đơn độc. Một khi bạn phải thừa hưởng mã từ những người khác thì đột nhiên bạn cần phải biết các phần của C++ ~ họ ~ biết. – mmcdole

+1

Đó là sự thật của tất cả mọi thứ, Simucal: từ khóa, tính năng ngôn ngữ, cuộc gọi thư viện, thậm chí các thuật toán không có gì để làm với chính ngôn ngữ đó. Vì người hỏi nói rằng họ không sử dụng C++ rất nhiều, điểm mà tại đó tôi khuyên bạn nên học các tính năng đó là khi bạn kế thừa mã. Sau đó, KHÔNG có khả năng lãng phí nỗ lực và khả năng nhỏ của thời gian đoạn đường nối lên khi bạn học. Tuy nhiên, hãy tìm hiểu mức cao, ví dụ: biết các mẫu nào là ngay cả khi bạn không biết chi tiết thân mật của chúng. – paxdiablo

21

Mọi người sử dụng một tập con của C++. Đối với hầu như tất cả các chương trình ứng dụng trong C++, cho dù máy chủ hoặc phía máy khách, tập hợp con đó có thể quản lý được hay không. Theo ý kiến ​​của tôi, những người duy nhất cần phải ở lại trên đầu trang của tất cả các sắc thái của ngôn ngữ là các nhà văn thư viện - những người thực hiện Boost, STL, Loki, v.v.

Nhưng tôi hoàn toàn sẽ sử dụng ngôn ngữ phù hợp với bài tập. Nếu Python dễ đọc hơn và dễ bảo trì hơn C++ cho công việc của bạn, và bạn không cần những gì C++ cung cấp, thì chắc chắn gắn bó với Python.

0

Đề xuất của tôi sẽ là tìm hiểu các từ khóa mới của C++ 0x (& & FTW) nhưng không bận tâm cố gắng tìm hiểu toàn bộ lib. Sử dụng python cho w/e bạn muốn, có thể C# cho các ứng dụng, sau đó sử dụng C++ (0x) khi bạn cần phải làm một cái gì đó mạnh mẽ.và yêu cầu stackoverflow & google về vùng chứa mới khi tạo mẫu.

Bạn không cần sử dụng một vài ngôn ngữ được chọn,

2

Câu trả lời hay.

Các nhà sản xuất máy tính cạnh tranh với người mua, phần mềm cạnh tranh cho không gian đĩa của bạn và ngôn ngữ cạnh tranh cho người dùng. Họ làm điều này bằng cách cố gắng đánh lừa các tính năng của nhau.

Tôi đang tự hỏi bao lâu trước khi chúng ta thấy Fortran đi ra với các biểu thức lambda :-)

10

Thứ nhất, nhiều tính năng của C++ 0x là để làm cho ngôn ngữ dễ dàng hơn để sử dụng. Các lỗi biên dịch mẫu dễ đọc hơn, cú pháp khởi tạo nhất quán hơn, hỗ trợ luồng, nếu không sẽ phải dựa vào các thư viện nền tảng cụ thể và vv.

Vì vậy, nếu bạn sử dụng C++, tôi cảm thấy việc học các phần quan trọng của C++ 0x nên là một nhiệm vụ dễ quản lý. Hãy nhớ rằng bạn không cần phải tìm hiểu tất cả các tính năng mới để sử dụng ngôn ngữ. Một số tính năng chủ yếu được thêm vào như một trợ giúp cho những người triển khai thư viện, ví dụ cho phép STL được triển khai hiệu quả hơn, nhưng điều này không thực sự ảnh hưởng đến việc sử dụng ngôn ngữ của người dùng cuối. Và một số chỉ thực sự cần thiết trong những trường hợp rất hiếm. Bỏ qua những phần của ngôn ngữ.

Một trong những mục tiêu đã nêu với C++ 0x là tránh trở nên khó sử dụng hơn.

Nhưng ngoài ra, làm bạn cần C++? Nếu bạn làm mã hóa của bạn bằng các ngôn ngữ khác, tại sao phải bận tâm với C++?

+0

Đó là ngôn ngữ đầu tiên của tôi, tôi cảm thấy đó là ngôn ngữ cơ bản nhất. Tôi không muốn mất chuyên môn của mình trong lĩnh vực này, nhưng tôi không thể xua nó vào những ngày này. – prinzdezibel

+1

Chỉ vì đó là ngôn ngữ đầu tiên của bạn không có nghĩa là bạn phải theo kịp với những thay đổi trong đó mãi mãi. Nếu bạn muốn giữ trên đầu trang của ngôn ngữ thì tất nhiên bạn sẽ phải tìm hiểu hầu hết các tính năng mới của C++ 0x là tốt. Nhưng nếu nó không phải cái gì bạn sử dụng hàng ngày, sau đó nó không phải mất ưu tiên hàng đầu. Sẽ không có trình biên dịch tuân thủ C++ 0x trong vài năm nữa, vì vậy hãy mang nó dễ dàng. – jalf

1

Trước tiên, hãy thử tham dự khóa học về C++ 0x và giúp công ty của bạn trả tiền cho điều đó :) Bộ não của chúng tôi có thể phù hợp với lượng kiến ​​thức đáng kinh ngạc. Thay vì nguyền rủa và có lập trình-wtf-khoảnh khắc đầu tiên chúng ta nên học hỏi từ người dùng chương trình và lắng nghe ý kiến ​​của người khác/knowhows. Kiến thức chuyển nhanh hơn nhiều theo cách đó.

+0

Khóa học trên C++ 0x? Bạn có biết gì không? –

+1

Vâng, hy vọng bởi thời gian C++ 10 được thực hiện đầy đủ trong các trình biên dịch, sẽ có nhiều khóa học hơn về chủ đề đó. Mặc dù đối tượng mục tiêu có thể rộng như trong hình ảnh đầu tiên ở đây: http: //importantshock.wordpress.com/2008/08/20/a-hoài nghi-xem/ :) – AareP

5

Không ai, ngoại trừ có lẽ Bjarne và Herb Sutter, biết tất cả các C++. Như bạn đã nói đó là một ngôn ngữ cực kỳ lớn. Mong đợi để có thể lấy toàn bộ tiêu chuẩn + các chi tiết thực hiện cụ thể của trình biên dịch hoặc trình biên dịch cụ thể của bạn là trung thực không thực tế.

Nhưng bạn không cần phải biết mọi thứ để sử dụng C++. Thay vào đó, chỉ tìm hiểu tập hợp con của C++ có giá trị đối với bạn và các dự án của bạn. Nó không làm tổn thương để tiếp tục mở rộng kiến ​​thức của bạn nhưng trừ khi bạn đang viết một trình biên dịch C++, không có lý do gì để biết toàn bộ điều. Ngay cả khi bạn hoàn thành nó, tất cả những người bạn làm việc cùng sẽ không.

+0

Thực ra - không có ai thực sự biết "C++". Có các chuyên gia cốt lõi (thường là các nhà cung cấp trình biên dịch: GCC, EDG, Microsoft) và có các chuyên gia thư viện (nhóm GCC STL và Dinkumware). Ngay cả trong một nhóm biên dịch, bạn sẽ thấy rằng nhóm được chia thành các chuyên gia trong các lĩnh vực cụ thể của ngôn ngữ. –

5

Vậy tại sao tôi nên tìm hiểu điều này khó khăn, nhưng đặc biệt mạnh mẽ, ngôn ngữ ? Tôi có thể làm 95% doanh nghiệp của mình với python et al. Với số còn lại 5%, tôi có thể xử lý đồng tiền cũ C++ hoặc C mà không gặp rắc rối nào.

Vâng, phần lớn bạn trả lời câu hỏi của riêng bạn. Bạn không cần phải theo kịp nhịp chảy của C++ tại thời điểm này.

Tuy nhiên, ngôn ngữ sẽ tiếp tục hành trình. Trong một vài năm, một số khái niệm mà bạn cho là một sự lãng phí thời gian hiện nay sẽ được sử dụng phổ biến. Một ngày nào đó bạn có thể tìm thấy trong 5% sử dụng "C++ cũ" mà một số mã mẫu hoặc mã mẫu bạn đang cộng tác sử dụng cấu trúc mà bạn không quen thuộc. Tại thời điểm đó, bạn sẽ cần phải nhấn vào mạng và chải lên trên mới "hiện tại" C + +.

Đó có phải là vấn đề không? Tất nhiên là không. Bạn là một lập trình viên. Bạn bám sát các khái niệm lập trình mới nhất trong bối cảnh ngôn ngữ 95% của bạn, cũng thay đổi theo thời gian. Bạn có thể đã khá quen thuộc với các khái niệm và chỉ cần làm quen với cú pháp C++ của nó khi thời gian đến mà bạn phải sử dụng chúng.

Cá nhân tôi hy vọng sẽ tiếp tục theo kịp C++, ngay cả khi sự nghiệp của tôi di chuyển nhiều hơn về phía Java hoặc ngôn ngữ thế hệ tiếp theo khác. Tại sao? Tôi muốn nói bởi vì nó làm tôi quan tâm nhất và bởi vì tôi yêu sự phức tạp và tính biểu cảm của tất cả.Nhiều khả năng, tuy nhiên, chỉ vì đó là ngôn ngữ chuyên nghiệp đầu tiên của tôi; Tôi coi đó là "tiếng mẹ đẻ" của tôi.

Nếu bạn không quan tâm, và không quan tâm đến công việc của bạn hoặc công việc trong tương lai, đừng bận tâm. Có chuyện gì vậy? Không có gì.

+0

Đây chính xác là quan điểm của tôi. Tôi thấy C++ là "tiếng mẹ đẻ" của tôi là tốt, bởi vì như với bạn, nó là ngôn ngữ đầu tiên của tôi. Tôi không muốn bỏ nó, nhưng giá quá cao. Có quá cao không? Tôi vẫn chưa quyết định .. – prinzdezibel

+0

Tôi vẫn đọc, gỡ lỗi và hack C++ trên cơ sở hàng ngày, vì vậy quan điểm của tôi không phải là cách tốt nhất để giúp bạn trả lời câu hỏi đó. – veefu

3

Tôi khó ép để tìm một trường hợp duy nhất trong đó C++ 0x đã được thực hiện phức tạp hơn C++ 98. Có hai điều mà thực sự là rất phức tạp:

  1. Các khái niệm.
  2. các Memory Model

nhưng là người đầu tiên đã được gỡ bỏ một lần nữa (may mắn; tiêu chuẩn hóa các tính năng chưa thực hiện chưa bao giờ làm việc ra trong C++, thông số kỹ thuật chứng ném, mẫu extern, auto_ptr, ...), và lần thứ hai không thực sự là một thứ mà một ngôn ngữ lập trình hiện đại có thể trốn thoát. Nó bị Intel ép buộc bên ngoài & Co giúp phá vỡ các chương trình của bạn một cách hữu ích để chúng chạy nhanh hơn.

Phần còn lại chỉ sửa chữa những phiền toái mà mọi lập trình viên C++ thường xuyên gặp phải trong những thập kỷ qua.

Lưu ý: Tôi thấy nó ... vui ... để xem các ngôn ngữ như C# được đóng gói bằng ngôn ngữ truy vấn cơ sở dữ liệu (LINQ) và C++ bị phỉ báng như bị cồng kềnh.

+0

+1 cho ghi chú bên cạnh ... :) –

+0

++ cho "bị quấy rối" –

Các vấn đề liên quan