Problem çözme yaklaşımımı kağıda yazmak? [kapalı]


54

Ben birinci sınıf bir Computer Science öğrencisiyim ve Python'da gerçek projeler yapmaya başladık. Profesörümün sınıfta önerdiği kalem ve kağıt yöntemini kullanırken çok etkili olduğumu öğrendim. Fakat sorunumu yazamadığımda ve algoritmalarımı kağıt üzerinde çözemediğimde gerçekten yavaştır. Laboratuvarlar sırasında, ödevimi her zaman yurduma geri götürmek zorunda kalıyorum. Oraya gidip yazdığımda, beni tüm dersimi 5 dakika içinde alan sorunu çözüyorum.

Belki de insanların önümde laboratuvarları çözdüklerini görünce stresli olduğum içindir. Ya da belki kalem ve kağıt yöntemidir.

Forumlara göz atıyordum ve birileri programlarınızı kağıda yazmak zorunda kalırsanız programcı olmamanız gerektiğini yazdı. Gerçekten endişeliyim çünkü programın ne yaptığını görebildiğim ve gerçek kodu yazmadan önce yolumu takip ettiğimde çok daha iyiyim. Yanlış bir şey mi yapıyorum?

Düzenleme: Net olmadığım için özür dilerim, ancak kağıda yazmak derken, benim kodumu değil problem çözme yaklaşımımı kastetmiştim (örneğin, örnekler yazmak, değerlerle tablo yapmak, vb.). Sadece fikirleri almak için kağıdı kullanıyorum.


28
İlk önce problemi kağıt üzerinde düşünerek yanlış bir şey göremiyorum.
Julien Guertault


34
Bu kişi yanlış. Çoğu, UML veya sözde kod blokları gibi kestirme yolları kullanır, ancak ne kullanırsanız kullanın, zihninizin çalışması gibi çalışır ve görünüşe göre sizin kağıdınıza ihtiyaç duyar.
Patrick Hughes

10
Sizin için zorluk, muhtemelen laboratuardayken kağıt üzerinde çalışmayı öğrenmek olacaktır. Mühendisler ve bilim adamları bunun için alışılmış bir şekilde kağıt defterleri kullanıyorlar (ve bir kağıt izi olarak) ve bu kadar çok BT insanının neden bu yaklaşımı küçümsemediğini merak ettim. Kariyerimi kod yazarak ve sürekli kağıt defterler kullanarak geçiren bir mühendisim.
Móż

4
@ ott-- Ben ve iş arkadaşlarımın hepsinde defter olan kalemler kullanıyoruz. Benim için en azından üniversitede öğrendiğim iyi bir püf noktası - silememek daha fazla düşünmeme yardımcı oluyor, bu yüzden ek sayfalara yaymak zorunda kalmayacağım. Ek olarak, hepsini bir sayfada tutma isteği ve silme yeteneği, istediğiniz bir şeyi yanlışlıkla silmeyi çok kolaylaştırır. Yanlış yaklaşımlar da silinebilir, ancak bunun dışında neyin işe yarayıp neyin işe yaramadığına dair bir hatırlatma olur. Kağıt ucuz, kendin için zorlaştırma.
Izkata

Yanıtlar:


70

İlk önce algoritmalarınızı kağıt üzerinde çalışmanın yanlış bir tarafı yok. Günlük kodlama için pek bir şey ifade etmiyor, fakat daha karmaşık algoritmalar için, profesyonel programcılar bunları, özellikle grafiksel bir format daha net hale getirirse, her zaman kağıt veya beyaz tahta üzerinde çalışırlar. Bir öğrenci için, her program karmaşıktır.

Bir bilgisayarda algoritmalar tasarlamada daha iyi olmak istiyorsanız, yine de pratik yapabileceğiniz bazı teknikler var. Sadece kodu yazarak başlamak, yorumlarınıza kağıda yazdığınızla aynı şeyleri yazmak, daha sonra teker teker gerçek koduna veya daha ayrıntılı yorumlara genişletmek değildir.

Örneğin, bağlı bir listenin ortasındaki bir öğeyi siliyorsam, şöyle bir şeyle başlayabilirim:

// find the element
// point the previous element to the next element
//    How do I get a pointer to the previous element?
//        doubly-linked list?
//        another find?
//        keep track during the first find?
// delete the element

O zaman // find the elementdaha fazla sözde kod içeren bir işlevle değiştirebilir ve tam bir çözüm bulana kadar devam edebilirim. Kodun doğrusal bir şekilde yazılması gerektiğini düşünmeyin.


İyi tavsiye Karl.
andy256

2
Yukarıdaki metodu, karmaşık işimin çoğunu yapmak için Rubber Duck problem çözme (benimki bir SuSE peluşudur) ile birleştiriyorum. Ayrıca bir sürü yazı yazmak için beyaz tahtaların lüksüne de sahibim.
Deco

+1. Sorular ve sonra cevapları yazmak, bir şeyi nasıl sık sık çözdüğümdür. Planlarımda beni tuzaklar ve kandiller aramaya zorluyor.
Andy Hunt

1
Yazılım geliştirme odaklı bir işletmenin her yerde yazılabilir yüzeyleri olacağını göreceksiniz. Genellikle diyagramlar, sözde kod, notlar ve eserler ile doldurulur. Bir şeyleri karalamak için çok güçlü bir tercihim var. Eğer kodu yeniden faktoring ediyorsam, kodu gerçekten yazdırabilir ve not ekleyebilirsem seviyorum. Bunu okumaktan ve not almaktan daha iyi hissettiğimi biliyorum.
Twirrim

1
Bu tekniğin aslında bir adı var: Sözde
Kod

15

Göreyim seni! Biz ne yaptığını ararsanız düşünme ve tasarlama çözümünüzü, o zaman sadece kodunu patlatma çok daha hızlı olacak süreci anlamda yapar.

İnsanlar (ve gürültülü olanların bize söylemeyi sevdiklerini) işlerinin daha iyi olduğunu düşünmeyi severler . Ancak herkesin yetenek ve beceri karışımı farklıdır. Peki, sizin için ne işe yaradığını yapın. Uygulama kazandıkça, muhtemelen kafanızdaki tasarım çalışmalarından daha fazlasını yapmaya başlayacak ve daha büyük problemler için kağıt kullanacaksınız.

Dikkat edilmesi gereken bir şey, sınavların ne şekilde gerçekleşeceğidir. Kağıt üzerinde mi olacaklar yoksa bilgisayar tabanlı mı olacaklar? Kağıt tabanlılarsa, yolunuz size bir avantaj sağlayacaktır. Bilgisayar tabanlıysa, o zaman da sorun yok: kağıda herhangi bir tasarım yapın, sonra kodu yazın. Hangisi en iyi çalışırsa!


1
Uzun vadede daha az zaman alan çözümü düşünmek ve tasarlamak için kefil olabilirim. Çok sık, üniversitede, insanların (kendim dahil), yalnızca çözümlerinin bozulduğunu bulmak için 2 saatlik bir tıkanmaya başladığını görecektim. Problemi tasarlamak ve çalışmak için zaman ayırmak, basit bir çözüm bulmanıza yardımcı olacaktır. Bu sebeple çalıştığım yazı tahtaları, defterler ve "danışmalar" var.
Jamie Taylor

6

Kağıda gerçek bir kod koymuyorum, ama önemsiz şeyler için hemen hemen her zaman bir beyaz tahta veya not defterine başlıyorum. Genelde eskizlerim:

  • Algoritmalar / proses / kontrol akışı
  • Veri yapıları
  • İlişkiler
  • Bileşenler (bu sorunu nasıl çözerim)

Genellikle eskizlerin, sözde kodun ve ingilizcenin bir birleşimidir.

Bunu yaparak kodlamaya başladığımda görselleştirmek daha kolay oluyor. Ayrıca , koda başlamadan önce kusurları göreceğim çünkü önümdeki her şeyi görebiliyorum (sürekli kaydırma ve pencere atlama yerine). Sadece bu değil, bir kere yazıldığında, başka işler üzerinde çalışırken aklımdaki şeylerin oluşmasına izin verebilirim. Ayrıca doğrusal olmayan bir şekilde çalışabilir, bana çarptığında kağıda bir fikir vererek, sonra ihtiyaç duyduğum noktaya ulaştığımda geri dönebilirim.

Kağıda bir şeyler yapmak, hafızada tutulması için muazzam bir yardımdır. Not defterleri markası not defterlerinin etiketi :

Daha sonra hatırlamak için yazıyorum, şimdi hatırlamak için yazıyorum.

Bir süre sonra telefonumdaki ToDo uygulamasına giriş yapsam da, düşüncenin kafamda sümsürlendiğini, elektronik notu yazmaktan çok daha iyi buldum. IOW, kodlarımı kağıt / beyaz tahtaya yazmayı planlıyorum, fikirler aklımda daha iyi duruyor.

Ayrıca yazdıklarımı belgeleme zamanı geldiğinde kullanışlı bir referans olarak hizmet eder.


5

İlk önce kağıda kod yazarken (sözde veya başka şekilde) doğal olarak yanlış bir şey olduğunu sanmıyorum - bir sorunun nasıl çözüleceğini tartışırken birçok insanın yaptığı bir beyaz tahtaya yazmaktan gerçekten farklı değil.

Önce CS'yi yazmayan sınıflar için ilk deneme taslaklarını yazmadan önce kağıda yazar mısınız? Aslında, ben yıllar önce üniversite öğrencisiyken bunu yapardım, ancak birinci sınıf yıllarımdan sonra, kendimi tüm taslakları bir ekrana yazmaya zorladım, çünkü sonraki taslakları yazmayı çok daha kolay hale getirdi ve aynı fikir geçerli oldu. kod yazmak için.

Sadece Word gibi bir metin editöründe olsa bile algoritmalarınızı yazmayı denemenizi öneririm. Ne kadar çok yaparsanız, kağıda ve kaleme güvenmeyecek kadar konforlu olursunuz. Yazma becerileriniz biraz eksikse ve gerçekte hayal kırıklığınızın kaynağı bu ise, yazma kursuna katılın! Gelecekteki kariyeriniz için yapabileceğiniz en iyi şey olurdu.


3

Sorunu çözmek ve çözümünüzü uygulayan kodu yazmak iki farklı aktivitedir.

Eğer bir dili bilmiyorsanız, kodun kendisine çok fazla zaman ayıracaksınız - ve iyi bir çözüm bulmak için yeterli değil. Kağıt, beyaz tahta veya tavandan başlamak size bu konuda yardımcı oluyorsa, elbette bunu yapın.

(Şahsen, kendimi bilgisayardan çıkarken ve çevremde dolaşırken aklımda bir çözüm üretmeye çalışırken buluyorum)


2

Röportajlar as olacak! Kağıda veya beyaz tahtaya kod yazmanızı sağlar. Ben tam tersiyim. Bir kalemle parantez yazmaya veya kesmeye ve yapıştırmaya çalışmak ÇOK sıkıcı!

Babam COBOL'u programlarken çok fazla kağıt kullandı. Bence bu sadece senin düşünme tarzın.


0

Programlamanın Temelleri adında iki dönemlik bir dersimiz vardı. Hem dönem ortası sınavları, hem de sonunda yapılan sınavlar kağıt üzerinde yapıldı. Herhangi bir derleme hatası yaptıysanız ciddi miktarda puan kaybedersiniz. Büyük derleme hataları yaptıysanız, başarısız oldunuz. Ancak, bize herhangi bir koda bakma ve nispeten kısa sürede buggy satırları bulma yeteneğimizi geliştirdiğini hissediyorum.


0

Yaptıklarının yanlış bir şey yok, ben de kağıt ve kalem kullanarak programlamayı öğrendim.

Diğerlerinin önerdiği gibi sizin için neyin işe yaradığını yapın. Yazdığım ilk Java programının çoğunlukla kağıt üzerinde olduğunu hatırlıyorum ve yazarken iki saatimi yazdım ve 200'den fazla derleyici hatası gördüğümde on beş dakika ağladım. Dahası vardı ama derleyici sadece ilk 200'ü gösterecekti! Gerçi yaptığım nokta, kodu kağıda yazarak programın yapması gerekenler için temel algoritma ve işlevsellik üzerinden düşünebilmem oldu. Derleyici, programımın çalışmamasının nedenlerine dikkat çekti. Sorunların% 90'ı dizilerle sınır dışı istisnalardı.

Daha fazla deneyim ve güven kazandıkça, daha az kalem ve kağıt kullanarak kendinizi bulacaksınız. Döngüler vb. Gibi temel kavramları nasıl kullanacağınızı zaten bileceksiniz. Diğer programlarda, yeniden kullanabileceğiniz örnekleri olacak. Programın yazılması sırasında bariz hataları bulmak için derleyiciyi ve bir IDE'yi kullanacaksınız. Şu anda bu deneyimi yaşamamış olmana rağmen.

Sorunuzu okurken sorunlarınızın bazılarının odaklanıp odaklanmadığını merak ediyorum. Sessiz bir ortamda bir kalem ve kağıt kullanmak, daha sonra odaklanmanıza yardımcı olur.

Hala kolejdesin ve hala öğreniyorsun. Sonuçta, tek yaptığın şey senin için işe yarıyor. Kağıt ve kalem kullanarak düşüncelerinizi sipariş ediyor ve net ve sakince düşünüyorsanız, programlama yapıyorsunuz demektir.


1
Bu soruyu soruyu nasıl cevaplıyor?
tatarcık

OP, 'Biri programlarınızı kağıda yazmak zorunda kalırsanız, programcı olmamanız gerektiğini' yazdığını yazdığından beri, kalem ve kağıt kullanmanın uygun olup olmadığını soruyor. Ayrıca üniversitede olduğunu ve hala öğrendiğini belirtiyor. Niyetim, yaptığı şeyde yanlış bir şey olmadığını göstermekti ve ben de kağıt ve kalem kullanarak programlamayı öğrendim.
Daniel Hollinrake

-1

Bir not defteri üzerine notlar ve yaklaşımlar çizdiğimde, kitapları kontrol ettiğimde, interneti kontrol ettiğim ve düşündüğümde kodum çok daha iyi organize oluyor. Aynı zamanda daha çok görsel bir insanım, bu yüzden veri yapıları ile resim çizmek çok faydalı. Her satırı bir yere yazmıyorum, ancak "önemli" parçaları veya kilit işlevsellik olarak düşündüğüm şeyleri karalarım. Daha büyük projeler için Visio'yu ateşledim. Birisinin neden çok daha verimli olmadıkça veya bir saatlik ödeme yapılmadıkça klavyeye atlamayı neden savunacağını bilmiyorum.


-1

Sizin için neyin işe yaradığını yapın. Kağıda kod yazmam. Sahte kod yazıp kağıda akış çizelgeleri çiziyorum, ancak tam kodu yazmak zaman kaybı gibi görünüyor.


-2

Aynı zamanda teknik becerileri öğrenme ilk günümde de aynı problemle karşı karşıyayım.

Ancak bu tip uygulama% 100 başarı vermemelidir, çünkü kağıda kod yazıyorsak hata düzeltme olanağı yoktur, kağıt işi yaparken hataları ve istisnaları çözme şansı vardır.

Bu nedenle kağıt işleri, sorunları çözmek için herhangi bir gezinme sağlamaz. Ayrıca sistem uygulaması nedeniyle tür hızını bonus olarak alabiliriz.

Ayrıca kağıt işi yapıyorum, ancak fonksiyonelliğimi uygulamadan önce sadece kaba bir tahmin yapıp bundan sonra sistemde uygulamaya başlayacağım.

Lütfen sistem uygulaması için daha fazla zaman geçirmeye çalışın. Bu% 100 güven ve sonuç verecektir.

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.