Nasıl programlandığını hala çözemiyorum?


122

Java, Python, C, vb. Çeşitli programlama dilleri için birçok kitap okudum. Dillerin tüm temellerini anlıyor ve biliyorum; algoritmaları ve veri yapılarını anlıyorum. (Söylenecek iki yıllık bilgisayar bilimi dersi)

AMA, hala yararlı bir şey yapan bir program yazmayı düşünemiyorum.

Programlama kitaplarının tümü dili nasıl yazacağınızı gösterir, ancak nasıl kullanılacağını DEĞİL! Programlama örnekleri, bir kütüphane veya basit bir oyun için bir kart kataloğu oluşturmak ya da algoritmalar kullanmak, vb. Gibi çok basit.

SourceForge'daki açık kaynaklı programlara baktım ama bana pek bir şey ifade etmiyorlar. Her programda yüzlerce dosya ve binlerce kod satırı bulunur. Ama bunun nasıl yapıldığını nasıl öğrenirim? Amazon'da satın alabileceğim herhangi bir kitapta bana bu programlardan herhangi birini yazma araçları verecek hiçbir şey yok.

Java'ya Giriş veya Programlama Python veya C Programlama Dili vb. Okumaktan gerçekten ne dersiniz? X programı hakkında bir fikrim var. Bu şekilde geliştirmeye devam ediyor muyum?

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

Doğru yola nasıl girebilirim?


52
Bazı insanlar sadece program yapmak için uygun değildir. Alternatif bir yolun sizi çözüp çözmeyeceğini veya başka bir şeyi denemenin zamanı gelip gelmediğini yalnızca siz cevaplayabilirsiniz. Burada yararlı olacak bir cevap almanız pek mümkün değil.
duffymo

3
"Yararlı" olarak ne düşünürsünüz?

7
@Michael - Ben, birincisi, Off-Topic olarak oy kullandım, P.SE'ye geçtim. Bunun kariyer ve zanaat olarak programlama hakkında bir tartışma için daha uygun bir yer olacağını düşündüm.

12
@duffymo: Bazı insanlar da sorular hakkında yorum yapmıyorlar.
davidk01

4
Bence sadece çok uzun zaman alıyorsun. Kitap örneklerinden tam teşekküllü Sourceforge projelerine gitmek çok büyük ve korkutucu. Bunun yerine, zaten oluşturduğunuz şeyi genişletmeyi deneyin. Özellikler ekleyin, GUI ekleyin, ağ özellikleri ekleyin; ve çok yakında, Sourceforge'da kendi projeniz olacağını hayal ediyorum.
gablin

Yanıtlar:


93

Daha karmaşık programlar yapmak tecrübe ile gelir. İlk programlamam 25 çizginin üzerinde olsaydı iyi olduğumu düşünmüştüm (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ıl İçinde Programlama Eğitimi" konusunu 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 başlamanızı ve geliştirmenizi öneririm. İhtiyacınız olanı yapmayan büyük bölümleri silmekle korkmayın. Tekrar başla, bu sefer ne yaptığını daha iyi bir fikirle yazacaksın. Tekrar başla ve en son yazdığın şeylerin yarısına ihtiyacın olmadığını göreceksin. Bir yazar bir hikaye yazdığında, çok fazla zaman alır, çok sayıda yazı yazar ve yeniden yazar vb. Çok sayıda inceleme ve geri bildirim alır ve yalnızca yayınlanması (yayınlanması) gerektiğinde biter.


13
+1 Bill'in söylediği ve “yazar bloğunu” tartıştığı için
David Weiser,

Tanrım, bunu birkaç yıldır yapıyorum (10 + -2) ve hala ara sıra bir sürü kod yazıyorum ve sonunda siliyorum. Birkaç gün boyunca üzerinde çalıştığım birkaç "refactor" yaptım ve geri aldım (kaynak kontrolü ile) çünkü gerizekalıydım (kör olmak).
Ken Henderson,

5
Analoji hikaye yazması için +1. Programlarım hala "Bir zamanlar ..." aşamasında.
Andy,

4
Programlamanın en korkunç şeylerinden biri boş bir belgedir. O engelleri aştığında, iyi bir ilerleme kaydettin.
gablin

1
yazarın bloğu. oraya çiviledin!
abel

70

SourceForge veya GitHub'ta buldukları gibi, her zaman büyük projelerden çok etkilendim. Birinin, hatta bir ekibin, 10 veya 100 dosyada neler olduğunu, binlerce ve binlerce satırlık bir kod satırıyla nasıl anlayabildiğ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 büyük bir iş parçasına dönüşebilir. Sanırım, klasik şelale yaklaşımı yerine yinelemeli gelişimin temel nedeni budur.

Bir araba yapmayı düşünün. Dışarıdan oldukça basit görünse de, sizden küçük bir yolu silmeniz, ele alınması gereken çok sayıda kaygı, takas ve masum davalar olduğunu keşfeder.

Örnek:

Yarı büyük bir proje durumunda, genellikle küçük başlar. Msgstr "Bir önbellek sunucusu kurmak istiyorum". Böylece birkaç gününü keserek harcar ve işe yarayan bir şeye varabilirsiniz, ancak çarpıcı bir şekilde iyileştirilebilir. Böylece diş çekme kavramını eklersiniz.

Sonra bu iş parçacığı nedeniyle eşzamanlılık sorunları yaşarsı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 olanlara değiştirirsiniz, ancak senkronizasyon için kilitleme mekanizmaları sağlar.

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

Böylece artımlı ve tasarruflu gibi bazı klasik atomik işlemler eklersiniz. Bu çalışır ve kullanıcılarınız mutludur. Ancak birisi liste işlemleri yapmanın mümkün olup olmadığını soran bir bilet açar.

Böylece bir ya da iki binayı bu binada geçiriyorsunuz. Bu saatlerde, bir arkadaş size yardım etmeye karar veriyor. Üzerinde birlikte çalışır, tamamlar ve serbest bırakırsınız.

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

Arkadaşınız liste işleme hatası üzerinde çalışırken, siz kilitlenme ile mücadele ediyorsunuz. Atomik işlemlere oldukça önemli bir yeniden yazma yapılması gerektiğinin farkındasınız.

... ve böylece gider.

Bu, bir projenin nasıl büyüdüğü konusunda oldukça tipik görünüyor. 10 ya da öylesine dosyalar birkaç hafta içinde 20'ye çıktı. Orijinal plandan ayrı olmayan yeni özellikler eklendi. Kodu doğal olmayan bir şekilde büyüten kıvrılmış hata düzeltmeleri eklendi.

Benim tavsiyem:

Boğulmuş olma. Bir fikriniz varsa, işlevsellik parçalarını uygulayın. Ondan sonra gelmeye değerse, azar azar ekleyin. Projenizi doğal olarak büyütün.


Evet, neredeyse kişisel deneyimlerden geldiği gibi ...
NickAldwin

@Hayır, hepimiz "Y" ve "Z" özellikli "X" projesiyle benzer bir deneyim yaşamadık mı? Geçen yıl benzer iki projem oldu. İkisi de Redis değildi = P
Josh Smeaton,

Bu yazdığım hemen hemen her programı açıklar.
Tim Post

O zaman o gider. Kurt Vonnegut bilgisayar programlama ile tanışıyor
Zoot

1
Mükemmel bir örnek, ancak biraz daha küçük başlasaydı daha iyi olurdu. Örneğin, birkaç veri yapısı oluşturmak, daha sonra bu veri yapıları için bir API sağlayan bir kod, ardından önbellek işlevini uygulamak için bu API'yi kullanan bir kod ve daha sonra da bunun üzerine bir GUI kullanmakla başlar. Voilá, bir önbellek sunucusu yazdın!
gablin

28

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) yoludur. Sorun yaşarsanız, web'de arama yaparsınız veya bu sorunların çözümlerini burada istersiniz. Sonunda, deneyim kazanacak ve daha az sormak zorunda kalacaksın.

Ancak, en başından itibaren bilmeniz gereken bazı şeyler var:

  • Bugünlerde neredeyse hiç büyük bir uygulama tamamen sıfırdan yazılmamaktadır. Mevcut yüksek kaliteli kütüphaneleri ve çerçeveleri kullanıyorsanız, çok daha kısa sürede çok daha fazlasını yapabilirsiniz. Bunlara başlamak çoğu zaman kendin yapmaktan çok sinir bozucu ve daha fazla iş hisseder, ancak bu neredeyse hiçbir zaman gerçek değildir.
  • Programı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 harcayın ve tasarımla ilgili (özellikle "Temiz Kod" i tavsiye ederim) ve yazılım mühendisliğinin yanı sıra teknik temellerle ilgili kitapları okuyun.

6
“Gerçek dünya programları yazmayı öğrenmenin en iyi (belki de tek yol) yolu, onu yapmaya başlamaktır.” Söyleyeceğim şey az ya da çok. Sadece temel bilgileri okuyabilir ve “temelleri anlayabilirsiniz”; kauçuk bir yere çarpmak zorunda.
WernerCD

1
Satır için +1 "Yapmaya başla." Bir kitaptan deneyim öğrenemezsin.
riwalk

"Temiz Kod" kitabından bahsetmek için +1. Kodunuzu her zaman okunabilir hale getirmelisiniz. Okunması kolay == anlamak kolay == değiştirmesi kolay
Igor Popov

15

Bahsettiğiniz şey, programlamadan çok yazılım mühendisliğidir. Biraz mimarlık, biraz "en iyi uygulamalar" ve "tasarım desenleri", biraz diğerleri ile çalışıyor. Yardımcı olabilecek kitaplar olsa da, çoğu deneyimden geliyor. Kimse Microsoft Word’ü yazmaya başlamaz .

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

Şimdi: Bunlardan hangisini kendini inşa edeceksin ve hangisini başka bir yere alacaksın? Çoğu büyük yazılım projesi sıfırdan programlanmamıştır. Belki de hazır bir 3B motoru ve müzik / ses modülünü kullanacak ve yalnızca oyununuzu benzersiz kılan şeyleri programlayacaksınız. Tamam, yani 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ıklarını (yani, ne kadar tamamlayacağınızı) içerecek şekilde belirlemelisiniz. kişisel programlama tarzınıza ne kadar uyduğunu vs.) Belki ihtiyaç duyduğunuz her şeyi yapacaklarını ve kullanımlarını kolaylaştırdıklarından emin olmak için çeşitli üçüncü taraf modüller için bir veya iki aday kullanarak "kavram kanıtları" yazacak veya programları test edeceksiniz.

Ayrıca, kendinize yazmak istediğiniz kod bile, aklınızdaki zaman diliminde tek başına sizin için tamamlayamayacağınız bir iş olabilir. Projede çalışmak için başka kaç programlayıcıya ihtiyacınız var? İşi nasıl böldün? Farklı modüller nasıl yazılsalar da, farklı modüller tarafından yazılmış olsalar bile, birbirlerine nasıl uyacaklar? Hepiniz birbirlerinin değişikliklerini silmeden aynı kaynak kod üzerinde nasıl çalışacaksınız (cevap: yalnız çalıştığınızda son derece kullanışlıdır ancak başkalarıyla çalışırken vazgeçilmez olan sürüm kontrolü).

Hangi modülleri kendi bünyesinde yazmak istediğinizi öğrendikten sonra aynı işlemi yaparsınız. Her modülün parçalarını, nasıl bir araya gelmeleri gerektiğini, hangilerini kendinizin yazacağını ve hangilerini başka bir yere alacağınızı belirleyin. Her bir parça zihninizde tutulacak kadar küçük olana kadar işleri parçalamaya devam edin, "evet, bunu yazabilirim!" Ve sonra öyle yap. Sizin yaptığınız gibi, programınızın çeşitli parçalarının birbirine nasıl uyduğuna dair öngörülemeyen engellerle karşılaşacaksınız. Bunlar sinir bozucu olacak, ama sizin mesleğiniz hakkında daha fazla şey öğrenmek için fırsatlar ve bu şekilde görülmeleri gerekiyor.

Başlangıçta, programınızın sadece küçük parçalarını tutabileceksiniz - mesela bireysel fonksiyonlar - aklınızda, ve böylece kodlamaya başlamadan önce işleri parçalamak zorunda kalacaksınız. Deneyim kazandıkça, sence olacak içinde yerine düşünmek gerek daha fonksiyonları hakkında işlevleri ve düşünmeye başlamak hakkında nesneler. Ve sonra düşünmeye olacak içinde nesneler ve düşünme hakkında daha geniş modüllerin. Son olarak, düşünme olacak içinde modülleri ve düşünme konusunda bütün, büyük, gerçek programlara.

Ve sonra öğrenecek çok şeyin olduğunu keşfedeceksin ... ama öyle gidiyor. Bir programcı olarak öğrenmeyi bıraktıysanız, modası geçmiş olursunuz ve daha yeni bir modelle değiştirilirseniz.

Her neyse, korkma, ve eğer kulağa kötü geliyorsa ya da imkansızsa endişelenme ve sonuçta programcı olmak istemezsin. Bu herkes için değil. Müziği ve tatlıları çok severim ve biraz anahtar çalabilir ve bazı yemekler pişirebilirim, ancak harika bir müzisyen ya da usta bir şef olmak için gereken zamanı koymak istemiyorum.

Anlaşılan, büyük, gerçek, masaüstü uygulamaları yazan bir programcı olmak istemiyorsanız, başka türden programlama işleri vardır. Örneğin gömülü bir programcı olabilirsiniz. Gömülü programlar yazarken kesin ve ilginç zorluklar var ve faydalı işler yapıyorsunuz, ancak genelde programlar masaüstü uygulamalarından daha küçük. 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 (örneğin) yazabilir ve tüm bir Web uygulaması olmasa bile faydalı olabilir. Web’deki öğeleri aşamalı olarak iyileştirmek de kolaydır, böylece temel bir Web posta istemcisiyle başlayabilir ve zaman içinde Gmail gibi bir şeye dönüştürebilirsiniz. (Ama bunu yapma, çünkü o zaman Gmail’le rekabet edeceksin.)

Eğer hiç bir programcı olmak istemiyorsanız, ancak yine de bilgisayarlarla çalışmak istiyorsanız, muhtemelen BT veya başka bir teknik alana girebilirsiniz. Bu gibi durumlarda, zaten yaptığınız kadar programlama bilmek çok faydalıdır, çünkü meslektaşlarınız o kadar fazla olmayabilir. Ya da bilirsin, eğer bir temyizde müzisyen olursun, çünkü (çoğu alan gibi) bugün bilgisayarları içerir. Sesi veya MIDI dosyalarını çeşitli akıllı yollarla işleyen ve böylece daha iyi bir müzisyen yapan küçük programlar yazın. Sahip olduğunuz programlama becerileri ne olursa olsun, işinizde daha iyi olmanız için birçok alanda uygulanabileceğini göreceksiniz.


Gömülü programların genellikle masaüstü uygulamalarından daha küçük olduğu konusunda hemfikir değilim. Geçmişte böyle olmuş olabilir, ancak 100'den fazla insan yılı süren bir kaç katıştırılmış ürün üzerinde çalıştım ve bunlar özellikle büyük sayılmadı.
Bart van Ingen Schenau

1
Sanırım "gömülü" derken ne demek istediğine bağlı. Akıllı telefonlar veya entegre otomotiv sistemleri gibi bir şey demek istiyorsan 100 adam-yılına inanabilirim. Yine de bu alanda üzerinde çalışılacak daha küçük sistemler var.
02'de

Düşünme ile başlayan +1 hakkında daha küçük şeyler, sonra da düşünerek hareket içinde aynı şeyler ve yaklaşık büyük şeyler.
gablin

1
GMail ile rekabet etmenin zararı nedir? Tek başına yazdığınız bir şey aslında Google'ın yayınladığı bir şeyle rekabet edebilirse, kendinizi oldukça iyi bir programcı olarak düşünebilirsiniz.
gablin

Bunun ana nedeni GMail’in Web postalarını çözdüğümü düşünmemdir. Çoğu programcı başkaları tarafından zaten çözülmüş (ve iyi çözülmüş) problemler üzerinde çalışmayı çok ilginç bulmaz. Muhtemelen henüz çözülmemiş ve çok daha fazla eğlenmemiş bir problem bulabilirsiniz - ve 800 kiloluk bir gorille rekabet etmek zorunda kalmadan potansiyel olarak pazara sunabilirsiniz.
biraz aralık

9

Gerçek bir görevle karşılaşmazsan nasıl program yapılacağını çözemezsin. Hiçbir teori, basit bir gerçek dünya görevinin yerini asla alamaz. Rw senaryoları üzerinde çalışmaya başlamadan önce, tüm örnekleriyle birlikte pek çok kitap okudum, ancak gerçek bir problemle karşılaştığımda, görevi tamamlamak için tüm teorik bilgilerimi toplayamadım. Eğer başlangıç ​​iseniz, görevleri alabileceğiniz her yerden almanızı tavsiye ederim. Onları çözmediyseniz faydasız olduklarını düşünmeyin. İlk adım olarak, bağlantılı bir listeyi sıralama, DFS, ağaçlarda BFS yapma, grafikler vb. Gibi veri yapısı sorunlarını çözmeyi deneyin. Bana güven, değerli bir bilgidir. Öyleyse, işaretçilerle sallanabileceğinizi bildiğiniz zaman, özyineleme,

Alt çizgi. Her şey pratikle ilgili. Sadece kazmaya devam et ve kod, kod, kod.


7

Herkesin yaptığı gibi bilgisayar oyunları ile başlayın. İyi bir oyun hem bir 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 bir sonuçla iyi bir sebep” gerektirmez Gerçek "kullanışlı" yazılımlar gibi.

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

Başlamak için iyi bir nokta (C gibi hissediyorsanız) http://gamedev.net/ , özellikle http://nehe.gamedev.net/ . Başlamak için daha birçok iyi nokta var: D


4
(Oh ve ben neden herkesin oyunlarla başladığını farkettik. Parlak ve güzel şeyler motive edici.)

10
Herkes ? Cesur iddia.

4
Bir oyuna başlamadım. Bunu, kompleksin ötesinde bulurdum = P
Josh Smeaton,

4
Bugünlerde çoğu insan bir webapp ile başlıyor, giriş engelleri çok daha düşük (sadece metin).
Slebetman

4
İlk yorumunuz muhtemelen cevabınızdan daha iyiydi - parlak ve hoş şeyler motive edici . Önemli olan bu.
Scorchio

6

Tüm büyük programa bakıyorsunuz ve bu imkansız görünüyor. Ama her şey, "işe yarar bir şey yapma" dediğiniz gibi, 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 semantiktir.


6

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

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

Ya da aklında belirli bir fikriniz varsa, onu parçalara ayırın. Önce sorunun küçük bir alt kümesini çözün. Ardından genişletin. Yeni kodu var olan kodunuza entegre etmek zorlaşır, sonra her şeyi yeniden tasarlarsınız.


5

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

Featuritis, 100 kaynak dosyaya ve çok kısa sürede birkaç yüz KLOC'ye sahip olacak :)


5

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

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

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

Her nasılsa, kafanda iletişim kurmadığına dair bir fikrin var.

Yazılım - programlama - aklınızdan bir dilde bir fikir edinmekle ilgilidir (Python, Java, İngilizce, her neyse).

Programlamada (ve soru sorma) önemli adımlardan biri terimlerinizi tanımlamaktır. "Yararlı bir şey yap" derken ne demek istiyorsun? Çok açık, çok eksiksiz ve çok kesin olun.


Oy verildi, OP'nin bu konudaki cevabı gerçekten ilgimi çekiyor.
Scorchio

5

Bu soruya her zaman soruluyor, örneğin nasıl başlayacağımı. Gerçekten basit. İşte adım adım.

  1. Bir fikir bul. Zaten buna sahip gibisin.
  2. Fikrinizi temel çekirdeğine göre basitleştirin - başa çıkabileceğinizi düşündüğünüz bir şey
  3. Kullanıcı arabirimini bir kağıda veya peçeteye yerleştirin, herneyse.
  4. Kullanıcı arabiriminizi geliştirme ortamınızda deneyin ve düzenleyin.
  5. Eğer zorluklarla karşılaşırsanız, google, google, google, stackoverflow hakkında sorular sorun, yardım almak için internetten çıkan canlı saçmalıkları kullanın. Programcı olan arkadaşlarınızdan ve iş arkadaşlarınızdan size özel durumlarda yardımcı olmalarını isteyin. 4. adıma geri dönün.
  6. Uygulamanızın mantığını yazmaya başlayın. Eğer zorluklarla karşılaşırsanız, önceki adıma gidin ve tekrar deneyin.
  7. Yakında çalışacak bir şeyin olacak.

İş akışı için +1 - bir şekilde çalışıyor olmalı. İkinci adımın ne kadar önemli olduğunu söyleyemem. Belki bu görevi yerine getirip getiremeyeceğine karar verecek olan adımdır.
Scorchio

“Zaten buna sahip gibisin.” Buna itiraz ediyorum. Bir fikir olsaydı, bu sorunun bir parçası olurdu.
S.Lott

Aslında, uygulamanın mantığını yazarak başlamalı ve ardından kullanıcı arayüzünü eklemelisiniz. Daha basit.
CaffGeek

Aracı / uygulamayı düşünebiliyorsanız kullanmanız daha iyi olurdu. Projeleri atmak, motive edici olabilir. Ne olursa olsun, küçükten başlayın ve oradan inşa edin. Bir komut satırı aracı öneririm.
Carlosfocker

1
@Cha sana katılıyorum. Noobs için, mantık soyut, ama UI kavramak kolaydır. Tersi deneyim ile birlikte geliyor.
AngryHacker,

4

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

Bazı fikirler:

  • bir saat (önce dijital, sonra analog görünüm),
  • otomatik labirynth yaratıcısı,
  • dizin yapısı göstericisi,
  • mp3 albümü lister,
  • vb.

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


Aslında prensip olarak sana katılıyorum. OP, yararlı bir yazılım hakkında soruyor. Bir mp3 albümü lister iyi bir seçim olacaktır. Bir projenin karşılaştığı zorlukları yaşamaya devam edeceğinden, temel bir mp3 çalar daha iyi olurdu. LOC dahil olmak üzere
Josh Smeaton,

@Josh, mp3 kod çözme yeni bir programcı için doğru almak için önemsiz değildir.

@Thor, kesinlikle önemsiz değil. Ancak bu faydalı olacaktır ve programların nasıl bu kadar büyük olabileceğini çok hızlı bir şekilde öğretecektir. Tüm nüanslar, hata düzeltmeleri, kenar davaları. Bu özel durumda uygun olmayabilir, ancak genel olarak uygun olabilir. Kendinizi yazdığınız bir yazılımı kullanabilmek harika bir şey.
Josh Smeaton

@Josh, hala bir MP3 kod çözücünün küçük şeyler olduğunu ve bunun için uygun olduğunu düşünmüyorum.

3

Tamam, işe yarar bir şeyler yapan X programı fikrinizle başlayalım ve onu parçalayalım:

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

  • Çünkü yeni başlıyorsunuz, bu eşyalardan BİRİNİ seçin (tercihen başlangıcın yakınında) ve daha da bozun.

  • İlk önce bunun için kodunuzu yazın ve üzerine inşa etmek için kullanın

Program X'in bir dosyayı açması, yönetmesi ve bir çıktı dosyası oluşturması gerekiyor mu? Dosyayı açıp ilk adımınız olarak eko edip edemediğinizi görün. Güzel bir kullanıcı arayüzü ister misiniz? Dosya eko programını çalıştırabilecek bir tane oluşturun. Adım adım karmaşık programınızda kullanabileceğiniz kod oluşturmakla kalmayacak, aynı zamanda bilgi aramak ve aramak istediğiniz gibi dil bilginizi de oluşturacaksınız.

Söylediği gibi - Gnome bir günde inşa edilmedi :-)


3

(daha önce yorumlarda yukarıda cevaplanmıştır. Sorunun tekrar açılmasından sonra bunun bir cevap olarak gönderilmesi önerilmiştir.)

Bir problemle başlarsınız - çözmek istediğiniz bir şey - ne kadar karmaşık olursa olsun. Sonra bu problemi alıp, yazıp daha küçük problemlere bölmeye başlarsınız. Daha sonra, daha önce nasıl çözeceğinizi bildiğiniz ya da bir çaba göstererek yapabileceğinizi ilkel bir şey elde edene kadar bu küçük sorunları, vb. Bu parçaların her birini kodlamaya başlar ve bunları farklı işlevler veya farklı sınıflar vb.

Sonra bir sonraki alt problem üzerinde çalışacaksın. Her bir problem üzerinde çalışırken, küçük test senaryoları yazabilir ve gerçekte meyve vermeye başladığınızı görebilirsiniz. Yol boyunca her zaman zorluklar olacak, fakat hiçbir noktada bunu yaklaşmak için çok muazzam bir şey olarak görmeyeceksiniz (şu an uğraşmakta olan şeyler). Bu programlama ve hayatın birçok zorluğu için geçerlidir. Anahtar, onu parçalamak.

Ne yapmak - gelince fikir. Yeni bir şey icat etmeye çalışabilirsiniz, ancak tutkunuz olabilecek ve zaten var olabileceğiniz bir şeyi de alabilirsiniz, ancak daha iyi, hatta sadece farklı kılın. Şu anda boş zamanlarımda Android için bir gitar tuner uygulaması yazıyorum. Daha önce birçok gitar tuner uygulaması olduğunu biliyorum, ancak bunun eğlenceli ve zorlu bir proje olacağını düşündüm. İlk başta neredeyse imkansız görünüyordu, ancak sorunu daha küçük adımlara böldükten sonra aslında güzel bir şekilde bir araya geliyor. Böl ve fethet ve hedeflerine sadık kal.


3

Yeni başlayanlar için yapmanız gereken en zor şeylerden biri, bir “egzersizi nasıl geliştirebilirim” egzersizinin mevcut seviyenizde içermesi gerektiği konusunda gerçekçi hedefler koymaktır.

Bu nedenle, size küçük, verilen alıştırmaları çözmeyi tercih etmenizi öneririm, çünkü bir programı belirli bir şartnameye göre bitirebilme becerisi, yaşayanlar için programlar yapan herkes için çok değerli bir şeydir.

Kendi hızınızda çalışmanıza olanak tanıyan çok sayıda alıştırma ve otomatik "kontrol yanıtı" sistemine sahip olan http://projecteuler.net/ ' a daha yakından bakmanızı öneririm . Egzersizler oldukça açık, ama düşünmenizi gerektirebilir. Bazıları çok düşünmenizi bile isteyebilir, ancak bunları çözememek bile size yararlı bir şeyler öğretecektir.

1. sorunun tam ifadesi:

10'un altındaki 3 veya 5'in katları olan tüm doğal sayıları listelersek, 3, 5, 6 ve 9 sayısını elde ederiz.

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

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


3

Gerçek dünya deneyimine ihtiyacınız var !! . Hiçbir kitap sana bunu öğretemez!

Başkalarının kodlarını nasıl okuyacağınızı, nasıl tutacağınızı, onlardan nefret etmeyi (hem kod hem de kodlayıcı) nasıl öğreneceğinizi, nasıl geliştireceğinizi, daha iyi yapabileceğinizi nasıl düşündüğünüzü ve birkaç ay sonra yüksek sesle bağırdığımı öğrenmelisiniz. ' bu kod parçalarını yazanları öldürecek !!! Sadece kaynak sürüm kontrolünde bulmak için o sensin!

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

Bu yüzden size bir programlama işi bulmanızı öneririm. Gerekirse, en temel giriş seviyesi için başvurun. Muhtemelen hak ettiğiniz kadar kazanmazsınız, ancak gerçek dünyada yazılımın nasıl geliştirildiğini öğrenmek için birkaç ay kullanın (ve web'de okuduğumuz tüm güzel en iyi uygulamalarla her zaman mükemmel değildir. , çoğu zaman, nerede çalışacağı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 (ya da farklı şekilde) anladığınızı anlarsınız, çünkü onu deneyimin camı ile 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üksiyonunuzu acil olan hatayı düzeltmek zorunda kalana kadar, yazılımın ne olduğunu bilemezsiniz!

:)


2

Açık kaynak kodlu bir proje deneyin, uygun olup olmadığına bakın. Kaynağı indirerek başlayın ve bazı biletler alıp alamayacağınıza bakın.


15
Acemi programcılar açık kaynaklı bir projeye katılmaya çalışmamalıdır; Eğer olacak basitçe şekilde olsun. Açık kaynak projeleri öğretmen yeni başlayanlar için orada değil.

doğrudan dahil olmak için bir alternatif, bir projenin kaynağını istiflemek ve kendi şubenizdeki biletleri denemek ve düzeltmek ve sadece bunun için bırakmaktır. Birden fazla kişi tarafından yazılmış ve incelenen okuma kodunun değerleri, iyi düzenlenmiş ve kendi yarattıklarınız için şablonlar oluşturabilecek proje yapıları ve işbirliği sürecinin nasıl çalıştığını anlamak. Sadece halka açık bölümleri gözlemleyin ve özel olarak kodla değiştirin.
jellyfishtree

3
@jellyfishtree, eğer biraz zorlayıcı olabilir programlayamıyorsanız.

@Thorbjorn kesinlikle, ama keşke ilk başladığımda daha fazlasını yapmak isterdim. Her şeyde olduğu gibi, sadece ozmozla ve çok önce kafayla dalarak çok şey öğrendiğinizi düşünüyorum. En azından orada neyi bilmediğiniz / anlamadığınızın ne olduğuna dair daha iyi bir ölçü elde edersiniz - ilk başladığınızda ve hedeflerinizi nereye koyacağınızı ve neye yönelik çalışacağınızı bilmek isteyen çok daha değerli bir şey.
jellyfishtree

jellyfish, elbette, ve eminim ki atılması gereken iyi bir adım, fakat henüz bu durumda değil.

2

Yeni bir dil öğrenmek istediğimde, genellikle bazı fraktal grafikleri uygulamaya çalışırım. Bu şekilde çalışırsa ve çok faydalı olduğu konusunda anında geri bildirim alacaksınız. Ve bir fraktal geliştirmek için birçok yol var. Mandelbrot'un saf uygulaması cehennem kadar yavaştır.

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


Bunu sevdim - yeni bir dil öğrenmek için oldukça şiirsel bir yol. Ancak bunu yeni başlayanlar için tavsiye etmeli miyiz bilmiyorum: D
Scorchio

2

Programlama problem çözme ve iletişim ile ilgilidir, çok fazla kod yazmamaktır. 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 herhangi bir probleminiz yoktur!

Linux'a ve diğer Unix benzeri sistemlere bakın: hepsi tek bir şey yapan birçok küçük uygulamadan oluşur , ancak bunu iyi yapar .

Bilgisayarımdaki bir klasördeki en büyük 10 dosyayı bulmak için bir komut dosyasına ihtiyaç duyduğumda kitap okumamıştım. Ben sadece googled ve mevcut çözümlerden birini kullandım. Herhangi bir kod yazdım mı? - Hayır. Sorun çözüldü mü? - Evet. Bu tek satırlık program yararlı mı? - Evet, evet.

Binlerce kod satırına sahip programlar genellikle birden fazla programcı tarafından yazılır. Tüm işletim sistemlerini tek başına yazamazsınız ve gerek kalmaz. Ayrıca, sürüm kontrolü ve ünite testi gibi hileleri de kullanırlar .


Lütfen sürüm kontrolünden ve birim testinden "hileler" olarak bahsetmeyin. Çalışmanızın yedeğini almak ve bununla çalışmak bir zorunluluktur. Sürüm kontrolü sadece aklı başında tutmaya yardımcı olur. Ünite testi hakkında aynı: tek bir kod satırı yazan herkes bazı testlerin yapılması gerektiğini biliyor, neden düzenli tutmuyorsun?
Scorchio

@Scorchio Ben sadece sürüm kontrolü ve ünite testi kullanmanın, onları kullanmayan insanlara göre avantaj sağladığını söyledim (yeterince). Özellikle büyük projelerle uğraşırken.
kolobos


2

Programlamaya başladığımda bilgisayar oyunlarını çok sevdim. Bu yüzden elimde aletim olduğu anda kendi oyunumu yazmaya başladım.

Doğal olarak, ilk oyunum bir metin macerasıydı. Benzer şekilde, bir sınavla veya bir şeyle veya bir tür tahmin oyunuyla başlayabilirsiniz.

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

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

Bu yoldan oldukça uzağa gittim. Klavyenin durumunu veya fareyi nasıl okuyacağımı, grafik kodunun nasıl kullanılacağını aşamalı olarak öğrendim. Dilin kendisi hakkında daha fazla şey öğrendim (PASCAL ile başladım) ve bunu mevcut oyunumu geliştirmek veya yeni bir şey başlatmak için kullandım.

Bence programlamayı öğrenmek için oyunlar gerçekten harika. Küçük bir tecrübeyle bile, size küçük gurur anları veren küçük şeyler yaratabilirsiniz. Çünkü bir şey yaratıyorsun, bu eğlenceli. Gerçek uygulamaların oluşturulması oldukça anlamsızdır, çünkü bağımlılık yaratan küçük bir oyun yaratmak şaşırtıcı derecede basittir.

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

Uygulamalar oluşturmak sadece algoritmalar oluşturmaktan daha fazlasıdır. Özellikler tasarlamak zorundasınız, kodunuzu farklı katmanlar ve modüller halinde düzenlemeniz ve yapılandırmanız gerekir. Üniversitede verdiğiniz oldukça "atomik" sorunların aksine, uygulamalar bazen en iyi şekilde artan şekilde geliştirilir. Bir şeyle başlarsınız ve üstüne bir şeyler eklersiniz. Böylece, başlayabileceğiniz bir şey (wikipedia makalesinde listelenen bazı dillerde olduğu gibi), kendinizi çok fazla sıkıntıdan kurtarıyor ve hemen bir şeyler yaratmaya başlıyorsunuz. (Bir meslektaşım deprem 2 mod yazarak programlama başladı). Bir noktada, bu kullanımı kolay araçların sınırlarını bulmaya geleceksiniz, ancak o zamana kadar çok daha fazla anlayış ve anlayışa sahip olacaksınız. Muhtemelen yeterli,


2

Üniversitede, temel olarak bu rampayı öğreten, programlama pratiği denilen bir sınıf vardı. Önceleri size temel bir alışveriş uygulaması için bir UI verildi ve arka ucu kodlamak zorunda kaldı, geçen ay sıfırdan Tetris oldu. Yeni öğrencilerin yaklaşık% 50'sinin (sınıfı geri almayan) başarısız olduğunu düşünüyorum, çünkü küçükten büyüğe inmek inanılmaz derecede zor.

Aşağıdakilerden birini veya daha fazlasını öneririm:

  • Açık kaynak kodlu bir proje indirin ve bir şeyler ekleyin. Yararlı ya da iyi olmak zorunda değildir, ancak yapının ne kadar büyük bir yapı inşa edildiğine dair bir fikir verecektir.

  • Son projenizi bağımlılıklar için oklarla kağıt üzerinde tasarlamanız yeterli. Yılan yapıyorsanız, Yılan başı, yılan kuyruğu, yiyecek, boş alan, duvar, tahta, geçerli yön, vb. Olabilir.

  • Temel bir projeye katılın ve daha büyük ve daha büyük hale getirin. Muhtemelen birçok yeniden düzenleme yapacaksınız ve umarım kolayca nasıl eklenebilecek küçük projeler yapılacağını öğreneceksiniz.

  • Tecrübeli birini biliyorsanız, onlara bir proje için fikrinizi söyleyin ve sınıflarınızı + bazı önemli yöntemleri yazmalarını isteyin, muhtemelen bir saat kadar sürer. 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, View, Controller) tasarım deseni kullanmalısınız. Çok fazla ayrıntıya girmeden, görüşünüzü (UI) 1+ sınıflara, denetleyiciniz (Giriş, çıkış vb.) 1+ sınıflara ve Modelinizi (Mantık, Veri, temel olarak her şey) birkaç sınıfa yerleştirin. Temel organizasyon almanın kolay bir yoludur.

Unutma, bu adım zor. Bazı insanların basitçe programlayamadıkları doğru, ama muhtemelen bu aşamada sıkışıp kaldınız. İyi şanslar!


2

Öncelikle, dersleri alarak, referans materyalleri okuyarak, açık kaynaklı projelere bakarak ve sorularınızı merak ederek ön koşulları yapıyorsunuz. Bunu vurguluyorum çünkü şahsen kendi tarafına herhangi bir bacak çalışması yapmadan önce (özellikle sınıfları çevreleyen ve kestirmeyi düşünen kişiler), benzer sorularla şahsen karşılaştım. Şimdi, Turing makineleri hakkında ne zaman laboratuvarlar olduğumuzu ve o zamanlar gerçek programlama olmadığını nasıl hissettiğimi düşünüyorum. Bunlar, kestirme yoldaki kişilerin atladığına dair yaşayacağın deneyimler.

  • Öğrenci projeleri için kayıt olun. Son sınıfımın karnaval standında oyun yapmak için bir grup düşünen öğrenciyle (CSUA) birlikte çalıştım. Eğer eğlenmeye devam ederseniz ve katılımınızı genişletmek istediğinizi düşünüyorsanız, kaynaklardan gerçekten faydalanın. Projeler hakkında bilgi edinin, sınıf arkadaşlarınızla, profesörlerle konuşun ve staj yapın.

  • Deneyimli bir programcı ile oturun. Tarihimde, gerçekten ilham veren başka bir kişi programını izlediğimde yaklaşık üç kez olmuştur. Onlar için, sadece kod yazıyorlardı ve yüksek sesle düşünüyorlardı. Abartı yok, yıllarca kendi başıma çektiğimden daha fazlasını dinlemekten emildiğimi hissettim. Daha fazla karşılaşırsanız, o kadar zenginsiniz demektir. Videoları izleyebileceğimiz, kaynak havuzlarını tam olarak inceleyebileceğimiz ve anında büyük bir çevrimiçi bilgi deposu arayabildiğimiz bir çağda olduğumuz için şanslıyız. Bu, kişi içi deneyim yerine geçmez, ancak bir mentorun yokluğunda, geleneksel malzemeye göre çarpıcı bir gelişmedir. Ham kodun başkaları tarafından tek başına bakılması da hiçbir şeye yol açmayabilir. Aklınızda bir şey olması ve mantığa adım atmanız için iyi bir hata ayıklayıcı olmasını isteyeceksiniz. En güzel anlarımdan biri Quake modunu yapıyordu ve unutulmaz bir şey yapan modun kendisi değildi. Carmack'in oyun içi mantığını görüyordu. Mod, dalmam için sadece bir nedendi.

  • Laboratuar ortağınız tarafından ortaya atılan soruları açıklama ve cevaplama alıştırması yapın. Öğretmek için gönüllü olun. Belki bir çalışma grubu oluşturabilir ve her üyenin bir sınıf konusunda uzman olmasını istersiniz. O zaman o kişiyi kızartın ve sizi kızarttırın. Soruları cevaplamak zorunda kaldığınızda cevapları kendiniz öğrenmek zorunda kalacaksınız. Kavramları başkalarına net bir şekilde açıklayabildiğiniz zaman, kendi anlayışınızı, onu kitabın ve düşüncelerinizin dışına aktarabileceğiniz noktaya kadar zenginleştirdiniz.

  • Son olarak, zor yoldan öğrenmekten korkma, ellerini kirlet, hatalar yap. Buna deneyim denilebilir. Tutarsız kod tabanı ve büyük dosya numarası sayımı olan projeler hakkındaki sorunuza ilişkin daha pratik bir örnek olarak, bu alıştırmayı yapın: işiniz için tek bir dosya kullanın. Gerçekten şaka yapmıyorum. Bu aynı soru aslında şimdiki ve önceki şirketimde ortaya çıktı. 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 kısmi sınıflardan hoşlanmadı. Bu nedenle, mantığı ayrı dosyalara bölmenin ne zaman ya da nerede uygun olduğunu anlamanın bir yolu, sadece tek bir dosya ile başlamak olacaktır. Birden fazla projede bir dosya kuralını uyguladıktan sonra, karmaşıklığın artmasını umuduyla, Bir dosyada, okumanın zor olduğunu ya da sürüm kontrolü nedeniyle birlikte çalışmanın zorlaştığını belirten çok fazla sınıfınızın olduğu bir projeye girebilirsiniz. Bu noktada, farklı sınıfları gruplamak için ayrı dosyalar oluşturmak istiyorsunuz. Tercihinize göre, tüm veri sınıflarını tek bir dosyada beğeneceğinize erken karar verebilirsiniz. Sonra belki daha sonra, grup olarak veri sınıfları arasında bile ayrı dosyaları sevdiğinize karar verebilirsiniz.


+1 Güzel cevap. Tecrübeli bir programcı ile oturmanın yeni insanlara da başladığında korkutucu olabileceğini söylemeliyim. Sizi önemli miktarda zaman alacak şeyleri hızlandırmak. Ancak, böyle birşeyin türüne bağlı olarak motive edici bir faktör olabilir ve karnınızdaki yangının bir kısmını aydınlatabilir. Seni kıç tekmelemek istemek için zorluyorum.
Terrance

1

Bir şeyi programlamaya başlamak için harika bir fikre ihtiyacınız yok. Kolay kısımdan başlarım. Gibi, zaten kullandığınız bir program. Nasıl çalıştığını bildiğiniz bir şey yapmaya çalışın. Sorunlarınızla yüzleşin, böylece daha hızlı öğreneceksiniz. 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 program yapmaya başlarsınız. Java'yı neredeyse bir yıldır, diğer dilleri ise birkaç yıldır programlıyorum. Gerçekten yapmak istediğim şeyi yapmaya başlamak zaman aldı. Kendi işimi yapmaya başladım. StackOverflow'a teşekkürler. Daha önce bilmiyordum.


1

Öyleyse, söylenenlerin çoğunu tekrar edersem, beni affet, ama işte 2 sent.

İlk önce bir fikir seç. Herhangi bir fikir iyi olacak, basit bir şey muhtemelen daha büyük sonra daha iyi olurdu. Projelerin kapsamlarında çok hızlı bir şekilde büyüme eğilimi vardır (bazıları buna sürünme özelliği gösterir).

Daha sonra proje için bir iskelet yapın. Bu biraz mimari ve tasarım bilgisi gerektirecek ve muhtemelen ilk denemede onu yanlış anlayacaksınız. Basitçe düzgün bir dosya yapısı ve belki de sistemin önemli kısımlarını gösteren küçük bir kod iskeleti hazırlayın.

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

Şimdi sistem için küçük fakat önemli bir özellik seçin ve yapın. Her şeyin mükemmel bir şekilde kapsüllenmiş olduğundan ve “en iyi” tasarıma sahip olduğundan (sistemle birlikte gelişecek) emin olmayın. Sadece işe yarayacak bir şey al. Ayrıca, bazı birim testlerinin yapılması, testleri düzenli olarak gerçekleştirirseniz, bir şey bozulduğunda ne olduğunu bilmenize yardımcı olacaktır.

Sisteminizi kurun Bu aynı zamanda otomatik bir yapı sistemi ve sürekli entegrasyon elde etmek için iyi bir zaman olacaktır. Ne olduklarını bilmiyorsanız, o zaman onu öğrenin ve deneyin ya da sadece kendi sorumluluğunuzda devam edin; Her iki şekilde de çalışmaya devam et.

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

İyi çalıştığını düşündüğünüzde, bir arkadaşınıza gösterin. Arkadaşın nasıl programlanacağını ve programın ne yaptığını bilmesi gerekmez. Birine birini gösterme konusunda kendinizi iyi hissedeceksiniz ve ikisi sistemin tam olarak ne yaptığını bilmenize yardımcı olacaktır.

Yaptıklarınızdan çok emin olduğunuz noktaya gelirseniz, çevrimiçi yayınlayın ve geri bildirim almaya çalışın. Bir veri havuzu merkezi veya alt programcı programcıları size bazı yapıcı eleştiriler sağlayabilir. Bir CS / SE profesörü bulmaya çalış ve ona bakmasını sağla. Belki profesyonel bir programcıya sorun. Sadece başka bir programcının fikrini alın.

İşiniz bittiğinde (veya muhtemelen daha önce), başlangıçta yazdığınız kodun yakın zamanda yaptığınızdan çok daha kötü olduğunu fark edeceksiniz. Bu tamamen doğal ve hepimizin başına geliyor. Şimdi yeni bir proje bulmanız ve yeni bir şey öğrenmeniz gerekiyor - belki de yeni bir test stratejisi veya Servis Odaklı Mimari'nin nasıl kullanılacağı.


1

Yardımcı olabilecek bir şey, kalem ve kâğıtla yapabileceğiniz bir şeyin bir programla değiştirilebileceği, günden güne yaşayabileceğiniz basit bir sorun olduğunu düşünmektir.

Bu, size sadece bir otomasyon seviyesine ihtiyaç duyan oldukça bilinen bir çözüm ile nispeten basit bir problem sunar. Bunun bir sonraki MS Word / WordPad / NotePad olması gerekmediğini unutmayın; sadece (basit) probleminizi çözen bir şey.

Örneğin, yeni bir dille çalışırken tekrar uygulamaya devam ettiğim bir sorun basit bir bekçi uygulamasıdır. App 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 idare edeceğiniz veya listenizdeki öğeleri nasıl ekleyip / çıkaracağınız gibi oldukça fazla sayıda küçük fare içeren basit bir program.


1

Bence problemin bir kısmı, programlama kitaplarını okuduğunuzda size sadece dili öğretiyor olmaları. Neredeyse her şeyi programlamak için, KÜTÜPHANELER ve SDKS, vb. Programlamaya erişmeniz gerektiğini söylemediler. Dilin ne yazık ki bilinmesi yeterli değil.


1

Sanırım senin problemin şudur: 1. Teori ile pratik arasında bir çelişki var ve aynı zamanda ... 2. ... senin kodunun diğerinin kodu tarafından yönetileceğini anlamalısın. 3. Yapabilecekleriniz hakkında hiçbir fikriniz yoksa, bir şeyi kodlayamazsınız. 4. Zorluğun yarısını biliyorsunuz

  1. Bir dili teori ile bilmek, onun "konuşması" anlamına gelmez: İngilizce okuma ve konuşma arasındaki fark. Ayrıca bir kaynak kodunu derlemek, bağlamak, düzenlemek için kullanabileceğiniz çok sayıda farklı araç, kafanızın dönmesini sağlar.

  2. nasıl programlanacağını öğrenirken, eğer çoğu zaman bir terminal metin girişi / çıkışı için kullanılırsa, çünkü bu programlama ile başa çıkmak için en basit yoldur. Aslında, programcılar üretken olmak için kütüphaneler (Qt gibi), çerçeveler (sanırım django) ve diğer kısayol kodlarını kullanır. Elbette kendi tekerleğinizi yazabileceğinizi düşünüyorsanız, yeniden icat etmeyin ve derleyici tasarımı ve çekirdek tasarımı hakkında kitaplar okuyun: bunlarda öğreneceğiniz çok şey var: belki de çok fazla gerektirmeyen uygulamaların aptalca olduğunu düşünebilirsiniz teknik

  3. Bir şey icat etmek ! Elbette bir metin editörü, bir oyun vb. Yapabilirdiniz. Sorun şu ki, eğer bir sebep görmezseniz bunları yapmayacaksınız: Eğer düşündüğünüz her şey zaten yapılmışsa, bu program sizin için işe yaramaz olacak. . Personel Sohbet, çevrimdışı mesajlar, vb hepsi bir arada facebook benzeri yerelleştirilmiş p2p protokolünü bir arada kodlayabilmeyi hayal ediyor, böylece hepsi kablosuz gömülü cihazlarla birlikte kullanılabiliyor. İnternet birçok imkan sunar, düşünmeyi unutmayın.

  4. Aslında teoriyi uygulamak zorunludur, ama hepsi bu kadar 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 kalıpları, bağlantılı listeler, vs vs.


1

Belki başlamak için bir betik dili seçebilirsiniz. C dili ile programlamaya başladım. Bence C diline başlamak kolaydır, ancak algoritmayı ve işletim sistemi hakkında bir şeyleri bilmek çok daha fazla zamana ihtiyaç duyar. Ve her egzersiz yaptığımda basitçe bir DOS GUI ile oluyor, bu da beni depresyona sokuyor.

Daha sonra başlamak için ActionScript adlı bir betik dili seçtim. Komut dosyası dili nesne yönelimli bir dildir ve bir Flash filminin davranışını denetleyebilir. Script dili,trace("HelloWorld") ActionScript'te olduğu gibi bir dizge çıktısı almak için sorunlu alanın yakınında olan bazı işleri yapmak için kolaydır . Programınızın iyi gittiğini kontrol etmenize izin veren güçlü bir IDE'ye sahiptir.

Kısacası, programlamaya hızlı bir şekilde başlamak istiyorsanız , bir betik dili iyi bir seçim olabilir :-)


1

Bir şartname yazın. Programınızın ne yapmasını istiyorsunuz? Ekranlar (eğer UI tabanlı bir programsa) mantık, giriş / çıkış vb.

O zaman inşa et. Şartnameye sadık kalın, şartnamenin ihtiyaç duyduğu şekilde çalışmasını sağlayın. Dikkat dağıtıcılarla karşılaşacağınızdan emin olun, araştırma yapmak zorunda kalacağınızdan emin olun, çünkü daha önce özel bir sorunla karşılaşmadınız, ancak oluşturmak istediğiniz bir şey inşa edeceksiniz. Bu, sadece 'inşa edebileceğiniz' bir şey inşa etmekten farklıdır.

İşiniz bittiğinde, kodunuzu yeniden gözden geçirin, daha verimli hale getirmeye çalışın. O zaman programınızın hala yapılmadığını düşünüyorsanız, baştan başlayın, özellikleri geliştirin, kodu geliştirin ve yapmaya devam edin.

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

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.