it-swarm.dev

Sorun çözme yeteneğimi nasıl geliştirebilirim?

Herkes aynı şeyi söylüyor: "gerçek bir programcı gerçek problemleri nasıl çözeceğini bilir." Ancak bu yeteneği nasıl öğrendiklerini veya nerede öğrendiklerini unutuyorlar: okullarda öğretilmiyor.

Karmaşık programlama sorunlarıyla başa çıkma yeteneğimi geliştirmek için ne yapabilirim? Sizin için hangi stratejiler işe yaradı? Odaklanmam gereken algoritmalar veya tasarım modelleri gibi belirli alanlar var mı?

50
user12278

Çalışabilecek veya çalışmayabilecek birkaç teknik:

  • Sık karşılaşılan sorunlara ilişkin mevcut çözümlere bakın, ör. tasarım desenleri. Belki de sorununuzu en azından kısmen andıran benzer bir şey bulursunuz. İnternette ara.
  • Sorun zaten çözülmüş gibi davranın ve yapılacak çözüme kadar olanları izleyin. Örneğin, bir sınıf için API tasarlamak yerine, sınıftan faydalanan kodu istediğiniz gibi yöntem çağrılarıyla yazmanız ve ardından bu API'yi uygulamanız yeterlidir.
  • Başka bir şey yapın, ör. internette sörf yapın veya solitaire oynayın ve ilhamın oluşmasını bekleyin.
  • En sevdiğiniz kişiyi düşünün ve problem çözme becerilerinizle onu etkilemek istediğinizi varsayalım. Son derece etkileyici bir çözüm ne olurdu?
  • Sorunun doğasında var olan çelişkiler veya çelişen gereksinimler olup olmadığını kontrol edin ve tam olarak ne olduklarını ve hangi uzlaşmanın yapılabileceğini belirtin. Çoğu zaman, bu tür çatışmalar olduğunda, ancak farkında olmadığınızda, olası bir çözümü birbiri ardına atma eğilimindesiniz, çünkü tüm gereksinimleri tam olarak karşılayamazsınız.
  • Zaten olası bir çözümünüz varsa, ancak "kirli" hissediyorsa (kopyala-yapıştır, global değişkenler, spagetti kodu vb.), Yine de kullanın ve daha sonra daha iyi hale getirin
25
user281377

R modu veya L modu düşünmeyi gerektiği gibi kullanın

R-modu, yaygın olarak bilinçaltı ile ilişkilendirdiğimiz yaratıcı, sözel olmayan yaklaşımdır. L-modu, “iç sesiniz” ile ilişkili doğrusal, mantıksal, sözel yaklaşımdır.

Eğer bir problem çözülemez gibi görünüyorsa, bunun nedeni muhtemelen yanlış düşünme modunu kullanarak çözmeye çalışmanızdır. Programcılar için varsayılan düşünme modu L modu olma eğilimindedir, bu nedenle geçici olarak kapatmanız ve R moduna erişmeniz işe yarayabilir.

R-mod düşüncesine nasıl erişilir

Birçok yol var, ama belki de Poincare yöntemini deneyin (ünlü matematikçinin adını almıştır).

Sorun hakkında bildiğiniz her şeyi yazın. Hemen tüm kolay yönlerini (varsa) çözün. Kalan "zor sorunlar" listesinden tek bir öğe seçin ve rahatsız edilmeyeceğiniz veya dikkatinizin dağılmayacağı bir yürüyüşe çıkın.

Yürüyüş sırasında problemi analiz etmeye çalışmayın, sadece zihninizin dolaşmasına izin verin ve problemle ilgili olabilecek ilginç görüntüleri veya hisleri gözlemleyin. Birleşsinler. Eğer ilham gelirse derhal yürüyüşü durdurun ve edindiğiniz bilgileri yazın.

Durulayın ve tüm problemler içgörüye ulaşıncaya kadar tekrarlayın. Ardından bilgileri keşfetmeye başlayın.

Kitap önerisi

Ayrıca Pragmatik Düşünme ve Öğrenme okumak daha iyi bir problem çözücü olmanıza yardımcı olabilir. (Son zamanlarda bu kitaba çokça atıfta bulunuyorum ...)

20
Gary Rowe

Bir başkasına sor...

Yok gerçekten. En büyük kaynağınız, yanınızda oturan kişi olabilir. Sorunun cevabını bile sormayın, yanınızda oturmalarını isteyin ve sorunu açıklamanıza izin verin.

Genellikle sözlü olarak çalışacaksınız.

Bazen diğer kişi bir soru soracak veya zihinsel taşkın kilidini açacak bir detayı işaret edecektir.

Sonunda bir kukla kullanmadan kafanızdaki şeyleri sözlü olarak öğrenmeyi ve problemdeki önemli detayları daha hızlı tespit etmeyi öğreneceksiniz.

Ve en azından her şey başarısız olursa, size kullanmayı düşünmeyeceğiniz bir teknik gösterebilirler.

17
gingerbreadboy

Aslında kısa cevabım "daha fazla problem çözme". Ama asıl mesele: Gerçekten sorunlara odaklanın ve pes etmeyin. StackOverflow veya herhangi bir konuda yardım istemeyin. (StackOverflow'u okumak elbette tamam!) Neredeyse işe yarayan bir çözüm elde edene kadar çok çalışın, o zaman neredeyse hedefinize ulaştınız. Ve tatmin edici bir çözüm bulana kadar devam edin.

Benim için problem çözme iki şeydir:

  • problem çözme stratejisi
  • sebat ve hayal kırıklığı toleransı

Nokta 2 bence gerçekten çok önemli çünkü bir sorunla daha uzun süre sıkışıp kaldığınızda düşüncelerinizi değiştirmeye zorluyor. Aynı zamanda becerilerinizi daha da geliştirmenize olanak tanıyan problem çözme ile daha fazla zaman geçirmenizi sağlar. ;-)

Bu arada, Edward de Bono'yu okumanızı tavsiye ederim. Problem çözme becerilerimi esas olarak Fizik okuyarak edinmiş olmama rağmen, yazısı gerçekten ilginç.

Peki ve benim problem çözme araç takımı şudur:

  • rastgele bir şey dene
  • i̇lgilendiğim konu (veya yakından bağlantılı bir konu) hakkında rastgele makaleler/bloglar/yazılar okuyun
  • güzel bir çizim yapmak
  • sorunu birden çok ama daha basit sorunlara bölme
  • başka bir şey yap
  • Google, bir şekilde sorunla ilgili bir şey
  • sorun hakkında başkalarıyla konuş
  • yAPILACAKLAR listesi yap
  • problemin etkisi hakkında bildiğiniz şeyleri yazın, böylece desenleri daha kolay bulabilirsiniz

Bu araçların çoğunun tekrar tekrar uygulanabileceğini lütfen unutmayın.

Ve algoritmam şu:

  1. Sorun çözme araç setimin hangi aracı şu anda en anlamlı?
  2. Sorun çözülmedi mi? 1. ;-) ile devam edin

Adım 1. zor bir karardır, ancak ne kadar çok pratik yaparsanız o kadar iyi kararlar alırsınız.

Oh ve neredeyse en önemli içeriği unutuyorum:

Tüm süreç hakkında olumlu düşünün. "Umarım XYZ artık sorunu çözecektir." Aksine: "XYZ işe yaramazsa, YZX'in sorun kaynağı olamayacağını biliyorum ve ZYX'in çalışıp çalışmadığını kontrol edeceğim." Problem çözme, bazen sorun bulma sürecinizin zarif ve bilgilendirici olması durumunda bazen eğlenceli olabilir.

9
Philip

Sorunları tanımlama becerisi üzerinde de çalışmaya başlayın. Bazen çözmeden önce bir sorun olduğunu fark etmelisiniz. Okulda öğrencilerden çok fazla cevap ve yeterli soruya gerek yok.

Etrafınızdaki sorunları çözen insanları bulun ve onlara nasıl devam ettiklerini sorun.

Yanlış olmaya hazır olun. Hepsini kendinize saklarsanız iyileşmezsiniz ve hiçbir faydası olmaz.

7
JeffO

Yazılım mühendisleri için bilgisayar bilimleri eğitiminin temel yararı soyutlamaları yaratma ve anlama yeteneğidir. Soyutlamalar, String sınıfı yöntemleri gibi ortak işlevleri, daha büyük soruna odaklanmamızı sağlayan sıkı, yeniden kullanılabilir paketlere kapsüllemek için kullanılır.

Soyutlamaları tanımayı ve oluşturmayı öğrenin:

Ama en önemlisi, soyutlamalar bize öğretir bir problemin daha küçük, daha yönetilebilir parçalara nasıl bölüneceği. Bir bilim geçmişi ile birleştirildiğinde, bu becerilerin kombinasyonu gürültüyü kesip sorunun kalbine ulaşabilen bir mühendis yaratabilir.

Bilimsel Yöntemi kullanarak problemleri çözmeyi öğrenin:

Bulunması zor bir sorunun olduğu bir üretim uygulamasında sorun giderirken, bazen bir değişkeni izole etmek ve ortadan kaldırmak için birkaç değişkeni ortadan kaldırmak için uygulamayı daha fazla kırmaya yardımcı olur (üretim dışı bir ortamda).

Özetle, bir bilgisayar bilimleri derecesi için gerekli olan tüm Fizik seçmeli derslerini ve diğer fen bilimleri seçmelerinden öğrenilen bilimsel yöntem, bu sorunları bir dizi gönüllü üzerinde bir plasebo ve yeni bir ilaç denemesi yapıyormuş gibi çözmeye yardımcı olur. Daha iyi hale getirmek için bazen daha kötü bir şey yapmak zorunda olan bilim adamları gibi, bazen mühendisler olarak aynı şeyi yapmalıyız.

Bilimsel olarak bu şekilde düşünmek - genel olarak - sadece bir bilim geçmişinde deneyime sahip olmaktan gelebilir. Bazen bir problemi çözmek A'dan B'ye doğrusal bir yol olarak algılanamaz.

Kısacası, bilgisayar bilimi, diğer bilimsel alanları incelemek, fonksiyonel programlamayı öğrenmek. Bunlar bir bilim adamı gibi düşünmenize ve kutunun dışında düşünmenize yardımcı olacaktır.

4
jmort253

Bence aradığınız şey bilgisayar bilimi buluşsal yöntemidir.

Siperlerde% 99'umuzun ne yaptığına gelince, Güneş altında gerçekten yeni bir şey yok. Yani bir problemi görebilir ve onu bir DP problemi olarak ya da başka bir problemi, memoizasyondan vb. Yararlanabilecek bir problem olarak tanıyabilirsiniz.

Bu bilgiyi nasıl elde ediyorsunuz? Uygun bir CS derecesi, başlamak için iyi bir yerdir ... Yazılım Mühendisliği veya Bilgi Sistemleri değil, çoğu lisans öğrencisi "pratik olmama" dan şikayet ediyor.

Bunu kendi başınıza yapabilirsiniz, ancak muhtemelen daha zor olacaktır. Bu iki kursla başlardım:

Algoritmalara Giriş

Teorik CS'de Harika Fikirler

3
red-dirt

Her şey ne tür problemleri çözmeyi amaçladığınıza bağlıdır, ancak zaten yapmadıysanız mantıklı düşünmeyi öğrenmek iyi bir şeydir.

Sonuçta ve bunu söylemekten nefret edeceksin, ama pratik mükemmelleşiyor. Nasıl iyi bir problem çözücü olacağını bilerek annemin rahminden çıkmadım ve başka kimse yapmadı. Pratik yapmalı ve işleri kendi başınıza nasıl yapacağınızı öğrenmelisiniz. Hâlâ okula gidiyorsanız ve programlama/bilgisayar bilimi türü dersleri yoksa, matematik ve fen bilimleri de bu becerilerin gelişimini desteklemek için oldukça iyidir.

3
user7007

Yanıtlarım özellikle kodlama ile ilgilidir, ancak her şeye uygulanabilir.

  1. Klavyeden uzaklaşın. Bir yürüyüş konuş, koşuya çık, bir meslektaşı ile bir kahve üzerine konuş
  2. 10 yaşında olun! Deneyimlerim bana çok yardımcı oldu.
  3. İkili pirzola kullanın. Sorunu ikiye bölün ve sorunu daraltın: tekrarlayın.
  4. Sherlock Holmes'u hatırlayın: Mümkün olanı ortadan kaldırdığınızda, ne kalırsa (ne kadar garip olursa olsun) cevap
  5. Test verilerinizi kontrol edin. Benim gerçekten zor sorunlarımın yarısından fazlası hatalı veri veya hatalı kod veya algoritmalardan kaynaklandı.
2
Fortyrunner

Uygulama açısından size ne yaptığımı söyleyebilirim. Uygulamalı matematiğe programlamadan daha çok ilgi duyuyorum, fakat uygulamalı matematiğe uygulanan matematiğin türlerinin programlanması. Etrafta sorunlar ve çözümler görüyorum. Daha önce (veya bazen sonra, işim zamanında bir çözüm gerektiriyorsa), bilinen bir çözüme veya mevcut kod kütüphanesine bağlanırken, kendime şunu sormak istiyorum: "Bu bakire bir sorun olsaydı - bulamazsınız hazır bir çözüm, nasıl ilerlersiniz? " Cevap biraz açıksa, bir çözüm (analitik veya çözmek için bir bilgisayar programı) yazmayı düşünün. Karmaşık son vakaları göz ardı edin, -Mevcut bir kütüphaneyi yeniden keşfetmekle değil, yaklaşımları ve algoritmaları keşfetmekle ilgileniyorsunuz. Çözüm çok fazla çaba gerektirecekse, tam çözümü programlamayın, en azından kullanmak istediğiniz veri yapıları ve yöntemleri hakkında düşünün. Ayrıca alternatif yöntemleri de düşünün.

1
Omega Centauri

Bir bilim geçmişinden geliyorum, bu yüzden bir soruna baktığımda Bilimsel Yöntem 'dan taktik kullanmaya eğilimliyim. Özellikle hipotezlere dayalı "deneyler" kurmak ve "kontroller" kullanmak istiyorum, bu yüzden bir şey inşa edeceğim ve daha sonra bu konuda sadece 1 şey değiştireceğim/ekleyeceğim ve bir değişiklik/eklemenin sonucunu ve eğer İhtiyacım olan sonucu alamıyorum, geri dönüp başka bir şey değiştireceğim. Bu, kod sorunlarını gidermek/hata ayıklamak için iyi çalışır. Bazen aradığınız cevabı alırsınız, ancak başarısız olsanız bile her zaman yeni bir şey öğrenirsiniz. Ayrıca indirgemecilik - zaten var olan bir şeyi alarak (anlayamayabileceğiniz bir şeyle başlamak her zaman iyidir, ama işe yaradığını biliyorsunuz) öğrenmeyi seviyorum ve bana karmaşık görünüyor ve kırıp kılamayacağımı görüyorum parçalarına ayırın ve önce nasıl çalıştıklarını öğrenin. Beynimin bir soruna bütünsel olarak yaklaşmak yerine böyle öğrenmeyi başarması bazen daha kolay olur ve bu bilgiyi kendime benzer karmaşık şeyler oluşturmak için kullanabilirim. Ayrıca hem klasik hem de modern düşünürlerden mantık ve akıl yürütme seçimleri üzerine kitaplar okumayı öneriyorum (Aristoteles ile başlayıp yolunuza devam edin). Bilgisayarlarda problem çözmede size yardımcı olacak temel mantığın bazı temellerini verebilirler. Ve elbette, bir sorunu çözemiyorsanız ve bir süredir üzerinde çalışıyorsanız, bir beyin molası verin. Bir konunun belirli bir yönünü aydınlatmak bazen zararlıdır. Herkesin ara vermesi gerekir :)

1
kelleystar

Bu konuda büyük bir SO sorus var.

Cevabım şuydu:

Geliştirmenin en iyi yolu pratik yapmaktır!

RSS akışına şu adresten abone olun: http://www.mensa.org.uk/puzzles/ ve çıktıkça bunları tamamlamak için zaman ayırın.

Günde bir bulmaca takvimi (ör. http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) size düzenli, ısırık büyüklüğünde ve çeşitli problemleri çözeceğinden iyi bir fikirdir.

Bunlar her zaman karşılaşacağınız sorunlardan kaçınılmaz bir konu olsa da, çeşitlilik, daha önce hiç düşünmediğiniz şekilde düşünmenizi zorlayacağı için önemlidir, bu da problem çözme ile ilgilidir.

Düzenleme: Ayrıca şunları da kontrol edin: http://www.mindtools.com/pages/main/newMN_TMC.htm iyi sorun çözme ipuçları için.

1
StuperUser

Satranç Oynayın

Satranç oynamak, programlama problemlerini çözmek için mükemmel bir eğiticidir. Sorun katmanları ve mantık ağaçları çok güzel ilişkilidir. Aynı zamanda ileriyi düşünmenize ve yetersiz bir yoldan ve zaman kaybetmeden planlama yapmanıza yardımcı olur.

Satranç ayrıca sol ve sağ “düşünme modları” arasında bir denge gerektirir. Çok analitik hale gelirseniz, her şeyi hesaplamaya çalışırken batağa saplanabilirsiniz, bu imkansızdır. Bununla birlikte, her yaratıcı ilhamın, durumun somut gerçekliğine uyduğundan emin olmak için bir hesaplama ile kontrol edilmesi gerekir. Zor problemler böyledir.

Satranç, çalışma ve uygulamanın nasıl çok doğrusal bir şekilde sağlam bir gelişmeye yol açtığını gösterir. Bu, program problem çözme için de geçerlidir.

Satranç oynamak da ne kadar öğrenmeniz gerektiğine dair iyi bir kavrayışa sahip olmanıza yardımcı olabilir. 10 yıldır programlama (ya da satranç oynamış olsanız bile) henüz büyük usta değilsiniz.

1
Jeff Davis

Son zamanlarda Project Euler adresindeki sorunları çözüyorum. Sorunlar çeşitli zorluklarla karşı karşıya. Çözümler genellikle büyük miktarda kod gerektirmez, ancak algoritmanızın çalışma süresi gibi birçok faktörü göz önünde bulundurmanız gerekir. Sadece bir cevap girerken, istediğiniz herhangi bir dili kullanabilirsiniz. Birçok sorun için en uygun çözümün iyi bir şekilde yazılması ve her sorun hakkında çok fazla tartışma vardır. Her gün bir sorunu çözmeye çalışın ve problem çözme ve analizinizin ne kadar geliştiğine şaşıracaksınız. Ekstra kredi için, aynı sorunu yordamsal bir dil (belki C++), bir komut dosyası dili (python gibi) ve işlevsel bir dil (F # gibi) gibi birçok dilde çözmeye çalışın.

1
Erik

Problem çözmenin en zor kısmı “Algısal Daraltma” dır.

Sorun gibi görünen bir şey seçiyorsunuz ve bitene ve ilerleme kaydedene kadar ondan sonra gittikçe devam ediyorsunuz.

Bunu yapmanın yolu, sorunu kesinlikle anladığınızdan emin olmaktır - kesinlikle emin olmaktır. "Doğru Problemi Çözmek" problem çözmenin en önemli parçasıdır.

Bazen buna "kutunun dışında düşünmek" derler. "Kutu" gerçek, temel sorunu içermeyen dar bir bakış açısıdır. Kutunun dışında düşünmek, çözmek için doğru problemi aramaktır.

Yanlış soruna erken odaklanılan daralmayı önleme stratejileri hakkında çok sayıda kitap vardır.

Çoğunlukla hile, gerçek sonucun ne olması gerektiğini tanımlamaktır. O zaman bu istenen sonucu hangi blokları engellediğini anlayın.

0
S.Lott

Uygulama geliştirmede, karşılaştığımız problemler birçoğu ya kendi icadımız ya da kod tabanını devralmış olduğumuz aptalın icadıdır. Bir problemi çözmek çoğunlukla kaynağı bulmak olur. Genellikle, nerede olduğunu bulduktan sonra, çözmek için gereken yeterlilik yeterlidir.

Bu amaçla:

  1. Platformunuzu öğrenin.
  2. Araçlarınızı öğrenin.
  3. Platformunuz için henüz karşılaşmadığınız araçları öğrenin.

Dünyadaki tüm beyin eğitimi, beynin kullanması için bilgi olmadan işe yaramaz. Bir sorunu çözmek için olasılıklar ilk önce ne olduğunu bilmelisiniz! O zaman bile, sorunun açıklaması değil, iyi bilgilerle çalışmak çok daha hızlı.

İneklerin neden bir şeyin yürütülmesi için çok uzun sürdüğü konusunda eve gelene kadar spekülasyon yapabilirim. Ama "önce bazı verileri alalım" dersem, bir sürü istisna atıldığını ve bunun yerine bir if ifadesiyle değiştirilebileceğinin farkına varabilirim. Bilgileri nasıl toplayacağımı bilmeden, platform istisnalarımın biraz fazla yük aldığını ve denemeden önce kontrol etmenin bir yolu olduğunu bilerek, sorunu asla çözemezdim.

0
MIA

Cevabınızın iki kısmı var:

a) Gerçek problem çözme tekniği

b) Düşünme ve problem çözmede beyninizi doğal olarak "daha iyi" yapmak

Teknikte her zaman bazı harika cevaplar olmuştur (sorunu bildiğinizi varsayalım vb.) Bu yüzden bunu o kadar kapsamaz. Beyninizi eğitmeye gelince, bu sinapsları geçmek ve daha fazla bağlantı kurmak için yapabileceğiniz birkaç şey var

1) Yeni bir dil, gerçek bir dil öğrenin (Fransızca veya Çince gibi bu günlerde iyi bir bahis olabilir)

2) Yeni bir enstrüman çalmayı öğrenin

3) Boya, çizim veya heykel gibi sanatsal bir şey yapın

4) Scrabble oynayın veya bulmaca yapın

5) Dediğin gibi dans et. Hayır, şaka yapmıyorum. Dansın beyniniz ve düşünmeniz üzerinde etkisi olduğu gösterilmiştir.

6) Deneyimlerinizi genişletin, yenilikçi çözümler bir teoriyi bir alanda başka bir alana uygulamaktan geldi, bu yüzden ilginç bulduğunuz farklı alanları ve alanları inceleyin

7) Egzersiz, egzersiz çok önemlidir önemli düşünme sürecini iyileştirmek için

Son olarak, zor sorunları çözmek için en iyi ipucunu sunacağım: uzun bir yürüyüşe çıkın. Başını temizlemek ve problemleri düşünmesine izin vermek için mucizeler yaradığını gördüm.


0
Homde

Bir programcının, sorunun en sevdiği programlama diliyle nasıl çözüleceğini görselleştirerek bir soruna zihinsel olarak saldırması kolaydır. En sevdiği alet çekiç olduğunda tüm sorunları çivi olarak gören klasik marangoz gibi.

Bence en iyi problem çözme alıştırmaları pratik seviyenin üzerine çıktığında ve "bunu en iyi şekilde çözmek için ihtiyacım olan şey" diye düşündüğünde gelir. Bazı durumlarda, çözümü uygulamak için yeni şeyler öğrenmek zorunda kalabilirsiniz, ancak asıl önemli olan, bir çözüm üretme yeteneğinizin geçmiş ve mevcut tekniklerinizle sınırlı olmaması gerektiğidir.

Benim için eski bir pratik örnek, genellikle tüm muteksleri patlatmak için rahatlık alanımın hemen önüne gidecek olsam da, problemimin aslında önleyici iplere ihtiyaç duymadığını fark ettiğimde verimli kooperatif çoklu görevinin nasıl uygulanacağını öğrendim. sonunda her zaman bir noktada rahat olmayı bırakmış gibi görünüyor ..).

0
sharkin

Problem çözme, okunarak öğretilebilecek ve hatta öğrenilebilecek bir şey değildir. Sorunları çözmede daha iyi olmanın tek yolu sorunları çözmek.

Hakkında okuyabileceğiniz problem çözmede farklı teknikler ve metodolojiler vardır ve belirli bir alandaki sorunları çözmek için kullanabileceğiniz araçlar ve teknolojiler hakkında bilgi edinebilirsiniz. Sorunları sürekli olarak düşünmedikçe, çözümler bulmaya çalışmayın (her sorun için birden fazla çözüm bulun ve bunları birbirinize karşı değerlendirin) ve ardından çözümlerinizi başkaları tarafından geliştirilen çözümlere göre değerlendirin, sorunla daha iyi olmayacaksınız çözme.

Ben Pragmatik Düşünme ve Öğrenme: Andy Hunt tarafından Wetware Refactor bir kopyasını almanızı öneririz. Nasıl düşündüğünüzü, nasıl tepki verdiğinizi ve öğrendiğinizi anlayan bir kitap. Davranış teorisi ve diğer bilişsel bilimlerden ilgili teorileri getirir. Özellikle yazılım geliştiricilere yöneliktir, ancak herhangi bir bilgi çalışanı için geçerlidir.

0
Thomas Owens

Benim gibi programlamadaki yeni başlayanlar için "Bir Programcı Gibi Düşün" kitabını öneriyorum. İlk bölümde, bildiklerinizden yola çıkarak, bildiklerinizi yeniden ifade etme ve bölme, azaltma, analojiler ve deney yapma gibi problem çözme tekniklerini kapsar.

Daha sonra C++ 'da örneklerle daha gelişmiş teknikler vardır: diziler, işaretçiler ve dinamik bellek, sınıflar, özyineleme, kod yeniden kullanımı ile sorunları çözme. Bu kısım hakkında yorum yapamam çünkü henüz benim için çok zor.

0

Benim tavsiyem kitabı atın!

Tabii ki değil. Demek istediğim, çok az deneyime sahip olduğunuz bir konu alanına girin ve mevcut çözümleri öğrenmeden oradaki zor sorunları çözün. Yaratıcılığınızdan ve eleştirel düşüncelerinizden ve belki de bir referans kılavuzundan başka hiçbir şeye güvenmeyin.

Bir görüntü formatı tasarlayabilirsiniz. Veya bir web sunucusu. Veya bir sıkıştırma şeması. Dosya sistemi. Çekirdek. Yapay zeka. Programlama dili. Bilgisayarlı görüş sistemi.

İlginç bulduğunuz, oldukça karmaşık ve hiç öğrenmediğiniz bir şey. Yapmayın okuyun: sadece düz atlayın. Hata yapmak. Tekerleği yeniden icat edin.

Yardım istemeyin. Öğreticilerden uzak durun. Teoriden uzak durun. Bir çözümü raftan çekmeyin.

Neden?

  • Hatalardan en iyi öğreniriz.
  • Eski çözümleri yeniden tasarlamak ve uyarlamak yerine, çözümleri yaratıcı bir şekilde bulma pratiği yapma fırsatı sunar.
  • Fikirlerinizi değerlendirmek zorundasınız. Araçlarınızı, çözdüğünüz sorunu ve değerlendirmek istediğiniz fikri iyi anlamadan bunları değerlendiremezsiniz. Bu, konuyu başka türlü geliştireceğinizden daha derin bir anlayışa götürür. (Kullandığınız araçlar hakkında okumaktan çekinmeyin, çözmeye çalıştığınız sorunu okumayın.)

Birkaç deneme yapın ve başardıklarınızdan memnun olduğunuzda, birkaç ay bırakın. O zaman taze gel ve yeni bir bakış açısı bulabilecek misin? Bundan sonra, sorunu ve başkalarının sorunu nasıl çözdüğünü (veya insanlarla konuştuğunu) okumaya başlama zamanı. Bu noktada, okurken kendinize "evet, mantıklı" demek yerine, "evet, tam olarak" veya "bir dereceye kadar" veya "vay, zekice".

Başka bir deyişle, okuduklarınız hakkında çok daha eleştirel düşünürsünüz ve anlamanız ve hatırlamanız çok daha kolay olur, çünkü onu eklemek için zaten büyük bir "zihinsel çerçeveniz" vardır. Bağımsız olarak keşfettiğiniz şeyler hakkında iyi hissedeceksiniz ve bir yığın yeni bilgi ile uzaklaşacaksınız.

Çözümünüzü mükemmelleştirmeye çalışmayın. Sadece kendinize kanıtlayın can sorunu çözebilirsiniz. Bir "yapabilirim" tutumu benimseyin ve eğer sorun sizi korkutuyorsa, onu ilk çözen kişinin muhtemelen sizin kadar bildiğini unutmayın (aslında, bir çözümü olduğunu bilmiyorlardı!).

0
Artelius

Dürüst olmak gerekirse, herkes farklı, bu yüzden daha iyi bir problem çözücü olmak için herkesin yol haritası farklı. Diğer insanların deneyimlerinden öğrenebilirsiniz, ama sonunda kendi yolunuzu oluşturmalısınız. Bu aslında bir şeyi "zor yoldan" öğrenmek, ama bu durumda etkilidir.

Sorun çözme yöntemimi nasıl geliştirmeye başladım, ancak henüz mükemmel bir sorun çözücü değilim, geçen sene olduğundan daha iyi bir sorun değil. İş için yönetim için üç yeni rapor ekleyerek açık kaynak kodlu bir zaman izleme yazılımı uzatmayı içeren yeni bir proje verildi. Bu yazılım hiç kullanmadığım bir dilde yazılmış ve kötü belgelenmiş ve yüksek derecede gizlenmişti. Araştırdım ve bir ton araştırma yaptım ve daha sonra bebek adımlarında raporlar üzerinde çalıştım, bir kez temel işlevselliğe sahip olduğumda onları geliştirdim ve sonra daha fazla özellik ekledim.

Başka bir deyişle, üzerinde çalışabileceğiniz bir tür lavabo veya yüzme gerçek dünya projesi bulmanızı öneririm. Şu anda bir programcı olarak çalışıyorsanız, bir proje bulun veya patronunuzdan bir tane isteyin. Bu senaryo mümkün değilse işin dışında bir tane bulun, belki sözleşme/serbest çalışma falan. Gerektiğinde problemleri çok iyi ve hızlı bir şekilde çözüyorum ve projenin yoğunluğu nedeniyle bu bilgiyi koruyorum. Bu sizin için işe yaramazsa, sadece bu iş parçacığında herkesin önerdiği şeyi yapın :).

0
hockfan86

Cevap sorunun kendisinde farklı çözümlerle ortaya çıkıyor. Her zaman birden fazla çözüm vardır (örn. Sıralama farklı şekillerde yapılabilir) Kabarcık Sıralama, Seçimler sıralama vb.) Sadece verimli bir şekilde yapabileceğiniz bir yol seçmeniz gerekir (Sıralama). Bir dahaki sefere farklı deneyin ... Ve Problem çözme için kitaplar ..... Hiçbiri Kitaplardan Problem çözme becerilerini öğrenemezsiniz, daha fazla kod kazanacağınız daha fazla bilgiyi yürütürsünüz. İyi şanslar

0
Ranger