Dil agnostik olmak için ne yapmalıyım?


52

Şimdilik asp.net ve C # ile çalışıyorum. Java'da da iyi bir iş çıkardım. Kariyerimi öyle bir şekilde planlıyorum ki bir gün dille agnostik yapmalıyım. Öğrenmem gerekenler neler?

Birincisi, OOP Sınıf tasarımından bahsettiği gibi paradigmalar yapar. Başka var mı?


2
Etiketlemeye çalışmaktan, iş esnekliğine sahip olmaktan veya bazı vizyon görevlerinden kaçınmaya çalışıyor musunuz?
JeffO,

2
@Jeff Evet! etiketlenmemek ve
dilimin

Madenle aynı fikirde olmayan güçlü bir görüşü olan birini işe alma ihtimalim daha yüksekti. Çünkü o zaman Java'yı yazabilirdi.
Erik Reppen

Bunu yaptıysanız, işe alım çalışanları özgeçmişinizi atlardı.
gonzobrains,

Yanıtlar:


67

Dil bilimi için, tüm yaygın stil ve dil türlerinde deneyim sahibi olmanız gerekir.

  • Bir zorunluluk dil (Sen adım adım ne yapacağını söylemek Ör -. C)
  • Bir bildirime dili (Gün içinde bir çok hedefinizi anlatmak, bunu yapmak anlamadan Ör -. SQL / HTML / Prolog)

Ayrıca:

  • Bir fonksiyonel dil (Fonksiyonlar kaçınarak, anahtar devlet ve yan etkileri amaçlarıdır Ör -. Haskell / OCaml / Lisp / F #)
  • Bir nesne yönelimli dil (nesneler ile ilgili veri ve onlara hareket yöntemleri kapsülleyen Mimari). Örn - Java / C #)

Bazı yazım stilleri:

  • Bir statik olarak yazılan dil (Veri türleri tanımlanmış ve derleme zamanında kontrol edilir Ör -. C #)
  • Bir dinamik yazılan dil (Veri tipleri çalıştırma Örn kontrol edilir -. Python / JavaScript)
    ait Deneyim kuvvetli vs zayıf yazarak de yararlıdır.

Bazı farklı çalışma zamanı stilleri:

Alt seviye şeyler:

  • Oldukça düşük bir şey (Örn - C)
  • Bazı montaj lehçeleri (Örn - NASM)

Bunun da ötesinde, bazı eşzamanlı programlama ve olaya dayalı bir olay deneyimine ihtiyacınız olduğunu söyleyebilirim . Muhtemelen, web programlama (müşteri ve sunucu), zengin müşteri geliştirme / masaüstü, oyunlar gibi çeşitli alanlar hakkında bir şeyler bildiğinizden de emin olmalısınız. Ayrıca, gömülü programlama veya özel donanım (oyun konsolları gibi) hakkında bilgi edinmek isteyebilirsiniz ve mobil geliştirme giderek daha fazla etki alanı haline geliyor.

Diğerleri de, Genel programlama ve Meta programlama yaklaşımlarında biraz tecrübe kazanmaya değeceğini belirtti .

Bu paradigmaları öğrenirken, sadece sözdizimini öğrenmek ve eski tarzınıza yazmaktan kaçının. Birçok C # devs JavaScript yazmış gibi statik yazılmış gibi gördüm. Bunu yapma, dil paradigmalarını öğrenmeye çalış ve onları kucakla.

Bunların hepsini yaptıysanız, diller arasındaki farklar büyük ölçüde sözdizimsel hale gelecektir, bu yüzden değişim bazı yeni sözdizimi öğrenme oldukça basit bir alıştırma haline gelecektir.

Modern programlamanın neredeyse her zaman bir çerçeveye bağlı olmasına rağmen, öğrendiğiniz her dil için ortak ve popüler çerçevelerle tanışmanız da çok önemlidir. C # bilmek. Net olmadan ilgisizdir.


9
HTML, verilen anlamda nasıl bildirimde bulunur? "Hedef -> Eylem"? O değil yapmak gerçekten bir şey.
Felix Dombek

3
Prolog, yalnızca araştırmayı önerebileceğim mükemmel bir bildirim dili. Her şeyden farklı - işlevler yok (ancak her iki yönde de çalışan ilişkiler), açık bir kontrol akışı yok (yorumlayıcı sizin için her şeyi çözer), yalnızca bir harika veri yapısı (terimler, başka hiçbir şeye gerek yok.) İnanılmaz derecede hızlı ne yaparsa, saniyede milyonlarca birleşme ve çıkarım yapmak - ve bir şeyler geliştirmek için gereken zaman C / C ++ ile karşılaştırıldığında Python'daki kadar kısa.
Felix Dombek

3
@Felix: HTML, goal = "Bir etiket ve bir metin kutusu istiyorum". Eylem = Düzen ve grafik motorları nasıl çizileceğini belirler. Detaylar bireysel tarayıcılara aittir. Ne yapmak istediğinizi sadece siz tanımlayın. Buraya bakınız . Yine de katılıyorum, Bu gerçekten bir "dil" değil. Prolog daha iyi bir örnek, güncelleyeceğim.
Simon P Stevens

1
+1 İyi bir tür listesi için, dil seçimleri yerlerdeki paradigmadan biraz uzakta, ama genel olarak mükemmel.
Orbling

2
Bu arada, "Farklı etki alanları / soyutlama düzeyleri" eklemelisiniz: web, etkileşimli web, masaüstü araçları, masaüstü oyunları, kalıcı oyunlar aynı şekilde oluşturulmaz, donanımlar arasındaki mesafeler farklıdır ve dil seçimini yapar ( ve hatta varoluş) agnostik ne olduğunu anlamak isteyenler için daha açık.
Klaim

4

Gerçekten dil agnostik olabileceğini sanmıyorum. Şu anki dilimde "düşündüğümü" buluyorum (şu anda C #).

Ancak, bunu söyleyerek, belirli bir dilden ziyade sözde kodda düşünmeye çalışarak tasarımı koddan ayırabileceğinizi ve aslında bu formatta yazabileceğinizi düşünüyorum. Bu, şu anki dilinizde uygulama yerine tasarım ve mimari kararlarına odaklanmanıza yardımcı olabilir. Bununla ilgili dezavantajı - Simon'ın işaret ettiği gibi - sonuçta kullandığınız dil ve çerçevenin kaçınılmaz olarak tasarımı etkileyeceğidir. Böylece tasarımınız geliştikçe, dile ve çerçeveye giderek daha fazla bağlı hale gelecektir.


"Gerçekten dil agnostik olamazsınız" için +1. Fakat ikinci paragrafınıza tam olarak katılmıyorum. Kullanacağınız dili ve çerçeveyi tasarlamanın önemli olduğunu düşünüyorum.
Simon P Stevens

@Simon - çerçeve için tasarım konusunda iyi bir noktanız var. Cevabı güncelleyeceğim.
ChrisF

3

Sorunuzu ve bazı cevapları okumak, “dünyadaki her paradigmayı bilmek” ile “dil agnostisizmine” eşit olduğunuz izlenimine sahip olabilir.

Var olan her paradigmayı bilmek veya çeşitli diller bilmek, çeşitli paradigmalar ve dil türlerini bilmek sizi "dilde agnostik" yapar mı bilmiyorum.

Bu, bütün dinleri uygulamanın kendinizi dini açıdan agnostik hale getirdiğini söylemek gibi bir şey.

Bence programlama dilleriyle ilgili dil bilen bir kişi, herhangi bir dilde nasıl programlanacağını bilmeyen veya hangi dilde program yapması gerektiğini umursamayan biri olmalıdır.

Bununla birlikte, bazı insanlar gerçek bir programcının o dilin belgelerine erişim izni verilen herhangi bir dilde programlayabileceğini söylüyor.

Eğer "dil agnostiği" ile kastettiğiniz buysa, hemen hemen her deneyimli programcı, çalışmak zorunda kaldığı herhangi bir dilde, dil dokümantasyonuna erişim izni verildiğinde programlayabilir.

Belki de "dil çoktanrı" olmak istersiniz.

Kendimi birkaç dilde paradigmada yetkinim ama başarılı olduğunda OOP'u tercih ederim. Bu yüzden agnostik değilim sanırım.

Seçme özgürlüğü verilen belirli bir paradigmayı veya dili tercih etmeyen birini zor bulursunuz.


0

Sadece diller değil, Java'nın kendisinin yıllarca hepsini öğrenerek harcayabileceğiniz çok farklı modları vardır. Öğrenebilirsin:

  • Mesajlaşma ve Kalıcılık ve çeşitli sunucular gibi J2EE özellikleri
  • jsp ve Apache'ye yönelik araçlar
  • karınca, maven ve diğer yapı sistemleri (Dillerin kendileri).
  • Bütün Groovy / Grails dünyası
  • tüm apache commons API'leri
  • test sistemleri (Mocking, JUnit)
  • Swing, GWT gibi GUI üreticileri ...

Ve özlediğim yüzlerce şey - SADECE java içinde.

Genişliği kapsayan (her dili öğrenmek) yıllarını harcıyorsanız, bunlardan herhangi birinde etkili bir şekilde çalışabilmek için derinlik kazanmakta zorluk çekersiniz.

Yeni bir dil öğrenmenin HİÇ bir sorun olmadığını söylemiyorum, aktif olarak yapmalısın! Bir sonraki işimi öğrenebileceklerime (henüz yapmadıklarım) dayanarak seçmeye çalışıyorum, fakat sıklıkla rastgele bir dil seçmiyorum ve daha fazla öğrenmiyorum - Son denediğimde Scala ve biraz sarsılmış bıraktı ...


To "Bütün Groovy / Grails dünya" Eklemek olabilir "tüm Scala /! 2 dünya, bütün JRuby / Raylar dünyayı oyna ve tüm Clojure / Noir dünya".
Vorg van Geir

1
Katılıyorum, bunu bir süre önce yazdım ve sadece kafamın üstündeki şeyleri çekiyordum - muhtemelen web çerçevelerinden birini seçip onunla devam etmeme rağmen.
Bill K,
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.