Her programcı programlama hakkında ne bilmeli?


52

Lütfen teknik meselelerde kalın, davranış, kültürel, kariyer veya politik meselelerden kaçının.



Bu tür bir soru beni gerçekten sinir ediyor. Sadece dünyayı siyah ve beyaz olarak gören birinin aklından gelebilir. Her programcı aynı işe sahip değildir ve aradığınız en küçük ortak payda ise, aşağıdaki cevaplar sadece bir hayvan kabuğu listesiyle sonuçlandığını göstermektedir.
Kaptan Duygulu

Yanıtlar:


92
  1. Hata olduğu için kod değil, derleyici veya çalışma zamanı kütüphaneleri.

  2. Olası bir hata görüyorsanız, programınızı doğru bir şekilde oluşturup dağıtmadığınızı kontrol edin. (Özellikle karmaşık bir IDE kullanıyorsanız veya dağınık ayrıntıları sizden gizlemeye çalışan bir çerçeve oluşturuyorsanız ... veya derlemeniz çok sayıda manuel adım içeriyorsa).

  3. Eşzamanlı / çoklu iş parçacıklı programlar yazmak zor ve düzgün test etmek daha zor. Eşzamanlılık kitaplıkları ve çerçeveleri eşzamanlı olarak bırakmak için en iyisidir.

  4. Belgeleri yazmak, programcı olarak işinizin bir parçasıdır. "Başkasının" yapması için bırakmayın.

DÜZENLE

Evet, 1 numaralı noktama göre kontrol altına alındı. En iyi tasarlanmış uygulama platformlarında bile böcek payı vardır ve daha az iyi tasarlanmış olanlardan bazıları bunlarla doludur. Ama öyle olsa bile, her zaman kodunuzu kuşkusu olmamalıdır ilk ve sahip yalnızca derleyici / kütüphane böcek suçlamaya başlar net kodunuzu hatalı olmadığını kanıtlar.

C / C ++ geliştirmeyi yaptığım günlerde, sözde optimize edicinin "hataların" dil benden tanımsız sonuçlara sahip olduğunu söylediği şeyleri yapan benden / bazı diğer programcılardan kaynaklandığı ortaya çıktığını hatırlıyorum. Bu, Java gibi sözde güvenli diller için bile geçerlidir; örneğin, Java bellek modeline uzunca bir göz atın (JLS bölüm 17).


17
Birkaç kez çalışma zamanı kitaplıklarında hatalarla karşılaştığım için "Hata muhtemelen sizin kodunuzda" demeyi tercih ediyorum . Yine de bir derleyici hataya rastlamadım. Yine de +1.
Chinmay Kanchi

29
Derleyicide daha önce hiç iyi niyetli bir böcek bulamadıysanız, kodlamanız için yeterince maceralı değilsiniz demektir. ;)
Mason Wheeler

8
@Chinmay, @ spudd86, @Mason - evet ... ve ayrıca 30 yıllık programımda derleyici ve kütüphane hatalarındaki payımı buldum. Ancak deneyimlerime göre, hataların% 99 + 'si kodumun hatası (en azından kısmen). Cevabım, her zaman önce kodunuzdan şüphelenmeniz gereken noktaya gelmek için bunu kasten abartıyor .
Stephen C

5
İnsanların çok iş parçacıklı programlama ile sahip olduğu irrasyonel korku alamıyorum. Bu görüşü sürdürenlerin çok fazla parçalı kod programlamadığından şüpheleniyorum. Sadece o kadar zor değil. Yine de her şey için +1.
Steven Evers

4
); Derleyici üzerinde çalışıyoruz, o zaman hata kodunuzda ve derleyici hem de muhtemelen
Legooolas

84
  • Diğer insanların kodları nasıl okunur?
  • Sürüm Kontrol Sisteminde işaretli değilse kod mevcut değil.

8
+10000 versiyon kontrolü için yorum yapabilirsem. Geçmiş ve değişiklik günlüğü kesinlikle vazgeçilmezdir ve her şeyi en baştan sürüm kontrolüne koymanızın nedeni budur.
Legooolas

2
... ve depo en az bir başka yere senkronize edildi. DVCS ile aynı zamanda merkezi VCS ile de önemlidir.

Bu nedenle, geliştiricinin yazmasına izin veren bir iş öğesi bulunmadıkça kod yoktur.
Jesse C. Dilimleyici

2
Başkalarının kodunu okumayı öğrenmek için bir tanesini artıracağım. Çoğumuzun farkına varmak daha zor, ama başarılı programlamanın önemli bir parçası.
bogeymin

artı diğer kişilerin kodlarını okumayı öğrenmek için bir tane.
itsaboutcode hakkında

76

Kayan nokta hesaplamaları kesin değildir .



Ne hakkında konuştuğumu kimse bilmiyorsa, @ Adam'ın bağlantısını okuyun. Kayan nokta hesaplamasının tuzaklarının mükemmel bir özeti.
Chinmay Kanchi

1
Ve bilmiyorlarsa, günlük yığın akışını isteyen insanlar arasında olabilirler.
Brian R. Bondy

1
@Brian: Çok doğru. Kayan nokta aritmetiği ile açıklanan soruları tanımlamanın bir yolu olmasını isterdim. Her gün farklı bir kayan nokta sorusu görüntüleyen bir Yığın Uygulaması oluşturabilirsiniz!
Adam Paynter

63

Öğrenmeyi bırakma.


1
İlgili: İnanmayı bırakma.
Fishtoaster

3
İlgili: Yarın hakkında düşünmeyi bırakma.
ocodo,

7
İlgili: Müziği durdurma.
adamk

1
İlgili: Hareket etmeyi bırakma! Bu senin hayatın, ilerlemeye devam et, doğru al, doğru yapmalısın!
ocodo,

44

Kodunuzun kalitesini ve sürekliliğini artırmak için yapabileceğiniz 1 numaralı şeyin, REDUP TUTMA SİSTEMİDİR.


4
KURU, evet! Nasıl unutabilirim? ;-)
Maniero 10:10

Bu çok önemli, yine cevap verdim .

Söylemek isterdim: KOŞULLARIN AZALTMASI. Her bir süre / if / for potansiyel bir hatadır.
zvrba

1
DRY ile ilgili komik olan şey, her yerde tekrarlanması. :) +1
Billy ONeal

39

Sorun Giderme ve Hata Ayıklama Becerileri

Aldığım programlama kurslarının hiçbirinde bu konuda fazla zaman harcamıyorlar ve deneyimlerime göre bir programcının ne kadar verimli olduğunun en belirleyici faktörlerinden biri. Beğenin ya da beğenmeyin, uygulamanızın bakım aşamasında yeni geliştirme aşamasından çok daha fazla zaman harcıyorsunuz.

Soooooo ile çalıştım, problemi bulmak için hiçbir stratejisi olmayan şeyleri rastgele değiştirerek hata ayıklama yaptım. Bu sohbeti onlarca kez yaptım.

Diğer Programcı: Bence düzeltip düzeltmeyeceğini görmeye çalışmalıyız.
Ben: Tamam, bunu düzelteceğini varsayarsak. Bu size sorunun kaynağının nerede olduğu hakkında ne söylüyor?
Diğer Programcı: Bilmiyorum ama bir şeyler denemek zorundayız .


2
Bunu göndermek üzereydim. Bir programcının işinin çoğu hataları düzeltmek ve pek çok insan bunu yapamaz hale geliyor (özellikle başkalarının kurallarına göre).
Dov

+1 Javascript / php 'den C #' ya gittim ve kodda ilerleyerek aşık oldum. Dinamik olarak yazılmış dillerin daha iyi bir iş çıkarmasını diliyorum.
Evan Plaice

Tuhaf bir davranış, programcının, programın her bölümünün, sonuç hatalı olduğunda sonuçlandırılmasında ısrar etmesidir. Msgstr "" "Yukarıdaki dizinin array.sort () olması nedeniyle dizilip dizilmediğini kontrol etmek için diziyi konsolda yazdırmanız gerekmez." “-Eee ... biliyorsun, çalışmıyor. Bir yerlerde yanlış bir şeyler olmalı. Bu noktada kodunu savunamazsın!”
gawi

2
Programınızdaki varsayımlarınızı doğrulamak için hata ayıklamanın amacı olduğunu düşünüyorum. Bazen, bazı ipuçları için balığa gitmen gerekir. Bu sistematik yapılmalıdır. Bu şey denemek tamamen geçerli He got olabilir sana yeni bir şey söyle. Sık sık yaparım.
gawi

37
  1. Akıllı olmayın; açık ol.
  2. Tekrar kullanmadan önce kullanın.
  3. İsimler önemli.
  4. Bir fonksiyon 1 şey yapar ve iyi yapar.
  5. Küçük büyükten iyidir.

2
"Yeniden kullanmadan önce kullan" ifadesini netleştirir misiniz? Bunu daha önce duymamıştım.
Tjaart

34

Temeller. Halen programcılar kavramları değil teknolojileri öğreniyorlar. Yanlış.


Evet ve hayır. Üniversitede sahip olduğum her profesör gibi konuşuyorsun ... hepsi yaşamları boyunca hiç yazılım yalamadı. Bilgi, beceri olmadan mesleğimizde işe yaramaz.
Steven Evers

4
+1, çok doğru. Evet, bu fildişi kule türlerinin söyleyebileceği bir şeydir, ancak siperlerdeki geri kalanlarımız için daha az gerçek olmaz.
MAK,

2
Yazım denetimi gibi temel bilgiler? Its wrongolması gerektiği it's wronggibi.
Konerak

2
Hayır, basics gibi bir yazım hatası umursamıyor ama programlama sorunları umursuyor.
clrod

5
Bir şeyi yapma adımlarını öğrenmek kolaydır ve ne zaman kullanmanız gerektiğini ve daha ne zaman kullanmanız gerektiği, ancak ne zaman kullanmamalısınız olduğunu bulmak zor. Ders kitapları özellikle nedenini (neden olmasın) gösterme konusunda kötüdür.
HLGEM

27

Her programcı varsayımları her zaman koda koyduğunu bilmelidir; örneğin, "bu sayı pozitif ve sınırlı olacak", "bu kod sunucuya her zaman göz açıp kapayıncaya kadar bağlanabilecek".

Ve bu varsayımlar çiğnendiğinde buna hazırlıklı olması gerektiğini bilmeli.


6
özellikle assert()her yerde - olanları belirtin . assert()varsayımlarınızı belgelendirmenize ve hatalı olduğunuzda tasarruf etmenize yardımcı olacaktır.
Dustin

@Dustin +1 Tüm varsayımlarınızı hatırlamanıza imkan yok - bunları programlı olarak belgeleyin ve yanlış varsayımlara dönüştüklerinde size tam olarak söylensin.
Skilldrick

1
... NDEBUG ile derlenmedikçe.


17

Kavramları öğren . Google sözdizimini yapabilirsiniz.


Teoride iyi, çünkü Google belirli bir sözdizimi bulmak için korkunç : Bir gazilyon sonucu verilen "nesne referansı" veya "bu" gibi terimleri aramak ve "$?" Gibi deyimleri aramak hiç sonuç vermeyin.
l0b0


14

Birim Testi. Bu, kodun nasıl kullanılacağına ilişkin varsayımlarınızı kodlamak için harika bir yoldur.



13

Bu düşündüğünden daha zor.

Normal kullanıldığında, hatalı girdi ile başa çıkarken, tüm kenar ve köşe durumları, olası arıza modları vs.

O zaman uygulamanın da iyi görünmesini sağlamalısınız.


3
Eski işlerin kaynağının bu olduğunu düşünüyorum 'işin% 90'ı zamanın% 90'ını alıyor. son 10%, diğer zamanın% 90'ını alıyor '
GSto

Bence birçok insan, karmaşıklığı tutarlı bir şekilde tahmin etme eğilimindedir. “X ne kadar zor olabilir?” - ünlü son sözler: /
Roman Starkov 21:10

@GSto Zamanın% 180'inde çalışmak istemiyorum,% 100 bana göre gayet iyi!
adamk

13

Etki alanı bilgisi. Spec asla% 100 değildir; Gelişmekte olduğunuz asıl etki alanını bilmek HER ZAMAN ürünün kalitesini artıracaktır.



11

İşaretçiler, açıkçası. :)


3
İşaretçiler, küçük bir görev kümesi için yalnızca bir dil alt kümesinde gerçekten gereklidir. Çoğu görev için, bir işaretçi kavramı yokmuş gibi programlayabilirsiniz (ve yapabilmelisiniz).
Chinmay Kanchi

14
@Chinay Kanchi No. İşaretçiler herkes tarafından anlaşılmalıdır.
alternatif

5
Bu gerçekten işaretçi ile ne demek istediğine bağlı. Eğer manipüle edebileceğiniz C tarzı işaretçilerden bahsediyorsanız (ki benim düşündüğüm şey), bir Java / C # / Python programcısının onlar hakkında hiçbir şey bilmesi gerekmediğini iddia ediyorum. İşaretçinin Java'nın "referanslarında" olduğu gibi bir ifadeyle, yani kasılamayacak bir işaretçi olduğunu kastediyorsanız, o zaman evet, sadece onların kaymasını engellemek için bazı bilgiler gereklidir.
Chinmay Kanchi

@ mathepic Her yıl kaç tane CS öğrencisinin mezun olduklarını, işaretçilerle ilgili ilk şeyi anlamayanları öğrenirseniz, özünüzü sarsacaksınız. Her yaz yerleştirme yolumdan çıkmasaydım, C'deki işaretçiler ya da Java'daki referanslar hakkında bile ders almazdım ...
Mike B

5
@Chinmay: İşaretçiler kavramını anlamayan bir Python / Java / C # programcısı kaybolur. L = [[]] * 2; L[0].append(42) Farklı diller farklı isimler kullanır, ancak dolaylı olarak her yerde esastır.

11

Kod Tamamlandı 2 - kapak için


programa para kabul etmeden önce bunu gerçekten bilmelisin. Eğer bilmediğiniz bir şey bulursanız, sizi geçmek için bir kariyer değişikliği veya yoğun bir kişisel yönlendirme çalışması dönemi düşünün. Sonra iş arkadaşlarından özür dile. Ve sadece programlama temellerini kapsar.
Tim Williscroft

11

Veriler koddan daha önemlidir.

Verileriniz akıllıysa, kod aptal olabilir.

Aptal kodun anlaşılması kolaydır. Akıllı veri de öyle.

Neredeyse şimdiye kadar sahip olduğum her algoritmik keder, verilerin yanlış yerde olması veya gerçek anlamını kötüye kullanmasından kaynaklanıyordu. Verilerinizin anlamı varsa, bu anlamı yazım sistemine yerleştirin .


2
Bana "tip sistem" diyene kadar başıma geldin.


10

Böl ve fethet. Genellikle zamanlamadan hata ayıklamaya kadar her türlü pratik sorunu çözmenin en iyi yolu budur.


8

Gerçek beceri, karmaşık bir tasarımın hiç çalışmamasına değil, basit bir tasarımın iyi bir şekilde gerçekleştirilebilmesidir.

Bu beceri, arkana ilişkin ustalıktan değil, temellerin ustalığından gelir. Yüksek kalibreli bir programcı, başkalarının yapamadıklarını kodlama yetenekleriyle tanımlanmamıştır (daha yüksek seviyeli fonksiyonlar kullanarak, gelişmiş fonksiyonel programlama, sahip olduğunuza sahip), ama tam anlamıyla sıradan kodlamayı hassaslaştırma yeteneklerinde. Sınıflar arasında uygun işlevselliğin ayrışmasının seçilmesi; sağlamlıkta inşa etmek; savunma programlama teknikleri kullanmak; ve daha fazla öz belgeleme sağlayan kalıplar ve isimler kullanarak bunlar yüksek kalibreli programlamanın ekmeği ve yağıdır.

Siz veya bir başkası, bir ay veya yılda bir hafta içinde geri gelebileceğiniz ve bu kodun nasıl kullanılacağı, değiştirileceği, geliştirileceği veya genişletileceğini anladığınız iyi kodlar yazmak çok önemlidir. Size zaman ve zihinsel çaba kazandırır. Daha önce tökezleyeceğiniz barikatları kaldırarak (belki de düşünce treninizi kesmek, ya da belki de diğer işten saatlerce ya da günlerce çaba harcamak, vb.) Üretkenlik çarklarını yağlar. ve bazen zor problemleri ortadan kaldırır.

Bir kelimeyle: şıklık. Her sınıf, her yöntem, her koşul, her blok, her değişken adı: şıklık için gayret gösterin.


8

Daha temiz bir kullanıcı deneyimi veya daha iyi belgelerle nelerin düzeltilebileceğini asla kullanıcıya suçlamayın. Genellikle, programcılar otomatik olarak kullanıcının problemi genel bir deneyim ya da iletişim eksikliği olduğunda doğru bir şey yapamayan bir aptal olarak kabul eder. Programların kullanılması amaçlanmıştır ve kullanıcıya saygısız davranmak, ilk başta programlama noktasını kaçırmaktır.


6

Her programcı hata ayıklayıcısını nasıl kullanacağını ve nasıl iyi kullanacağını bilmelidir .




4

Kısa devre değerlendirmesi, boolean operatörleri hakkında size ilk öğrettikleri şeylerden biri olduğunu belirtti.


4

Bir özelliğin uygulanması için ne kadar zaman harcanacağını doğru olarak nasıl tahmin edersiniz. Daha da önemlisi, bu tahminde bulunduğunuz zaman saçma olmadığınızı nasıl iletirsiniz.


2
ya da nasıl iyi misafir edileceğini ve misafir etmediğini nasıl ileteceğini öğren ... ...)
Billy Coover 16:10

4

Kodlama tarzı önemlidir:

  • Tutarlı girinti konuları,
  • beyaz alanın sürekli kullanımı (örneğin, operatörlerin etrafında),
  • {} konularının tutarlı bir şekilde yerleştirilmesi,
  • iyi seçilmiş tanımlayıcılar önemlidir,
  • vb.

... ve iyi tasarım önemlidir.

İdeal olarak, programcı bunları ilk kod incelemesinden önce (veya sırasında) öğrenir. En kötü durumda, programcı, patronun acele bazı korkunç kodlarda önemsiz bazı değişiklikler yapmasını söylediğinde onları öğrenir.

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.