Đây có phải là một kỹ năng thực sự cần thiết để lập trình mà không cần tài liệu API không? [đóng cửa]


22

Tôi hầu như không vượt qua kỳ thi lập trình Java của tôi ngày hôm nay. Tôi đã phải trả lời một số câu hỏi chung về luồng mà tôi đã làm tốt và để viết một chương trình luồng nhỏ tệ hơn. Tôi phải kết nối máy tính xách tay của mình với màn hình máy chiếu và viết chương trình ngay lập tức. Nỗ lực đầu tiên của tôi là sử dụng các lớp ẩn danh nhưng tôi quên mất cú pháp chính xác. Có thể vì một số hứng thú hoặc có thể vì hai tuần qua tôi đã mã hóa chủ yếu bằng php. Sau đó tôi hỏi nó có được phép sử dụng tài liệu API không. Câu trả lời là "KHÔNG". Vì vậy, tôi quyết định đi một con đường khác và tôi đã thực hiện Runnable. Chương trình đã làm những gì được yêu cầu vào cuối. Tất nhiên các giám khảo nhận thấy thất bại đầu tiên của tôi và điều đó ảnh hưởng rất lớn đến điểm số của tôi. Tôi đã rất ngạc nhiên khi nó không được phép sử dụng tài liệu API.

Vì vậy, câu hỏi của tôi là: Có thực sự quan trọng để có thể viết mã hoàn hảo mà không cần tài liệu API không? Tôi có nên phát triển kỹ năng này? Có thực sự quan trọng trong thế giới thực và trong môi trường làm việc? Trong khi về các khóa học lập trình, tôi tập trung vào việc học các mẫu, phát triển các kỹ năng để viết các ứng dụng thiết kế tốt, các kỹ năng sử dụng API và tìm kiếm thông tin cần thiết nhanh chóng. Tôi đã không cố gắng học cách lập trình mà không có tài liệu API. Có nhất thiết phải có trong các cuộc phỏng vấn việc làm (mã hóa mà không cần tài liệu API) không?


2
Tôi nghĩ rằng anh ấy hỏi về tài liệu , cụ thể là các tài liệu tham khảo API.

3
@bancer - Bạn không thể sử dụng các lớp java gốc không có ý nghĩa. Có vẻ như bạn chưa chuẩn bị cho kỳ thi.
Ramhound

27
Trong thế giới thực, bạn sẽ luôn có quyền truy cập vào tài liệu. Tôi có một trí nhớ khủng khiếp và cố gắng tập trung vào logic chung của ứng dụng của mình và tránh lấp đầy tâm trí tôi bằng việc ghi nhớ vô nghĩa những thứ có thể dễ dàng tra cứu. Thật không may, thế giới học thuật (và thế giới của các chứng chỉ) có phần khác biệt và thường có sự nhấn mạnh vào việc ghi nhớ vô nghĩa. Các nghiên cứu đại học của tôi chủ yếu là về toán học và vật lý, nhưng tôi nhớ phải ghi nhớ rất nhiều công thức, v.v ... Thật là lãng phí thời gian.
Antonio2011a

11
@ Antonio2011a - Biết API của ngôn ngữ bạn đang sử dụng KHÔNG phải là "ghi nhớ vô nghĩa". Bạn càng biết nhiều về API, bạn càng có thể lập trình tốt hơn, bởi vì bạn sẽ chọn các lớp và phương thức phù hợp cho giải pháp của mình. Bạn không thể chọn chúng nếu bạn không biết chúng tồn tại. Tất nhiên, không ai biết toàn bộ API Java; nó quá to. Nhưng thật tốt khi biết nhiều như bạn có thể quản lý.
Dawood nói phục hồi Monica

9
@DavidWallace Có lẽ tôi đã không rõ ràng. Tất nhiên tôi không nói rằng bạn không cần phải làm quen với API !! Chỉ là bạn không cần phải ghi nhớ tên chính xác của các lớp, phương thức, thứ tự của các tham số và các chi tiết gây tê như vậy! Tất cả những gì bạn thực sự cần biết là nó tồn tại và nó hữu ích như thế nào, sau đó bạn có thể tra cứu các chi tiết trong khi mã hóa. Như tôi đã nói trước khi trí nhớ của tôi rất tệ, và thật lòng tôi có thể đã sử dụng một lớp học cách đây một giờ, và nếu bạn đưa cho tôi một mảnh giấy trắng, tôi sẽ không thể nhớ chính xác các chi tiết.
Antonio2011a

Câu trả lời:


39

Trong Real Life ™, tôi sẽ đánh giá kỹ năng này là "tốt để có", nhưng hoàn toàn không bắt buộc. Trong một môi trường đại học, nó là khác nhau, tuy nhiên.

Một khả năng mã mà không có tài liệu có thể được sử dụng như một dấu hiệu gián tiếp về sự quen thuộc của học sinh với môn học. Theo một nghĩa nào đó, việc nhìn thấy bạn viết mã gì đó mà không cần chạm vào tài liệu cho giáo sư biết rằng bạn đã thực hành sử dụng API trước đó - bằng cách làm bài tập về nhà và các bài tập khác, hoặc thậm chí bằng cách tự mình lập trình để giải trí. Một người thông minh có hiểu biết về API trong câu hỏi nên có thểtự mình tìm ra hầu hết các API Java bằng cách xem tài liệu. Điều này không phải là ngẫu nhiên: các lập trình viên thường được yêu cầu học hỏi trong công việc và tài liệu API cho các hệ thống lập trình phổ biến, bao gồm Java, được cấu trúc để giúp các lập trình viên học hỏi nhanh chóng. Tài liệu thường cung cấp các ví dụ ngắn, khép kín, minh họa khái niệm này một cách ngắn gọn và súc tích.

Điều này hoạt động trực tiếp chống lại mục tiêu của giáo sư là đo lường kiến ​​thức của bạn về chủ đề này (trái ngược với việc đo lường mức độ thông minh của bạn). Do đó, không phải là không có lý khi yêu cầu bạn mã mà không xem tài liệu.

LƯU Ý: Tôi đã chỉnh sửa câu trả lời này để phản hồi lại việc chỉnh sửa câu hỏi.


2
Từ đọc của tôi, các giám khảo đã xem xét khả năng ghi nhớ tài liệu API của anh ấy. Anh biết phải làm gì, chỉ không nhớ cú pháp.
Paul

@Paul Tôi đọc các chỉnh sửa, và thay đổi câu trả lời của tôi. Tôi nghĩ rằng OP đã yêu cầu một cái gì đó hoàn toàn khác nhau. Cảm ơn!
dasblinkenlight

2
+1 để xác định vấn đề thực sự ở đây. Nếu đó là một cuộc phỏng vấn xin việc, người phỏng vấn sẽ quan tâm nhiều hơn đến cách bạn giải quyết vấn đề và có lẽ bạn sẽ được phép viết gần đúng nhất cú pháp của mình lên bảng trắng. Khi bạn đã dành ba tháng qua để tìm hiểu tài liệu cụ thể và bạn đang được thử nghiệm trên tài liệu cụ thể đó, thật hợp lý khi không có chính sách "Internet mở".
StriplingWar Warrior

@Paul: bạn đã đúng
bancer

21

Có một anh chàng đã từng có một lỗi nhỏ trong mã của mình, vì vậy anh ta đã đưa nó đến StackOverflow và yêu cầu giúp đỡ. StackOverflow: Java (tạo số không lặp lại) . Tôi nhìn vào mã của anh ấy và tôi chỉ ra cho anh ấy rằng Hashset của anh ấy luôn luôn chứa đầy các giá trị nhưng nó không bao giờ bị xóa. Vì vậy, anh ấy hỏi tôi: "làm thế nào để bạn xóa nó?" Tôi phải thừa nhận rằng tôi không đặc biệt tự hào về câu trả lời tôi đã đưa ra.

Bạn hoàn toàn cần biết những thứ cơ bản mà bạn sử dụng hàng ngày. Bạn cần biết tất cả chúng, và bạn cần biết rõ về chúng. Nhưng chỉ những thứ cơ bản.

Đối với mọi thứ khác, điều quan trọng là phải biết rằng có một cái gì đó ngoài kia làm những gì bạn muốn. Chính xác là bạn cần sử dụng lớp nào, chính xác là bạn cần gọi phương thức nào, và chính xác những thông số bạn cần truyền cho nó, là thứ mà bạn không cần phải giữ các tế bào thần kinh quý giá trong não. Đó là tài liệu dành cho, và đó là lý do tại sao các IDE với tự động hoàn thành được phát minh. Và nếu sự thúc đẩy đến xô đẩy, luôn có StackOverflow và sự đan xen lớn hơn ngoài kia.

Yêu cầu các lập trình viên biết về API trái tim cũng giống như yêu cầu các luật sư biết trái tim về luật pháp và tất cả các tiền lệ. Nó là vô nghĩa. Một bài tập trong vô ích.


+1: Rất khó để tìm hiểu toàn bộ API của một thư viện lớn như Java, đơn giản chỉ vì kích thước tuyệt đối của nó. Dù biết các khả năng chung được cung cấp bởi các gói dễ dàng hơn (ví dụ: javax.imageio cung cấp xử lý hình ảnh nâng cao, không phải là tôi đã từng sử dụng nó) và một số phương tiện cốt lõi nên được học. Cụ thể, java.lang và java.util sẽ được sử dụng trong hầu hết mọi chương trình Java.
Donal Fellows

9

Đây có phải là một kỹ năng thực sự cần thiết để lập trình mà không cần tài liệu API không?

Tôi sẽ không nói rằng nó là bắt buộc nhưng nó là

kỹ năng rất mong muốn

imNSho.

Tôi đã dành vài tháng gần đây để hợp tác chặt chẽ với anh chàng biết API rõ hơn tôi. Anh ta làm việc hiệu quả hơn nhiều - đơn giản vì anh ta có thể bỏ qua các kiểm tra tài liệu API khiến tôi mất tập trung .


Ở đây, tôi đang nói về sự trôi chảy. Về việc không chỉ có khả năng một cái gì đó mà còn thông thạo.

Bạn có biết nó là gì để thông thạo? Đó là khi ai đó nhìn vào bạn, dường như bạn viết mã khi bạn nhập ...

  • ... Như thể mã đúng chỉ đơn giản chảy từ ngón tay của bạn đến màn hình. Như thể bạn không kiểm tra tài liệu, hướng dẫn và hướng dẫn sử dụng API. Trên thực tế, bạn làm kiểm tra tất cả, nhưng đó là vô hình vì đó là tất cả trong đầu của bạn. Bạn đã có tất cả kiến ​​thức bạn cần ngay trong não của mình - được sạc, tải và sẵn sàng sử dụng.

... Đó là kiến ​​thức lưu loát. Đó là khi bạn mất một phút để làm những gì người mới mất một giờ. Thật đáng để nỗ lực, thực sự. Nó có mùi như chiến thắng.

Nếu bạn thành thạo một số API và nếu bạn ghi nhớ chính xác cảm giác của nó như thế nào, bộ nhớ này sẽ hướng dẫn bạn thêm về cách làm việc hiệu quả nhất với bất kỳ API nào khác.


Tôi không nghĩ câu hỏi của anh ấy là liệu cuối cùng bạn có nên biết tài liệu hay không, nhưng liệu bạn có nên ghi nhớ tài liệu như thể cho các kỳ thi hay không.
Rei Miyasaka

@ReiMiyasaka tốt nếu bạn bỏ qua bài kiểm tra dài dòng bạn có thể nhận thấy điều này: "Vì vậy, câu hỏi của tôi là: Có thực sự quan trọng để có thể viết mã hoàn hảo mà không cần tài liệu API không? Tôi có nên phát triển kỹ năng này không? và trong môi trường làm việc? " . Tôi tập trung vào phần này của câu hỏi bởi vì, bạn thấy đấy, trải nghiệm gần đây của tôi khiến tôi cảm thấy khá khó chịu về ý tưởng rằng nó chỉ có thể bay bằng câu trả lời cơ bản mà nó không bắt buộc . Đủ công bằng?
gnat

2
+1 để trang trải chi phí chuyển ngữ cảnh sang tài liệu tham chiếu. Phải nhìn lên từng bước làm mọi thứ chậm lại.
Wyatt Barnett

8

Không. Tôi sẽ chết nếu không có khả năng tra cứu từ tài liệu API. Lần duy nhất tôi không có nó là khi tôi đang cố gắng gỡ lỗi một cái gì đó mà tôi không thể truy cập vào tài liệu. Sau đó, tôi "kỹ sư đảo ngược" các mảnh api và cut-n-paste khi cần thiết.

Điều quan trọng là phải có ý tưởng tốt về nội dung của API và phần nào là tốt nhất để sử dụng, nhưng biết tên phương thức, tên biến ... không thực sự cần thiết.


3

Trong công việc tôi chưa bao giờ gặp phải tình huống không có quyền truy cập vào tài liệu. Mặt khác, có khả năng đọc hiểu và hiểu chung để có thể diễn giải các tài liệu viết kém luôn có ích trong mọi lúc.

Cuối cùng, bạn sẽ biết các mẫu và cấu trúc API của mình, nhưng biết chính xác nơi mọi thứ không đặc biệt hữu ích.

Tại SFU Computing Science, các kỳ thi trong sách kín chiếm từ 70% đến 100% điểm số của chúng tôi. Lý thuyết là các bài kiểm tra kiểm tra sự hiểu biết của bạn về tài liệu khóa học và khả năng thích ứng của bạn. Trong thực tế, tất cả những gì nó thực sự kiểm tra là thần kinh, chất lượng / thời gian ngủ, trí thông minh và kỹ thuật ghi nhớ vẹt của bạn - không cần thiết trong học tập hoặc cho một công việc điển hình trong ngành công nghiệp phần mềm.


2

Đối với tất cả trừ câu hỏi cuối cùng của bạn: Kiến thức bách khoa về bất kỳ tài liệu API nào không quan trọng. Rõ ràng bạn sẽ lập trình nhanh hơn nếu bạn biết mọi chi tiết của mọi phương pháp của mọi lớp, nhưng đó không phải là một kỳ vọng hợp lý.

Đối với câu hỏi cuối cùng của bạn: Bạn có thể được yêu cầu biết chi tiết cụ thể của một số lớp mà không có tài liệu API. Nếu bạn biết trước khi bước vào cuộc phỏng vấn rằng bạn sẽ được kiểm tra, hoặc nếu công việc rất tập trung (nghĩa là: bạn sẽ thực hiện xâu chuỗi cả ngày), thì bạn có thể mong muốn biết chi tiết các lớp liên quan một cách hợp lý.


Phụ lục: Bạn nên làm rõ trước khi có bất kỳ kỳ thi nào với giáo sư / người hướng dẫn của bạn chính xác những tài liệu nào sẽ được cung cấp và những tài liệu nào bạn có thể tự mang theo. Giả sử rằng bất cứ điều gì họ không đồng ý rõ ràng là không được phép. Tôi đã có những khóa học mà tôi chỉ có thể mang những điều cơ bản để viết, nơi tôi có thể mang bất kỳ cuốn sách nào tôi muốn, và nơi tôi có thể mang chính xác một tờ hai mặt với bất cứ thứ gì tôi muốn trên đó. Các kỳ thi thường được cấu trúc xung quanh những gì vật liệu được phép.


2

Tài liệu API! = Cú pháp ngôn ngữ.

Tôi có thể hiểu khi ai đó không biết tên chính xác của các lớp Java và các phương thức của họ. Tôi không biết họ và tôi viết mã bằng Java mỗi ngày. Tôi sẽ bị mất mà không có tài liệu hoặc tự động hoàn thành IDE toàn năng - đặc biệt là khi nói đến API tiêu chuẩn Java vốn nổi tiếng về tính dài dòng của nó trong các tên biến / lớp / phương thức.

Tuy nhiên, như bạn đã nói, đó không phải là bất cứ điều gì thường thấy trong các tài liệu mà bạn không thể nhớ. Đây là cú pháp cho các lớp bên trong - đây là một tính năng của chính ngôn ngữ không phải là thứ cần ghi nhớ từ các tài liệu.

Nhiều như tôi nghĩ rằng sinh viên nên (trong nhiều trường hợp) được phép sử dụng tài liệu cho các API tiêu chuẩn, tôi nghĩ rằng bất kỳ ai muốn vượt qua bài kiểm tra lập trình đều phải biết cú pháp ngôn ngữ. Và tôi không có nghĩa là một số trường hợp kỳ dị mà chỉ các nhà thiết kế ngôn ngữ biết, chỉ là những trường hợp tiêu chuẩn - như trường hợp trong ví dụ của bạn.


2
Tôi cũng không nghĩ rằng nó đáng để ghi nhớ cú pháp. Các tính năng và mô hình và gotchas, có, nhưng cú pháp, không. Tôi làm việc với quá nhiều ngôn ngữ để nó có ý nghĩa và tôi nghĩ điều đó cũng trở thành sự thật của hầu hết các nhà phát triển.
Rei Miyasaka

@ReiMiyasaka: Tôi không nghĩ bạn nên ghi nhớ toàn bộ thông số ngôn ngữ, nhưng bạn nên biết cú pháp cơ bản bất cứ lúc nào. Bạn có tìm kiếm trong các tài liệu làm thế nào để viết một vòng lặp bằng bất kỳ ngôn ngữ nào của bạn không? Hay bạn chỉ mã hóa nó?
Goran Jovic

Trong thực tế, tôi làm việc với khá nhiều ngôn ngữ và tôi thường quên cú pháp chính xác ngay cả đối với những điều cơ bản !! Vì vậy, tôi thấy mình luôn cần phải tham khảo các tài liệu.
Antonio2011a

@ Antonio2011a: Tôi thừa nhận rằng tôi tự làm điều đó, đặc biệt là khi tôi sử dụng các ngôn ngữ ít phổ biến hơn. Nhưng đối với nhiều sinh viên, ngôn ngữ đang học là ngôn ngữ lập trình đầu tiên. Nếu một học sinh thậm chí không học cú pháp thì nó không nói gì về cách anh ấy / cô ấy chuẩn bị cho kỳ thi.
Goran Jovic

@Goran Thật ra tôi không nhất thiết, vì hai lý do: 1. biên dịch nền cho tôi biết khi tôi sai cú pháp và 2. các vòng lặp là thứ yếu (gần như không tồn tại) trong các ngôn ngữ như Haskell và ML. Ngôn ngữ đa dạng hơn bạn nghĩ. Mặc dù tôi dành phần lớn thời gian để viết mã trong F # và chỉ nhớ mơ hồ về Haskell, tôi vẫn có thể hiểu mã Haskell tốt, nhớ lưu ý về sự khác biệt về ngữ nghĩa. Mặt khác, tôi đồng ý rằng việc học một ngôn ngữ đầu tiên từ trong ra ngoài là vô cùng quan trọng và quá thường xuyên bị bỏ quên.
Rei Miyasaka

2

Trong Eclipse, bạn có thể viết obj.và nhấn ctrl + dấu cách và nó sẽ cố gắng tự động hoàn thành bằng cách cung cấp cho bạn tất cả các tùy chọn phương thức cho đối tượng đã cho. Nếu điều đó không thành công với tôi vì một số lý do, API Java có các câu trả lời còn lại. Tôi rất khó để nghĩ về một ngày khi tôi không làm Google.

Trường học là một câu chuyện hoàn toàn khác nhau mặc dù.


2

IMHO, giới hàn lâm thường lén lút sản xuất các kỹ sư phần mềm giỏi. Chỉ những người viết mã cho vui sau các bài học mới có cơ hội đạt được điều gì đó trong các dự án trong thế giới thực.

Sau đó, một lần nữa, hàn lâm không phải là về sản xuất các nhà phát triển, cả thế giới là về cách giải quyết các vấn đề trừu tượng và thực hiện nghiên cứu. Nó rất xa ứng dụng thực tế hầu hết thời gian. Và các nhà nghiên cứu không nhất thiết phải là một lập trình viên giỏi.

Và học API bởi trái tim bốc mùi. Có autocomplete / google / msdn / javadocs để tìm kiếm tất cả các ngõ ngách, tại sao mọi người muốn giữ tất cả những thứ đó trong não mọi lúc? Hầu hết các chức năng phổ biến bạn sẽ học trong vài tuần / tháng, mọi thứ khác có thể được tìm kiếm trong vài giây nếu bạn biết cú pháp, cấu trúc và ý tưởng chung.

Sau đó, một lần nữa, một số người vẫn viết mã trong trình soạn thảo văn bản và ghi nhớ tên hàm, điều đó không hẳn là sai, nhưng nếu họ cuồng tín về điều đó, bạn đã nhận được giáo sư của mình.

Hơn nữa, ngay cả khi bạn biết tên hàm và tham số của tim, thì vẫn nên xác minh chúng trong tài liệu API mới nhất. strtok đã ổn trong kịch bản luồng đơn 10 năm trước, ngày nay nó không ổn. Nếu bạn chỉ tìm hiểu tên và tham số, bạn sẽ không bao giờ biết rằng chức năng có thể bị phản đối hoặc các giải pháp thay thế tốt hơn được phát minh.

Ngôn ngữ thay đổi, vì vậy bạn cần thay đổi với chúng, ghi nhớ một cách chân thực không tốt cho điều đó.


1

nếu bạn bắt đầu làm việc với một số dự án trong một thời gian không ngắn bằng cách sử dụng api sớm hay muộn thì bạn sẽ học được api đó rất tốt. tôi tin rằng đây là kỹ năng hoàn toàn không cần thiết vì tôi không biết bất kỳ ai chưa từng xem qua bất kỳ tài liệu nào (msd, trang nam, v.v ...)

tuy nhiên các trường đại học là một vũ trụ hoàn toàn khác, vì vậy, đừng ngạc nhiên nếu bạn thất bại vì bạn không biết tên typedef của tham số thứ 10. của CreatWindowEx, chẳng hạn.


Không phù hợp với kinh nghiệm của tôi về các trường đại học. Nếu bất cứ điều gì, họ nghiêng về bị ám ảnh bởi lý thuyết và thiếu chú ý đến các chi tiết. Hoặc mức độ đã giảm xuống một trong những trường dạy nghề?
AProgrammer

Tôi không nói về một trường đại học, và đây chỉ là một ví dụ về những gì bạn có thể thấy ở đâu đó trên thế giới trong một số trường đại học. như bạn đã biết, chúng không giống nhau
Hayri Uğur Koltuk

2
Các trường đại học luôn có một số mức độ ghi nhớ và hồi quy. Tôi đã tính toán nếu tôi có sẵn một cuốn sách CRC thay vì phải ghi nhớ các bảng tích phân.
Blrfl

1

Tôi có thể nói, không cần thiết, bộ não con người không thể ghi nhớ quá nhiều thông tin, nhưng bạn vẫn cần biết những điều cơ bản hoặc những thứ được sử dụng nhiều nhất, vì không có nhiều thứ để ghi nhớ . Mặt khác, không thể ghi nhớ mọi thứ có trên java.

Ngoài ra, thật không công bằng khi giáo viên muốn học sinh của mình biết tất cả mọi thứ, hoặc sử dụng điều đó để biết liệu họ có lập trình bằng ngôn ngữ hay không, bên cạnh các bài tập hoặc dự án mà anh ta giao cho bạn. Đối với tôi nó giống như muốn biết những gì bạn làm khi bạn không đi học hoặc làm các công việc liên quan.

EDIT: Rõ ràng, những gì giáo viên yêu cầu bạn phụ thuộc vào anh ta, một số giáo viên coi trọng lý thuyết hơn trong khi những người khác coi trọng thực hành và không quan tâm nếu bạn không hiểu mọi thứ.

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.