2008-09-07 29 views
11

Trong một vài tuần nữa, chúng tôi sẽ dạy một khóa học về C++ cho các lập trình viên Java ngay lập tức. Họ có ít hoặc không có kinh nghiệm nào với C hoặc C++.Làm thế nào để dạy một khóa học về C++?

phiên bản trước của khóa học này là chỉ 1 hoặc 2 phiên nửa ngày và các chủ đề có mái che bao gồm:

  • tính năng ngôn ngữ mới, ví dụ
    • tiêu đề vs thực hiện
    • con trỏ và tham khảo
    • quản lý bộ nhớ
    • điều hành quá tải
    • mẫu
  • các thư viện chuẩn, ví dụ tiêu đề
    • C thư viện
    • iostreams cơ bản
    • STL cơ bản
  • sử dụng thư viện (tiêu đề, liên kết)
  • họ sẽ được sử dụng Linux, vì vậy
    • Linux cơ bản các lệnh điều khiển
    • gcc và cách diễn giải thông báo lỗi
    • Makefiles và autotools
  • debugger cơ bản lệnh
  • bất kỳ chủ đề mà họ hỏi về

Trong quá trình điểm từng cá nhân viết, biên dịch, chạy và gỡ lỗi chương trình đơn giản bằng cách sử dụng tính năng mới được giới thiệu . Đây có phải là cách tốt nhất để học không?

Bạn cho rằng chủ đề nào quan trọng nhất?
Chủ đề nào sẽ được thêm hoặc xóa?
Chủ đề nào không thể được đề cập đầy đủ trong một thời gian ngắn?

+0

Đây sẽ là chủ đề tại https://cseducators.stackexchange.com/ (mặc dù kể từ khi nó vẫn còn trong phiên bản beta riêng tư, nó dễ dàng nhất để nhập thông qua đây https://area51.stackexchange.com/proposals/92460/computer -nhà giáo dục) –

Trả lời

22

Tôi chỉ có thể một lần nữa trỏ đến Stroustrup và thuyết giảng: Đừng dạy tập con C! Nó quan trọng, nhưng không phải cho người mới bắt đầu! C++ là đủ phức tạp vì nó và các lớp thư viện chuẩn, đặc biệt là STL, quan trọng hơn nhiều và (ít nhất là bề ngoài) dễ hiểu hơn so với tập con C của C++.

Tương tự với con trỏ và phân bổ bộ nhớ heap, tình cờ. Tất nhiên chúng là quan trọng nhưng chỉ sau khi đã dạy các container STL.Một khái niệm quan trọng khác mà sinh viên mới phải quan tâm là khái niệm về các đơn vị biên dịch khác nhau, Quy tắc Một Định nghĩa (vì nếu bạn không biết nó, bạn sẽ không thể giải mã thông báo lỗi) và tiêu đề . Đây thực sự là một rào cản và một rào cản phải bị vi phạm sớm.

Ngoài các tính năng ngôn ngữ, điều quan trọng nhất cần được dạy là cách hiểu trình biên dịch C++ và cách nhận trợ giúp. Nhận trợ giúp (tức là biết cách tìm kiếm thông tin phù hợp) trong kinh nghiệm của tôi là điều quan trọng nhất mà phải được dạy về C++.

Tôi đã có trải nghiệm khá tốt với thứ tự giảng dạy này trong quá khứ.

/EDIT: Nếu bạn tình cờ biết bất kỳ người Đức nào, hãy xem http://madrat.net/coding/cpp/skript, một phần của rất giới thiệu ngắn được sử dụng trong một trong các khóa học của tôi.

+1

'if (name ==" Fred ") cout <<" Willkommen "<< endl;' Tôi nghĩ tôi thích hướng dẫn của bạn :) – fredoverflow

+0

@FredOverflow: Tôi cho rằng vì chúng đến từ một Java nền và do đó đã được thoải mái với OOP theo cách không quá khác biệt so với C++, mà chi tiêu một số thời gian trên tập hợp con C và khái niệm cơ bản của con trỏ, phân bổ bộ nhớ động vv là chính xác những gì là cần thiết. – haziz

+1

(tiếp theo) Con trỏ * do * có vị trí của chúng. Nhưng không phải lúc bắt đầu khóa học C++. –

6

Nếu chúng đến từ một thế giới Java, chúng được sử dụng để thu gom rác thải. Như vậy, tôi có thể dành một chút thời gian nói về con trỏ thông minh (tham chiếu) và cách chúng so sánh với việc thu gom rác thải.

3

Quản lý bộ nhớ (con trỏ, phân bổ, v.v), khái niệm cơ bản về STL và mẫu (vì STL sử dụng mẫu). Tôi nghĩ STL là quan trọng vì người ta sẽ thiếu sự phong phú của thư viện lớp Java SE trong C++.

4

Nếu bạn sắp đặt rất nhiều lập trình viên Java thẳng ra khỏi trường đại học để viết mã sản xuất, tôi muốn nói điều đầu tiên bạn nên quan tâm là con trỏ và quản lý bộ nhớ.

Thực sự, những người đến trực tiếp từ mã được quản lý hiếm khi có kỹ năng gỡ lỗi ngoại lệ liên quan đến con trỏ, hãy sử dụng nó một cách chính xác hoặc thậm chí hiểu cách ngôn ngữ/công cụ của họ sử dụng nó.

Con trỏ là cách bạn nghĩ không chỉ viết mã.

Thực hành khuôn khổ và mã hóa có thể được dạy làm mẹo và ghi chú trong quá trình thực hiện.

Nhưng không hiểu con trỏ khi viết mã C chỉ là chờ đợi để bắn mình vào chân, nếu không phải là người đứng đầu.

3

Tôi sẽ dành cả ngày để thảo luận cách viết một lớp học tốt trong C++. Deitel & Deitel có thể giúp tham khảo.

  • Khi nào các nhà thầu được gọi?
  • Khi nào các toán tử gán được gọi?
  • Khi nào trình phá hủy được gọi?
  • Điểm cho const Foo & a_foo là gì?
+1

Vì vậy, theo ý kiến ​​của bạn, những gì * là * điểm của 'const int & a_foo'? Gợi ý: không có. –

4

Tôi muốn thêm rằng bạn nên đảm bảo chỉ ra nơi họ có thể tìm thấy tham chiếu ngôn ngữ và API. Trong java, API và đặc tả ngôn ngữ nằm trong tầm tay của bạn trực tuyến tại java.sun.com ... với C hoặc C++, nó không đơn giản và dễ tìm tài liệu tham khảo.

Bất cứ khi nào tôi làm điều gì đó trong C hoặc C++, đó là vấn đề lớn nhất của tôi ... cố gắng tìm những gì tôi cần. Tôi thường chuyển sang cplusplus.com, thường có những gì tôi cần, nếu không thì tôi sẽ google. Nếu bạn có một bộ tài liệu tham khảo bạn sử dụng (trực tuyến hoặc dưới dạng sách), hãy liệt kê chúng và cho họ biết bạn sử dụng từng tài liệu tham khảo để làm gì.

0

Bạn nên dành một chút thời gian vào quản lý bộ nhớ và đặc biệt là RAII.

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