it-swarm.dev

Hala nasıl programlayacağımı anlayamıyorum?

Çeşitli programlama dilleri, Java, Python, C, vb. İçin birçok kitap okudum. Dillerin tüm temellerini anladım ve biliyorum ve algoritmaları ve veri yapılarını anlıyorum. (Diyelim ki iki yıllık bilgisayar bilimi dersleri)

AMA, yine de yararlı bir şey yapan bir programın nasıl yazılacağını anlayamıyorum.

Tüm programlama kitapları, dili nasıl yazacağınızı gösterir, ancak nasıl kullanılacağını DEĞİLDİR! Programlama örnekleri, bir kütüphane veya basit bir oyun için bir kart kataloğu oluşturmak veya algoritmalar, vb. Gibi çok basittir. Size gerçekten yararlı bir şey yapan karmaşık programların nasıl geliştirileceğini göstermezler!

SourceForge üzerinde açık kaynaklı programlara baktım, ama bana pek mantıklı gelmiyorlar. Her programda yüzlerce dosya ve binlerce satır kod vardır. Ama bunu nasıl yapacağımı nasıl öğrenebilirim? Amazon'da satın alabileceğim herhangi bir kitapta bana bu programlardan herhangi birini yazmam için araçlar sağlayacak hiçbir şey yok.

Java veya Programlama Python veya C Programlama Dili, vb.) Konusuna girişten aslında X programı için bir fikrim var mı diyebilirim? geliştirme hakkında?

Bir program yazarken, bir kitapta veya bir sınıftan öğrenebileceğinizden çok daha fazla şey var gibi görünüyor. Bir şey varmış gibi hissediyorum.

Nasıl doğru yola girebilirim?

122
Mark K.

Daha karmaşık programlar oluşturmak tecrübe ile birlikte gelir. İlk programladığımda 25 satırın üzerinde olsaydı iyi yaptığımı sanıyordum (ve kaydırma çubuğunu kullanmak zorunda kaldım) Şimdi aynı proje uygulamasında yıllarca günde yüzlerce satır yazıyorum.

Bu sayfayı "On Yılda Kendine Programlama Öğret" konusunda ilginç bulabilirsiniz http://norvig.com/21-days.html

BTW: Bir programı başlatmak çok zor. Bir yazar buna "yazar bloğu" diyebilir. Bunun yerine, kod yazmaya ve geliştirmeye başlamanızı öneririm. İhtiyacınız olanı yapmayan büyük bölümleri silmekten korkmayın. Tekrar başlayın, bu sefer ne yaptığınız hakkında daha iyi bir fikirle yazacaksınız. Tekrar başlayın ve son yazdığınız şeylerin yarısına ihtiyacınız olmadığını göreceksiniz. Bir yazar bir hikaye yazdığında, uzun zaman alır, çok fazla yazı ve yeniden yazma vb. Birçok inceleme ve geri bildirim alır ve sadece yayınlanması (yayınlanması) bittiğinde biter

93
Peter Lawrey

SourceForge veya GitHub'da bulduklarınız gibi çok büyük projelerden de hep bunalmıştım. Herkesin, hatta bir takımın, 10 veya 100'lü dosyalarda neler olduğunu binlerce ve binlerce satırlık kodla nasıl anlayabileceğini merak ettim.

Kimse yapmaz. En azından başlangıçta.

Projeler organik şeylerdir. Gerçekten basit bir fikir olarak başlayan şey, hızla devasa bir iş parçasına dönüşebilir. Bence klasik şelale yaklaşımı yerine yinelemeli gelişimin ana nedeni budur.

Bir araba yapmayı düşünün. Dışarıdan oldukça basit görünse de, küçük bir yol bile bulmak, ele alınması gereken çok sayıda dikkat, takas ve masum vaka olduğunu keşfeder.

Misal:

Yarı büyük bir proje söz konusu olduğunda, genellikle küçük başlar. Msgstr "Bir önbellek sunucusu kurmak istiyorum". Yani birkaç günü hack yaparak geçiriyorsunuz ve işe yarayan bir şeye varıyorsunuz, ancak önemli ölçüde geliştirilebiliyor. Böylece diş açma kavramını eklersiniz.

Sonra bu iş parçacığı nedeniyle eşzamanlılık sorunları ile karşılaşırsınız. Böylece eşzamanlı veri yapılarına geçerek düzeltirsiniz.

Şimdi süreç yavaşladı. Böylece eşzamanlı veri yapılarını normal yapılarla değiştirirsiniz, ancak senkronizasyon için kilitleme mekanizmaları sağlarsınız.

Kullanıcılar işlemlerin atomik olmadığından ve verilerin bozulduğundan şikayet etmeye başlaması dışında her şey iyi çalışıyor gibi görünüyor.

Böylece arttırma ve kaydetme gibi bazı klasik atomik işlemlere eklersiniz. Bu işe yarar ve kullanıcılarınız mutludur. Ancak birisi, işlemleri listelemenin mümkün olup olmadığını soran bir bilet açar.

Yani bir hafta içinde iki bina geçiriyorsunuz. Bu sırada bir arkadaşınız size yardım etmeye karar veriyor. Üzerinde birlikte çalışıyorsunuz, tamamlıyorsunuz ve serbest bırakıyorsunuz.

İki bilet açık. Liste işlemede bir hata var ve kilitlenme olan bazı nadir durumlar var.

Kilitlenme ile mücadele ederken arkadaşınız liste işleme hatası üzerinde çalışır. Atomik işlemlere oldukça önemli bir yeniden yazmanın gerçekleşmesi gerektiğini fark ediyorsunuz.

... ve böyle devam ediyor.

Bu, bir projenin nasıl büyüdüğü konusunda oldukça tipik görünüyor. 10 hafta içinde birkaç haftada 20 dosya büyüdü. Orijinal planın dışında olmayan yeni özellikler eklendi. Kodu doğal olmayan şekilde büyüten kıvrık hata düzeltmeleri eklendi.

Benim tavsiyem:

Bunalmayın. Bir fikriniz varsa, işlevsellik parçalarını uygulayın. Eğer peşinden gitmeye değerse, yavaş yavaş ekleyin. Projenizin doğal olarak büyümesine izin verin.

70
Josh Smeaton

En büyük program bile bir fikirle başlar ve her seferinde bir satır yazılır.

Gerçek dünyadaki programların nasıl yazılacağını öğrenmenin en iyi (belki de tek) yolu, bunu yapmaya başlamaktır. Sorunlarla karşılaştığınızda, web'de arama yapar veya burada bu sorunların çözümlerini istersiniz. Sonunda, deneyim kazanacak ve daha az sormak zorunda kalacaksınız.

Ancak, en baştan bilmeniz gereken bazı şeyler vardır:

  • Bugünlerde neredeyse hiç büyük bir uygulama tamamen sıfırdan yazılıyor. Mevcut yüksek kaliteli kütüphaneleri ve çerçeveleri kullanıyorsanız çok daha kısa sürede daha fazlasını yapabilirsiniz. Bunlarla başlamak çoğu zaman kendiniz yapmaktan oldukça sinir bozucu ve daha fazla iş çıkarır, ancak bu neredeyse hiç doğru değildir.
  • Programlarınızı nasıl yapılandırdığınızı (nasıl tasarlayacağınızı) dikkatlice düşünmek, programlarınız büyüdükçe çok önemlidir. Bunun için biraz zaman ayırın ve tasarım (özellikle "Temiz Kod" öneririm) ve yazılım mühendisliği ile teknik temeller hakkında bazı kitaplar okuyun.
28

Bahsettiğiniz şey, programlamadan çok yazılım mühendisliğidir. Biraz mimari, biraz "en iyi uygulamalar" ve "tasarım kalıpları", biraz diğerleriyle çalışıyor. Yardımcı olabilecek kitaplar olsa da, çoğu deneyimden geliyor. Kimse başlar yazma, örneğin, Microsoft Word.

Yazmak istediğiniz büyük, "gerçek" bir program düşünün. Şimdi istediğiniz şekilde çalışması için inşa etmeniz gereken çeşitli parçaları düşünün. Örneğin, modern birinci şahıs bir oyunda bir 3D grafik motoruna, oyuncu olmayan karakter AI'ya, bir müzik/ses modülüne, bir fizik motoruna ve oyunun kurallarını uygulayan üst düzey bir modüle ihtiyacınız olacak (bilir "harita", çeşitli karakterlerin nasıl etkileşimde bulunduğu vb.). Sonra hiçbiri kod değil, oyunun tamamlanması için gerekli olan sanat eseri ve karakter tasarımı ve müzik var.

Şimdi: Bunlardan hangisini kendiniz inşa edeceksiniz ve hangisini başka bir yere götüreceksiniz? Çoğu büyük yazılım projesi sıfırdan programlanmamıştır. Belki hazır bir 3D motor ve müzik/ses modülü kullanacak ve sadece oyununuzu benzersiz kılan şeyleri programlayacaksınız. Tamam, bu yüzden hangi üçüncü taraf modüllerini kullanacağınızı, maliyet, hangi dillerle çalıştıklarını, hangi özelliklere sahip olduklarını, API'lerinin nasıl tasarlandığını (yani, ne kadar tamamladığını) içereceklerini bulmalısınız. kişisel programlama stilinize ne kadar iyi uyduğudur). Belki de ihtiyacınız olan her şeyi yaptıklarından ve kullanmanız kolay olduklarından emin olmak için çeşitli üçüncü taraf modülleri için bir veya iki aday kullanarak "konsept kanıtı" yazabilir veya programları test edersiniz.

Ayrıca, kendiniz yazmak istediğiniz kod bile aklınızdaki zaman çerçevesinde tamamlayamayacağınız kadar büyük bir iş olabilir. Proje üzerinde başka kaç programcıya ihtiyacınız var? İşi nasıl böleceksin? Çeşitli modüller, farklı insanlar tarafından yazılsa bile, hepsinin birbirine uyması için nasıl tasarlanacak? Hepiniz aynı kaynak kod üzerinde birbirinizin değişikliklerini silmeden nasıl çalışacaksınız (cevap: sürüm kontrolü, yalnız çalışırken son derece yararlı, ancak başkalarıyla çalışırken vazgeçilmez).

Şirket içinde hangi modülleri yazmak istediğinizi anladıktan sonra, aynı işlemi gerçekleştirirsiniz. Her bir modülün parçalarını, birbirine nasıl uymaları gerektiğini, hangisini yazacağınızı ve hangisini başka bir yere götüreceğinizi bulun. Her parça aklınızda tutacak kadar küçük olana kadar, “evet, bunu yazabilirim!” Demeye devam edin. Ve sonra yapın. Yaptığınız gibi, programınızın çeşitli parçalarının birbirine nasıl oturduğu konusunda beklenmedik engellerle karşılaşacaksınız. Bunlar sinir bozucu olacak, ancak zanaatınız hakkında daha fazla bilgi edinmeniz için fırsatlar ve bu şekilde görülmelidir.

Başlangıçta, programınızın çok küçük parçalarını - mesela bireysel fonksiyonları - aklınızda tutabileceksiniz ve bu nedenle kodlamaya başlamadan önce bir çok şeyi parçalamanız gerekecek. Tecrübe kazandıkça, düşünmek yerine in fonksiyonlarını about fonksiyonlarını düşünmeye ve about nesneleri düşünmeye başlayacaksınız. Ve sonra in nesneleri ve düşünme yaklaşık daha büyük modülleri düşüneceksiniz. Son olarak, in modülleri ve düşünme yaklaşık bütün, büyük, gerçek programları düşüneceksiniz.

Ve sonra hala öğrenecek çok şeyiniz olduğunu keşfedeceksiniz ... ama böyle gidiyor. Bir programcı olarak öğrenmeyi hiç bırakmazsanız, eskimiş olursunuz ve yerini daha yeni bir model alırsınız.

Her neyse, korkma ve bu kulağa korkunç gelse de imkansız geliyor ve sonuçta gerçekten programcı olmak istemiyorsun. Herkes için değil. Müziği ve tatlıları seviyorum ve tuşları biraz oynayabilir ve bazı yemekler pişirebilirim, ancak harika bir müzisyen veya usta şef olmak için gereken süreyi koymaya istekli değilim.

Büyük, gerçek, masaüstü uygulamaları yazan bir programcı olmak istemezseniz, başka tür programlama işleri de vardır. Örneğin, gömülü bir programcı olabilirsiniz. Gömülü programlar yazarken kesin ve ilginç zorluklar vardır ve faydalı işler yapıyorsunuz, ancak genellikle programlar masaüstü uygulamalarından çok daha küçüktür. Veya web uygulamaları yazabilirsiniz. Web'de, küçük işlevsellik parçalarını birbirine yapıştırmak kolaydır, böylece bir Web yorum sistemi yazabilirsiniz (örneğin) ve tüm bir Web uygulaması olmasa bile yararlı olacaktır. Web'deki şeyleri aşamalı olarak iyileştirmek kolaydır, böylece temel bir Web posta istemcisiyle başlayabilir (zamanla) ve Gmail gibi bir şeye dönüşebilirsiniz. (Ama bunu yapma, çünkü o zaman Gmail ile rekabet edeceksin.)

Hiç programcı olmak istemiyorsanız, ancak yine de bilgisayarlarla çalışmak istiyorsanız, muhtemelen BT'ye veya başka bir teknik alana girebilirsiniz. Bu durumlarda, zaten yaptığınız kadar programlama bilmek çok yararlıdır, çünkü akranlarınız bu kadarına sahip olmayabilir. Ya da, bilirsiniz, eğer cazip olursa müzisyen olun, çünkü (çoğu alan gibi) bugün bilgisayarları içerir. Sesi veya MIDI dosyaları çeşitli akıllı yollarla işleyen küçük programlar yazın, böylece sizi daha iyi bir müzisyen yaparsınız. işinde daha iyi.

15
kindall

Gerçek bir görevle karşılaşmadığınız sürece nasıl programlayacağınızı anlamayacaksınız. Hiçbir teori, basit bir gerçek dünya görevinin yerini alamaz. R-w senaryoları üzerinde çalışmaya başlamadan önce, tüm örneklerle çokça kitap okuyordum, ama gerçek bir sorunla karşılaştığımda, görevi tamamlamak için tüm teorik bilgilerimi toplayamadım. Eğer başlangıç ​​iseniz, görevleri olabildiğince her yerden almanızı tavsiye ederim. Onları çözmedikçe işe yaramaz olduklarını düşünmeyin. İlk adım olarak, bağlantılı bir listeyi sıralama, DFS, ağaçlarda, grafiklerde vb. DFS, BFS gerçekleştirme gibi veri yapısı sorunlarını çözmeyi deneyin. bana güvenen değerli bir bilgidir. Daha sonra, işaretçiler, özyineleme, referanslar, vb.

Sonuç olarak. Her şey pratik yapmakla ilgili. Sadece kazmaya devam edin ve kod, kod, kod.

9
Sorantis

Herkes gibi bilgisayar oyunlarıyla başlayın. İyi bir oyun hem programlama hem de tasarım zorluğudur, iç yapı hakkında dikkatli düşünmeye ihtiyaç duyar ve sistem kitaplıklarını çok öğreten şekillerde kullanır, ancak mola verme eğilimi göstermez ve "iyi sonuç ile iyi bir neden" gerektirmez gerçek gibi "yararlı" yazılım yapar.

Genel kural, yeterli şeyler yazdıktan sonra bir tür Aydınlanmanın kaçınılmaz olarak gerçekleşeceğidir.

Başlamak için güzel bir nokta (C gibi hissediyorsanız) http://gamedev.net/ , özellikle http://nehe.gamedev.net/ . Başlamak için başka iyi noktalar da var: D

7
Mirek Kratochvil

Tıpkı araba kullanmak veya yemek yapmak gibi, programlama da yaparak yapmayı öğrendiğiniz bir şeydir. Uygulama yeri doldurulamaz.

Ders kitabı örnekleri sizin için zaten çok basitse, bu harika! Daha karmaşık bir şey için hareket etme zamanı - ve zaten kendiniz için bazı zorlu egzersizler anlayabilirsiniz.

Veya aklınızda belirli bir fikriniz varsa, bunu bitlere ayırın. Önce sorunun küçük bir alt kümesini çözün. Sonra genişletin. Yeni kodu mevcut kodunuza entegre etmek zorlaştığında, her şeyi yeniden tasarlarsınız.

6

Tüm büyük programa bakıyorsunuz ve bu imkansız görünüyor. Ama her şey "yararlı bir şey yapma" dedikleri gibi küçük aptal programlardan oluşuyor.

İhtiyacınız olan şey, büyük karmaşık görevleri küçük basit görevlere bölme deneyimidir. Tüm programlamanın kökü budur. Gerisi sadece anlambilimdir.

6
Satanicpuppy

200 satırlık bir komut dosyası yazın. Sonra geliştirmeye başlayın.

Featuritis size hiçbir zaman 100 kaynak dosyası ve birkaç yüz KLOC çıkacaktır :)

5
richo

"Size gerçekten yararlı bir şey yapan karmaşık programların nasıl geliştirileceğini göstermiyorlar!"

"Faydalı" bir tanım olmadan, sizi "doğru" yolda tutmak için yapabileceğimiz pek bir şey yoktur.

Nasıl başarısız olduğunuzu veya neyin yanlış gittiğini bilmiyoruz. Hangi parkurda olduğunuzu söyleyemeyiz.

Her nasılsa, kafanızda iletişim kurmadığınız konusunda bir fikriniz var.

Yazılım - programlama - kafanızdan bir dile (Python, Java, İngilizce, ne olursa olsun) dair bir fikir edinmekle ilgilidir.

Programlamada (ve soru sormada) önemli bir adım terimlerinizi tanımlamaktır. "İşe yarar bir şey yap" derken ne demek istiyorsun? Çok açık, çok eksiksiz ve çok hassas olun.

5
S.Lott

Bu soruyu her zaman soruyorum, ör. nasıl başlayacağınız. Gerçekten çok basit. İşte adım adım.

  1. Bir fikir bul. Zaten buna sahipsin gibi görünüyor.
  2. Fikrinizi temel çekirdeğine sadeleştirin - üstesinden gelebileceğinizi düşündüğünüz bir şey
  3. Kullanıcı arayüzünü bir kağıt veya peçete üzerine yerleştirin.
  4. Geliştirme ortamınızdaki kullanıcı arayüzünü düzenlemeyi deneyin.
  5. Eğer zorluklarla karşılaşırsanız, google, google, google, stackoverflow ile ilgili sorular sorun, yardım almak için internet kaynaklarından canlı bok kullanın. Programcı olan arkadaşlarınızdan ve iş arkadaşlarınızdan belirli durumlarda size yardımcı olmalarını isteyin. 4. adıma geri dönün.
  6. Uygulamanızın mantığını yazmaya başlayın. Zorluklarla karşılaşırsanız, önceki adıma gidin ve tekrar deneyin.
  7. Yakında, yakında çalışan bir şey olacak.
5
AngryHacker

Küçük şeyler yaratın. Unutmayın, programınız bunu yapan 1000'inci olacak.

Bazı fikirler:

  • bir saat (önce dijital, sonra analog görünümlü),
  • otomatik labirent yaratıcısı,
  • dizin yapısı gösterici,
  • mp3 albüm listelemesi,
  • vb.

Platform seçimi, araçlar görevin bir parçasıdır.

4
ern0

Tamam, yararlı bir şey yapan X programı fikrinizle başlayalım ve onu parçalayalım:

  • Programın mantıksal akışını/akışını düzenlemek için kağıt, zihin haritalama veya diyagram yazılımı kullanın.

  • Daha yeni başladığınız için, bu öğelerden birini (tercihen başlangıca yakın) seçin ve daha da parçalayın.

  • Önce kodunuzu yazın ve üzerine inşa etmek için kullanın.

Program X'in bir dosyayı açması, manipüle etmesi ve bir çıktı dosyası oluşturması gerekiyor mu? İlk adımınız olarak dosyayı açıp tekrarlayamayacağınıza bakın. Güzel bir kullanıcı arayüzü ister misiniz? Dosya yankı programınızı çalıştırabilecek bir tane oluşturun. Sadece karmaşık programınızda adım adım kullanabileceğiniz kod oluşturmakla kalmayacak, aynı zamanda bilgi aramak ve aramak zorunda olduğunuz için dil bilginizi de inşa edeceksiniz.

Demişler - Gnome bir günde inşa edilmedi :-)

3
DKnight

(yukarıda yorumlarda zaten cevaplanmıştır. Soru tekrar açıldıktan sonra bunu bir cevap olarak sunmanız önerildi.)

Ne kadar karmaşık olduğunu düşünürseniz düşünün, bir sorunla - çözmek istediğiniz bir şeyle - başlarsınız. Sonra bu sorunu alıyorsunuz ve yazıyorsunuz ve daha küçük sorunlara ayırmaya başlıyorsunuz. Daha sonra, nasıl çözeceğinizi bildiğiniz veya biraz çaba harcayabileceğiniz ilkel bir şey olana kadar bu küçük sorunları vb. Bu parçaların her birini kodlamaya başlar ve bunları farklı işlevlere veya farklı sınıflara vb.

Sonra bir sonraki alt sorun üzerinde çalışır. Her sorun üzerinde çalışırken küçük test senaryoları yazabilir ve aslında meyvelerin ilerlemesini görebilirsiniz. Yol boyunca her zaman zorluklar olacaktır, ancak hiçbir noktada bunu bile yaklaşmak için çok muazzam bir şey olarak görmeyecektir (şu anda uğraşan şey). Bu programlama ve yaşamın birçok zorluğu için geçerlidir. Anahtarları onu parçalamak.

Ne yapacağına gelince - fikir. Yeni bir şey icat etmeyi deneyebilirsiniz, ancak tutku duyabileceğiniz ve zaten var olan bir şeyi de alabilirsiniz, ancak sadece daha iyi veya hatta farklı hale getirebilirsiniz. Şu anda boş zamanımda Android için bir gitar tuner uygulaması yazıyorum. Zaten başka birçok gitar tuner uygulaması olduğunu biliyorum, ama bunun eğlenceli ve zorlu bir proje olacağını düşündüm, bu yüzden aldım İlk başta neredeyse imkansız görünüyordu, ama problemi daha küçük adımlara böldükten sonra aslında güzelce bir araya geliyor.İnanın ve fethedin ve hedeflerinize kalıcı olun.

3
jeffp

Başlangıç ​​seviyesindeyken yapılacak en zor şeylerden biri "egzersizi şu anki seviyenizde ne içermesi gerektiğine dair gerçekçi hedefler belirlemektir.

Bu nedenle, küçük, verilen egzersizleri çözmeyi uygulamayı seçmenizi öneririm, çünkü belirli bir spesifikasyona göre bir programı bitirme yeteneği, yaşam için programlayan herkes için çok değerli bir şeydir.

Kendi hızınızda çalışmanıza izin veren çok sayıda egzersiz ve otomatik bir "kontrol yanıtı" sistemine sahip http://projecteuler.net/ konusuna daha yakından bakmanızı öneririm. Alıştırmalar iyi ifade edilmiştir, ancak düşünmenizi gerektirebilir. Bazıları çok düşünmenizi bile isteyebilir, ancak bunları çözememeniz bile size yararlı bir şey öğretecektir.

Problem 1'in tam ifadesi:

10'un altında 3 veya 5'in katları olan tüm doğal sayıları listelersek, 3, 5, 6 ve 9'u alırız. Bu katların toplamı 23'tür.

1000'in altındaki 3 veya 5'in tüm katlarının toplamını bulun.

Bunu çözebileceğini düşünüyor musun? O zaman yap!

3
user1249

İhtiyacınız olan gerçek dünya deneyimi !!. Hiçbir kitap size bunu öğretemez!

Başkalarının kodunu nasıl okuyacağınızı, nasıl koruyacağınızı, onlardan nasıl nefret edeceğinizi (hem kod hem de kodlayıcı) nasıl geliştireceğinizi, daha iyi yapabileceğinizi nasıl düşüneceğinizi ve birkaç ay sonra yüksek sesle bağırmayı Bu kod parçalarını kimin yazdığını öldüreceğim !!! Sadece kaynak sürüm kontrolünde sen olduğunu öğren!

Kitapların çok özel olduğunu ve bazen yazılım geliştirmeyi zaten bilen insanlar için anlamanız gerekir.

Bu yüzden bazı programlama işleri bulmanızı öneririm. Gerekirse, en temel giriş seviyesi için başvurun. Muhtemelen hak ettiğiniz kadar kazanamazsınız, ancak yazılımın gerçek dünyada nasıl geliştirildiğini öğrenmek için birkaç ay kullanın (ve her zaman mükemmel değildir ve web'de okuduğumuz tüm bu güzel en iyi uygulamalarla , çoğu zaman, nerede çalıştığınıza bağlı olarak kod kalitesi çok düşüktür, ancak bu deneyimin bir parçasıdır)

Kitaplarınızı okumaya devam edin, her yıl aynı konuyu biraz daha fazla (veya farklı bir şekilde) anladığınızı öğreneceksiniz, çünkü bunu deneyim camıyla bildiğinizi görebilirsiniz.

Yetenekli geliştiricilerle iş bulmayı başarırsanız, çok daha iyi. Onlardan öğrenin, hata yapmaktan korkmayın.

İlk canlı prodüksiyon acil hatayı düzeltmek zorunda kalana kadar, hangi yazılım hatasının olduğunu bilmeyeceksiniz!

:)

3
OscarRyz

İlk olarak, dersleri alarak, referans materyalleri okuyarak, açık kaynak projelerine bakarak ve soruları merak ederek önkoşulları zaten yapıyorsunuz. Bunu vurguluyorum, çünkü kişi kendi tarafında herhangi bir bacak çalışması yapmadan önce (özellikle, dersleri atlayan ve kısa yollar almayı umanlar) benzer sorularla şahsen karşılaştım. Şimdi, Turing makineleri hakkında laboratuvarlarımız olduğu zaman ve bunun gerçek programlama olmadığını nasıl hissettiğimi düşünüyorum. Bunlar, kısa yollar alan herkesin atladığı deneyimlerdir.

  • Öğrenci projeleri için kayıt olun. Üst sınıfımdaki karnaval kulübesine bir oyun inşa etmek için bir grup benzer düşünen öğrenci ile (CSUA) yer aldım. Zevk almaya devam ederseniz ve katılımınızı genişletmek istediğinizi düşünüyorsanız, kaynaklardan gerçekten yararlanın. Projeler hakkında bilgi edinin, sınıf arkadaşlarınızla, profesörlerinizle konuşun ve bir staj yapın.

  • Deneyimli bir programcıyla oturun. Gerçekten ilham verici başka bir kişi programını izlediğimde tarihimde yaklaşık üç kez oldu. Onlara göre sadece kod yazıyor ve yüksek sesle düşünüyorlardı. Abartı yok, onları dinlemekten yıllarca kendiminkinden daha fazla emindim. Daha fazlasıyla karşılaşırsanız, o kadar zenginsinizdir. Videoları izleyebileceğimiz, tüm kaynak depolarını inceleyebileceğimiz ve çevrimiçi olarak büyük bir çevrimiçi bilgi deposunu arayabileceğimiz bir yaşta olduğumuz için şanslıyız. Şahsen deneyiminin yerini tutmaz, ancak bir akıl hocasının yokluğunda geleneksel materyal üzerinde dramatik bir gelişme olur. Yine de ham koda başkaları tarafından bakmak hiçbir şeye yol açmayabilir. Aklınızda bir şey ve mantığa adım atmak için iyi bir hata ayıklayıcı olmasını isteyeceksiniz. En sevdiğim anlardan biri Quake modunu yapmaktı ve unutulmaz bir şey olan modun kendisi değildi. Carmack'in oyun içi mantığını görüyordu. Mod sadece dalmam için bir sebepti.

  • Laboratuvar ortağınız tarafından yöneltilen soruları açıklama ve cevaplama alıştırmaları yapın. Yardımcı olmak için gönüllü olun. Belki bir çalışma grubu oluşturun ve her üyenin bir sınıf konusunda uzman olmasını isteyin. Sonra o kişiyi kızartın ve onların sizi kızartmasını sağlayın. Soruları cevaplamak zorunda kaldığınızda, cevapları kendiniz öğrenmek zorunda kalacaksınız. Kavramları başkalarına açık bir şekilde açıklayabildiğinizde, kendi anlayışınızı bir kitabın ve düşüncelerinizin dışına aktarabileceğiniz noktaya kadar zenginleştirdiniz.

  • Son olarak, zor yolunu öğrenmekten korkmayın, ellerinizi kirletin, hatalar yapın. Buna tecrübe de denebilir. Kullanılmayan kod tabanı ve büyük dosya sayısı olan projelerle ilgili sorunuzla ilgili daha pratik bir örnek olarak, bu alıştırmayı yapın: Çalışmanız için tek bir dosya kullanın. Gerçekten şaka yapmıyorum. Bu aynı soru aslında şimdiki ve önceki şirketime geldi. Burada başka bir geliştirici, her sınıf için bir dosya tutmayı tercih ettiğimi gözlemledi. Bu ona yabancı görünüyordu ve ilgili bir konuda da kısmi sınıfları sevmiyordu. Bu nedenle, mantığı ayrı dosyalara bölmenin ne zaman veya nerede uygun olduğunu anlamanın bir yolu, tek bir dosya ile başlamak olacaktır. Tek bir dosya kuralını karmaşıklığı artıracak umarım birden fazla projede uyguladıktan sonra, bir dosyada okumayı zor bulduğunuz veya sürüm kontrolü nedeniyle işbirliği yapmak zorlaşan çok sayıda sınıfın olduğu bir projeyle karşılaşabilirsiniz. Bu noktada, farklı sınıfları gruplandırmak için ayrı dosyalar oluşturmak istersiniz. Tercihinize göre, tüm veri sınıflarını tek bir dosyada beğenmeye erken karar verebilirsiniz. Daha sonra belki daha sonra, bir grup olarak veri sınıfları arasında bile ayrı dosyaları sevmeye karar verebilirsiniz.

2
patterns

Böl ve fethet.

Bu kadar basit veya zor.

2
ocodo

Açık kaynaklı bir proje deneyin, uygun olup olmadığınızı görün. Kaynağı indirerek başlayın ve bazı biletleri alıp alamayacağınızı görün

2
Martijn

Yeni bir dil öğrenmek istediğimde, genellikle biraz fraktal grafik uygulamaya çalışırım. Bu şekilde, işe yarayıp yaramadığı ve çok faydalı olduğu konusunda hemen geri bildirim alacaksınız. Ve bir fraktal geliştirmenin birçok yolu var. Mandelbrotun saf uygulaması cehennem kadar yavaştır.

Çok kullanışlı değil, ama çok şey öğreniyorsunuz ve bakmak güzel.

2
onemasse

Programlamaya başladığımda bilgisayar oyunlarını severdim. Bu yüzden, elimde herhangi bir aletim olur olmaz kendi oyunlarımı yazmaya başladım.

Doğal olarak, ilk oyunum bir metin macerasıydı. Benzer şekilde, bir test veya bir şey veya bir tür tahmin oyunu ile başlayabilirsiniz.

Ayrıca, bir slot makinesi gibi bir şeyle başlayabilirsiniz (animasyonlara ve hatta resimlere gerçekten ihtiyacınız yoktur. Sadece A = Apple, L = limon, S = başlat, P = Erik vb. Kullanın).

Bu, size bazı kullanıcı girişlerini ele almanın, oyun durumunu sürdürmenin ve buna göre çıktı üretmenin temellerini öğretecektir.

Bu yola oldukça ilerledim. Klavyenin durumunun veya farenin nasıl okunacağını, grafik kodunun nasıl kullanılacağını giderek öğrendim. Dilin kendisi hakkında daha fazla şey öğrendim (Pascal ile başladım) ve bunu mevcut oyunlarımı geliştirmek için kullandım ya da yeni bir şeyler başlattım.

Oyunların programlamayı öğrenmek için gerçekten harika olduğunu düşünüyorum. Çok az tecrübeyle bile, küçük gurur anları veren küçük şeyler yaratabilirsiniz. Çünkü bir şey yaratıyorsunuz, bu eğlenceli. Gerçek uygulamalar oluşturmak oldukça anlamsızdır, çünkü bir şey yaratmak için çok çalışmak gerekir, bu aslında yararlıdır, oysa şaşırtıcı derecede basittir, bağımlılık yaratan küçük bir oyun oluşturmak.

Aslında bir eğitim dili kullanmak isteyebilirsiniz (benim durumumda, bu Pascal'dı ve geriye dönük olarak, oldukça iyi bir seçim olduğunu kanıtladı). Birçoğu özellikle oyun ve benzeri şeyler yaratmayı amaçlamaktadır.

Uygulama oluşturmak sadece algoritma oluşturmaktan daha fazlasıdır. Özellikleri tasarlamanız, kodunuzu farklı katmanlarda ve modüllerde düzenlemeniz ve yapılandırmanız gerekir. Üniversitede verdiğiniz "atomik" sorunların aksine, başvurular bazen en iyi şekilde artımlı bir şekilde geliştirilir. Bir şeyle başlarsınız ve üstüne bir şeyler eklersiniz. Böylece zaten başlamak için bir şeye sahip olmak (wikipedia makalesinde listelenen bazı dillerde olduğu gibi), kendinizi çok fazla hayal kırıklığına uğratır ve hemen bir şeyler oluşturmaya başlarsınız. (Bir meslektaşım deprem 2 mod yazarak programlamaya başladı). Bir noktada, bu kullanımı kolay araçların sınırlamalarını bulmaya geleceksiniz, ancak o zamana kadar çok daha fazla anlayış ve anlayışa sahip olacaksınız. Muhtemelen, kendinizle başlamanız için verdikleri işlevselliği yeniden uygulamak için yeterlidir.

2
back2dos

Programlama çok fazla kod yazmak değil, problem çözme ve iletişim ile ilgilidir. Kod sadece bir zorunluluktur, genellikle daha az değil daha az kod yazmaya çalışmalısınız.

Nereden başlayacağınızı bilmiyorsanız, belki de hiç probleminiz yok!

Linux ve diğer Unix benzeri sistemlere bakın: hepsi çok küçük uygulamalardan oluşur sadece bir şey yapar, ancak iyi yapar .

Bilgisayarımdaki bir klasördeki en büyük 10 dosyayı bulmak için bir komut dosyasına ihtiyaç duyduğumda kitap okumuyordum. Az önce var olan çözümlerden birini araştırdım ve kullandım. Kod yazdım mı? - Hayır. Sorun çözüldü mü? - Evet. Bu tek satırlık program faydalı mı? - Heck evet.

Binlerce kod satırı olan programlar genellikle birden fazla programcı tarafından yazılır. Tüm işletim sistemlerini tek başına yazamazsınız ve buna gerek yoktur. Ayrıca sık sık sürüm kontrolü ve birim testi gibi hileler kullanırlar.

2
kolobos

Üniversitede, temelde bu rampayı öğreten programlama pratiği adı verilen bir sınıf vardı. Daha önce size temel bir alışveriş uygulaması için bir kullanıcı arayüzü verildi ve arka ucu kodlamak zorunda kaldınız, geçen ay Tetris sıfırdan oldu. Bence yeni öğrencilerin yaklaşık% 50'si (dersi geri almamak) başarısız oldu, çünkü küçükten büyüğe rampa yapmak inanılmaz derecede zor.

Aşağıdakilerden birini veya birkaçını öneririm:

  • Açık kaynaklı bir proje indirin ve bir şeyler ekleyin. Yararlı veya iyi olması gerekmiyor, ancak size ne kadar büyük bir projenin inşa edildiğini hissettirecek yapıya bakmanız gerekecek.

  • Son projenizi kağıt üzerinde, bağımlılıklar için oklarla tasarlamanız yeterlidir. Yılan yapıyorsanız, Yılan başı, yılan kuyruğu, yiyecek, boş alan, duvar, tahta, mevcut yön vb. Olabilir. Projenizin düşündüğünüzden çok daha büyük olup olmadığını anlamanıza yardımcı olabilir.

  • Temel bir proje alın ve büyütün ve büyütün. Muhtemelen çok fazla yeniden düzenleme yapacaksınız ve umarım kolayca eklenebilecek daha küçük projeleri nasıl yapacağınızı öğreneceksiniz.

  • Birinin deneyimli olduğunu biliyorsanız, onlara bir proje için fikrinizi söyleyin ve sınıflarınızı + bazı önemli yöntemleri yazmasını sağlayın, muhtemelen bir saat kadar sürecektir. Bu şekilde yöntemleri doldurabilir ve daha sonra ne yapmanız gerektiğini her zaman bilirsiniz.

Son olarak, ne yaparsanız yapın, muhtemelen temel bir MVC (Model, Görünüm, Kontrolör) tasarım deseni kullanmalısınız. Çok fazla ayrıntıya girmeden, görünümünüzü (UI) 1+ sınıfa, kontrol cihazınızı (Giriş, çıkış vb.) 1+ sınıfa ve Modelinizi (Mantık, Veri, temelde her şey) birkaç sınıfa koyun. Temel organizasyonu elde etmenin kolay bir yoludur.

Unutma, bu adım zor. Bazı insanların programlayamadığı doğrudur, ancak muhtemelen bu aşamada sıkışıp kaldınız. İyi şanslar!

2
Mark

İstediğiniz en küçük programı düşünmeyi ve kodlamayı deneyin. Sadece geçen gün her dosyayı otomatik olarak bir dosya listesinden indiren bir kod yazdım. Aslında bu kolay kısımdı. Saat çoğunlukla ayarları ve bu gibi küçük basit şeyleri yüklemek ve kaydetmek için GUI'yi oluşturmak için harcandı. GUI bir zaman boşluğudur.

Ayrıca büyük bir kütüphane ile bir dil kullanmanızı öneririm (taşınabilir olup olmadığı önemli değildir). Ve başlangıçta statik olarak derlenmiş bir dil (yani Ruby , Python veya JavaScript anlamına gelir). C # dilini kullanarak .NET severim. SharpDevelop ile Boo deneyebilir veya Visual Studio Express kullanarak C # veya VB.NET kullanabilirsiniz. Visual Studio'yu seviyorum çünkü bir ileri düzey kullanıcıyım ve Ctrl + -, Ctrl + [ Ctrl + ',' gibi şeyler kullanıyorum. Ancak kesme noktaları ve çağrı işareti olan her şey iyidir. JavaScript kodunda hata ayıklamanın tek sebebi Firebug (anında pencere ve bir saat ile birlikte) sahip olmasıdır.

1
user2528

Bazı oyunlarda çok fazla öldüm ZX Spectrum oyunda, tek yol daha fazla can eklemekti. Hangi kodu ve nerede değiştirmek gerektiğini açıklayan bir kitabım vardı, bu yüzden oldukça kolaydı. Sonra mühimmat eklemeyi buldum (maalesef oyun bundan sonra anlamsız hale geldi).

Benim açımdan, öğrenmenin en iyi yolu küçük ve kolay hedeflere ulaşmaktır. Benim için mevcut kodu değiştiriyordu. Karşılaştığınız her programdan memnunsanız, programlama sizin için uygun olmayabilir.

1

Sanırım sorununuz şu şekilde geliyor: 1. teori ve pratik arasında bir inanç ve aynı zamanda ... 2. ... kodunuzun başkalarının kodu tarafından çalıştırılacağını anlamalısınız. 3. ne yapabileceğiniz hakkında hiçbir fikriniz yoksa bir şey kodlayamazsınız. 4. Zorluğun yarısını biliyorsunuz

  1. Teori ile bir dili bilmek, onu “konuştuğunuz” anlamına gelmez: bu, İngilizce okumak ile konuşmak arasında farktır. Ayrıca çok sayıda farklı araçları derlemek, bağlamak, düzenlemek, kaynak kodu düzenlemek başınızı döndürecektir.

  2. nasıl programlanacağını öğrenirken, çoğu zaman bir terminalin metin girişi/çıkışı için kullanıldığı zaman, çünkü bu programlama ile baş etmenin en basit yoludur. Aslında, programcılar üretken olmak için kütüphaneleri (Qt gibi), çerçeveleri (sanırım Django) ve diğer kısayol kodlarını kullanırlar. Tabii ki kendi tekerleğinizi yazabileceğinizi düşünüyorsanız, onu yeniden keşfetmeyin ve derleyici tasarımı ve çekirdek tasarımı hakkında kitaplar okuyun: Bunlarda öğrenilecek çok şey var: belki de çok fazla gerektirmeyen uygulamalar için aptal olduğunu hissediyorsunuz teknik.

  3. Bir şey icat etmek ! Tabii ki bir metin editörü, bir oyun vb. Yapabilirsiniz. Şey, eğer herhangi bir neden görmüyorsanız bunları yapmayacaksınız: düşündüğünüz her şey zaten yapılmışsa bu program sizin için işe yaramaz. . Personnaly Hala kablosuz gömülü cihazlarla kullanılabilmesi için facebook benzeri merkezi olmayan bir p2p protokolünü sohbet, çevrimdışı mesajlar, vb. İle bir arada kodlayabilmeyi hayal ediyorum. İnternet birçok olasılık sunuyor, düşünmeyi unutmayın.

  4. Aslında teori pratik yapmak için gerekli, ama hepsi bu değil: algoritmalar ve teknikler programlama teorisinin bir parçası değildir, kodunuzu yapmanın birçok paradigması ve diğer "standart" yolu vardır: tasarım modelleri, bağlantılı listeler, vesaire vesaire.

1
jokoon

"Kutu Dışı Düşünme"

Hey, kendime aynı soruları beş yıl önce sordum (o zaman Stack Exchange hakkında bir şey duymamıştım). Programlamayı her seferinde çalışmak anlamlı olmaz, bir şeyler geliştirmeniz gerekir.

Ne geliştireceğinizi belirleyin

1) Küçük hedefler küçük ve başarılı ilk projeler yapar

2) Açık bir şekilde çalışan ve size ilerleme gösteren küçük parçalarınız olacak şekilde planlayın

3) Tutkulu olduğunuz ancak ulaşılabilecek kadar küçük bir şey bulun

  • Kişisel albümler hazırlıyorum - bazı Flash bilgiler edindim, Photoshop
  • Kendi kişisel bloglarımı oluşturuyorum - bazı PHP bilgi kazandım)
  • İnternet alan adları satın aldım - bazı sunucu bilgileri edindiniz

  • Birçok serbest proje buluyorum - gereksinimlerini okudum ve kendi uygulamalarımı oluşturmaya çalıştım, programlama, dokümantasyon vb. Hakkında çok fazla bilgi edindim.

1
RSK

AMA, yine de yararlı bir şey yapan bir programın nasıl yazılacağını anlayamıyorum.

Gerçekten mi?? Sanırım sadece kitapları okuduysanız ve örnek program yapmadıysanız, bu mümkün, ancak biraz abartılı görünüyor.

Her neyse, en iyi tavsiye sadece ilgilendiğiniz bir fikir üzerinde çalışmaya başlamaktır. Eğer gerçek bir ilginiz varsa, o zaman küçük başlayabilir ve büyüyüp büyüyebilir. Genellikle benimle olan budur. Sadece küçük bir test projesi olacağını düşünerek bir proje başlatabilirim. Sonra ekleyip ekliyorum ....

1
user11432

Bence sorunun bir kısmı programlama kitaplarını okuduğunuzda size sadece dili öğretiyorlar. Neredeyse her şeyi programlamak için, KÜTÜPHANELER ve SDKS, vb. Programlama erişimine ihtiyacınız olduğunu söyleyememektedirler.

1
David-S

Başka bir sorun, programlamaya çalıştığınız şeye bağlı olarak farklı bir programlama diline ihtiyacınız olmasıdır.

Bir Microsoft ürününü genişleten bir Windows uygulaması programlamak istiyorsanız, .NET C # veya VB.NET veya VBScript kullanmanız gerekir. Bir iPhone programlamak istiyorsanız Objective-C, Java, Windows Mobile için Silverlight, belki Java vb.).

Bir dili öğrenip sonra istediğiniz her şeyi programlayabileceğiniz gibi değil ...

1
David-S

Bir şeyi programlamaya başlamak için harika bir fikriniz olması gerekmez. Kolay kısımdan başlardım. Zaten kullandığınız bir program gibi. Nasıl çalıştığını bildiğiniz bir şey yapmaya çalışın. Sorunlarınızla yüzleşir, böylece daha hızlı öğrenirsiniz. Daha fazla deneyime sahip olduğunuzda, programlama sırasında hayatınızı kolaylaştırmak için bazı iyi program fikirlerine veya daha önce hiç düşünmediğiniz bir şeyi yapmak için iyi bir programa sahip olmaya başlayacaksınız. Java ve birkaç yıldır diğer diller için programlama yapıyordum. Gerçekten yapmak istediğim şeyi yapmaya başlamak zaman aldı. StackOverflow sayesinde daha önce bilmiyordum.

1
pringlesinn

Belki başlamak için bir betik dili seçebilirsiniz. C dili ile programlamaya başladım. Bence C dilinin başlaması kolaydır, ancak algoritmayı ve işletim sistemi hakkında bir şey bilmek için çok daha fazla zamana ihtiyaç vardır. Ve her egzersiz yaptığımda bir DOS GUI'sı var, bu beni depresyona sokuyor.

Ve daha sonra başlamak için ActionScript adlı bir komut dosyası dili seçtim. Komut dosyası dili nesne yönelimli bir dildir ve bir Flash filmin davranışını denetleyebilir. Komut dosyası dili, sorunlu etki alanına yakın bazı işleri yapmak için kolaydır, tıpkı bir dize çıktısı almak için ActionScript'teki trace("HelloWorld") gibi. Ve programınızın iyi olup olmadığını kontrol etmenize izin vermek için güçlü bir IDE) var.

Word'de, programlamaya hızlı şekilde başlamak istiyorsanız, bir komut dosyası dili iyi bir seçim olabilir :-)

1
Tomyail

Kod Tamamlandı 2 ve Pragmatik Programcı okudunuz mu?

Bu iki kitap bana herhangi bir ders, eğitim, kitap veya videodan çok daha fazla şey öğretti.

Programlama, belirli bir araç setiyle sıfırdan bir şey oluşturmayı öğrenmekle ilgilidir. Ancak, temelleri bilmiyorsanız, hiçbir şey yapamazsınız.

1
Pablo

Bu yüzden tonlarca cevap var, zaten söylenenlerin çoğunu tekrarlarsam beni affet, ama işte 2 sentim.

Önce bir fikir seçin. Herhangi bir fikir iyi olacak, basit bir şey muhtemelen büyükten daha iyi olurdu. Projeler, kapsamlarında çok hızlı bir şekilde büyüme eğilimindedir (bazıları sürünme özelliği olarak adlandırılır).

Sonra proje için bir iskelet yapın. Bu biraz mimari ve tasarım bilgisi gerektirecek ve muhtemelen ilk on kez denediğinizde yanlış anlayacaksınız - yaptım. Sadece iyi bir dosya yapısı ve belki de sistemin önemli bölümlerini gösteren küçük bir kod iskeleti oluşturun.

İskeleti VCS'nize kaydedin (bununla zehirinizi seçin ve kutsal bir savaşa yol açtığında tutun). VCS kullanmaya başladığınızda, sürekli olarak küçük değişiklikler için kullanmak ikinci doğa haline gelir, ancak başladığınızdan emin olun.

Şimdi sistem için küçük ama önemli bir özellik seçin ve yapın. Her şeyin mükemmel bir şekilde kapsüllendiğinden ve "en iyi" tasarıma sahip olduğundan (sistemle birlikte gelişecek) emin olun. Sadece işe yarayacak bir şey al. Ayrıca bazı birim testleri yaptırmak, testleri düzenli olarak çalıştırırsanız bir şey kırıldığında ne olduğunu bilmenize yardımcı olur.

Sisteminizi oluşturun. Bu, otomatik bir derleme sistemi ve sürekli entegrasyon için de iyi bir zaman olacaktır. Ne olduklarını bilmiyorsanız ya öğrenip deneyin ya da sadece kendi sorumluluğunuzdadır; her iki şekilde çalışmaya devam.

Şimdi başka bir özellik seçin ve tekrarlayın ve tekrarlayın ve tekrarlayın.

İyi çalıştığını düşündüğünüzde, bir arkadaşınıza gösterin. Arkadaşınızın nasıl programlanacağını ve hatta programın ne yaptığını bilmesine gerek yoktur. Birine ve iki kişiye gösterme konusunda iyi hissedeceksiniz, sistemin tam olarak ne yaptığını bilmenize yardımcı olacaktır.

Yaptığınız şeyden çok emin olduğunuz noktaya gelirseniz, çevrimiçi serbest bırakın ve geri bildirim almaya çalışın. Bir veri havuzu merkezi veya programcı alt reditt'i size bazı yapıcı eleştiriler sağlayabilir. Bir CS/SE profesörü bulmaya çalışın ve ona bakmasını sağlayın. Belki profesyonel bir programcıya sorun. Sadece başka bir programcının görüşünü alın.

Bitirdiğinizde (veya muhtemelen daha önce), başlangıçta yazdığınız kodun son zamanlarda yaptığınızdan çok daha kötü olduğunu anlayacaksınız. Bu tamamen doğal ve hepimizin başına geliyor. Şimdi yeni bir proje bulmanız ve yeni bir şeyler öğrenmeniz gerekiyor - belki yeni bir test stratejisi veya Servis Odaklı Mimari'nin nasıl kullanılacağı.

1
Jonathan

Yardımcı olabilecek bir şey, günlük olarak kalem ve kağıtla yapabileceğiniz bir şeyin bir programla değiştirilebileceği basit bir problem olduğunu düşünmektir.

Bu, yalnızca otomasyon düzeyine ihtiyaç duyan oldukça bilinen bir çözümle nispeten basit bir sorun sağlar. Bunun bir sonraki MS Word/WordPad/NotePad olması gerekmediğini unutmayın; (basit) probleminizi çözen bir şey.

Örneğin, yeni bir dille çalışırken yeniden uygulamaya devam ettiğim bir sorun basit bir zaman tutucu uygulamasıdır. Uygulama, bir gün boyunca farklı projelere faturalandırılabilir saatleri izlemek için kullanılır. Günün ortasında yeniden başlatmaları nasıl ele aldığınız veya listenizden nasıl öğe eklediğiniz/listenizden kaldırdığınız gibi çok sayıda küçük gotcha içeren oldukça basit bir program.

1
Ken Henderson

Bir şartname yazın. Programınızın ne yapmasını istiyorsunuz? Ekranlar (kullanıcı arayüzü tabanlı bir programsa) mantık, giriş/çıkış vb. Kapsamı makul bir sürede (bir hafta mı bir ay?) Yapabileceğinizle sınırlı tutun.

Sonra inşa et. Spesifikasyona bağlı kalın, spesifikasyonun ihtiyaç duyduğu şeye göre çalışmasını sağlayın. Dikkatinizi dağıtacağınızdan emin olun, daha önce belirli bir sorunla karşılaşmadığınız için biraz araştırma yapmanız gerekecek, ancak inşa etmek istediğiniz bir şey inşa edeceksiniz. Bu, sadece 'yapabileceğiniz' bir şey inşa etmekten farklıdır.

İşiniz bittiğinde, kodunuzu yeniden düzenleyin, daha verimli hale getirmeye çalışın. Programınızın hala yapılmadığını düşünüyorsanız, baştan başlayın, belirtimi geliştirin, kodu geliştirin ve bunu yapmaya devam edin.

Unutmayın, çoğu ticari yazılım bir ihtiyacı çözer .. Sorunu gerçekten çözmeden önce ihtiyacı ve bu ihtiyacı karşılamanın çözümünü tanımlamak çok önemlidir. Ve ihtiyaç büyüdükçe, yazılımınız da zamanla büyüyecek!

1
Roopesh Shenoy

Programlamayı öğrendim çünkü ne programlamak istediğimi biliyorum.

Programlama, öğrenmesi zor olan problem çözme becerileri gerektirir. Madeni paralardaki değişiklikleri hesaplayan bir satış makinesi programı ve ayrıca bir asansör simülasyonu gibi "günlük" bir şey üretmeye çalışın.

0
Ming-Tang

Nasıl programlanacağını öğrenmenin en büyük zorluğu, birinin yararlı bulduğu bir şey bulmaktır.

Kendim için programlamadaki en büyük sorunum her zaman çözülmesi gereken sorunları icat etmek oldu.

1980'lerin ortalarında bir ders yaparak ve sonra bana neyi çözeceğimi söyleyen bir şirkette çalışarak programlamaya başladım. Alternatifiniz, JavaScript öğrenmek istediğim 1990'larda yaptığım şeyi yapmaktı - Topluluklara katıldım (bir tanesi Yığın Taşması sitesi tirelenmiş site - başlangıç insanların soru sorduğu ve sorunun nasıl çözüleceğine dair önerilerimle yorum yaptığı aşağı oy ...). Bilinen bir girdi ve çıktıya sahip özel bir göreve sahip olmak, cevabı veya benzer cevapları bulmaya odaklanmama ve bunu eldeki soruna uygulamama yardımcı oldu. Birkaç yıl soruları cevapladıktan sonra akıcı konuşuyordum.

Şimdi aynı şeyi jQuery ile yapıyorum. JQuery sözdizimini bu çerçeveyi kullanarak çözülebilecek belirli sorunlar olmadan öğrenmek zor olurdu.

0
mplungjan

"Sır, sır yoktur" - Kung Fu Panda. İlk önce panik yapmayın, bir dil seçin ve tic tac toe oyunu gibi bir şey yazmaya başlayın ve yeni özellikler eklemeye devam edin. Çok fazla kitap okudunuz ama öğrendiklerinizi uyguladınız mı? Etrafınıza bakmaya çalışın ve hangi manuel sistemi otomasyona dönüştürebileceğinizi veya hangi mevcut programı yeniden tasarlayabileceğinizi bulun. Sabır ve Hayal Gücü, ben büyük bir programcı değilim ama ben paylaştığım ve onun çalışma deniyorum programlamada başarının anahtarıdır. :)

0
CodeCracker

Yararlı bulacağınız bir şey düşünün ve yapmayı deneyin. Photoshop değil mantıklı bir şey demek istiyorum :-)

0
nih

Programlamayı öğrenmenin tek yolu ... program yazmaktır.

0
user12062

Başarılı büyük uygulamalar ve akademik alıştırmalar arasındaki temel fark, tipik olarak birincisinin gereksinimler kümesine karşı tasarlanmış olmasıdır. Sadece kafanızda belirsiz bir fikirle başlar ve kod yazmaya başlarsanız, uzaklaşmayacaksınız.

Yani programlama yeteneği muhtemelen burada sorun değildir; sizi daha ileriye götürmek için ihtiyacınız olan şey yazılım mühendisliği beceriler; yani proje gereksinimlerini yakalama ve belirleme ve daha sonra bu gereksinimleri karşılayacak bir yazılım mimarisi ve ayrıntılı tasarım tasarlama yeteneği - bu sizi geliştirme boyunca doğru yolda tutacak yol haritası. Bu, kodlamaya başlamadan önce gereksinimlerin ve tasarımın tamamlanması gerektiği anlamına gelmez (şelale yöntemi), artımlı gelişim daha esnek bir yaklaşımdır; ancak uygulama öğelerinin nasıl etkileşimde bulunacağı ve iletişim kuracağı konusunda bir çeşit çerçeve ve fikriniz olmalıdır.

Ayrıca, eğer proje geliştirme tek bir geliştiriciden (büyük projelerin diğer bir ortak özelliği) daha fazla uygulanacaksa, bir şartname belirtimi ve tasarımı az ya da çok önemlidir.

Başarılı büyük ölçekli uygulamaların bir başka özelliği de tamamlamak için güçlü bir motivasyon. Söyleyemediğim için sizi motive eden ne olurdu ama benim durumumda bunun için para ödüyorum, nadiren sadece eğlence için yazılım yazıyorum, ancak her durumda ücretsiz olarak yapabileceğiniz şeyi yapmak için ödeme almak harika bir yoldur geçinmek.

0
Clifford

Basit, kitabınızda yazılandan daha iyisini yapmaya çalışın.

0
user12069

Bu alanda bana çok yararı olan bir şeyin diğer insanların yazdığı koda baktığını gördüm. Yani okul dışında yazdıkları kod, okul ödevleri genellikle gerçek dünya için geçerli olmadığından.

0
THE DOCTOR

Burada birçok iyi cevap bulabilirsiniz, ama yine de bunu ekleyelim.

Her şeyden önce panik yapma. Birçok insan farklı derecelerde programlamayı öğrendi, size uygun seviyeyi bulacaksınız, bu kesin. Oldukça yüksek bir seviyeye ulaşmak için çok çalışın, her seferinde bir adım.

Küçük olarak başlayın. İlk uygulamalardan birini hatırlıyorum, temelde bir MP3 kodlayıcı için bir ön uçtu. Hiçbir şey fantezi, sadece farklı parametreleri ile bir komut satırı uygulaması başlattı. Ama keyif aldım!

Not: En kullanışlı becerilerden biri, her zaman pratik yapmanız gerektiğidir: nasıl daha iyi sorulur. Gerçekten iyi bir şekilde sorabilirseniz, cevabı hemen bulacaksınız.

0
Scorchio

Satranç oynadın mı ?? Biri size hareketleri öğretebilir, ancak bunları faydalı kılmak kendi endişenizdir. İki kişi tarafından oynanan bir satranç oyununu kendiniz oynamak yerine izleyerek öğrenemezsiniz; Benzer şekilde tek bir YARARLI projeden öğrendiğiniz gibi yardımcı olmaz. Kendi gereksinimlerinizi araştırmanız ve bundan bir proje yapmanız gerekir.

Her projenin kendine özgü gereksinimleri vardır. Nadiren, dilin tüm özelliklerini kullanan bir proje bulacaksınız. Bu nedenle, kitaplar bir proje alıp okumaktan ziyade temel özelliklere odaklanır.

Size karşı dürüst olmak gerekirse, birkaç ay önce yapmak zorunda kaldığımda WPF uygulamasının çalışan bir örneğini de aradım. Hiçbir şey bulamadı ve daha sonra kitaplardan ve internetten okudum.

Ve son şey, zaten yapılmış olan bu uygulamaların veya projelerin sizi her zamankinden daha karışık hale getirmesidir, çünkü kendi stilleri ve ince ayarları olan profesyoneller tarafından yapılırlar. Bu seviyeye ulaşmak için, diğer her şeyi unutmanız ve kodlamaya başlamanız gerekir ve daha sonra StackOverflow'da size yardımcı olmak için her zaman oradadır.

0
Pankaj Upadhyay

Evet, yazılımımızın/donanımımızın çalıştırılmasında kaç "hareketli parça" bulunması şaşırtıcı. Kısmen bunun nedeni, sorunların inanılmaz derecede karmaşık olması ve yönetilebilir parçalara bölünmesi gerektiğidir. Kısmen bunun nedeni problemlerin inanılmaz derecede karmaşık olmasıdır ve kimse ne yaptığını bilmez. :) Onlarca programlama dili ve yüzlerce programlama çerçevesi ve kütüphanemiz var. Her şey kara kutulu ve katmanlı. Bu karışıklığın sadece bir katmanında yararlı bir şey yapamazsınız. Birden fazla katmanın sınırlamalarını ve tuhaflıklarını öğrenmek ve ustalaşmak gerekir. Ve her şeyi kendiniz yazmak imkansız. Kod tabanı arttıkça basit şeyler düşünülemez derecede zorlaşır.

0
AareP