Programlamanın belirli bir bölümünü anlayamadığınızda ne yaparsınız? [kapalı]


11

Ben ilerledikçe yeni diller öğreniyorum, birden çok dilde çok temel programlar için kod yazıyorum ve derslere gidiyorum. Kitaplar, makaleler, dersler, videolar okudum, siz söyleyin, ancak bazı şeyleri asamıyorum.

Örneğin işaretçileri hiç anlamadım - neyin iyi olduğunu. (SORU'NUN PARÇASI DEĞİL - "İşaretçiler" ile yeniden etiketleme gerekli değildir ...)


Ancak sorum, işaretçilerin ne yaptığı değil, bunun gibi şeyleri nasıl anlayabilirim? Bir kitabı veya programlamanın belirli bir bölümü hakkında bir makale okuduktan sonra ve anlamadım, ne yapmalıyım? Programlamanın belirli bir özelliğinde kod yazmak kesinlikle yardımcı olur, ancak aslında bu kadar çok şey anlamada yardımcı olmaz. Teorik kısım anlamada önemlidir.


11
Keşke insanların neden işaretçileri anlamada bu kadar çok sorun yaşadıklarını anlayabilseydim. İsim ihtiyacım olan tüm açıklamaları veriyor.
ChaosPandion

1
Bazı Computer Architecture 101dersler işaretçileri anlamada çok yardımcı olacaktır. ...Ve diğer herşey.
ZJR

6
Soru tam olarak işaretçilerle ilgili değil, genel bir soru, ama teşekkürler.
Bugster

2
Sorunları olduğunu itiraf ettiği bir örnekten birine hatırlatmanın ona aydınlanmaya doğru bir tek yardım edeceğini düşünmüyorum ... Sık sık yapılıyor, ancak vurulma korkusundan yardım istemesini engelleyecek. uzun cimri ve bilgiçlik yanılgıları ve not düşürme yorumları.
haylem

4
@FrustratedWithFormsDesigner: "Öğrenmeyi nasıl öğrenirim" diye düşünüyorum. Bu geçerli ve değerli bir soru.
haylem

Yanıtlar:


22

Soyut bir kavramı anlamada sorun yaşıyorsanız, bir seviye aşağı gidin. C işaretçileri alamıyorsanız - montaj seviyesine gidin. Hala sorun mu yaşıyorsunuz? Mantık kapılarına kadar donanım hakkında daha fazla bilgi edinin.


2
+1: Benim için çalıştı. PDP-10 montaj dili yazmaya başlayana kadar ALGOL'deki işaretçilerle sorun yaşadım.
kevin cline

2
İlginç fikir. Yine de mecliste bir program yazmanın ve çalıştırmanın çok ileri gittiğine dikkat çekerim. Bence, temel anlayış noktasının ötesine geçmek bu düzeyde gereksizdir. Ama hey, eğer yapmak istediğin buysa, sana daha fazla güç!
Bryan Field

1
@George Bailey, evet, herhangi bir gerçek montaj ve gerçek donanım için biraz üstte olabilir. Bu yüzden MIXetrafında ve benzeri oyuncak mimarileri var. Bir donanım parçası için aynı - çalışacak çok basit, oyuncak CPU çekirdeği var.
SK-logic

+1: İlginç bir fikir ve kesinlikle çalışması muhtemel, ancak (OP'nin örnek vakasını yeniden kullanmak için) C giriş seviyesinden ASM giriş seviyesine inmek, yeni başlayanlar için uzun, zor ve dolambaçlı bir yol olabilir. ders / proje / diğer tarafından beklenenden daha fazla zaman. Ayrıca, zayıf motivasyonlu insanları yabancılaştırabilir (muhtemelen OP'nin durumu değildir, ancak daha üst düzey bir perspektiften, bu, CS sınıflarını alan ve bunu anlaması gereken, ancak CS'nin kendisi hakkında bir lanet vermeyen birçok öğrenciyi engelleyecektir) . Ama kesinlikle uzun vadede iyi bir fikir.
haylem

CS derecem bunu Bilgisayar Mimarisinde ele aldı. Mantık kapılarını öğrendik, toplayıcılar, ALU'lar ve sonunda çok basit bir RISC CPU oluşturmak için bunları bir mantık simülatöründe birleştirdik. MIPS montajında ​​basit programlar da yazdık. Bunların hepsi bilgisayar bilimleri alanında lisans derecesi için gerekliydi ve gerçekten "ot temizleme" derslerinden biri olarak değerlendirilmiyordu, bu yüzden en üstte ya da çok ileri gittiğini sanmıyorum.
Adam Jaskiewicz

17

Kısa Artımlı Öğrenme Yaşam Döngüsü

  1. Kavramı anlamaya çalışın ve başarısız olun .
  2. Konsepti gösteren bir şey uygulamaya çalışın .
  3. Kavramı beyaz tahtada diyagram haline getirmeye çalışın (varsa)
  4. Kavramı anlayan biriyle konuşmaya çalışın .
  5. Bu kişiye anladığınız bitleri açıklamaya çalışın (bazen ışığı görmeye yardımcı olur).
  6. Son olarak durum 1'de olan birine açıklayabilmeniz ve onları almasını sağlayabilene kadar 1'den yeniden başlayın .

Ek Adımlar

Dikkatli kullanmak için.

  • Ek okuma ve çalışma materyali arayın :
    • çevrimiçi (popüler arama motorları ve Wikipedia harika arkadaşlar),
    • kütüphanede (kitapları ve okumak için oraya giden insanları hafife alma),
    • Sisteminizde (paketlenmiş dokümantasyon ve doktor araçları genellikle ilk başta yabancılaştırıcı, ancak bir süre sonra en iyi git-buddy:. Eğer onlarda aradığınızı bulmak için öğrenmek örneğin man -k, aproposvb ...)
  • Konsepti kullanarak bazı kodları okumayı deneyin ...
  • ... ve bir hata ayıklayıcı ile kodda ilerleyin .

Doğru yaptığınızdan emin olmak için kendinizi yeniden değerlendirmeniz gerektiğinden bunlar daha sinsi. Bilgili bir kişi tarafından doğrudan mentorluk genellikle daha iyidir, bunu daha sonra öğrendiklerinizi yeniden uygulayarak (ve daha sonra bir adım daha ileriye ve daha üst düzey bir kavram geliştirmeye çalışarak) edinilen bilgileri doğrulamanız gerekir. bunlardan, örneğin işaretçileriniz için bağlantılı listeler).

Kredi: Nupul (diyagram için)


2
1! Ekleyebilir miyim - konuşmadan önce, Beyaz Tahta'yı 'çizmek' için deneyin (veya birisiyle konuşurken beyaz tahtayı kullanışlı tutun :)
Doktora

1
+1 "bir hata ayıklayıcı ile kod içinde adım adım" için. Basit hata ayıklama araçlarıyla birçok kavram öğrendim ...
funkymushroom

@ Nabul: iyi bir öneri eklendi.
haylem

@funkymushroom: Gerçekten de, genellikle kavramı bu şekilde gerçekten öğrenmediğinizi söyleyebilirim. Ancak tam önünüzdeyken "sisi kaldırmaya" yardımcı olur ve parçaları bir araya geldiğini göremezsiniz, çünkü çok fazla bir şeye odaklandınız veya zihniniz kızartılır. Genel algoritma problemlerini anlamanın genel kavramlardan daha yararlı olduğunu düşünüyorum.
haylem

Beyaz tahta ile konuşmak benim için yaptı.
Peter

5

Deneyimlerime göre, her şey girdi ve geri bildirim ile ilgilidir. Mümkün olduğu kadar çok forma girmek ve hatalarınız hakkında olabildiğince çabuk geri bildirim almak istiyorsunuz.

Deneyimlerime göre, CS derecem çok kuru, çok resmi ve herhangi bir programlama öğretiminde tamamen değersizdi. Haftada iki-üç konferansa katıldım ve eğer anlayamazsanız, o kadar ki - öğretim elemanının öğretmek için başka bir sınıfı var ve size yardımcı olmak için etrafta dolaşamıyor. Ve, olasılıklar, bir adam bunu belirli bir şekilde anlıyor ve bunu belirli bir şekilde öğretecek ve işte bu, eğer onun gibi düşünmüyorsanız, asla asla alamayacaksınız. Daha da kötüsü, muhtemelen bir milyar diğer ilgili kavramı anladığı için, muhtemelen diğer kavramlar açısından çerçeveleyecektir, bu da kafanızın üzerinden geçebilecek veya ders materyallerinde bile olmayabilir.

Stack Overflow'a gittim ve C ++ sohbet kanalında sordum ve beş dakika içinde beş farklı açıklama aldım. Hepsi bana ve benim yaşadığım soruna özel olarak uyarlanmıştı, bu yüzden birinin benim için eve vurması şaşırtıcı değil ve anladım. Birden fazla uzmandan canlı geri bildirim almayı öğrenebileceğiniz oran, kurutulmuş kağıt kaynağından alabileceğinizin çok üzerindedir.

İdeal olarak, bir ara verin ve daha sonra yapacak daha iyi bir şeyleri olmayan ve onlarla canlı sohbet eden küçük ve orta boy bir grup benzer fikirli insan bulacaksınız. Bu arada, Stack Overflow bu tür yüksek kaliteli yüksek hızlı kişisel geri bildirim almak için mükemmel bir yerdir.


3

Hiçbir şekilde, kitaplar, arkadaşlar ve iyi belgelenmiş kodları okumak iyi kaynaklardır. Pratik yapmanın tek yolu: küçük birim testleri yazmaya çalışın. Örneğin, işaretçiler için dizelerle ilgili kod yazın: bir dizeyi tersine çevirin, bir dizedeki her kelimeyi tersine çevirin, palindromu test edin, bir harfi bir sayıyla değiştirin ...

Stackexchange hakkında sorular sorun ...;>


2

Pratik yapmak mükemmelleştirir! (yine de daha iyi). Denemeye devam edin ve mümkün olduğunca çok farklı kaynak ve duyu kullanmaya çalışın:

Kaynaklar: Kitaplar, Internet, Grupları, arkadaşlar, Video Öğrenme, sizin gibi küçük kod 'bit' test edelim sitelerini kullanarak jsfiddle (çoğunlukla html),
Rubular (Yakut ifadeler),
SQlzoo , sql denediğiniz için
jslint javascript için,
kod ped birçok dil için.

Soyut şeyleri hatırlamak için mneomik düşünün - Doktorlar bunları kullanıyor!

Kendinizi ömür boyu öğrenen bir kişi olarak düşünün ve mütevazi kalın.


1
"Alıştırma" için +1. Ama anımsatıcılar, ugh. Asla yerini tutamayacak ve asla yerine geçmeyecek çok yetersiz bir koltuk değneği. Aslında, anlayışın olmadığını gösterirler. “Doktorlar onları kullanıyor” çünkü çok kısa sürede bağlantısız gerçekleri öğrenmek zorunda kalıyorlar. Tıp doktorları için eğitimimizin berbat olduğu gerçeğine yavaş yavaş yaklaşıyoruz ve örneğin ABD, eğitimi tamamen yeniden modelleme yolunda ilerliyor. Anımsatıcılar bir çözüm değil, sorunun bir parçası. Kendinizi onları kullanırken bulursanız, anlayamadınız.
Konrad Rudolph

1

Odağınızı 5 dakika değil bir süre değiştirmelisiniz. ya da 5 saat ... Yani bu koda bakmadan 1 gün gibi bir şey ... sadece sakin ol ... git farklı bir şey oku ...

Eğer varsa sahip şimdi bunu anlamak ...) = ya da burada arkadaşlarından yardım istemek


1

BT'deki diğer herkes ne yapıyor.

Başlangıçta anlamak istediğim konuyu tekrar gözden geçirene kadar anlamadığım ilgili kavramları aramak için bir arama motoru kullanıyorum.

Muhtemelen yığını, yığını, otomatik değişkenleri, C ++ derleme işlemini, montajı, yönetilen belleği ve yönetilmeyen belleği tam olarak anlamıyorsunuzdur.

Bunlar ve işaretçiyle ilgili diğer kavramlar hakkında daha fazla netlik muhtemelen her şeyi temizleyecektir.


1

Bir konuyu anlamanın kesin bir hızlı yolu yoktur. Başarınız, çalışmalarınızda yanınızda ne kadar bağlam sağladığınıza bağlıdır. Düşüncelerinizi aklınızda bulundurarak bir şeyler açıklayacak birini bulduğunuz için çok şanslı olacaksınız. Turing makineleri gibi, herkes başkalarının bildiklerini öğrenebilir ve bu sadece hayal kırıklığının doğal olduğu bir sebat ve kabul meselesidir.

İşaretçilerle yaşadığım büyük zorlukları hatırlıyorum. Çok sabırlı bir adam bana anladığım kadarıyla tam bir aptalmışım gibi açıklayana kadar değildi. Bazen bunu gerektirir.


1

Bu öğrenme ve öğretmede yaygın bir sorundur. Diğerlerinin de söylediği gibi, bunun üzerinde çalışmanın kesin bir yolu yoktur. Beynimiz ince ama önemli yollarla kablolandığından hepimizin farklı öğrendiği temel bir gerçektir.

Öğrenme yeni nöronal bağlantılar oluşturur. Sinirbilime çok fazla girmeden (hakkında hiçbir şey bilmiyorum), yeni bağlantılar oluşturmak , farklı insanlar için bir konsepte farklı türlerde maruz kalmayı gerektirir . Birçok farklı açıyı deneyin, farklı açıklamaları okuyun / dinleyin / izleyin. Uygulama!

Bu işe yaramazsa, sorunu bir kenara koyun: bulmacanın bir kez edinildiğinde, orijinal problemi açık hale getiren başka bir bölümünü kaçırıyor olabilirsiniz.

Bunları biliyor musunuz aha! anlar? Bu, beyninizin yeni bir bağlantı kurduğu zamandır. Öğrenme böyle gerçekleşir.

Bu arada, iyi bir öğretmen bunu bilir. Teknik yazım yönergeleri genellikle, her kavramın farklı kelimeler (ve belki de aralarındaki metinlerle) kullanılarak en az iki kez açıklanması gerektiğini belirtir. Dikkat ederseniz, tüm iyi bilim yazarlarının bu kurala uyduğunu fark edebileceksiniz.

Ne yazık ki, çok fazla öğretmen bunu görmezden geliyor ve sadece bir kez açıklıyor. Ve büyük bir metaforla zarif bir açıklama bulmayı başarsalar bile, bu yeterli değildir.


0
  1. İlgili tüm dokümanları ve şüphelerinizi Google'da okuyun.

  2. Kod örnekleri yazmayı deneyin, ne yaptıklarına bakın.

  3. Hata ayıklamada kod çalıştırmayı deneyin ve adım adım izleyin.

  4. Hala belirli bir davranışı anlamadıysanız, birine veya böyle bir web sitesinde birine sorun. Yukarıdakilerin tümünü denediyseniz, iyi bir soru oluşturmak için tüm unsurlara sahip olmalısınız. Utangaç olma :)

Bence herkesin yaptığı şey bu.


0

Araştırmaya ve öğrenmeye devam edin. Programlamanın diğer çeşitli yönlerinde de aynı sorunu yaşadım. Ancak başkalarıyla konuşmak ve makaleler okumak sonunda "AHA" anına yol açar. Genellikle, takip edebileceğim bilgileri sunan başka bir Blog yazısı veya SO yanıtıdır.

Temel olarak, gelmeye devam etmek için aramaya devam edin ve sabırlı olun.

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.