API dokümantasyonu olmadan programlamak gerçekten gerekli bir beceri mi? [kapalı]


22

Bugün Java programlama sınavımı zorla geçtim. İyi yaptığım diş açma ile ilgili bazı genel soruları yanıtlamak ve daha kötü olan küçük bir iş parçacığı programı yazmak zorunda kaldım. Dizüstü bilgisayarımı projektör ekranına bağlamak ve programı hemen yazmak zorunda kaldım. İlk girişimim anonim sınıfları kullanmaktı ancak tam sözdizimini unuttum. Belki bazı heyecanlardan dolayı veya belki de son iki haftadan beri çoğunlukla php kodluyordum. Sonra sordum API belgelerini kullanmasına izin veriliyor. Cevap "HAYIR" idi. Bu yüzden başka bir yoldan gitmeye karar verdim ve Runnable'ı uyguladım. Program sonunda istenenleri yapıyordu. Elbette, sınav görevlileri ilk başarısızlığımı fark ettiler ve bu da skorumu çok etkiledi. API belgelerinin kullanılmasına izin verilmediğine şaşırdım.

Öyleyse sorum şu: API belgeleri olmadan kusursuzca kodlama yapabilmek gerçekten önemli mi? Bu beceriyi geliştirmeli miyim? Gerçek dünyada ve iş ortamında gerçekten önemli mi? Programlama derslerinde, öğrenme kalıpları, iyi tasarım uygulamaları yazma becerileri, API kullanma becerileri ve gerekli bilgileri hızlıca bulma becerilerine odaklandım. API dokümantasyonu olmadan programlamayı öğrenmeye çalışmıyordum. İş görüşmeleri sırasında sahip olması gereken (API belgeleri olmadan kodlama)?


2
Bence özellikle API referansları olmak üzere belgeler hakkında sorular soruyor .

3
@bancer - Yerel java sınıflarını kullanamamak hiçbir anlam ifade etmiyor. Sınava hazırlanmamış gibisin.
Ramhound

27
Gerçek dünyada dokümantasyona her zaman erişebileceksiniz. Korkunç bir hafızam var ve başvurumun genel mantığına odaklanmaya çalışıyorum ve zihnimi kolayca aranabilecek şeylerin anlamsız ezberlenmesiyle doldurmaktan kaçının. Ne yazık ki akademik dünya (ve sertifikasyon dünyası) biraz farklıdır ve genellikle anlamsız ezbere vurgu yapılır. Lisans eğitimim çoğunlukla matematik ve fizik derslerinde yapıldı, ancak birçok formülü vb. Ezberlemek zorunda kaldığımı hatırlıyorum. Ne kadar zaman kaybı.
Antonio2011a

11
@ Antonio2011a - Kullandığınız dilin API'sini bilmek "anlamsız ezberleme" DEĞİLDİR. API'yi ne kadar iyi tanırsanız, o kadar iyi programlayabilirsiniz, çünkü çözümünüz için uygun sınıfları ve yöntemleri seçeceksiniz. Var olduklarını bilmiyorsanız, onları seçemezsiniz. Tabii ki, hiç kimse Java API'sini bilmiyor; o çok büyük. Fakat yönetebildiğiniz kadarını bilmek her zaman iyidir.
Dawood, Monica

9
@DavidWallace Belki de net değildim. Tabii ki API ile aşina olmanıza gerek olmadığını söylemiyorum !! Sadece sınıfların, metotların, parametrelerin sırasının ve diğer akıl uyuşturma detaylarının isimlerini ezberlemenize gerek yok! Gerçekten bilmeniz gereken tek şey, onun var olduğu ve ne kadar yararlı olduğu. Kodlama sırasında ayrıntılara bakabilirsiniz. Söylediğim gibi, hafızam korkunç ve dürüst olmak gerekirse bir saat önce bir sınıf kullanabilirdim ve bana boş bir kağıt verirsem, tam ayrıntıları hatırlayamam.
Antonio2011a

Yanıtlar:


39

Real Life ™ 'de, bu beceriyi "sahip olmak güzel" olarak değerlendirirdim, fakat hiç de gerekli değil. Bununla birlikte, bir üniversite ortamında bu farklıdır.

Dokümantasyon olmadan kodlama yeteneği , öğrencinin konuya aşina olduğunun dolaylı bir göstergesi olarak kullanılabilir . Bir anlamda, belgelere dokunmadan bir şeyi kodladığınızı görmek, profesöre daha önce API kullanarak pratik yaptığınızı, ödevlerinizi ve diğer ödevlerinizi yaparak veya belki de kendi başınıza eğlenmek için programlama yaparak söyler. Söz konusu API üstünkörü anlayışı ile akıllı kişi gerekirNeredeyse tüm Java API'lerini kendi belgelerine bakarak çözebilirsiniz. Bu bir tesadüf değildir: programcıların genellikle iş hakkında bilgi alması beklenir ve Java dahil olmak üzere popüler programlama sistemleri için API dokümantasyonu, programcıların hızlı bir şekilde öğrenmelerine yardımcı olmak için yapılandırılmıştır. Belgelendirme, kavramı kısa ve özlü bir şekilde gösteren, genellikle kısa ve bağımsız örnekler sunar.

Bu, doğrudan profesörün konuyla ilgili bilginizi ölçme hedefine karşı çalışır (ne kadar akıllı olduğunuzu ölçmenin aksine). Bu nedenle, belgelere bakmadan size kod sormanız makul değildir.

NOT: Bu cevabı, sorunun düzenlemesine cevaben değiştirdim.


2
Okumamdan itibaren, denetçiler API belgelerini ezberleyebilme yeteneğine bakıyorlardı. Ne yapılacağını biliyordu, sadece sözdizimini hatırlamıyordu.
Paul

@Paul Düzenlemeleri okudum ve cevabımı değiştirdim. OP'nin tamamen farklı bir şey sorduğunu sanıyordum. Teşekkürler!
dasblinkenlight

2
Burada asıl konuyu tanımlamak için +1. Eğer bir iş görüşmesi olsaydı, görüşmeci bir problemi nasıl çözeceğinizle daha fazla ilgilenir ve muhtemelen en iyi sözdizimi yaklaşımınızı beyaz tahtaya yazmanıza izin verilirdi. Son üç ayını belirli materyalleri öğrenmek için harcadığınızda ve söz konusu materyal üzerinde test edildiğinde, "açık İnternet" politikasına sahip olmamanız makul olacaktır.
StriplingWarrior

@ Paul: haklısın
bancer

21

Bir zamanlar kodunda küçük bir hata yapan bir adam vardı, bu yüzden StackOverflow'a götürdü ve yardım istedi. StackOverflow: Java (tekrarı olmayan sayılar üretiyor) . Koduna baktım ve kendisine HashSet'in sürekli olarak değerlerle dolu olduğunu, ancak hiçbir zaman temizlenemediğini belirttim. O da bana sordu: "nasıl temizlersiniz?" İtiraf etmeliyim ki verdiğim cevaptan gurur duymadım.

Her gün kullandığınız temel şeyleri kesinlikle bilmeniz gerekir. Hepsini tanımanız ve onları iyi tanımanız gerekir. Ama sadece temel şeyler.

Her şey için önemli olan, orada istediğinizi yapan bir şey olduğunu bilmek. Tam olarak hangi sınıfa ihtiyacınız var, tam olarak hangi yöntemi çağırmanız gerekiyor ve tam olarak hangi parametrelere geçmeniz gerekiyor, beyninizin değerli nöronlarını meşgul etmek zorunda kalmayacağınız bir şey. Bunun için belgeler var ve bu yüzden otomatik tamamlama özelliğine sahip IDE'ler icat edildi. Eğer itme kıpırdamaya başlarsa, daima StackOverflow ve orada büyük interwebz olur.

Programcılardan kalp API'leri ile tanımalarını istemek, avukatlardan yasal kuralları ve emsalleri yürekten tanımalarını istemektedir. Anlamsız. Boşlukta bir egzersiz.


+1: Java büyüklüğü gibi büyük bir kütüphanenin tüm API'sini, sadece büyüklüğü nedeniyle öğrenmek inanılmaz derecede zor. Ve bazı çekirdek tesisleri (örn javax.imageio şimdiye kullandım değil, gelişmiş görüntü işleme sağlar) rağmen genel yetenekleri paketleri tarafından sağlanmaktadır bilerek kolaydır olmalıdır öğrenilebilir. Özellikle, java.lang ve java.util, hemen hemen her Java programında kullanılacak.
Donal Fellows,

9

API dokümantasyonu olmadan programlamak gerçekten gerekli bir beceri mi?

Gerekli olduğunu söyleyemem ama öyle

çok arzulanan beceri

imNSho.

API'yi benden belirgin şekilde daha iyi bilen biriyle yakın işbirliği yaparak son birkaç ayımı harcadım. Sadece çok daha üretken - sadece beni rahatsız eden API dokümanlarını kontrol etmeyi atladığı için .


Burada akıcılıktan bahsediyorum. Sadece akıcı bir şey yapma yeteneğine sahip değil .

Akıcı olmanın ne olduğunu biliyor musun? Sana bakan birisi için yazdığın gibi kod yazıyormuşsun gibi ...

  • ... Sanki doğru kod parmaklarınızdan ekrana akıyor. API belgelerini, dersleri ve kılavuzları kontrol etmiyormuşsunuz gibi. Aslında, bunu hepsini kontrol, ama kafanın içinde oldugu için görünmez. İhtiyacınız olan tüm bilgiyi beyninizde bulabilirsiniz - şarjlı, dolu ve kullanıma hazır.

... Bu akıcı bilgidir. Bir saatte acemi çekeni yapmak için bir dakikanızı alırken. Gerçekten çabaya değer. Zafer gibi kokuyor.

Bazı API'de akıcılık konusunda ustalaşırsanız ve nasıl hissettiğini doğru bir şekilde ezberlerseniz, bu bellek, başka bir API ile en verimli şekilde nasıl çalışacağınız konusunda size rehberlik edecektir .


Onun soru sonunda gerekip gerekmediğine olduğunu sanmıyorum biliyorum belgeleri, ama olsun veya olmasın Sınavlara sanki belgelerine ezberlemek gerekir.
Rei Miyasaka,

@ReiMiyasaka, eğer ayrıntılı bir sınavı atlarsanız, şunu fark edebilirsiniz: “Öyleyse sorum şu: API belgesi olmadan kusursuzca kod yazabilmek gerçekten önemli mi? Bu beceriyi geliştirmeli miyim? Gerçek dünyada gerçekten önemli mi? ve çalışma ortamında? " . Sorunun bu kısmına odaklandım, çünkü görüyorsunuz, son deneyimlerim, gerekli olmadığı temel cevapla uçabileceği fikri konusunda beni oldukça rahatsız etti . Yeterince adil?
tatarcık

2
Referans belgelere geçme bağlamının maliyetini karşılamak için +1. Her adıma bakmak zorunda olmak, işleri sürünmeye yavaşlatır.
Wyatt Barnett

8

Hayır. API belgelerine bakmadan ölmüş olurdum. Sahip olmadığım tek zaman, belgelere erişemediğim bir yerde hata ayıklamaya çalıştığım zamandı. Sonra "api" tersine mühendislik yapıyorum "ve gerektiğinde kesilmiş parçaları yapıştırıyorum.

API'nin ne hakkında olduğu ve hangi kısmın kullanılacağı konusunda iyi bir fikre sahip olmak önemlidir, ancak yöntem adlarını, değişken adlarını bilmek ... gerçekten gerekli değildir.


3

İş yerinde, hiçbir zaman belgelere erişemediğim bir durum olmadı. Öte yandan, zayıf yazılı belgeleri yorumlayabilmek için okuduğunu anlama ve genel bir anlayışa sahip olmak her zaman yararlı olmaktadır.

Sonunda API'lerin kalıplarını ve yapısını tanımalısınız, ancak tam olarak her şeyin özellikle yararlı olmadığını bilmek gerekir.

SFU Hesaplama Bilimi'nde kapalı kitap sınavları notlarımızın% 70 ile% 100'ünü oluşturur. Teori, sınavların ders materyali hakkındaki anlayışınızı ve uyarlanabilirliğinizi test etmesidir. Gerçekte, gerçekte test ettiği tek şey sinirleriniz, uyku kaliteniz / süreniz, zekanız ve ezber ezberleme tekniklerinizdir - bunların hiçbiri akademik olarak ya da yazılım endüstrisinde tipik bir iş için gerekli değildir.


2

Son sorunuz dışında herkes için: Herhangi bir API belgelendirme hakkında ansiklopedik bilgi önemli değildir. Her sınıfın her yönteminin her bir detayını biliyorsanız, daha hızlı bir şekilde programlayacaksınız, ancak bu makul bir beklenti değil.

Son sorunuza göre: API dokümantasyonu olmadan bazı sınıfların özelliklerini bilmeniz beklenebilir. Mülakatınıza girmeden önce test edileceğinizi biliyorsanız veya iş çok odaklandıysa (yani: tüm gün iş başlayacaksınız), ilgili sınıfları ayrıntılı olarak bilmeniz gerekebilir.


Zeyilname: Profesörünüz / eğitmeninizle herhangi bir sınavdan önce tam olarak hangi malzemeleri sağlayacağınızı ve hangi malzemeleri kendiniz getirebileceğinizi netleştirmelisiniz. Açıkça kabul etmedikleri hiçbir şeye izin verilmediğini varsayalım. Yazmak için temel bilgileri getirebileceğim, dilediğim kitapları getirebileceğim ve istediğim her şeyi içeren tek bir çift taraflı sayfa getirebileceğim kurslar aldım. Sınavlar genellikle hangi malzemelere izin verildiğine göre yapılır.


2

API docs! = Dil sözdizimi.

Birisi çeşitli Java sınıflarının isimlerini ve yöntemlerini bilmediğinde anlayabilirim. Onları tanımıyorum ve her gün Java kodluyorum. Dokümanlar veya yüce IDE otomatik tamamlama olmadan kaybolacaktım - özellikle değişken / sınıf / yöntem adlarındaki ayrıntılarıyla bilinen Java standart API'sine gelince.

Ancak, kendin dediğin gibi, doktorlarda genellikle hatırlayamadığın bir şey değil. Bu, iç sınıfların sözdizimidir - bu, dilin kendisinin dokümanlardan ezberlenmesi gereken bir özelliği değildir.

Öğrencilerin (çoğu durumda) standart API'ler için dokümanları kullanmasına izin verilmesi gerektiğini düşündüğüm kadarıyla, bir programlama sınavını geçmek isteyen herkesin dil sözdizimini bilmesi gerektiğini düşünüyorum. Ve sadece dil tasarımcılarının bildiği, sadece standart olanları - örneğin örneğindeki gibi - bazı garip vakaları kastetmiyorum.


2
Ben de sözdizimini ezberlemeye değeceğini sanmıyorum. Özellikler ve modeller ve gotchas, evet, fakat sözdizimi, hayır. Anlamlı olması için çok fazla dille çalışıyorum ve bunun çoğu geliştirici için de doğru olduğunu düşünüyorum.
Rei Miyasaka

@ReiMiyasaka: Tüm dil özelliklerini ezberlemeniz gerektiğini düşünmüyorum, ancak temel sözdizimini her an bilmelisiniz. Herhangi bir dilde nasıl bir döngü yazılacağını dokümanlar içinde arar mısın? Yoksa sadece kod mu?
Goran Joviç

Aslında çok sayıda dille çalışıyorum ve çoğu zaman temel şeyler için bile tam sözdizimini unutuyorum !! Bu yüzden kendimi her zaman dokümanlar için yönlendirmeye ihtiyaç duyuyorum.
Antonio2011a

@ Antonio2011a: Özellikle daha az yaygın diller kullanırken bunu kendim yaptığımı itiraf ediyorum. Ancak birçok öğrenci için öğrenilen dil, şimdiye kadarki ilk programlama dilidir. Bir öğrenci sözdizimini bile öğrenmediyse, sınava nasıl hazırlandığı konusunda iyi bir şey söylemiyor.
Goran Joviç

@ Goran Aslında iki nedenden dolayı ille de istemem: 1. arkaplan derleme sözdizimi yanlış aldığımda bana söyler ve 2. döngüler Haskell ve ML gibi dillerde ikincildir (neredeyse yoktur). Diller düşündüğünüzden daha çeşitlidir. Zamanımın çoğunu F # 'da kodlayarak geçirdiğim halde Haskell'i sadece belli belirsiz hatırlıyorum, yine de anlambilimsel farklılıkları not almayı hatırladığımı hala Haskell kodunu anlayabiliyorum. Öte yandan, içten dışa bir ilk dil öğrenmenin son derece önemli ve çok sıklıkla ihmal edildiğine katılıyorum .
Rei Miyasaka

2

Eclipse'de obj.ctrl + space tuşlarına basabilir ve yazabilirsiniz ve size verilen nesne için tüm metod seçeneklerini vererek otomatik olarak tamamlamaya çalışacaktır. Bu beni nedense başarısız olursa Java API cevapların geri kalanına sahiptir. Bir şeyi Google’a yapmadığım bir gün hakkında düşünmeye zorlandım.

Okul olsa tamamen farklı bir hikaye.


2

IMHO, akademi genellikle iyi yazılım mühendisleri üretme kokuyor. Sadece derslerden sonra eğlenceyi kodlayan insanlar gerçek dünya projelerinde bir şeyler başarma şansına sahipler.

O zaman yine, akademi geliştiricileri üretmekle ilgili değil, bütün dünya soyut problemleri çözüp araştırma yapmakla ilgili. Çoğu zaman pratik uygulamalardan çok uzaktır. Ve araştırmacılar mutlaka iyi bir kodlayıcı değildir.

Ve kalp kokusuyla API öğrenme. Tüm kuytulara ve kızılcıklara bakmak için otomatik tamamlama / google / msdn / javadocs var, neden herkes bunları beyninde her zaman tutmak istiyor? Birkaç hafta / ay içerisinde öğreneceğiniz en yaygın işlevler, sözdizimi, yapı ve genel fikirleri biliyorsanız birkaç saniye içinde her şey aranabilir.

Sonra yine, bazı insanlar hala metin editörlerinde kod yazıyor ve işlev isimlerini ezbere hatırlıyorlar, bu mutlaka yanlıştır, ancak bu konuda fanatiklerseniz, profesörünüz elinizde olur.

Ayrıca, fonksiyon adlarını ve parametrelerini kalpten bilseniz bile, en son API dokümantasyonunda bunları doğrulamak iyi bir fikirdir. strtok 10 yıl önce tek dişli senaryoda iyiydi, bugünlerde pek iyi değil. Sadece isimleri ve parametreleri öğrenirseniz, işlevselliğin kullanımdan kaldırılabileceğini veya daha iyi alternatiflerin icat edilebileceğini asla bilemezsiniz.

Diller değişiyor, onlarla birlikte değişmelisin, gerçek bir yolu hatırlamak bunun için iyi değil.


1

Eğer bir projeyi erken veya daha kısa bir süre için bir api kullanarak er ya da geç kullanmaya başlarsanız, o apiyi çok iyi öğreneceksiniz. Bunun tamamen gereksiz bir beceri olduğuna inanıyorum, çünkü hiçbir zaman hiçbir belgeye bakamayan hiç kimseyi tanımıyorum (msdn, man sayfaları, vb.)

Ancak, üniversiteler tamamen farklı bir evrendir, bu nedenle, eğer başarısız olursanız şaşırmayın, örneğin, CreateWindowEx'in 10. parametresinin typedef adını bilmiyorsunuz.


Üniversitelerdeki tecrübemle tutarlı değil. Eğer bir şey olursa, teoriye saplantılı olma eğilimindeydiler ve detaylara dikkat etmediler. Yoksa seviye meslek okullarından birine düştü mü?
AProgrammer

Bir üniversiteden bahsetmiyorum ve bu sadece dünyanın herhangi bir yerinde bir üniversitede görebileceklerinizin bir örneği. bildiğiniz gibi hepsi aynı değil
Hayri Uğur Koltuk

2
Üniversiteler her zaman bir dereceye kadar ezberlemiş ve yetersiz kalmıştır. İntegral tabloları ezberlemek yerine bir CRC kitabım olsaydı, matematik dersim olurdu.
Blrfl

1

Hayır, gerek yok, insan beyninin bu kadar çok bilgiyi ezberlemesinin fiziksel olarak imkansız olduğunu söyleyebilirim, ama hala ezberlemek için çok fazla şey olmadığı için temelleri veya en çok kullanılan şeyleri bilmeniz gerekir. . Aksi takdirde, java'da olan her şeyi ezberlemek imkansızdır.

Ayrıca bir öğretmenin, öğrencilerine her şeyi bilmesini istemek ya da size atadığı alıştırmalar veya projeler dışında, bir dille program yapıp yapmadıklarını bilmek de haksızlıktır. Benim için, okulda değilken veya ilgili işler yaparken ne yaptığınızı bilmek gibi bir şey.

EDIT: Açıkçası, öğretmenin size soracağı şey ona bağlı, bazı öğretmenler teoriye daha fazla değer verirken, diğerleri uygulamaya değer veriyor ve her şeyi anlamıyorsanız umursamıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.