Son 12 ayda öğrendiğiniz en önemli, yararlı veya aydınlatıcı şey nedir? [kapalı]


14

Kodlama topluluğundaki birçok insan sürekli iyileştirme, kasıtlı uygulama ve benzeri şeyler hakkında konuşuyor - ancak mevcut uygulamaları hakkında konuştuklarında neredeyse 'Zeus'un bellerinden tamamen oluşmuş gibi' çünkü nasıl olduğunu duymuyorsunuz fikirleri zamanla ya da son zamanlarda öğrendiklerini değiştirdi.

Arada sırada bir konuşmaya ya da bir kitap okuduğum ya da birisiyle konuştuğum halde, biraz daha açılıyorlar ve bu anlayışlardan çok şey öğrendiğimi görüyorum.

Son 12 aydan bir şey seçmek zorunda olsaydınız bunun ne olacağını öğrendiniz?

Yanıtlar:


18

Tüm projeyi bozmak için sadece bir çürük yönetici gerektirdiğini öğrendim, ancak daha sonra karışıklığı temizlemek için çok iyi programcılara ihtiyaç var.


Martin, mesajını beni bu yağmurlu ve soğuk cumartesi sabahı güldürdüğüm için iptal ettim, ancak soruyu cevaplamıyorsun;)

"Bunu öğrendim ..." eklendi
Martin Wickman

+1 çünkü bu ay bu programcılardan biriyim. Geçen hafta 70 saatten fazla == "namluda sıram".
Dan Ray

Bunu tanıyorum! Alıntı olmalı! Diyerek şöyle devam etti: "Tüm projeyi bozmak için sadece bir çürük yönetici gerekiyor, ancak daha sonra karışıklığı temizlemek için çok iyi programcılar gerekiyor."
Amir Rezaei

12

Biraz Clojure öğrendikten sonra , işlevsel programlamanın kullanışlılığını fark etmeye başladım ve Java kodlama tarzım bundan çok etkilendi. Popüler inanışın aksine, fonksiyonel bir programlama dili , bazı fonksiyonel programlama yapmak için mutlak bir ön koşul değildir.

İşlevsel programlamanın pek çok unsurunu Java gibi zorunlu bir dile dahil etmek mümkündür ve her zaman deyimsel olmasa bile, bazı problemlerde oldukça faydalı olabilir. Örneğin, anonim sınıflar wikipedia'da açıklandığı gibi kabaca kapanışlara eşittir . Tembel değerlendirme alışılmadık bir şeyden ziyade bir norm olmalıdır. Değişmezlik çok az kullanılabilir. Sadece mevcut nesneleri mutasyona uğratmak yerine yeni nesneler inşa etmenin pahalı olduğu (neredeyse) eski fikrin üstesinden gelin - vakaların% 99,9'unda ilgili değildir. Aslında, paralel işleme verimlilik argümanını bile tersine çevirebilir: yeni değişmez nesneler oluşturmak mevcut olanları mutasyona uğratmaktan daha ucuz olabilir , çünkü kilitlemeden kurtulursunuz.

Burada , burada , burada ve burada saf Java'da FP yapma hakkında daha fazla bilgi .


+1 katılıyorum. Java'nın işlevsel programlama için çok kötü bir desteğe sahip olması üzücü.
Jonas

FP'ye (ilk işim lisp dahil) uzun zamandır ilgi duyuyorum ve son birkaç yılda OO vb.
İle

Java 7 en azından daha iyi kapanmalıdır. Ve lambdaj gibi akıllı kütüphaneler kullanmak dilin eksikliklerini gidermek için harikalar yaratabilir.
Joonas Pulakka

Java / JVM'de kuyruk özyineleme için daha iyi destek almak istiyorum.
Jonas

1
@Helper Method: Cevabımdaki ilk iki bağlantı, Java ile FP ile ilgili makaleler. Konuyla ilgili hiçbir kitabın farkında değilim. "Almak" için en iyi yöntem bazı gerçek FP dilini öğrenmek ve daha sonra sadece Java kodunuzda daha değişmez nesneleri kullanmaya başlamak olduğunu düşünüyorum.
Joonas Pulakka

10

Mükemmel bir ekibiniz ve bu ekip için yetkin bir yönetiminiz olsa bile, işiniz hala güvenli değildir. Üst yönetim hala tüm Müdürlüğünüzü dağıtmak gibi aptalca şeyler yapabilir.

Kısacası: politika önemlidir ve bazen sizi etkileyen politikalar kontrol edemezsiniz.


Sana sanal bir +1 veriyorum çünkü Martin beni benzer cevapla gülümsetiyor;) Ölü Mart'ı okudun mu? bu ne hakkında konuştuğun hakkında bir kitap

(Sanal oylamayı gerçek bir

9

Yazılım testinin amacının hataları bulmak olduğunu öğrendim . Öyle değil sistem doğru olduğunu doğrulamak için.

Oyunda önemli psikolojik faktörler var: Amacınız programın "doğru" olduğunu göstermekse, geçeceğini bildiğiniz sınavlara yöneleceksiniz. Ancak amacınız hataları bulmaksa, sisteminizi gerçekten sınırlara zorlayacak testlere yöneleceksiniz.

Kullandığınız dilde bile önemli bir değişiklik var. Test bir hata bulursa başarılı olarak adlandırırsınız . Test [program geçiyor] değilse, başarısız olarak adlandırırsınız . Kendimi "doğrulama" düşünme çizgisinde ilerlerken yakaladım ve bu büyük bir fark yaratıyor.

Bu psikolojik etki daha çok tavsiye ettiğim klasik bir kitap olan Yazılım Test Sanatı'nda tartışılmaktadır . Yazar Myers, aynı zamanda bir programı test eden her yazarın yazarı olmamasını ve hatta aynı yönetim zincirinde olmamasını önermektedir. Kendi başınıza kodluyorsanız bunu yapabilirsiniz, bu yüzden disiplin alır.


8

Kod kalitesini nasıl etkileyeceğini görmek için müşteri teslimatında en başından test odaklı geliştirme yapmak ve sadece Eclipse'deki JUnit başlatıcıdan çalışmak. Daha iyi bir ürün elde etti.


"Son birim testini yeniden çalıştır" ı bir anahtara bağlamak için bir yol bulamadığımı unutmayın. Bu biraz sıkıcı oldu.

5

Egoless programlamanın gerçek değeri.

Bir düzeyde her zaman ego ve programlamanın karışmadığını biliyordum, ama sonuçları hiçbir zaman tam olarak aklınızdan çıkarmadım. Kendi uygulamalarınızda aktif olarak gözden geçirip hata bulmanız gerektiği düşüncesi, sadece geçen yıl gerçekleştirmeye başladığım bir şey. Ayrıca tasarımlarımın (hem kullanıcı arayüzünde hem de kodda) aktif olarak eleştirilmesini öğreniyorum.

Dürüst olmak gerekirse, hala egoyu nasıl bırakacağımı öğreniyorum ve muhtemelen programlama kariyerimin geri kalanında bunu nasıl yapacağımı öğreneceğim.


3

İşte kendi soruma cevabım:

Yaklaşık bir yıl önce, otomatik kabul testlerinin test cihazlarımızın manuel olarak yapacağı testlerin otomatikleştirilmiş versiyonları olmaması gerektiğini tıkladı. Tek bir geçişte olabildiğince çok vurmaya çalışmak yerine testlere tek bir spesifikasyona odaklanmak, testleri çok daha basit, daha kolay okunur hale getirdi ve artımlı teslimatı teşvik etmeye yardımcı oldu.


3

Semirings gibi bir matematiksel kavramın algoritmalara nasıl uygulandığını öğrendim. Bununla, farklı bir semiring kullanmak dışında bazı algoritmaların nasıl aynı olduğunu gösterebilirsiniz. Bu benim için bir programcı olarak o kadar garip olmamalı, ama başım şişmişti.


1
Bir örnek var mı?
Mark C

Programlama Elemanı kitabında güçleri ve bazı fibonacci şeyleri hesaplayan, O (log n) zamanında fib'i hesaplayan bir fonksiyon kullanan bir örnek vardır. Bence örnek burada bulunabilir cpp-next.com/archive/2010/03/eop-ch3-preview , ancak bu web sitesi bir iç sunucu hatasıyla yanıt veriyor.
Peter Stuifzand

3

Frank Shearar'ın bahsettiği politikaların yanı sıra , yakın zamanda günümü yapan QUnit ve JSCoverage'ı keşfettim . Ve ay. Hiçbir zaman o birim test JavaScript mümkün olacağını düşündüm ile kod kapsama, ama ... orada :-)


Bu önümüzdeki yıl için benim radar, js birim test biraz dabbled ama henüz gerçek bir proje üzerinde değil. Mevcut bir kapsama aracı olduğunu bilmiyordum!
FinnNk

2

Son programlama yılı için en büyük üç teşekkürlerimi (önem ve minnettarlığın azalan düzeninde) aşağıdakilere gideceğim:

  • fikrimi ve algoritmaları kodla ifade etmenin diğer, genellikle daha zarif ve kısa yollara açmaya yönelik işlevsel programlama paradigması . Fonksiyonel programlama fikirleri sayesinde genel programlama becerimin çok kısa sürede çok geliştiğini hissediyorum.

    (Kişisel teşekkürlerimi, mükemmel kitabı Real-world fonksiyonel programlama için Tomáš Petříček'e gidin .)

  • hem bağımlılık enjeksiyon ve birim test nesne kompozisyon tartışmalı kompleks (nesne yönelimli) sistemleri oluşturmak için en iyi yol olduğunu öğretti (ve bu sınıf kalıtım ben düşünürdüm kadar önemli değildir). Her ikisi de bana öğretti ve sistemleri en iyi nasıl oluşturacağımı ve kullanımı kolay ancak yine de yeniden kullanım için yeterince esnek olan bileşenlerin nasıl yazılacağını düşündürdü.

    (İyi bir öğretim kaynağından bahsetmem gerekirse, Roy Osherove'un Birim Testi Sanatı derdim .)

Bunların hepsi birlikte ele alındığında bana genellikle eskisinden daha az hata içeren bir kod yazmakla sonuçlandı, çünkü şimdi anladığım ve yanlış yaptığımdan çok daha kolay olan bir kod yazıyorum.


2

Hızlı gelişen yazılım endüstrisinde hiç değişmeyen , öğrenme eğrisi her zaman burada. "Öğrenmek için zaman ayırmadan öğrenmenin bir yolu olsaydı."


Öğrenilecek her zaman yeni şeyler olması, bana göre, bu mesleğin harika cazibelerinden biridir. BT sistemleri genellikle artan karmaşıklığı en iyi nasıl kullanacağınızla ilgilidir ve bu yönde yeni teoriler ve kavramlar keşfetmeyi seviyorum. Öte yandan, zaman zaman hepsi sinir bozucu olabilir, çünkü en son teknolojiye ayak uydurmak, sürekli bir yarış gibi hissedebilir.
stakx

1

Yeni bir şirkete satılmanın gerçekten işinizi geliştirebileceğini öğrendim. Kuruluşum Mayıs ayında eski şirketimizden satın alındı ​​ve işler iyileşmeye devam ediyor. Yeni şirket, yeni ofisimizle çok az / hiç masraftan kaçındı, kullanımdan kaldırılan geliştirme makinelerimizi 21. yüzyıl ekipmanlarıyla değiştirdi, projelerimizi yönetme esnekliği sergiledi ve genel olarak hepimizi karşılamadan daha fazla hissettirdi.

Biraz iç karartıcı hissettiriyor (yeni bir feodal lordu olan bir serf gibi, el değiştiren toprağa bağlı olduğu için), ancak nihai sonuç beklediğimden çok daha iyi oldu.


0

Visual Studio 2010 içinde Microsoft birim testi kullanarak söyleyebilirim.

Belirli bir test yönteminde hata ayıklamayı gerçekten kolay buldum.

İş katmanı uygulamasının iyi çalışıp çalışmadığını görmek için her zaman test projemi çalıştırabilirim. Test süreci, web sitemizin ziyaretçileri için tam çözümü uygularken ekibimin herhangi bir sorun yaşamaması gerektiğini garanti eder.


0
  • Öğrenilen Temel Python (bazen hızlı komut dosyaları yazmak için kullanma)

  • VM'de ArchLinux yüklü (daha önce VM'de Ubuntu vardı, bilgisayarım şimdi hızlı!)

  • MATLAB ile başladı (özellikle grafikler ve hızlı sayısal kontroller çizmek için)

  • Mercurial (SVN'den) (dallanma ve birleştirme!)



-1

Bir Python web uygulamasını sürdürmeye başladım - bu yüzden Vim'i öğrenmek için iyi bir zaman olduğuna karar verdim . Şimdi Java ve Flex geliştirmem için Intellij için IdeaVim eklentisini kullanıyorum ve kesinlikle yazımımı daha hızlı ve daha verimli hale getirdiğine inanıyorum.


1
Gerçekten - -1? Bunu benim için açmak istiyorsunuz - insanlar VIM'in aydınlatıcı veya yararlı olduğunu düşünmüyor mu?
Watson
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.