Programlamayı öğrenirken kendimi geleceğe hazırladım [kapalı]


10

İsterseniz 'geleceğe dönük' bir şekilde programlamayı öğrenmek istiyorum. Windows masaüstü işletim sistemi pazarına hâkim olsa da (şimdilik), dillerini / çerçevelerini / API'lerini vb. Öğrenmede çok fazla değer var - bu, yeni cihazlar ortaya çıktığında veya Windows ayağa vurduğunda (üzerinde dostu Windows 8 önizlemeleri çok çekici görünmüyor ...).

Arka uç mantık / düşük seviye programlama ve benzerleri için sağlam bir C / C ++ bilgisine sahip olmanın, GUI'ler için Java ve benzeri gibi son derece taşınabilir bir dil ile birleştirilmesinin yazılım geliştirme için iyi bir temel olacağını düşünmekte haklı mıyım? en fazla sayıda sistemde faydalı olabilecek nedir? - Masaüstü bilgisayarlardan, tabletlerden, telefonlardan bahsediyorum.


11
Öyle bir şey yok
Job

Bir den oluşturun ve kitaplarla doldurun.
Edward Strange

4
Bir den yapın ve konserve yiyecekle doldurun. Geleceğe en uygun programcı kıyametten sonra yaşayan programcıdır.
Tom Anderson

1
Programlama dillerini veya kodlamayı öğrenmeyin , ancak çoğunlukla programlamayı öğrenin ve bu uzun yıllar , yaklaşık on sürer ve tüm hayatınızı öğrenmeye devam etmelisiniz
Basile Starynkevitch

Yanıtlar:


31

Gelecekte kanıt olmak istiyorsanız, size verebileceğim en iyi tavsiye, kendinizi bir teknolojiye dahil etmektir.

Bu yüzden API'leri körü körüne öğrenmeyin. Nasıl tasarlandıklarını öğrenin. Sahne arkasındaki felsefeler nelerdir? Avantajları ve kusurları nelerdir? Yazılımı belirli bir teknoloji değil genel olarak düşünün.

Ayrıca iyi bir program anlayışı üzerinde çalışabilirsiniz, OOP ve AOP'ye gitmek IMO için iyi bir seçimdir. Ama sadece mekanizmayı anlamayın, mekanizmanın arkasındaki felsefe üzerinde gerçekten çalışın.

Veri yapıları ve algoritmalar gibi genel bilgisayar bilimini ihmal etmeyin, çünkü bunlar her zaman yararlı olan çapraz teknoloji bilgisidir.

Ayrıca iyi uygulamalar için gidin. Genellikle bir şey yapmak için düzinelerce yolunuz vardır, ancak çoğu bok gibidir: hata eğilimli, bakımı zor, daha sonra anlaşılması zor veya başka bir programcı tarafından. . . Genellikle, kodu okumak yazmaktan daha zordur. Bu nedenle okumayı kolaylaştırmak için yazmaya biraz daha fazla çaba göstermeyi öğrenin (çünkü kodu yazdığınızdan daha fazla okuyacaksınız).

Hata ayıklama (günlük ve hata ayıklayıcıyı akıllıca kullanma) ve test etme (birimde kolayca test edilebilen kod yazma ve bu testleri otomatikleştirme) için etkili teknikleri öğrenin.

Ardından, genel bir teknolojik altyapıya ihtiyacınız olacak. İşlemcinin nasıl çalıştığı (önbellek özledim veya dal tahmini iyi bir başlangıçtır), UNIX sistemleri, IP, TCP ve Ethernet gibi ağ protokolleri hakkında çok geniş bilgi hakkında konuşuyorum. . .

Sonunda nasıl öğrenileceğini öğrenin. Nasıl öğreneceğinizi biliyorsanız, adapte olabilirsiniz.

Bir iş bulabilmek için belirli teknolojiler hakkında bazı güçlü bilgilere ihtiyacınız olacak, ancak bunlar gerçekten hızlı bir şekilde modası geçmiş (örneğin COBOL'u veya IE / Netscape savaşı sırasında web programlamayı düşünün). Bu yüzden geleceğe dönük olmaları için onlara güvenmeyin. İşe alınmak için anahtar olacaklar, ama kesinlikle harika bir programcı kılan ve zaman içinde becerilerinizi neyin kalıcı kılacağı değil.

DÜZENLEME: Yeni başlıyorsanız, kesin bir şey yapmanız gerekir. Hiçbir şey gerçekten. Tetris veya yılan gibi bir oyun iyi bir başlangıç ​​ve eğlenceli. Eğer bir şey yapmazsanız, öğrenmeye çok zaman harcarsınız ve öğrendiklerinizi tam olarak anlamak için gereken deneyimi gerçekten alamazsınız.

Tasarım desenleriyle bir örnek verelim. Tasarım desenleri harika ve kesinlikle kullanmalısınız. Ancak aşırı kullanılırsa kodunuzu karmaşık ve anlaşılması zor hale getireceklerdir. Bir tasarım deseninin çözdüğü problemle yüzleşmeniz ve tasarım deseninin ne hakkında olduğunu tam olarak anlamak için onu veya yan etkilerini çözmeye çalışırken biraz zaman kaybetmeniz gerekecek. Tasarım modelleri, kod büyüdüğünde zaman içinde küçük yeniden düzenleme olarak kullanılmalıdır. Bir tasarım deseninin faydası, kullanımının neden olduğu kod karmaşıklığından daha büyük olduğunda ne zaman gerektiğini bileceksiniz. Bu tecrübe gerektirir.

Kesinlikle, işleri hallet, hatalarından öğren. Daha fazla ısrar edemem: YAPILAN ŞEYLERİ AL !


İyi ... Harika * cevap ve anladığım bir şey - bahsettiğiniz konuların tümünü değil, genel olarak 'programlama' konusunu anlama ihtiyacını anlıyorum. Öngörülebildiğim için kesinlikle mutlu olduğum bir e-ticaret sitesini yöneten iyi ücretli bir ruloya sahip olduğum için bu alanda iş bulma konusunda çok endişelenmiyorum. Programlamaya olan ilgim ciddi bir hobi olarak sınıflandırırdım, ancak onu hem benim hem de başkalarının işteki iş akışını geliştirmek için kullanmak istiyorum.
İsimsiz

Yeni bir başlangıç ​​noktası olarak işleri daha net hale getirmek için bir düzenleme eklendi.
deadalnix

4

İyi programcıları kötü programlardan ayıran şey, HERHANGİ bir dilde programlama yeteneğidir. Diğer posterlerin de belirttiği gibi, herhangi bir önemli nesne yönelimli dil bilmek, size harika programlar yaratma ve talepte bulunma araçları verecektir.

Ayrıca hala okuldaysanız, bazı yazma dersleri aldığınızdan emin olun. En iyi mühendisler ve programcılar da fikirlerini iyi ileten kişilerdir.

Çalışmaya başladıktan sonra artık kullanılmamak için yapılacak en iyi şey mevcut eğilimlere ayak uydurmaktır. Mevcut teknolojiyi kullanmıyorsa veya korkunç bir süreç vb. Kullanmıyorlarsa, bir başkasına iş bırakmaktan korkmayın. Kariyeriniz için yapabileceğiniz en kötü şey, eski teknoloji veya zayıf süreçlerle çalışmanızı sağlayan bir iş almaktır.


Programlama kavramlarının iyi bir bilgisinin 'bu oyunda' iyi olmak için gerekli olduğunu, ancak gerçek dil sözdizimi / standart kütüphane ve tüm dil özelliklerini (uygun olan yerlerde) kullanmak için hala gerekli olmayan bilgileri bildiğimi takdir ediyorum. Ne yazık ki hala okulda değilim, çalışıyorum - önceki bir yorumda söylediğim gibi, oldukça iyi para ödüyorum, bu yüzden bu konuda çok endişelenmiyorum. Cevap için teşekkürler. =)
İsimsiz

4

@Deadalnix'in yanıtı iyi. Buna üç şey eklerdim:

  1. yeniden kullanılabilir bilgi uçtan değil, ortadan gelir. Minsky bunu Toplum Aklı adlı kitabında ayrıntılı olarak sunar, bu yüzden onu şöyle özetleyeceğim: üst katman, bir sonraki soruna uygulanamayacak kadar çok özel çözüme çok yakın, alt katman ise çok yakın bir sonraki probleme uygulanacak özel bir platform. Orta katman, yeniden kullanılabilir bilgilerin bulunduğu yerdir - etki alanı (üst katman) veya platformdan (alt katman) bağımsız olarak benzer sorunları çözmek için yararlı olan algoritmalar, desenler, taksonomiler, taktikler, stratejiler, teknikler, organizasyonlar, protokoller ve diğerleri. ). Not: Bu katmanların 3 katmanlı mimari ile hiçbir ilgisi yoktur, burada sorun-alan / çözüm-alan semantiği hakkında konuşuyoruz.
  2. en az iki örneğini görene kadar neyin ortak / genel / yeniden kullanılabilir olduğunu bilemezsiniz. Bu nedenle, Windows'un dahili olarak nasıl çalıştığını, ardından linux / unix'in dahili olarak nasıl çalıştığını inceleyin ve ikisini karşılaştırın. Ortak şeyler yeniden kullanılabilir. Farklı şeyler, yeniden kullanılabilir içgörülerle sonuçlanabilecek tasarım kararlarıdır.
  3. herhangi bir durum veya sorun için, çözümü nasıl uygulayabileceğinizi düşünün, ardından koltuk çözümünüzü gerçek çözümle karşılaştırın ve farklılıkların arkasındaki olası nedenleri anlamaya çalışın.

Harika eklemeler!
deadalnix

2

Başlangıçta olduğunuz için, sadece bir dil öğrenmek söyleyebilirim, hangisinin önemli olduğu önemli değil. Zorluk dilin (sözdizimi) değil, kavramların anlaşılmasında; ve bu genel programlama kavramları böylece ikinci ve üçüncü ve dördüncü (...) dil öğrenmek, bütün programlama dilleri için geçerli olacak çok daha kolay olurdu.

Yani başlangıçta 'geleceğe dönük' olmak hakkında fazla düşünmeyin. Ancak ilerledikçe birbirinden çok farklı dillerde yetkin olmaya çalışın. Temel olarak, (dediğin gibi) C / C ++ gibi düşük seviyeli (-ish) bir dil, Java gibi daha üst düzey bir programlama dili ve ayrıca bir komut dosyası dili (Python, Ruby, vb.) İle kullanışlı olmalısınız. Gerçekten gelişmiş şeylere girmek istiyorsanız, Meclis'i de bilmelisiniz.

Ama şu anda kendinizi bu konuda çok fazla vurgulamayın. Programlamayı öğrenmek yıllar alır. Şu an için Java veya C # veya başka bir dil seçin ve bunun için gidin. :)


Ben 'birini seçin' ve tutum için gitmek seviyorum ... Muhtemelen benimseyeceğim. Yay veya nay bir düşük seviye dil (C), bir yüksek seviye (Java) ve bir komut dosyası (Python) dili seçmek ve aynı anda 3 öğrenmek için?
Anonim

Programlamaya yeni mi başlıyorsunuz? O zaman bir seferde birden fazla dil öğrenmeyin, bu sadece kafanızı karıştıracaktır. Başlangıçta öğrenmeniz gereken diller değil kavramlardır. Yeni dillere yalnızca gerektiğinde taşınmalısınız. Örneğin, kısa süre önce komut dosyası dillerine girme ihtiyacını hissettim ve bunun nedeni oyunumu Python ile yazılabilir hale getirmeye karar verdim.
Paul

Ben sadece başlangıç ​​söyleyemem - html / css yıllardır biliyorum (gerçi onlar gerçekten hak / tür alakasız) ve birkaç aydır PHP / MySQL web siteleri inşa ediyoruz. Web geliştirme ile 'başa çıkabilirim', mücadele yazılım yazılım geliştirme. Söylediklerine dikkat edeceğim.
İsimsiz

If you want to go into the really advanced stuff you must also know Assembly- Bunu herhangi bir aşamada yapabilirsiniz, zorluklar sadece farklıdır.
sixtyfootersdude

1

Arka uç mantık / düşük seviye programlama ve benzerleri için sağlam bir C / C ++ bilgisine sahip olmanın, GUI'ler için Java ve benzeri gibi son derece taşınabilir bir dil ile birleştirilmesinin yazılım geliştirme için iyi bir temel olacağını düşünmekte haklı mıyım? en fazla sayıda sistemde faydalı olabilecek nedir?

Masaüstü bilgisayarlar, tabletler, telefonlar hakkında konuşuyorum.

Hayır. Bunların hiçbiri yardımcı olmaz.

Herhangi bir özel programlama dilinden bağımsız olarak sağlam veri yapıları ve algoritma bilgisi, "düşük seviye programlama ve benzerlerinden" daha değerlidir.

"Java gibi son derece taşınabilir bir dil", C kadar taşınabilirdir ve yardımcı olmaz. Next Big Thing süper-taşınabilir Java bir yükümlülük değil, bir varlık olacağı şu dillerden çok farklı olacaktır.

Mac OS (masaüstü, tablet ve telefon) tamamen Amaç C'de yapılır. Bu başlangıç ​​için bir yer olabilir.

Windows (masaüstü, masa ve telefon) hepsi C # ile yapılır. Bu başlangıç ​​için bir yer olabilir.


Java'yı C'yi hem taşınabilir diller olarak karşılaştırıyordum - Java sırasıyla düşük seviye ve yüksek seviyede, ki bu biraz doğru ... Kendiniz söylediğiniz gibi, Mac OS = Obj-C, Windows = C # Birinde uzmanlaşmak ve seçeneklerimi veya her ikisini de kesmek istemiyorum ve sürüklenmemi yakalarsanız 'hiçbirinin ustası' olmak istiyorum. Söylediklerinizi takdir ediyorum, ancak bir programlama dili bilgisi olmayan veri yapıları ve algoritmalar hakkında sağlam bir bilgi, ikincisi olmayan bir programlama dili bilgisi kadar işe yaramaz.
İsimsiz

@Chris Bridgett: Tamamen yanlış anlaşıyorsun. Evrensel temeller vardır ve bir programlama dili de yoktur. İlk olarak, temel bilgileri öğrenin. Daha sonra, bir dil (veya bir OS) sadece pastanın üzerinde donuyor. Temel bilgiler pasta ve geleceğe dönük.
S.Lott
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.