Tại sao các trường học không bao gồm các trình sửa lỗi? [đóng cửa]


12

Sau một câu hỏi bài tập về nhà khác trên SO. Có vẻ như đại đa số sinh viên không biết trình gỡ lỗi là gì hoặc sử dụng một trình gỡ lỗi như thế nào. Tôi cảm thấy việc biết cách sử dụng trình gỡ lỗi cũng quan trọng như các chương trình cơ bản khác.

  • Câu hỏi không nên gỡ lỗi và làm thế nào để sử dụng các công cụ gỡ lỗi hiện đại được dạy cùng với các nguyên tắc cơ bản lập trình? Nếu không, tai sao không.

2
Erm .. bạn đang nói gdb là một công cụ gỡ lỗi hiện đại ? Nó không phải là một trình sửa lỗi xấu, nhưng nó chắc chắn không phải là nghệ thuật.
Billy ONeal

1
Tôi đồng ý nhưng tôi cũng đã trả lời câu hỏi là sinh viên sử dụng phòng thu trực quan và không biết làm thế nào hoặc tại sao họ sẽ sử dụng trình gỡ lỗi.
chạy lại

@rerun: Erm .. ouch. Họ không thể nhấn nút "phát" trên IDE? (BTW, tôi + 1'd)
Billy ONeal

Nhật ký in system.out là pháo đài cuối cùng của người lười biếng và thiếu năng lực

6
@Jarrod, một khái quát khá rộng và có lẽ quá mức. Đôi khi bạn chỉ đơn giản là không thể sử dụng trình gỡ lỗi trên chương trình của mình khi xảy ra sự cố.

Câu trả lời:


7

Đó không phải là trường hợp sử dụng các trình gỡ lỗi cần phải được dạy, nhưng các kỹ thuật gỡ lỗi tổng quát hơn . Điều này sẽ bao gồm dạy cách sử dụng trình gỡ lỗi tất nhiên nhưng cũng sẽ có nhiều kỹ thuật quan trọng khác, ví dụ

  • tư duy phản biện
  • phân chia và chinh phục
  • gỡ lỗi printf, đăng nhập, vv
  • kiểm tra bàn
  • bài kiểm tra về áp lực

Là một lợi ích bổ sung, nhiều kỹ thuật cũng có thể được áp dụng để giải quyết vấn đề trong các lĩnh vực khác ngoài lập trình.

Có khá nhiều cuốn sách hay về toàn bộ chủ đề này, có lẽ nên đọc cho tất cả sinh viên đại học và bất kỳ ai học những điều cơ bản về lập trình: Gỡ lỗi của David J Agans .


8

Các khóa học khoa học máy tính cấp ba được thiết kế theo hướng dạy học sinh lập trình cơ bản , như bạn đã đề cập - những khái niệm này được dạy cho sinh viên với hy vọng họ sẽ tìm hiểu các khái niệm cần thiết và áp dụng nó vào một loạt các ngôn ngữ lập trình và các vấn đề.

Mặt khác, các công cụ gỡ lỗi là một tập hợp con trong khu vực triển khai - mỗi công cụ là khác nhau đối với mỗi ngôn ngữ (mặc dù các khái niệm là như nhau). Chúng tôi đã tiếp xúc với các công cụ sửa lỗi nhưng không bao giờ thực sự bao quát chúng sâu. Nếu chúng tôi dành hơn một tuần cho các công cụ gỡ lỗi, tôi sẽ nhìn lại - nhìn nhận lại - và coi đó là một sự lãng phí thời gian. Tôi muốn tìm hiểu về ký hiệu hoặc đa hình của BigO. Tuy nhiên, ff sức mạnh của một công cụ sửa lỗi chưa được truyền đạt (thành công) đến các sinh viên, thì đó sẽ là một điều không thể thiếu.


3
+1. Đã dịch: Bởi vì không phải ai cũng sử dụng MSVS, GCC / GDB, LLVM / CLANG, v.v.
Billy ONeal

1
+1 mặc dù tôi phải thừa nhận tôi đồng ý với @rerun; Một khóa học (hoặc một phần của một) đi qua các khái niệm và công cụ cơ bản được sử dụng trong một cửa hàng phần mềm sẽ đi một chặng đường dài để giúp sinh viên mới tốt nghiệp làm việc hiệu quả. Tôi đã chạy qua một số thứ dường như không hiểu kiểm soát nguồn ngay cả sau khi sử dụng một thời gian.
Ken Henderson

nhiều kỹ năng mà các nhà phát triển trung bình dành nhiều thời gian ở đó được bao phủ trong trường học. Kiểm soát nguồn, Quản lý cấu hình nói chung, thăm dò mã, đọc mã, Xây dựng quy trình, v.v. và làm cho nó được kiểm tra trong mã và "triển khai" sẽ làm cho một nhà phát triển mới hữu ích hơn rất nhiều.
chạy lại

3
Tôi hoàn toàn không đồng ý. Nếu mã thực tế đang được viết (vì viết mã là một cách tốt để thực hành các khái niệm khoa học), thì sinh viên nên có quyền truy cập vào các cách tốt để viết mã đó và bao gồm sử dụng trình gỡ lỗi nếu cần. Điều đó không lấy đi thời gian có thể dành cho ký hiệu bigO - đó là giải phóng thời gian mà nhiều sinh viên dành cho việc tàn bạo vượt qua những lỗi nhỏ. Không có gì nhiều có được từ đó. Ngoài ra, nhiều khóa học khoa học khác (ví dụ vật lý) bao gồm các kỹ năng đo lường thực tế như là một phần của chương trình giảng dạy của họ.
Inca

2
Sử dụng trình gỡ lỗi đòi hỏi phải hiểu cách thức máy tính hoạt động, không chỉ mã. Tôi coi đây là một nền tảng lập trình . Tôi đã gặp quá nhiều sinh viên, những người không biết máy tính của họ thực sự đang làm gì và điều đó không tạo nên một lập trình viên giỏi.
edA-qa mort-ora-y

2

Trong hầu hết các khóa học lập trình giới thiệu, trạng thái chương trình đủ đơn giản để bạn có thể loại bỏ bất kỳ lỗi nào bằng một vài câu lệnh in. Cũng có thể có vấn đề buộc sinh viên phải làm mọi thứ bằng tay để họ có ý thức về cách thức và nơi trong mã trong một số loại lỗi xảy ra. Nếu bạn không biết nên tìm ở đâu thì một trình sửa lỗi sẽ khá vô dụng.


4
Một trình sửa lỗi tốt sẽ dễ sử dụng hơn các câu lệnh in. Các câu lệnh in yêu cầu bạn bằng cách nào đó có một cách để tuần tự hóa dữ liệu của bạn thành một chuỗi, điều này đòi hỏi phải có mã (có thể là lỗi của chính nó) để thực hiện tuần tự hóa. Ví dụ, một chương trình danh sách được liên kết dễ dàng thực hiện trong trình gỡ lỗi, nhưng các câu lệnh in sẽ không giúp một sinh viên đang cố gắng viết thuật toán chuyển đổi danh sách được liên kết - bởi vì bạn cần thuật toán đó để viết các câu lệnh in đúng .
Billy ONeal

2
@Billy vì vậy bước qua mã sai là bằng cách nào đó sẽ giúp họ?
Neil Butterworth

1
@Billi ONeal, bạn đã sai. Trình gỡ lỗi mà bạn đang nói không tồn tại. Bước tương tác thông qua chương trình chỉ hữu ích khi bạn đã xác định được vấn đề với ghi nhật ký gỡ lỗi. Chưa bao giờ trong thực tế của tôi (> 20 tuổi) tôi phải sử dụng trình gỡ lỗi với mã riêng của mình - các xác nhận và ghi nhật ký thích hợp luôn luôn đủ. Tôi chỉ sử dụng các công cụ chết tiệt đó với mã thư viện và các công cụ kế thừa. Và, btw., Có thể tuần tự hóa bất kỳ cấu trúc dữ liệu nào thành một thứ có thể đọc được luôn là một ý tưởng tốt. Một số ngôn ngữ / môi trường cung cấp miễn phí.
SK-logic

1
@Billy ONeal, làm thế nào bạn có thể duyệt bộ nhớ của thiết bị vi điều khiển, được gắn vào cổng nối tiếp? Và, tôi tin rằng không nên để những người mới làm quen với các ngôn ngữ cấp thấp có con trỏ và công cụ trước khi họ biết đủ về cấu trúc dữ liệu và thuật toán. Đến lúc đó họ sẽ biết cách gỡ lỗi đúng cách.
SK-logic

1
@Billy ONeal, phần khó nhất là xác định đúng thời điểm khi kiểm tra giá trị trong trình gỡ lỗi (btw., Trong hầu hết các trường hợp, nó vẫn giống như gọi phương thức .dump (), không phải kiểm tra bộ nhớ trực tiếp) hoặc để in một giá trị nối tiếp. Với một cơ sở hạ tầng ghi nhật ký gỡ lỗi thích hợp, vấn đề được thu hẹp lại để phân tích các tệp nhật ký. Trong hầu hết các trường hợp, một grepcông việc đơn giản . Không bước, không có điểm dừng có điều kiện - chỉ grep.
SK-logic

2

Nó không quá quan trọng. Tôi gần như không bao giờ sử dụng một, và không bao giờ có. Cách tốt nhất để gỡ lỗi mã là:

  • đừng viết lỗi ngay từ đầu
  • nếu bạn viết chúng, hãy sửa chúng bằng cách suy nghĩ, không phải bằng cách tìm đến trình gỡ lỗi

Và đối với nhiều phần mềm hiện đại, đa luồng, trình gỡ lỗi có tác dụng che giấu các lỗi thay vì phát hiện ra chúng. Và họ chắc chắn không nên được "dạy" ở cấp độ, bất kỳ ai cũng sẽ dạy cách sử dụng trình xử lý văn bản.


6
Tôi nghĩ rằng điều này phụ thuộc. Nếu bạn đang cố gắng làm quen với hành vi của một cơ sở mã lớn và tài liệu kém mà bạn không viết, trình gỡ lỗi là một trong những cách nhanh nhất để làm quen với những gì cơ sở mã đang làm. Nếu bạn đang viết tất cả mã, chắc chắn, bạn sẽ không cần trình gỡ lỗi thường xuyên, nhưng không phải tất cả chúng ta đều ở nơi đó. +1
Billy ONeal

1
@Billy Chúng tôi phải đồng ý khác nhau. Bạn thử làm quen với một máy chủ giao dịch MT khổng lồ với trình gỡ lỗi.
Neil Butterworth

@Neil: Tôi chưa bao giờ cá nhân xử lý vấn đề đó ... nhưng tôi đã gỡ lỗi mã MT trước đây mà không gặp vấn đề gì. Có lẽ tôi bị hư hỏng bởi MSVC ++ - trình gỡ lỗi ở đó giúp hiển thị những gì các luồng khác nhau đang thực sự dễ dàng. Nhưng nếu tôi đã gỡ lỗi trong các phiên bản trước năm 2008 (tôi nghĩ đó là khi nó được thêm vào) tôi có thể thấy điều đó có thể khiến mọi thứ trở nên khó khăn hơn.
Billy ONeal

@Neil: Đừng hiểu sai ý tôi - Tôi không nói rằng trình gỡ lỗi là sự thay thế cho suy nghĩ, hoặc đó phải là điều duy nhất bạn nhìn vào. Tôi chỉ nói rằng nó là một công cụ mà trong một số trường hợp có thể giúp hiểu được điều gì đó dễ dàng hơn. Nếu trình gỡ lỗi gây ra nhiều nhầm lẫn hơn, thông thường sẽ dễ dàng nói rằng nó gây ra nhiều nhầm lẫn hơn (Vì bạn đang bị lẫn lộn nhiều hơn) và đó là khi bạn tắt trình gỡ lỗi và thử một thứ khác. Nó hữu ích trong một số trường hợp, nhưng nó không thay thế cho việc xem mã / đầu vào / đầu ra và suy nghĩ về những gì đang xảy ra.
Billy ONeal

2
Tôi biết bạn đang bay trên khuôn mặt của sự khôn ngoan nhận được ở đây. Nhưng bạn đang ở trong một công ty tốt với những người như Linus Torvalds, Larry Wall, Brian Kernighan và Rob Pike.
btilly

0

Gỡ lỗi nên được dạy bởi vì học sinh là con người và con người mắc phải tất cả các loại sai lầm, một số trong đó yêu cầu có được một số dữ liệu thử nghiệm (thông tin gỡ lỗi) trước khi bất kỳ sự giác ngộ nào về một sai lầm nhất định xảy ra.

Gỡ lỗi không được dạy vì tiền đề (có thể được kế thừa từ khoa toán) rằng các chương trình nên được thiết kế đúng, thậm chí có thể chứng minh được như vậy. Và do đó, sinh viên không nên "thử nghiệm" với lập trình một cách chính xác. Tuy nhiên, điều này bỏ qua quá trình sản xuất trong thế giới thực của con người không hoàn hảo, tạo ra phần mềm để thay đổi thông số kỹ thuật theo áp lực lịch trình, v.v.


Hmm .. có lẽ trường học của tôi chỉ khác, nhưng đó không phải là cách mọi thứ được thực hiện tại CWRU.
Billy ONeal

Có lẽ phụ thuộc vào cây thừa kế bộ phận lịch sử của khóa học lập trình trong câu hỏi.
hotpaw2

Tôi không chắc chắn nơi bạn nhận được tất cả điều này. Tất cả các lớp giới thiệu dành một vài bài giảng về cách theo dõi lỗi.
davidk01

@ davidk01 - Điều đó không giải thích quan sát của OP, điều mà tôi đã nghe, không thường xuyên, nhưng hơn một lần trước đây.
hotpaw2

@ hotpaw2: Điều gì không giải thích cho quan sát của OP? Chỉ vì học sinh gặp khó khăn trong việc học các chương trình gỡ lỗi không có nghĩa là nó không được dạy, đó là kết luận mà bạn đang nhảy vào. Tôi đã tham gia một vài khóa học lập trình cả khi là sinh viên đại học và sinh viên mới tốt nghiệp. Trong mỗi lớp, người hướng dẫn đã dành ít nhất một bài giảng để xem qua một chương trình không chính xác và sửa nó để thể hiện một số kỹ thuật sửa lỗi phổ biến.
davidk01

0

Câu hỏi này là xa lạ với tôi. Tại trường đại học của tôi, việc sử dụng trình gỡ lỗi (JDB và trình gỡ lỗi Eclipse) đã được dạy ngay từ trình tự khoa học máy tính năm đầu tiên. Việc sử dụng trình gỡ lỗi và các công cụ kiểm tra khác đã được dạy lại trong khóa học về kiểm thử phần mềm.

Cá nhân tôi cảm thấy vô cùng khó tin khi bất kỳ trường học tốt nào đang cố gắng chuẩn bị cho mọi người tham gia vào lực lượng lao động không dạy về các kỹ thuật kiểm tra và gỡ lỗi thích hợp. Họ rõ ràng không thể bao gồm tất cả các khía cạnh của nó, nhưng ít nhất họ có thể dạy những điều cơ bản trong lớp học.


0

Tự mình tìm ra

Tôi không cần và không muốn một giáo sư hay TA dành thời gian dạy cho tôi thứ gì đó mà tôi có thể dễ dàng tự mình tìm ra. Họ ở đó để dạy tôi những khái niệm khó khăn và hướng dẫn học tập. Họ không và không nên ở đó vì vậy bạn không cần phải RTFM.

Học cách học

Học đại học nên học về cách học, không chỉ nắm trong tay mọi chủ đề bạn không biết. Nếu bạn nắm trong tay quá trình này, bạn sẽ thất bại thảm hại trong thế giới thực.

Uphill, cả hai cách, thông qua tuyết

Khi tôi đi học, họ cũng không buồn dạy bạn ngôn ngữ. Bạn đã được dự kiến ​​sẽ nhận nó vào thời gian riêng của bạn. Họ sẽ cung cấp cho bạn các dự án và cơ sở. Tùy thuộc vào bạn để theo dõi thông tin bạn cần để hoàn thành việc thực hiện và gửi một chương trình làm việc. Khá giống với thế giới thực, ngoại trừ giờ hành chính.

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.