Neden CS ezberlenmeli? [kapalı]


23

Geçtiğimiz yıl lisede Gelişmiş Yerleştirme Bilgisayar Bilimi bölümünden mezun oldum. Biz basitçe öğretilir sanki görünüyor hepsini hatırlayabilirsiniz kodu ve işlevleri ve değil nasıl gibi dokümantasyon ve kullanmada becerikli ve verimli olmasını.

Pratik olarak, birçok (hepsi olmasa da) programlama işlerinin dökümanları gözden geçirmenize, geçmiş kodları ve diğerlerinin kodlarını gözden geçirmenize, aslında öğretmenimin "hile yapmayı" düşündüğü şeyi yapmasına izin vereceğini hayal ediyorum.

Temel kavramların ezberlemek için gerekli olduğu konusunda hemfikir olmama rağmen (herhangi bir konuda), özellikle pratik olarak bir derleyici, hata ayıklayıcı, referans alacağınız bir CS dersi için bir yazılı ve yazılı sınavı vermem gereksiz ve pratik görünmüyor. Herhangi bir gerçek dünyada çalışma durumunda kılavuzlar ve internetin tamamı .

CS, neden belgelerin nasıl kullanılacağı ve yorumlanacağı, örnek kodun, hata ayıklayıcısının ve bu bilgilerin nasıl yorumlanacağı gibi yararlı becerilerin öğretilmesinin aksine kodun ve işlevlerinin ezberlenmesine odaklanır ?


34
CS kod ve fonksiyonların hafızaya alınması ile ilgili değildir. Nerede CS okuyorsun? Asıl problemi, attığınız kursun saçmalık olduğunu söyleyebilir miyim?
Andres F.

1
@AndresF. OP, lise öğrencilerine (üniversite öncesi) verilen bir kurs olan İleri Yerleştirme Bilgisayar Bilimi alanındadır.

3
@GlennNelson Oops! Bunu yanlış anladım. Tamam, bu durumda: esqew : Üniversite düzeyinde, CS'nin (çoğunlukla) kodun ezberlenmesi ile ilgili olmadığını bilmek rahatlayacaktır. Olsa da, pek çok şey okumak zorunda kalacaksınız;) Bir CS eğitimi mutlaka bir iş bulma konusunda da zorunlu değildir (eğer düşünüyorsanız, muhtemelen hayal kırıklığına uğrayacaksınız)
Andres F.

1
Kolejlerin çoğunda bu şekilde olmadığını bilmelisin. Okulumda, her bir bilgisayar bilimi testi açık notlar / açık kitap oldu.
Casey Patton

2
Bu sorunun cevabının bir kısmının CS'nin bir programlama derecesi olmadığını unutmayın . Bir CS sınıfından programlama öğrenmeyi beklemeyin. Bir programcı için geçerli olan her türlü temel teori ve kavramları öğrenmeyi bekleyin . Ve tabii, birkaç programlama dilleri öğreneceksiniz ve temel programlama biraz öğretilmelidir, ama esas, asıl programlama onlar alırsınız varsayıyorum şeydir tüm CS şeyler odaklanmak böylece başka bir yol değil, etrafında.
jalf,

Yanıtlar:


37

Lisede, ustalığa giden yolun en temel seviyesindesin. Sınıfınızda yer alan şeyler, profesyonel bir programcının soğuk algılaması beklenen türden şeylerdir. Birçok yönden, bu sizin "zaman tablolarınızı" öğrenmeye benzer. Elbette, her zaman bir "gerçek dünya" ayarında bir hesap makinesi yakalayabileceksiniz, ancak bu ezberleme sadece daha karmaşık görevlerde hızınızı arttırmakla kalmıyor, aynı zamanda temel prensiplerin daha kapsamlı bir şekilde anlaşılmasını da sağlıyor.

Örneğin, çeşitli sıralama algoritmaları, nasıl uygulandıkları, nasıl çalıştıkları, en iyi kullanıldıkları zaman ve ne zaman kullanmamaları gerektiğini bilmelisiniz. Bu her zaman aranabilirdi, ama olması gerekmemeli - bir matematikçiden 6 kez 8 kez bakmak zorunda kalmamalı.


9
Sıralama algoritmalarının temel doğasını bilmelisiniz, ancak bir baloncuk türünden başka bir şey yazmamdan bu yana 15 yıl geçti. (Çok küçük N için bu bazen daha iyi bir cevaptır.)
Loren Pechtel

1
Keşke tüm Bilgisayar Bilimleri derslerinin bu kadar iyi olduğunu söyleyebilseydim. Lisemde java'nın temel sözdizimini öğrettiler ... Tüm yıl boyunca. Sınıfın çoğu, Bubble sort ile Dijkstra'nın algoritması arasındaki farkı bile açıklayamadığında “programcı” olmaktan ötürü övünmeyi bıraktı.
Daniel Gratzer

2
Örnek olarak, bir sözlükteki herhangi bir kelimeyi araştırabileceğinize göre, teorik olarak bu makaleyi meantone ile anlayabilmelisiniz . Ancak beyinlerimiz yalnızca sınırlı sayıda iç içe geçmiş kavrayışla ilgilenmektedir.
Benjol

1
Sürprizleri hatırlamak benim zaman tablolarımı kesinlikle hiçbir işe yaramaz hale getirdi. Ortalama bir yazılım mühendisi sıralama algoritmaları uygulamak için ne kadar zaman harcıyor? Oh bekleyin- muhtemelen 0 . Çevre tarafından sağlanan sınıflamanın sizin için yeterince iyi olmadığı ihtimalinden uzak olsa bile, daha uygun bir algoritma yazması için yalnızca bir erkeğe ihtiyacınız vardır - ve Vikipedi gibi bir konuda seçilebilecek ve uygulanabilecek önemsiz bilgileri kullanabilir En uygun algoritma- ve daha sonra tekrar kullanabilirsiniz.
DeadMG

2
@kaoD: Referansı ezberlemek o küçük parçaya yardım etmeyecek. Hiçbir şey tasarlamayı içermiyor, sadece bir kopya yapıştırıyor. Belleğe cevap vermek ve Wikipedia'dan kopyala yapıştırmak arasındaki tek fark, birinin RAM’de saklanıp biri beyninizde saklanmasıdır. Hala bir kopyala yapıştır.
DeadMG

14

Genellikle bu şekilde öğretilir çünkü öğretmenler genel olarak başka bir test anlayışı yöntemini bilmezler. Bu şekilde öğretilmenin değersiz olması nedeniyle duygularınız tamamen doğru. İnsanların genel olarak eğitilme biçimlerinin umutsuzca reformlara ihtiyacı var!

Yaşam daha iyi olsa da, en azından UIUC'ta CS derslerinde yüksek gittikçe sınavların tanımladığın kadar daha az yönlendirildiğini ve kurslarımın çoğunda tüm saçmalıklar için bir dolandırıcılık kağıdına izin verildiğini öğrendim. aslında bir bilgisayarda oturuyor olsaydın googled olurdu.

Söylendiği gibi, derslerime gittikçe yükseldikçe, size dilleri ya da bir şeyi nasıl uygulayabilecekleri hakkında daha az şey öğretiyorlar. Aslında, bize programlama hakkında bir şey öğrettikleri sadece bir sınıfa sahiptim, çoğunlukla soyut matematiksel kavramlardı ve programlama kısmını kendi başımıza çözmem bekleniyordu (her zaman yardım etmeleri mutlu olsalardı ama bu asla bir sınavda bir şey yok).


2
+1 Amin. Üniversite düzeyinde programlama öğretiyordum ve amacım öğrencileri kendi benzersiz projelerini yapabilecekleri noktaya olabildiğince hızlı bir şekilde taşımaktı. Öğretmenler bunu “doğru şekilde” ezberlerken ya da bir şeyleri yaparken kabul etmekten nefret ediyorum. Yapmaya çalıştığım, öğrencilerin kendi yaratıcılığını ortaya çıkarmak için yeterli beceriyi koymaktı.
Mike Dunlavey,

... ezberlemede çok zeki ve iyi öğrencilerim vardı. Programlamayı öğrenmek için program yazmanız gerektiğini, bir şeyleri ezberlemenizi gerekmediğini iletmeden önce bir veya iki test alacaktı.
Mike Dunlavey,

Duy duymak! Komik, büyümek okulda hiç iyi olmadım; Kötü ACT puanı, kötü notlar, vb. Ancak CS ile tanıştırıldığında, her şey anlam ifade ediyordu. Kesinlikle belirli alanlarda mücadele ediyorum ama yalnızca CS derslerimde öğrendiğim kavramları anlayarak beni engelleyen şeylerin üstesinden gelmeyi öğrendim.
Rudolph9

10

Okul eğitiminin eğitiminize karışmasına izin vermeyin.

-- Mark Twain

Ben bir Meksikalıyım ve bunu size söylüyorum çünkü Meksika'da eğitim için tam olarak iyi bir yer değil (herhangi bir düzeyde), en azından halk eğitiminde.

Kariyerimin ortasında (CS) Tam olarak hissettiğin gibi hissediyorum, bu yüzden kendi başıma öğrenmeye başladım ve bir yıl boyunca öğrenme algoritmaları, linux, komut dosyası yazma, bilgisayarımın nasıl çalıştığını, ilişkisel veritabanları, html, css, etc (hepsi hakkında biraz). Ve elbette, öğrenmek için * dersleri atlamak, notlarımı düşürmek * ve bir yıl sonra mezun olmak zorunda kaldım.

O yıldan sonra normal derslerime dönüp düzenli derslere, ödevlere, sınavlara ve projelere dönüyorum. Sınıflar hala sıkıcıydı, öğrenecek yeni bir şey yoktu, hepsi aynıydı. Bu yüzden UVA online hakimi , kod şefi ve proje euler gibi programlama yarışma sitelerine girmeye karar verdim , sonra MIT Open Course Ware'de bazı dersler izledim ve hala kendi başıma öğreniyordum, ancak farklı bir şekilde.

Ders: İşlerin olmasına izin verme, işlerin gerçekleşmesini sağlayın. Öğrendiğiniz yöntemden memnun değilseniz, değiştirin!

* Aldığım en akıllıca kararlar değil.


4
“Bir şeylerin olmasına izin verme, bir şeylerin olmasını sağla”, - Yaşayacak kelimeler olsa, o kadar!
GrandmasterB

Alıntı için +1. Ben <neredeyse> cevabın kalanını okumak zorunda değildim
Chani

3

Ezberlemeye çalıştığın şeye bağlı.

Örneğin matematiği incelemek için cebir hakkında bilgi sahibi olmanız ve denklemleri basitleştirmek için cebirsel manipülasyonları nasıl gerçekleştireceğiniz konusunda sık sık yaratıcı olmanız gerekir. Ancak bu ilginç parçalara odaklanabilmek için bazı yapı taşlarını ezberlemelisiniz. Örneğin, çarpım tablosunuzu ezbere bilmek zorundasınız ve bazı kimlikleri bilmek zorundasınız, böylece bu kimlikleri kullanmak için denklemleri nasıl değiştireceğinizi tanıyabilirsiniz.

Bilgisayar bilimi incelemek için, benzer şekilde temel yapı taşı veri yapılarını ve algoritmalarını bilmeniz gerekir, çünkü bunları daha üst düzey problemlere uygulamanız gerekecektir. Örneğin, gerçek dünyaya kendi bağlantılı liste uygulamanızı yazmanız, kütüphaneniz tarafından sağlananları kullanmanız hiç mümkün değildir. Ancak, bağlantılı bir listenin nasıl uygulandığını ve kendi listenizi nasıl uygulayacağınızı bilmek, daha üst düzey problemler üzerinde çalışmaya başladığınızda bağlantılı bir listenin nerede ve nasıl kullanılacağı hakkında aklınıza gelebilecek. Benzer şekilde, kendi ikili arama işlevinizi asla yazmazsınız ancak nasıl çalıştığını anlamak önemlidir; böylece bir veritabanının bir dizini nerede kullanabileceği ve nerede kullanamayacağı gibi şeyler hakkında neden olabilirsiniz.

Bazı temel yapı taşlarını ezberledikten sonra, belgeleri yorumlamak gibi şeyler yapmak çok daha kolaydır. Belgeler bir listenin kullanıldığını gösterebilir ve programcının dolaylı olarak bunun kesici uçların O (1) ve aramaların O (n) olduğunu bildiğini varsaydığını varsayabilir. Yapı taşları da zaman içinde çok daha istikrarlıdır - birkaç yılda bir yeni hata ayıklayıcıları kullanmanız çok muhtemeldir, tüm kariyerinizde aynı ikili aramayı kullanmanız olasıdır.


Bağlantılı bir listenin nerede ve ne şekilde kullanılacağı, çeşitli işlemler için karmaşıklığı ve bellek performansı gibi şeylere dayanır. Bu ikisini de bilmek için birini uygulamanıza gerek yok. Bir veritabanı ikili aramayı nerede kullanabilir? Nasıl karşılaştırılacağını bildiği anahtarlar için. Bu kolaydı.
DeadMG

3

"Neden CS, ezberlemeye odaklanıyor ... faydalı becerilerin öğretilmesinin aksine" - Ezberlemeyi biraz fazla düşürdüğünüzü düşünüyorum. Tıpkı kod yazarken, dökümanları yorumlarken, hata ayıklayıcı kullanarak pratik yapsanız, ezberlemeyi de yapmalısınız.

API referansına sık sık gitmek veya çok sayıda hata ayıklayıcı komutu aramak zorunda kalmazsanız, ne kadar verimli olabileceğinize şaşırabilirsiniz.

Lisede öğrendiğim en iyi şeylerden biri, sınıfta hiç not almayan bir arkadaşı gözlemlemekti. Argümanı neyin önemli olduğunu hatırlayabilmesiydi. Aynı şeyi yapmaya başladım ve günlük olarak çok faydalı bulduğum ezberleme becerilerimi geliştirdiğimi ve kolaylıkla ulaşılabilen tüm API referansları olduğunu düşünüyorum.


2
API’yi aramak zorunda kalmamak pratikten gelir, API’yi örgün eğitim olarak öğretmemek.
DeadMG

@DeadMG: Daha fazlasını hatırlayabilmek, tıpkı diğer her şey gibi pratikle birlikte gelir. Belirli API'leri hatırlamanızı istemek, başlı başına bir amaç değil, bilgiyi korumak için başınızı eğitmek için bir araç olduğundan, sık sık aramanıza gerek kalmaz. Ve ben sadece API'lerden bahsetmiyorum, bir ekstra şeyi hatırlayabilirsem, bu Google / MSDN / başka bir kaynak dosyasına yapmam gereken daha az bir yolculuk ve pratik yaparak bunun ne kadar hızlı çalışabileceğinizi fark eder .
DXM

Bu belirli API ile pratik yapın . Genel olarak şeyleri ezberlememek. Eğitimde harcanan zaman, mesleki zamana göre küçük bir dipnottur.
DeadMG

2

Kalem ve kâğıt sınavlar, amaç eldeki konunun tam olarak anlaşılmasını sınamaksa, anlamlıdır. Neredeyse on yıl önce Computer Science AB sınavına girdim ve kalem ve kağıt yöntemine katılıyorum.

Uygulama kodunu hedef dilinizde nasıl yazacağınızı belirleyebilmek için, Bilgisayar Bilimi'nin alt seviyelerinde öğrendiğiniz tüm algoritmaları yeterince bilmelisiniz. Öğrenciler ayrıca çoğunlukla doğru sözdizimi ile elle kod yazabilmelidir. Bazen hepimiz noktalı virgül veya parantez özlüyoruz :). Ayrıca hata ayıklama ve tasarım becerileri, yararlı bir IDE çıkarımı olmadan test edilebilir.

Bir öğrenci bunu yapamazsa, o zaman bu konunun ustalığına sahip olamaz, belki de sadece bir aşinalıktır.


-1: Sözdizimsel olarak doğru kod yazan tüm el yazısı, kişinin derlenebilir bir program yazabileceğini (muhtemelen en yavaş bilgisayardan milyonlarca kez daha yavaş) yazabildiğini söyler - amaçlandığı gibi çalışmayabilir. Daha da kötüsü, sadece iyi bir hafızaya sahipler ve istenirse muhtemelen Shakespare'i okuyabilirler. Bir geliştirici olarak kişinin becerisini göstermek için küçük bir yol gider.
mattnz

Bu cevap, sunulan görüşe gerekçe göstermemektedir. Neden herhangi biri herhangi bir tür algoritması için kendi dilinde bir uygulama yazabiliyor?
DeadMG

Mesele şu ki, bu kişi iyi bir geliştirici değil, kendi sınıflarında öğretilen Computer Science materyalini biliyorlar. Bir öğrenciye nasıl bir fonksiyon çizileceği öğretildi ise, o öğrencinin bir sınavda yapmasını beklemek makul olacaktır. İyi testler ayrıca, bu veri yapısı için çoklu tuşlar kullanarak baloncuk sıralaması gibi kavramsal anlama gerektiren sorular sorarak veya ince havadan çektiğim veya ikili aramada verdiğim bu arama psuedocode'u arasındaki farkı açıklayan soruları sorarak ezberlemeyi yendi.
Peter Smith

-2

Tecrübelerime göre, ezberleme basit bir pratikle birlikte gelir ve kesinlikle öğretmeye hiç gerek yoktur. Daha da önemlisi, bu yaklaşım aracı sadece gerçekten neyi ezberlemeye gerek sen, öğretmeniniz size gerekebilir umut ettiğini rastgele önemsiz değil bir demet yaptığınız işlemlerde de hatırlamak ve değişmez yapmayacaksın. Bazı algoritmaların uygulanmasını ezberlemek için harcanan zaman başka bir nedene daha iyi ayrılabilir.

Ne de olsa, neden bir algoritma yazmak için pratik yapman gerekiyor? Bir kez yazdığınızda, seçtiğiniz bir dil için serbestçe kullanılabilir bir uygulama yazmadığı ve ortamınızın zaten sağlamadığı son derece uzak bir ihtimal olsa bile, her zaman tekrar kullanabilirsiniz. kullanımınız için, sıralama ve benzeri gibi basit algoritmaların büyük çoğunluğu için önemsiz bir şekilde doğru olmayan bir algoritma. İlk etapta yapmak zorunda kalmayacağınız ve muhtemelen bir kere yapmak zorunda kalmayacağınız bir şeye pratik yapmak mı? Zamanın değerli bir kullanımı değil.

Heapsort hakkında bilinmesi gereken en önemli şey nasıl uygulanacağı değildir. En iyi ve en kötü durumlarda ve benzer şeylerde çalışma karmaşıklığıdır. Ancak, sürpriz, Wikipedia'da anında size bu bilgiyi verecek kullanışlı bir masa var. Yani tekrar, bu bilgiye sahip olmanın hiçbir değeri yok . İstediğiniz zaman, etkin bir ücret ödemeden zamanın sonuna kadar istediğiniz zaman anında kullanılabilir. Peki neden ezberlemek istiyorsun? Bu anlamsız.

Tecrübelerime göre, bir öğrencinin bir şeyleri ezberlemesini istemek için hiçbir neden yoktur. Bir referans kaynağından cevaplanabilecek bir soru soruyorsanız, cevaplayabilmenin bir değeri olmadığı bir soru soruyorsunuz.


2
Tanrım, millet, tekliflerinizi veya bunun gibi bir şeyi açıklamaktan çekinmeyin ....
DeadMG

Yığınları bilmem gereken tek zaman, değiştirilebilen bir öncelik sırasına ihtiyacım olduğu zamandı (Yığın, öncelik sırasına göre harika çalışıyor). Bilinen algoritmaları uyarlayabilmek, nasıl uygulanacağını bilmek için iyi bir nedendir.
David Thornley

@David: Yığın bölgesinin nasıl çalıştığını bilmenize gerek yok. Herhangi bir sıralama algoritması kullanan bir uygulama iyi olur.
DeadMG

Bu özel durumda değil, olmaz. Sık sık, gerilmiş olabilecek bir sistemde, pek çok olayı ele alması gerekiyordu. Bu proje için verimliliğe ihtiyacımız vardı ve anladık. Bağlam için, bu oldukça uzun bir kariyerde bir kez oldu ve uzun zamandır tüm sıralamalarım SQL ORDER BYve C ++ 'ın std::sortailesi gibi şeyler oldu .
David Thornley

@David: Bu nedenle, her programcının ihtiyaç duyduğu bir şey olduğunu düşünmüyorum.
DeadMG
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.