Apakah ini keterampilan yang benar-benar diperlukan untuk memprogram tanpa dokumentasi API? [Tutup]

22

Saya hampir tidak lulus ujian pemrograman Java saya hari ini. Saya harus menjawab beberapa pertanyaan umum tentang threading yang saya lakukan dengan baik dan untuk menulis program berulir yang lebih buruk. Saya harus menghubungkan laptop saya ke layar proyektor dan segera menulis program. Upaya pertama saya adalah menggunakan kelas anonim tetapi saya lupa sintaks yang tepat. Mungkin karena kegembiraan atau mungkin karena dua minggu terakhir saya kebanyakan coding di php. Lalu saya bertanya apakah boleh menggunakan dokumentasi API. Jawabannya adalah "TIDAK". Jadi saya memutuskan untuk mencari jalan lain dan saya mengimplementasikan Runnable. Program itu melakukan apa yang diminta pada akhirnya. Tentu saja para penguji memperhatikan kegagalan pertama saya dan itu sangat mempengaruhi nilai saya. Saya kagum bahwa tidak diperbolehkan menggunakan dokumentasi API.

Jadi, pertanyaan saya adalah: Apakah benar-benar penting untuk dapat membuat kode tanpa cacat tanpa dokumentasi API? Haruskah saya mengembangkan keterampilan ini? Apakah itu benar-benar penting di dunia nyata dan di lingkungan kerja? Sementara pada kursus pemrograman saya fokus pada pola pembelajaran, mengembangkan keterampilan untuk menulis aplikasi desain yang baik, keterampilan untuk menggunakan API dan menemukan informasi yang diperlukan dengan cepat. Saya tidak mencoba mempelajari cara memprogram tanpa dokumentasi API. Apakah harus dimiliki saat wawancara kerja (pengkodean tanpa dokumentasi API)?

bancer
sumber
2
Saya pikir dia bertanya tentang dokumentasi , khususnya referensi API.
3
@bancer - Anda tidak bisa menggunakan kelas java asli tidak masuk akal. Sepertinya Anda tidak siap untuk ujian.
Ramhound
27
Di dunia nyata Anda akan selalu memiliki akses ke dokumentasi. Saya memiliki memori yang mengerikan dan mencoba untuk fokus pada logika umum aplikasi saya dan menghindari mengisi pikiran saya dengan menghafal hal-hal yang tidak berguna yang dapat dengan mudah dilihat. Sayangnya dunia akademis (dan dunia sertifikasi) agak berbeda dan sering ada penekanan pada penghafalan tanpa tujuan. Studi sarjana saya sebagian besar dalam matematika dan fisika, tetapi saya ingat harus menghafal banyak rumus dll. Betapa buang-buang waktu.
Antonio2011a
11
@ Antonio2011a - Mengetahui API bahasa yang Anda gunakan BUKAN "penghafalan sia-sia". Semakin baik Anda mengetahui API, semakin baik Anda dapat memprogram, karena Anda akan memilih kelas dan metode yang sesuai untuk solusi Anda. Anda tidak dapat memilih mereka jika Anda tidak tahu mereka ada. Tentu saja, tidak ada yang tahu seluruh API Java; ini terlalu besar. Tapi selalu baik untuk mengetahui sebanyak yang Anda bisa.
Dawood mengatakan mengembalikan Monica
9
@ Davidvidallace. Mungkin saya tidak jelas. Tentu saja saya tidak mengatakan bahwa Anda tidak perlu terbiasa dengan API !! Hanya saja Anda tidak perlu mengingat nama-nama kelas yang tepat, metode, urutan parameter, dan detail mematikan pikiran lainnya seperti itu! Yang Anda benar-benar perlu tahu adalah bahwa itu ada dan bagaimana itu berguna, maka Anda dapat melihat detail saat coding. Seperti yang saya katakan sebelumnya, ingatan saya sangat buruk, dan sejujurnya saya bisa menggunakan kelas satu jam yang lalu, dan jika Anda memberi saya selembar kertas kosong saya tidak akan dapat mengingat detail yang tepat.
Antonio2011a

Jawaban:

39

Di Real Life ™, saya akan menilai keterampilan ini sebagai "menyenangkan untuk dimiliki", tetapi tidak diperlukan sama sekali. Namun, di lingkungan universitas berbeda.

Kemampuan kode tanpa dokumentasi dapat digunakan sebagai indikasi tidak langsung keakraban siswa dengan subjek. Dalam arti tertentu, melihat Anda memberi kode sesuatu tanpa menyentuh dokumentasi memberitahu profesor bahwa Anda telah berlatih menggunakan API sebelumnya - dengan melakukan pekerjaan rumah dan tugas lainnya, atau mungkin bahkan dengan pemrograman untuk bersenang-senang sendiri. Orang pintar dengan pemahaman sepintas tentang API yang dipermasalahkan harus bisamencari tahu hampir semua API Java sendiri dengan melihat dokumentasi. Ini bukan kebetulan: programmer sering diharapkan untuk belajar di tempat kerja, dan dokumentasi API untuk sistem pemrograman populer, termasuk Java, disusun untuk membantu programmer belajar dengan cepat. Dokumentasi sering kali menyediakan contoh-contoh singkat dan lengkap, menggambarkan konsep secara singkat dan ringkas.

Ini bekerja secara langsung terhadap tujuan profesor untuk mengukur pengetahuan Anda tentang subjek (bukan mengukur seberapa pintar Anda). Oleh karena itu tidak masuk akal untuk meminta kode Anda tanpa melihat dokumentasi.

CATATAN: Saya mengedit jawaban ini sebagai tanggapan atas pengeditan pertanyaan.

dasblinkenlight
sumber
2
Dari bacaan saya, penguji melihat kemampuannya untuk menghafal dokumentasi API. Dia tahu apa yang harus dilakukan, hanya tidak ingat sintaksisnya.
Paul
@ Paul Saya membaca suntingan, dan mengubah jawaban saya. Saya pikir OP meminta sesuatu yang sama sekali berbeda. Terima kasih!
dasblinkenlight
2
+1 untuk mengidentifikasi masalah sebenarnya di sini. Jika itu adalah wawancara kerja, pewawancara akan lebih tertarik pada bagaimana Anda menyelesaikan masalah, dan Anda mungkin akan diizinkan untuk menulis perkiraan terbaik Anda tentang sintaks di papan tulis. Ketika Anda menghabiskan tiga bulan terakhir mempelajari materi spesifik, dan Anda sedang diuji pada materi spesifik itu, masuk akal untuk tidak memiliki kebijakan "internet terbuka".
StriplingWarrior
@ Paul: Anda benar
bancer
21

Pernah ada seorang pria yang memiliki sedikit bug dalam kodenya, jadi dia membawanya ke StackOverflow dan meminta bantuan. StackOverflow: Java (menghasilkan angka tanpa pengulangan) . Saya melihat kodenya dan saya menunjukkan kepadanya bahwa HashSet-nya selalu diisi dengan nilai-nilai tetapi tidak pernah dihapus. Jadi, dia bertanya kepada saya: "bagaimana Anda membersihkannya?" Saya harus mengakui bahwa saya tidak terlalu bangga dengan jawaban yang saya berikan.

Anda benar-benar perlu mengetahui hal-hal dasar yang Anda gunakan setiap hari. Anda perlu mengetahui semuanya, dan Anda perlu mengenal mereka dengan baik. Tetapi hanya hal-hal dasar.

Untuk yang lainnya, yang penting adalah mengetahui bahwa ada sesuatu di luar sana yang melakukan apa yang Anda inginkan. Tepatnya kelas mana yang perlu Anda gunakan, metode mana yang perlu Anda panggil, dan parameter apa yang perlu Anda sampaikan, adalah sesuatu yang Anda tidak perlu menjaga neuron berharga dari otak Anda sibuk. Itulah gunanya dokumentasi, dan itulah sebabnya IDE dengan autocomplete diciptakan. Dan jika push datang untuk mendorong, selalu ada StackOverflow dan interwebz yang lebih besar di luar sana.

Meminta programmer untuk hafal API sama dengan meminta pengacara untuk hafal kode hukum dan semua preseden. Tidak ada gunanya. Latihan sia-sia.

Mike Nakis
sumber
+1: Sangat sulit untuk mempelajari seluruh API dari sebuah perpustakaan besar seperti Java, hanya karena ukurannya yang tipis. Mengetahui apa kemampuan umum yang disediakan oleh paket lebih mudah (misalnya, javax.imageio menyediakan penanganan gambar tingkat lanjut, bukan karena saya pernah menggunakannya) dan beberapa fasilitas inti harus dipelajari. Secara khusus, java.lang dan java.util akan digunakan di hampir setiap program Java.
Donal Fellows
9

Apakah ini keterampilan yang benar-benar diperlukan untuk memprogram tanpa dokumentasi API?

Saya tidak akan mengatakan bahwa itu diperlukan tetapi memang demikian

keterampilan yang sangat diinginkan

imNSho.

Saya menghabiskan beberapa bulan terakhir mengkodekan dalam kolaborasi yang erat dengan orang yang tahu API terasa lebih baik daripada saya. Dia jauh lebih produktif - hanya karena dia bisa melewati pemeriksaan API docs yang mengganggu saya.


Di sini, saya berbicara tentang kelancaran. Tentang menjadi tidak hanya mampu melakukan sesuatu tetapi juga lancar.

Apakah Anda tahu apa artinya fasih? Ini ketika seseorang melihat Anda, seolah-olah Anda menulis kode saat Anda mengetik ...

  • ... Seolah kode yang tepat mengalir dari jari Anda ke layar. Seolah Anda tidak memeriksa API dokumentasi, tutorial, dan manual. Sebenarnya, Anda lakukan memeriksa mereka semua, tapi itu tidak terlihat karena itu semua di kepala Anda. Anda memiliki semua pengetahuan yang Anda butuhkan di otak Anda - diisi, diisi, dan siap digunakan.

... Itu pengetahuan yang fasih. Itu ketika Anda membutuhkan satu menit untuk melakukan apa yang dibutuhkan seorang pemula satu jam. Ini sepadan dengan usaha, sungguh. Baunya seperti kemenangan.

Jika Anda menguasai kefasihan dalam beberapa API dan jika Anda benar menghafal bagaimana rasanya seperti, memori ini lebih lanjut akan memandu Anda melalui bagaimana untuk menjadi kerja yang paling produktif dengan setiap API lainnya.

agas
sumber
Saya tidak berpikir pertanyaannya adalah apakah pada akhirnya Anda harus mengetahui dokumentasinya, tetapi apakah Anda harus menghafal dokumentasi seolah-olah untuk ujian.
Rei Miyasaka
@ReiMiyasaka dengan baik jika Anda melewati ujian sambil merengek-rengek Anda mungkin memperhatikan ini: "Jadi, pertanyaan saya adalah: Apakah benar-benar penting untuk dapat membuat kode tanpa cacat tanpa dokumentasi API? Haruskah saya mengembangkan keterampilan ini? Apakah benar-benar penting di dunia nyata dan di lingkungan kerja? " . Saya fokus pada bagian dari pertanyaan ini karena, Anda lihat, pengalaman saya baru-baru ini membuat saya merasa sangat tidak nyaman dengan gagasan bahwa ia hanya dapat terbang dengan jawaban sederhana yang tidak diperlukan . Cukup adil?
nyamuk
2
+1 untuk menutupi biaya pengalihan konteks ke dokumen referensi. Harus melihat setiap langkah memperlambat segala sesuatu hingga merangkak.
Wyatt Barnett
8

Tidak. Saya akan mati tanpa kemampuan untuk melihat dari dokumentasi API. Satu-satunya waktu saya tidak memilikinya adalah ketika saya mencoba men-debug sesuatu di mana saya tidak bisa mendapatkan akses ke dokumentasi. Lalu aku "merekayasa balik" api dan potong-n-tempel seperlunya.

Sangat penting untuk memiliki gagasan yang baik tentang apa itu API dan bagian mana yang paling baik digunakan, tetapi mengetahui nama metode, nama variabel ... tidak benar-benar diperlukan.

Paul
sumber
3

Dalam pekerjaan saya tidak pernah mengalami situasi di mana saya tidak memiliki akses ke dokumentasi. Di sisi lain, memiliki pemahaman bacaan dan pemahaman umum untuk dapat menafsirkan dokumentasi yang ditulis dengan buruk akan berguna sepanjang waktu.

Anda pada akhirnya harus mengetahui pola dan struktur API Anda, tetapi tahu persis di mana semuanya tidak terlalu berguna.

Di SFU Computing Science, ujian tertutup merupakan 70% hingga 100% dari nilai kami. Teorinya adalah bahwa ujian menguji pemahaman Anda tentang materi pelajaran dan kemampuan beradaptasi Anda. Pada kenyataannya, semua yang benar-benar diuji adalah saraf Anda, kualitas / durasi tidur Anda, kecerdasan Anda, dan teknik menghafal Anda - tidak ada yang diperlukan baik secara akademis atau untuk pekerjaan biasa di industri perangkat lunak.

Rei Miyasaka
sumber
2

Untuk semua kecuali pertanyaan terakhir Anda: Pengetahuan ensiklopedia tentang dokumentasi API apa pun tidak penting. Anda jelas akan memprogram lebih cepat jika Anda tahu setiap detail dari setiap metode setiap kelas, tetapi itu bukan harapan yang masuk akal.

Untuk pertanyaan terakhir Anda: Anda mungkin diharapkan mengetahui spesifikasi beberapa kelas tanpa dokumentasi API. Jika Anda tahu sebelum berjalan ke wawancara bahwa Anda akan diuji, atau jika pekerjaan itu sangat fokus (yaitu: Anda akan melakukan threading sepanjang hari), maka Anda bisa berharap untuk perlu mengetahui kelas terkait secara rinci.


Tambahan: Anda harus mengklarifikasi jauh sebelum ujian dengan profesor / instruktur Anda dengan tepat bahan apa yang akan diberikan dan bahan apa yang dapat Anda bawa sendiri. Asumsikan bahwa apa pun yang mereka tidak setujui secara eksplisit tidak diizinkan. Saya sudah memiliki kursus di mana saya hanya bisa membawa dasar-dasar untuk menulis, di mana saya bisa membawa buku yang saya inginkan, dan di mana saya bisa membawa tepat satu lembar dua sisi dengan apa pun yang saya inginkan di atasnya. Ujian biasanya disusun berdasarkan materi apa yang diizinkan.

Mat
sumber
2

API API! = Sintaks bahasa.

Saya bisa mengerti ketika seseorang tidak tahu nama pasti dari berbagai kelas Java dan metode mereka. Saya tidak tahu mereka dan saya kode di Jawa setiap hari. Saya akan hilang tanpa dokumen atau penyelesaian otomatis IDE yang luar biasa - terutama ketika datang ke API standar Java yang terkenal dengan verbositasnya dalam nama variabel / kelas / metode.

Namun, seperti yang Anda katakan sendiri, bukan apa pun yang biasanya ditemukan dalam dokumen yang tidak dapat Anda ingat. Ini adalah sintaks untuk kelas dalam - ini adalah fitur bahasa itu sendiri bukan sesuatu yang harus dihafal dari dokumen.

Sebanyak yang saya pikir siswa harus (dalam banyak kasus) diizinkan untuk menggunakan dokumen untuk API standar, saya berpikir bahwa siapa pun yang ingin lulus ujian pemrograman harus mengetahui sintaksis bahasa. Dan saya tidak bermaksud beberapa kasus aneh yang hanya diketahui oleh perancang bahasa, hanya yang standar - seperti yang ada dalam contoh Anda.

Goran Jovic
sumber
2
Saya tidak berpikir itu layak menghafal sintaks juga. Fitur dan pola dan gotcha, ya, tapi sintaks, tidak. Saya bekerja dengan terlalu banyak bahasa sehingga tidak bermakna, dan saya pikir itu juga berlaku bagi sebagian besar pengembang.
Rei Miyasaka
@ReiMiyasaka: Saya tidak berpikir Anda harus menghafal seluruh spesifikasi bahasa, tetapi Anda harus tahu sintaks dasarnya setiap saat. Apakah Anda melihat dalam dokumen cara menulis loop dalam salah satu bahasa Anda? Atau apakah Anda hanya kode itu?
Goran Jovic
Sebenarnya saya bekerja dengan sejumlah bahasa, dan saya sering lupa sintaks yang tepat bahkan untuk hal-hal dasar !! Jadi saya menemukan diri saya selalu perlu merujuk ke dokumen.
Antonio2011a
@ Antonio2011a: Saya akui saya melakukannya sendiri, terutama ketika saya menggunakan bahasa yang kurang umum. Tetapi bagi banyak siswa bahasa yang dipelajari adalah bahasa pemrograman pertama yang pernah ada. Jika seorang siswa bahkan tidak belajar sintaksis maka itu tidak mengatakan sesuatu yang baik tentang bagaimana dia mempersiapkan ujian.
Goran Jovic
@ Goran Sebenarnya saya tidak perlu, karena dua alasan: 1. kompilasi latar belakang memberitahu saya ketika saya salah sintaks, dan 2. loop adalah sekunder (hampir tidak ada) dalam bahasa seperti Haskell dan ML. Bahasa lebih beragam daripada yang Anda kira. Meskipun saya menghabiskan sebagian besar waktu saya coding dalam F # dan hanya samar-samar mengingat Haskell, saya masih dapat memahami kode Haskell dengan baik, mengingat untuk mencatat perbedaan semantik. Di sisi lain saya setuju bahwa belajar bahasa pertama dalam-luar sangat penting dan terlalu sering diabaikan.
Rei Miyasaka
2

Di Eclipse Anda dapat menulis obj.dan menekan ctrl + spasi dan itu akan mencoba untuk melengkapi otomatis dengan memberikan Anda semua opsi metode untuk objek yang diberikan. Jika itu gagal saya karena beberapa alasan Java API memiliki sisa jawaban. Saya akan kesulitan mengingat hari ketika saya tidak Google bagaimana melakukan sesuatu.

Sekolah adalah cerita yang sangat berbeda.

Stephanie
sumber
2

IMHO, akademisi biasanya bau dalam menghasilkan insinyur perangkat lunak yang baik. Hanya orang-orang yang memberi kode untuk bersenang-senang setelah pelajaran memiliki kesempatan untuk mencapai sesuatu dalam proyek dunia nyata.

Kemudian lagi, akademisi bukan tentang menghasilkan pengembang, seluruh dunia adalah tentang bagaimana menyelesaikan masalah abstrak dan melakukan penelitian. Sangat jauh dari aplikasi praktis sebagian besar waktu. Dan peneliti belum tentu merupakan coders yang baik.

Dan belajar API dengan hati busuk. Ada autocomplete / google / msdn / javadocs untuk mencari semua celah dan celah, mengapa ada yang ingin menyimpan semua itu di otak mereka setiap saat? Sebagian besar fungsi umum yang akan Anda pelajari dalam beberapa minggu / bulan, semua yang lain dapat dilihat dalam hitungan detik jika Anda mengetahui sintaksis, struktur, dan ide-ide umum.

Kemudian lagi, beberapa orang masih kode dalam editor teks dan mengingat nama fungsi dengan hati, itu tidak selalu salah, tetapi jika mereka fanatik tentang hal itu, Anda dapat profesor Anda.

Selain itu, bahkan jika Anda mengetahui nama fungsi dan parameter dengan hati, masih merupakan ide bagus untuk memverifikasinya di API API terbaru. strtok baik-baik saja dalam skenario berulir tunggal 10 tahun yang lalu, saat ini tidak baik. Jika Anda hanya mempelajari nama dan parameternya, Anda tidak akan pernah tahu bahwa fungsionalitasnya mungkin sudah usang atau alternatif yang lebih baik ditemukan.

Bahasa berubah, jadi Anda harus berubah dengan mereka, mengingat satu cara yang benar tidak baik untuk itu.

Coder
sumber
1

jika Anda mulai mengerjakan beberapa proyek untuk waktu yang tidak singkat menggunakan api cepat atau lambat Anda akan belajar api itu dengan sangat baik. saya percaya ini benar-benar keterampilan yang tidak perlu karena saya tidak tahu siapa pun yang tidak pernah melihat dokumentasi apa pun (msdn, halaman manual, dll ...)

namun universitas adalah dunia yang sama sekali berbeda, jadi jangan kaget jika Anda gagal karena Anda tidak tahu nama pengetik parameter 10.th dari CreateWindowEx, misalnya.

Hayri Uğur Koltuk
sumber
Tidak konsisten dengan pengalaman saya di universitas. Jika ada, mereka cenderung terobsesi dengan teori dan kurang memperhatikan detail. Atau sudahkah levelnya turun ke sekolah kejuruan?
Pemrogram
Saya tidak berbicara tentang satu universitas, dan ini hanyalah contoh dari apa yang Anda lihat di suatu tempat di dunia di beberapa universitas. seperti yang Anda tahu, semuanya tidak sama
Hayri Uğur Koltuk
2
Universitas selalu memiliki beberapa tingkat menghafal dan memuntahkan. Saya harus mengakses kalkulus jika saya memiliki buku CRC yang tersedia daripada harus menghafal tabel integral.
Blrfl
1

Saya akan mengatakan, tidak itu tidak diperlukan, secara fisik tidak mungkin bagi otak manusia untuk menghafal begitu banyak informasi, tetapi Anda masih perlu mengetahui dasar-dasar atau hal-hal yang paling sering digunakan, karena tidak banyak dari mereka yang menghafal. . Kalau tidak, tidak mungkin untuk mengingat semua yang ada di java.

Juga tidak adil bagi seorang guru untuk menginginkan murid-muridnya mengetahui segalanya, atau menggunakannya untuk mengetahui apakah mereka memprogram dengan bahasa, selain latihan atau proyek yang ditugaskannya kepada Anda. Bagi saya rasanya ingin tahu apa yang Anda lakukan ketika Anda tidak bersekolah atau melakukan pekerjaan terkait.

EDIT: Jelas, apa yang diminta guru kepada Anda tergantung padanya, beberapa guru lebih menghargai teori sementara yang lain menghargai praktik dan tidak peduli jika Anda tidak memahami segalanya.

Coyote21
sumber