Eski kodla uğraşmak, bir programcı olarak gelişmeye yardımcı olur mu? [kapalı]


18

Beni bir yetişkinin üzerinde bir yere yerleştiren, ancak henüz orta düzey geliştiriciler arasında olmayan bir yıldan fazla deneyime sahip bir Java geliştiricisiyim. Son zamanlarda 4 ay boyunca mevcut bir bankacılık başvuru kodunu incelemek ve sonra gerektiğinde değişiklikler yapmakla ilgili uzun vadeli bir proje teklif edildi. Deneyimsiz bir programcı olarak gelişim yollarını arıyorum ve böyle bir projenin ne verebileceğini merak ediyorum.

Büyük ve muhtemelen çok iyi yazılmış olmayan bir uygulama ile uğraşmayı yeni başlayanlar için iyi bir uygulama olarak düşünür müsünüz?



1
Başkalarının hatalarından öğrenmek, deneyim kazanmanın en güvenli yoludur ...
Michael Borgwardt

Geçenlerde yaklaşık bir ay boyunca diğer insanların kodlarını inceledim. Harika bir öğrenme deneyimi, ama büyük zaman emdi. Sedating çayları denemek için gerekli.
usr

İyi bir Java olabilir ama bir jr bulmak zor. Diğer birçok başlangıç ​​dili arka plan devs dev daha çok çeşitli arka uçları maruz maruz bir ön uç web geliştirici gitti genelist olarak deneyime dayalı hayal ediyorum. Bence sorun, dilin Java'ya mükemmel bir şekilde hizmet verebilmesidir, ancak Java kültürü kesinlikle her şeyi olabildiğince güvenli ve suçsuz oynamakla ilgilidir.
Erik Reppen

Yanıtlar:


34

Mevcut kodda sorun giderme, programcı olarak geliştirmenin süper bir yoludur. Kod kötü ise, yaptıkları hataların etkisini öğrenecek ve tasarımı yaparken belki bazılarından kaçınacaksınız. Kod iyi ise, sürdürülebilir bir uygulamanın nasıl yapılacağı hakkında bir şeyler öğreneceksiniz.

Ayrıca gerçek bir iş uygulamasının karmaşıklığıyla başa çıkmayı öğreneceksiniz. Bu bankacılık sektöründe olduğundan, daha önce hiç düşünmediğiniz federal düzenleme ve iç muhasebe kontrolleri gibi şeyleri öğreneceksiniz. Bunlar, finans dünyasında başka bir şey tasarlamanız istendiğinde bilinmesi gereken iyi şeyler. Ve finansal programlama, çalışmak için oldukça kazançlı bir sektör olabilir, bu nedenle bankacılık deneyimi elde etmek sizin için çok iyi olabilir.

Hatta 15 yıl önce bir şey yazmamayı tercih edeceğiniz bir dilde yazılmış olmasının, o kadar da kötü olmadığını öğrenebilirsiniz. Ne de olsa bu kadar başarılı bir şekilde çalışıyor.

Çoğu eski uygulamada olduğu gibi, uygulamada birim testi yoksa, bir değişikliğin başka bir şeyi etkilemeyeceğinden emin olmanız gerekiyorsa, bu testi nasıl ekleyeceğinizi ve bu testi neden eklemeniz konusunda yönetimin nasıl satılacağını öğrenebilirsiniz. iyi bir fikir.


2
Gerçekten de, kodu incelemek için 4 ayınız olacaksa, bu 4 ayın çoğunu öğrendiklerinizi belgeleyen yorumlar ekleyerek ve anahtar bileşenlerin doğru çalıştığını kanıtlayan testler yazarak (tek bir umuduyla) yazmalısınız.
Ross Patterson

1
@RossPatterson, bu bankacılık olduğu için, evet umarım şimdi gerçekten doğru çalışıyorlar. Herhangi bir test yoksa, herhangi bir durumda, değişiklik yapma riski, bankacılık ve yazma birimi testlerinde, sistemin kolay bir satış olması gerektiğini öğrenmenize yardımcı olmak için büyüktür.
HLGEM

3
Programlama, parçaları nasıl hareket ettireceğini biliyor. Bir sistemi anlamak, oyunu nasıl oynayacağınızı bilmek. Deneyimi, beceri geliştirme açısından pişman olmayacaksınız. Dul ve yetimlerin çaldığı şirketler için çalışmak vicdanınızın hoş göremeyeceği bir şeydir.
Meredith Poor

8

Yeni başlayanlar için mükemmel bir uygulama olduğunu düşünüyorum . Başkalarının deneyimlerinden öğrenmek çok etkili olabilir.

Asıl zorluk, hataları bulmak değil, diğer geliştiricinin başına geçmek whyve kodun bu şekilde yazıldığını anlamaya çalışmaktır . Bazen özensiz oldukları ve bazen de iyi bir nedenleri olduğu için. Geliştiricinin en az sizin kadar iyi olduğunu, ancak daha fazla alan bilgisine sahip olabileceğini varsayın.


2
Ayrıca, kod yazıldığı zaman kullanmaları gerektiğini düşündüğünüz yöntemi anlamanıza yardımcı olur.
HLGEM

Bu durumlarda bazı kod yorumları veya proje belgeleri bulmak harika olurdu. Aksi takdirde, bir işlevi yerine getirmenin hack veya garip yolu bir puslu olarak kalacaktır. Bu geliştirici artık şirkette olmayabilir, bu yüzden ona bunu sormanın bir yolu yok.
Radu Murzea

6

Bu, kariyerlerinin herhangi bir noktasında herhangi bir geliştirici için iyi bir uygulamadır. Mevcut yazılımı inceleyip analiz edebilir ve geliştirmenin yollarını bulabilirseniz, değerli bir geliştirici olduğunuzu göstereceksiniz. Sadece öğreneceksiniz diğerleri tasarlanmış ve yazılım geliştirdi, ancak yol boyunca ne öğreneceksiniz nasıl değil kendi içinde değerli bilgidir ki, yapmak.

Eğer meydan okumaya hazırsanız, bu projeye devam edin ve daha iyi hale getirin.


2

Kesinlikle size yardımcı olacaktır, ancak dikkatli olmanız gerekir.

Eski koddan öğrendiğinizden emin olmanız gerekir. Neyin iyi neyin kötü olduğunu nereden biliyorsunuz? Belki de farklı kalıpların / yöntemlerin artılarını ve eksilerini tanıyabilirsiniz, ancak yeni başlayan bir geliştiriciyseniz, bunu yapamayabilirsiniz.

Ve bu ilk işte çok uzun süre kalmak, ve yeterince beceri öğrenmek ya da inşa etmek olmayabilir ve sonunda orada sıkışmış olabilir.


2

Legacy, 'çok iyi yazılmış değil' yorumunuza dayanarak her şey anlamına gelebilir. Legacy'nin 'kötü' veya en azından 'güncel olmayan' teknolojiler ve kalıplar anlamına geldiğini varsayacağım. Eski kod iyiyse, geri durmayın ve her satırını öğrenin.

Kariyerinizi yönlendiren ve bugüne kadar bu iş parçacığında değersiz lavabo deliklerine sıkışmış olan iş ve projelere karşı yeterince açık uyarı olduğunu sanmıyorum.

Spor benzetme uyarısı: NFL'deki bir çizgi destekçisinin en kötü rekor veya en iyisi olan takımda oynayarak daha fazla öğrenip daha değerli hale geldiğini düşünüyor musunuz? Cevabım: Sadece en iyi takımlar için oynadıkları için daha değerli değil, aynı zamanda en iyi uygulamaları ve bilgileri de aldılar ve kariyer sonu uygulamalarını ve tutumlarını almaktan kaçındılar.

Aslında iş için çalışan ve dev maaşları çok ödeyen bir sürü korkunç anti-desen kodu var. 'Doğru' şekilde yapılan yeterli kod görmemiş bir geliştirici, bir sorun için meşru bir çözüm için anti-desen kodu hata olabilir öneriyoruz. İş, çözümün işe yaradığını söyleyebilir, ancak özgeçmişinizde istediğiniz veya diğer geliştiricilere övüneceğiniz biri değil. Bu, yalnızca kişisel büyüme yolunuz mühendislik akranlarınıza saygı duymayı ve yalnızca çalıştığınız şirketin gelirini geçici olarak artırmayı içermiyorsa da geçerlidir (Kulağa kötü geliyor, ancak sonunda en iyi mühendislik kesinlikle en fazla IMO'yu kazanıyor) .

Ne yazık ki, teknoloji borcu açığa çıkmadan önce çok fazla kod ve zaman geçebilir. Ve bu teknik borç genellikle çok geç olduğunda muhasebeleştirilir. Kim daha önce teknik borcu veya anti-desenleri durdurmaya çalışmış olabilir, algılanan ekstra masraf veya ölçeklenebilirlik vb anlayış eksikliği nedeniyle dikilmiş olabilir. Mühendisler olarak teknoloji borcunu hemen ortaya koymak bizim görevimizdir. Deneyimli mühendisleri olmayan projeler, bir noktada bir tuğla duvara çarpma tehlikesi altındadır, aslında tüm yetenekli geliştiricilerle bile tüm projeler. Çoğu işletme 'bir noktayı' daha sonra düzeltmek için bolca zaman olarak görür. Bu, gelecekteki geliştiriciler için iş seçimlerini çok karmaşık bir konu haline getiriyor. Ayrıca, geliştiriciler ve işletmeler arasındaki tamamen farklı hedeflere ve zihniyetlere ve boşluğu kapatmanın ne kadar karmaşık olduğuna da dikkat çekiyor.

Mühendislerin amacı, gerçek bilimsel çalışmaları ve tasarım düşüncesini 'dahil etmek', işin amacı ise gereksiz maliyet ve zamanı 'hariç tutmak'. Mühendisler genellikle son durum tamamlanana kadar çaba ve zaman seviyesinin ne olduğunu bilmediğinden, yazılım geliştirme, çevik, scrum ve kanban gibi başrollerde rol oynayan iyi bir drama gibi oynar.

Bir take away 'bozuk' için yeterince iyi kod görene kadar kötü kod uzak kalmak olabilir. Üst düzey geliştiricilerin karmaşık sorunlara basit çözümler yarattığını söylemeyi seviyorum. Bilge gibi, orta seviye orta düzey geliştiriciler de basit ve karmaşık problemler için karmaşık çözümler yaratır.

Başka bir götürmek, anlayış kazanmak için farklı noktalarda iyi VE kötü kod üzerinde çalışmanız gerekebilir. Eğer ikisini de yapmadıysanız, bunun için gidin ve daha iyi bir sistemle karşılaştığınızda hepsini öğrenmeye hazır olun. Bu muhtemelen çoğu geliştirici için daha yaygın bir yörünge olduğunu düşünüyorum.

Bu yıl önyargılıyım çünkü son derece karmaşık bir 'gizli sos' dağına tırmanıyormuş gibi hissediyorum. Şimdiye kadar gördüğüm en kötü kalıpların bazılarını deşifre etme yeteneğimi artıracak olsam da, o kadar 'özel' ve 'bir defalık'.

Aklımı korumak için, sadece istikrarlı bir hızda ilerliyor ve her yol bloğunu kurs için eşit olarak kucaklıyorum. Bu eski delikten kazmayı da içeren yıllık hedeflerimi patronumla birlikte gözden geçirdikten sonra, bunun fedakar bir tırmanış olabileceğini düşünüyorum. Sürece kötü eleştiriler ve algılanan yavaşlama ile hayatta kalabilir. Bu, hangi işi alacağınızı merak edenlere gerçekçi ve ön plana çıkan bir uyarıdır.

Feragat: Bu yazı benim düşüncelerimden çok daha uzun yaşayacak, bu yüzden onu bir tuz tanesi ile alın. Yarın eski kodu sevebilirim! (Şüphe edin).


1

Bu, büyük ölçüde bu bağlamda "mirası" nasıl tanımladığınıza bağlıdır. Size C ve C ++ 'dan bir örnek vereyim. Birçok C ++ programcısı, C ++ uygulamalarında C dizelerini kullanmak için kötü bir uygulama olarak adlandırırken, diğerleri karıştırma gerektirmezken, diğerleri de eski oldukları için C kodunun herhangi bir bitini kullanmanın şeffaf ve tamamen anlamsız olduğunu iddia ediyorlar. eski "kod. Bazıları daha da ileri gider ve C ++ X öncesi ('X' yerine uygun sayı ile değiştirir) standart deyimleri, sözdizimini ("eski" tarzı) kullanmaktan kaçınır.

C ++ akışlarının ve dizelerinin performans sorunlarını ve birkaç STL özelliklerini bir kenara bırakarak, çok sevilen önişlemci direktifinizin içinde ne olduğuna bir göz atmak harika bir uygulamadır #include <string.h>. Uygulamanın yolunu izlerseniz ve kendinizi bir unix / linux makinesinde bulursanız /usr/include/string.h(ve gcc.org'dan libc uygulama kaynakları alırsanız ) ve okursanız strcmp.cya strlen.cda ya da strtok.c, bahse girerim "Ne güzel bir dünya "aşamalı olarak.

Bununla birlikte, bu nesir için bir uyarı var - yani, kullanımdan kaldırılmış sınıflar ve yöntemler. Java'da son zamanlardaki ortamlardan oldukça eski şeylere hala erişilebilir, ancak doğru hatırlıyorsam her şey değil. IB sektöründe, kendi tecrübelerime göre, tüm yazılımlar iyi programcılar tarafından yazılmamaktadır. Birçok mezun, analist / geliştirici pozisyonuna başlamadan önce gerçek dünya programlamasına neredeyse sıfır maruz kalmıştı. Ancak bu ifadeyi genelleştirmeyin. Yüksek verimli, düşük gecikmeli ortamların merkezinde Java ve C # kullanan birçok insan biliyorum. Onlarla aynı fikirde değilim, ama bu neyse ki onların işi. Yine de gerçek HFT olsaydı, çizginin gerisinde kalırlardı. Ama yine, bu cümleden kolayca çıkarılabilir, Java kodunun oldukça optimize edilebilir olduğu varsayımıdır (ve çoğu durumda gerçek). Ve eğer gerekirse, sadece bunu veya bunu düzeltmekle kalmayıp, bir geliştirici olarak çok değerli hale gelirsiniz. Ne kadar katkıda bulunduğunuzu fark etmek çok tatmin edici. Ben giderdim.

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.