Bir programcı kod anlamlılığını artırmak için yazma dersleri almalı mıdır?


15

Programcıların yazar olduğu ve soyut düşünceleri ve kavramları ifade etmek için kod yazdığı ve iyi kodun zorluk ve yanlış anlama olmadan diğer programcılar tarafından okunması gerektiğinden, bir programcı daha iyi kod yazmak için yazma dersleri almalı mıdır?

Kavramları ve gerçek dünya problemlerini / varlıklarını soyutlamak, iyi kod yazmanın önemli bir parçasıdır ve kodlama için kullanılan dilin iyi bir şekilde ustalaşması, programcının düşüncelerini daha kolay veya daha iyi bir şekilde ifade etmesine izin vermelidir. Ayrıca, daha iyi hale getirmek için bazı kodları yazmaya veya yeniden yazmaya çalışırken, işlevler, değişkenler veya veri yapıları için adlara karar vermek için çok zaman harcanabilir.

Bunun, birden fazla anlamı olan, genellikle farklı programcılar arasında yanlış anlaşılmaya neden olan kod yazmayı önlemeye yardımcı olabileceğini düşünüyorum. Kod her zaman işlevini açık bir şekilde ifade etmelidir.



2
İnsanların 18 yaşından büyük olduktan sonra, özellikle yabancı bir dil kullandıklarında (BT'de olduğu gibi) açıkça yazmayı öğrenmeleri güzel olurdu. Soru, nispeten kısa sürede iyi sonuçlar elde edebilecek bir öğretim yöntemi olup olmadığıdır. Üniversiteye ilk girdiğimde Bilimsel İngilizce dersim verildiğini hatırlıyorum, sanırım bana biraz yardımcı oldu (evet, bundan daha kötü yazardım :)).
NoChance

1
"Kod anlamlılığı" nedir? Bunu bir programlama dilinin dışavurumundan başka bir şey olarak görüyorum , çünkü hiçbir yazma dersi bunu değiştirmeyecek ...
Andres F.

1
blog.codinghorror.com/recommended-reading-for-developers -> Bkz. Kod Tamamlandı 2. En iyi "düzgün kod nasıl yazılır" kitabı şimdiye kadar okudum.
Machado

1
@JoseFaeti kitaplarda iyi bir tada sahipsiniz, efendim. :-) Bir "if" deyiminin nasıl doğru yazıldığını tartışan sonsuz sayfalar? Beni say. :-)
Machado

Yanıtlar:


25

1. Ders yazma? Pek sayılmaz.

Kaynak kodu yazmak, kitap yazmaktan yeterince farklıdır.

Her ikisi de aynı hedeflere ulaşırken: mümkün olduğunca açık ve anlaşılması kolay olsa da, bunu çok farklı bir şekilde yapıyorlar ve bir yazarın öğrenmesi gereken şeyler, bir yazılım geliştiricisinin öğrenmesi gereken şeylerle aynı değil.

Örnek 1: Konuşma figürleri

Romanlar, şiir, vb. Yazarken konuşma figürleri değerlidir, çünkü yazının anlamlılığını arttırırlar.

Kaynak kodunda en son bir oksimoron veya litote gördünüz mü? Onlara sahip olmak yardımcı olur mu, yoksa daha sonra bu kaynak kodunu korumak zorunda kalacak herhangi bir geliştirici için son derece zararlı mıdır?

Örnek 2: Kelime Bilgisi

Zengin kelime dağarcığı literatürde oldukça takdir edilmektedir. Örneğin William Shakespeare'in kelime hazinesi yirmi bin ila yirmi beş bin kelimedir. Daha zengin kelime dağarcığı bir roman veya şiir okumayı daha ilginç hale getirir.

Kaynak kodu yazdığınızda, kodun çok iyi İngilizce bilmeyen insanlar tarafından okunmasını . İngilizceyi ne kadar iyi bildiğinizi göstermek, kodunuz için son derece zararlı olacaktır. Tam olarak ihtiyacınız olan şey anlamına gelen süslü bir kelime biliyorsanız, ancak birçok insanın bu kelimenin anlamını bilmediğini biliyorsanız, daha az anlamlı bir eşanlamlı veya anlamını açıklayan bir kelime kümesi bulmalısınız. Belirli bir proje için genellikle birkaç bin kelimelik bir kelime dağarcığı yeterlidir.

Önemli bir noktaya dikkat edin: Google Çeviri, anadili olmayan bir konuşmacı için çok yardımcı olabilirken, herhangi bir çevirmenle ilgili iki sorun vardır:

  • Bir çift dilin kelimeler arasında mutlaka 1: 1 eşleşmesi yoktur. Bazı kelimelerin başka dillerde çevirisi yoktur veya birden çok kelime yabancı bir dilde tek bir kelimeye dönüşebilir. Örneğin, Rusça'da, belirli kar ve soğuk hava durumlarını hedefleyen çok sayıda kelime vardır ve bunları Fransızca veya İspanyolca olarak çevirmek, özgüllüklerini kaybetmeden genellikle imkansızdır.

  • Bir kelimenin bazen birden fazla anlamı vardır ve anlamı bağlamdan çıkarılır. Google Çeviri, yüksek kalitesine rağmen, genellikle en temel durumlar dışında herhangi bir anlam ifade edemez.

Örnek 3: İfadeler

İfadeler nesirleri de zenginleştirir. Bir yazar bir okuyucunun belirli bir genel kültüre sahip olmasını bekler ve bu fırsatı metni daha anlamlı hale getirmek için kullanır.

Önceki örneğe benzer şekilde, bu tür ifadeler anadili olmayan kişilerce okunduğunda çok sorunlu olabilir. Ancak genel kelime dağarcığı genellikle çevrilebiliyorsa, ifadeler çok daha problemlidir.

Örneğin, İngilizce benim ilk dilim değil ve günlük olarak, burada bilmediğim StackExchange de dahil olmak üzere ifadelerle karşılaşıyorum. Anlamlarını tahmin etmeye çalışıyorum ve bazen haklıyım. Ancak bazen yanılıyorum ve bu ifadeleri Google'a aktarmak yardımcı olmuyor.

Onda bir kullanıcı / onun comment PHP'nin: bana sadece programlama başladı uzun süre acı yapılmış bir örnek hatırlattı iğne ve samanlık . Karşılık gelen konuşma figürünün farkında değildim, bu yüzden belgeleri her okuduğumda bunun ne olduğunu merak ediyordum. Tabii ki C # sequence.Contains(element)veya mükemmel Python'lar element in sequenceçok daha iyi bir alternatif. En azından İbranice bilmeyen geliştiricilerin de PHP'den muzdarip olması gerekiyordu , ancak bu farklı bir hikaye.

Örnek 4: Kültürel referanslar

Kültürel referanslar. Edebiyatta, belirli bir kültürden unsurları dahil etmek caziptir ve bu da kitabı daha zengin ve bazen daha ilginç okumak için yapar.

Ancak, kod dünyanın her yerinden geliştiricilere yöneliktir. Bu nedenle, bir İtalyan geliştirici için açık bir referans olan, bir Rus için açık olmayan bir şey olmayabilir ve her Hintli erkek veya kızın bildikleri bir Amerikalı programcı tarafından bilinmeyebilir.

İğne ve samanlık hakkında konuşan aynı kullanıcı, bu tür kültürel referanslara da mükemmel bir örnek verdi: Kase. Grail'in ne olduğunu kim bilmiyor? Demek istediğim, Fransızca'da “Graal”, İspanyolca'da “Grial” ve ... Türkçe'de “Kutsal Kâse” ama yine de. Ancak, Amerikalı veya Avrupalı ​​geliştiriciler Çin'in veya Hindistan'ın ortaçağ tarihini ne kadar biliyor? Neden her Çinli ve Hintli programcının Kutsal Kase referansını bilmesi gerektiğini varsayalım?

2. Etkileyici kaynak kodu yazma dersleri? Elbette.

  • Herhangi bir geliştirici nasıl etkileyici kaynak kodu yazacağını öğrenmelidir.

  • Herhangi bir geliştirici, yorumun nedenini açıklamalıdır:

    int j = i + 1; // Creating i and adding 1 to it.
    

    tamamen yanlış olduğu gerçeğine rağmen, kötüdür.

  • Herhangi bir geliştirici, temel yeniden düzenlemeyi ve kaynak kodunu daha anlamlı hale getirmeye nasıl yardımcı olduğunu anlayabilmelidir.

  • Herhangi bir geliştirici, zamanın% 20'sinin kod geliştirmek için harcandığını ve zamanın% 80'inin kodunu korumak için harcadığını hatırlamalıdır. Bazı projeler için daha çok% 5 -% 95 gibi.

  • vb.


Temel olarak, programlama teknik belgelere yakındır. Cıvata için spesifikasyon sayfası yazan bir kişinin yazma dersi alması gerekiyor mu? Pek sayılmaz. Aynı durum geliştiriciler için de geçerlidir. Herkes her kelimede yazım hataları yapmadan yazmalı ve herkes fikirlerini yeterince açık bir şekilde iletebilmelidir. Bunun yanı sıra, ders yazmanın Bilgisayar bilimi veya BT güvenliği veya herhangi bir dersten daha yararlı olacağından emin değilim.

Kaynak kodun anlamlılığı başka yollarla öğrenilebilir. Superm bunlardan biri söz onun cevabını : iyi kod okuma. Birkaç kişiden bahsedebilirim:

  • Beautiful Code veya Code Complete gibi kitapları okumak,

  • Daha deneyimli bir geliştiricinin kodunuzu gözden geçirmesini istemek,

  • Kalıpları ve nasıl ve ne zaman kullanılacağını anlama.


+1 iyi cevap. Anlamlı olmak ve özlü olduğu çok önemli, ancak yazma dersleri eğitim zamanların en iyi kullanım biçimi olmayabilir. Açıkça, kendini tanımlayan bir kod yazmak için bilinçli bir şekilde çalışmak herkesin yapması gereken bir şeydir ve bence geri kalanı gerçek derslere gerek kalmadan yerine oturmaktadır.
Daniel B

Belgeler, e-postalar, ... ve kod var - iş arkadaşlarınızla, patronlarınızla, kullanıcılarınızla, gelecekteki benlikle vb.
Steve314

Anladım. Aslında, alana özgü dillerin kullanımı hakkında daha fazla düşünüyordum. Genel amaçlı bir programlama dilinin temel sözdizimini kullanmak yerine, alana özgü bir dilde programlama konusunda daha rahat hissettiğim bir noktaya geldim. Bu, kodunuzu programcı olmayanlar için bile daha kolay anlaşılır ve anlaşılır hale getirir. Bunun kötü İngilizce kelime dağarcığımdan kaynaklanıp kaynaklanmadığını merak ediyordum, dolayısıyla ders yazma hakkındaki düşüncem.
Jose Faeti

Genellikle iyi cevap, ama kodda konuşma figürleri gördüm. Örneğin, PHP'nin birkaç iyi özelliğinden biri, tüm arama / bulma işlevlerinin samanlıkta iğneler aramasıdır.
user949300

@ user949300: ve PHP'den bu kadar nefret etmemin nedenlerinden biri bu. Anadili İngilizce olmayan biri olarak, ilgili ifadeyi bilmiyordum ve benim için bu terimlerin hepsi yardımcı oldu. C # 'larla sequence.Contains(element)veya mükemmel Python'larla karşılaştırın element in sequence. Yani hayır, konuşma figürlerinin API'lerde yeri yok.
Arseni Mourzenko

11

bir programcı daha iyi kod yazmak için yazma dersleri almalı mıdır?

Hayır. Bir programcı daha iyi nesir yazmayı öğrenmek için yazma dersleri almalıdır. Bir programcı daha iyi kod yazmayı öğrenmek için programlama dersleri almalıdır. Bazı benzerliklere rağmen, yazma nesir ve kod yazma oldukça farklıdır.

Bu programcıların yazma dersleri almaması gerektiği anlamına gelmez. Yapmalılar! Bazı nedenler:

  • Yazma, eğitimli herhangi bir kişi için önemli bir beceridir. İyi yazabilirsen daha akıllı görüneceksin.

  • En iyi çabalarına rağmen, programcıların genellikle yazılı kelimeyi kullanarak diğer insanlarla iletişim kurması gerekir.

  • Yazma derslerinde yazmanın ötesinde becerileri öğrenirsiniz ve bunlar genellikle programcılar için yararlıdır. Örneğin, diğer insanların çalışmalarını duygularını incitmeden tartışmayı öğrenecek ve kişisel olarak almadan başkalarının eleştirilerini kabul etmeyi öğreneceksiniz.


Mesele bu. Kodunuz mutlaka daha iyi olmasa bile, özellikle diğer programcılar veya iş arkadaşlarınızla iletişimde daha iyi bir kişi olacaksınız. Sanırım sorum farklı formüle edilmiş olmalı :)
Jose Faeti

2
Çok fazla. Düzyazı'yı iyi yazabilmek herhangi bir profesyonel için önemli bir beceridir
Zachary K

6

Kodum gittikçe artan bir şekilde işletme ve teknik ekipler arasında paylaşılan bir kelime dağarcığı oluşturulmasına bağlı. Yazma becerilerinizi geliştirmenin, bu çabalardaki belirsizliği ve yanlış anlamaları azaltmanıza yardımcı olabileceğini söyleyebilirim, ancak kodunuzun ifade edilmesine yardımcı olması muhtemel değildir.

Edebi ifade kavramı, programlama ifade kavramı ile aynı şey değildir. Birçok durumda, dilde belirsizlik, kurgusal olmasa bile, ifadeyi artıran bir biçimde edebi bir araç olarak kullanılabilir, çünkü okuyucuda hem amaçlanan hem de amaçlanmayan çeşitli kültürel, dilsel ve sembolik ilişkileri tetikleyecektir. Bu tür bir ifade, programlamada arzu edilmez; soyutlama belirsizlikten daha değerlidir. Programlamada soyutlama, belki de bir miktar bilişsel yük maliyetiyle esnekliği arttırır. Edebi formdaki soyutlama, programlamadaki etkisinin tam tersine sahip olabilir: yazınız ne kadar soyut olursa, okuyucunun hiçbir şey söylemediğiniz algısına sahip olma olasılığı daha yüksektir. Somut konuşmadan kaynaklanan tüm sembol ve derneklerin değeri vardır,

Ancak, bir programcı bir makine değildir. İnsanlar genellikle zihinsel ve duygusal büyümeden beklenmedik şekillerde yararlanırlar. Yazınızı geliştirmek, müşteriyle daha fazla empati kurmanıza neden olabilir, çünkü kendinizi iletişim zorluklarıyla mücadele etmeye zorlarsınız; belki ne istediklerini söyleyen müşteri için hissedersiniz, o zaman onu teslim edersiniz ve ihtiyaç duydukları şeyin bu olmadığını fark ederler. Belki de söylenmemiş olanlara odaklanmayı öğreneceksiniz.

Belki bir çömlek çarkına kil atmayı öğrenmek, işçilik ve yazılım geliştirme arasındaki paralellikleri görmeye başlamanıza yardımcı olacaktır. Bina mimarlarının iletişim kurma şeklini incelemek, programlamada tasarım kalıplarından oluşan bir kelime dağarcığı oluşturmak için daha güçlü bir takdir kazanmanıza neden olabilir. Biyolojiyi incelemek, sizi karıncaların ve arıların gıda kaynaklarını nasıl buldukları ve iletişim kurdukları ve bu basit mekanizmaların yol bulma algoritmalarına nasıl dönüştürülebileceği konusunda büyüleyici içgörülere yol açabilir.

Ana alanınız dışındaki şeyleri öğrenmek faydalıdır çünkü meraklı insanlar olmayanlardan daha iyi geliştiriciler yaparlar.

Değeri için neredeyse bir edebiyat uzmanıydım; Doğu Asya Araştırmaları'na geçtim çünkü o bölümde aldığım derslerle daha çok ilgilendim. Doğu Asya Çalışmaları'nı incelememiş olsaydım, sektörde olmayabilirim, çünkü Japonca çalışmanın yan etkisi, bir yazılım şirketinin kısmen dil becerileri nedeniyle beni işe aldığı zaman beni daha değerli hale getirdi. Hala daha derin bir teknik beceri portföyü oluşturmak zorunda kaldım, ancak bir şey öğrenmenin istenmeyen yan etkileri sizi daha iyi ve daha alakalı bir yazılım uzmanı yapabilir.


+1: "Kodum gittikçe artan bir şekilde işletme ve teknik ekipler arasında paylaşılan bir kelime dağarcığı oluşturulmasına bağlı.": Çok önemli bir nokta! Analistler ve geliştiriciler iki farklı şey için belirli bir terim kullandıkları için birçok hata yanlış anlamalardan kaynaklanır.
Giorgio

4

Projeleri programlama başarısız olduğunda, genellikle başarısız iletişim nedeniyle, genellikle gereksinimler etrafında. İngilizcenin vasat bir kavrayışı aslında kod yazmak için yeterli olsa da, doğru kodu yazmak için iyi bir iletişimci olmak şarttır. Uzaktan çalışma, metin tabanlı iletişim çağında, İngilizce yazma çok önemli bir iletişim becerisidir.

Bununla birlikte, sorunuz çok açık ve özlü bir şekilde yazılmıştır - çalıştığım çoğu programcıdan daha iyi. Kodunuzu görmeden, kendinizi seçtiğiniz kodlama dilinde ifade etmeye odaklanmanızı öneririm. Java için Joshua Bloch'un "Etkili Java" kitabını öneriyorum.


Teşekkür ederim, elimden geleni yapıyorum! Aslında, genel amaçlı bir programlama dilinin sözdiziminin kodlama sırasında kendimi ifade etmek için yeterli olmadığı noktaya geldim. Şimdi, dil sözdizimini geliştirmek için önişlemci araçlarını programlıyorum ve aynı konu için etki alanına özgü diller uyguluyorum, belki de genel amaçlı bir programlama dilinde ifadeyi zorlamaya çalışmaktan daha iyidir.
Jose Faeti

3

Yazarlar dünya klasiklerini okuyarak öğretilir, bu yüzden programcılar iyi kod okuyarak eğitilirler . Ama küçük bir sorun var. Literatürde tanınmış devler olsa da, programlamada bunlardan çok az vardır. Ve varsa, farklı bir dil "konuşabilirler". (Tanenbaum tarafından Minix kaynak kodunun okunmasını tavsiye etmenin makul olduğundan bile emin değilim)

Yorum yazmak, anlamlı isimler vermek vb. Gibi kodu daha okunabilir (=> sürdürülebilir) yapmak için birçok popüler yol vardır. Ayrıca, birçok şirket kod yazma kurallarını belirler ve her şeyi kolaylaştırır.

Her neyse, birçok mükemmel yazar gibi, programcılar asla kendi kodlarından memnun değiller. Bu yüzden ne zaman duracağınızı bilmek kalite kodu yazmak kadar önemlidir.


2

Her zaman yazdığınız her kod bitinden sonra durup tekrar okudum, daha önce hiç görmediğinizi hayal ederek, bu konuda bana çok yol kat ediyor.

Daha da iyisi, programlamaya aşina olan bir arkadaşınıza kodunu ne yaptığını söylemeden okumasını istemektir.


0

Bunun yardımcı olacağını düşünmüyorum; yaratıcı yazma, teknik kavramları açık bir şekilde ifade etmekle değil, arsalar ve karakter geliştirme ve diyalog ile ilgilidir. Teknik yazı yardımcı olabilir, ama bundan şüphe ediyorum - onlar sadece çok farklı yazı türleri!

"okunabilir" kodun öznel olduğunu ve öncelikle sözdizimsel stil ve yaygın deyimler (diller arasında ve hatta takımlar arasında değişen) olduğunu unutmayın.

değişkenler ve sınıflar ve yöntemler için iyi isimler seçmek önemlidir. Her geliştirici, bir dereceye kadar, geliştirilmekte olan alanın belirli yönlerinde bir konu uzmanı haline gelir, bu nedenle alan adı terminolojisinin doğru kullanımı kritiktir.

akran değerlendirmeleri kelime ve güven oluşturmanıza yardımcı olabilir


0

Kod yazma ile nesir yazma arasında kesinlikle büyük bir fark vardır.

Düzyazıda cümleler, zamana bağlıdır (veya bir sona veya anlama ulaşmak için birbirlerini takip etme biçimleriyle), ancak (verimli) kodda, 'hikayenin' bölümlerini tekrarlanabilir tablolardan (yeniden) yükleyebilirsiniz. eylemler / yanıtlar. Bu nedenle, okuyucu (düzyazı) veya kullanıcı (kod) ile etkileşim tamamen farklıdır.

Başka bir şekilde 'güzel' nesir yazmak ve 'güzel' kod yazmak benzerdir: yazmayı öğrenmek (kod veya nesir) bunu elde etmek için çok fazla hata yapmayı (veya iyileştirmeler hakkında düşünme / test etme veya yeniden formüle etme) içeren bir süreçtir ' zarif'.

Elementlerin kimyasal periyodik sisteminin zarif olduğunu düşünüyorum, çünkü kullandığımız temel malzemelerin bazı temel özelliklerini, biraz verimli kod gibi tanımladığı çok kompakt bir şekilde, ama kesinlikle nesir değil. Bir şaka birçok düzyazı niteliğine sahiptir (sizi belirli bir ruh haline sokar, bu ruh halini korur ve beklenmedik olduğunda değiştirir) ama bu çok kötü bir kodlama uygulamasıdır.

Ancak her iki yazı türü de işçilik ister.


-1

benim açımdan bir programcı için temel İngilizce ve dilbilgisi yeterlidir. Ama sonra monoton bir programlama rutini kırmak için her şey her zaman gençleştirici olacak ve böylece yazma dersleri programcılar için rahatlatıcı olacaktır.


4
Monoton bir programlama rutini, bir kariyer değişikliği ile ders yazmaktan daha iyi ele alınabilir.
Eliot Ball
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.