Programcı olarak mücadele etmek. Biraz tavsiye gerekiyor [kapalı]


20

Birkaç yıldır geliştiriciyim. Yaptığım işte oldukça iyiyim ve "işi halledebilirim".

Ancak, "işi yapmak" ile "işi doğru yapmak" arasında bir fark vardır. Bir örnek kullanalım.

Son zamanlarda sıfırdan bir web sitesi geliştirdim. Web sitesi iyi çalışır ve hiçbir sorunları vardı. Kod bakarak kendime daha iyi yapabileceğini düşündüm. MySQL sorgularımı kesebilirdim. MVC'yi genişletmeyi daha kolay hale getirebilirdim (şimdi genişletilmesi gerekiyor).

CodeIgniter kullanarak projeyi yeniden yazmaya karar verdim. Çerçeveyi seviyorum. Ama sonra kaldırıldım çünkü MySQL sorgularımı azaltmak için gelişmiş birleştirmeleri öğrenmek zorunda kaldım.

ve sorun bu. Ne zaman bir iş yapsam, sürekli bir öğrenme tekerleğindeyim. Gelişmiş MySQL birleştirmeleri gibi konuların öğrenilmesi zaman alır ve ardından uygulanması zaman alır.

Bir şirkette çalışmıyorum. Her şeyi yalnız yapıyorum. Bu yüzden bir şirket için bir PHP geliştiricisi olarak çalışsaydım, SQL'i işleyen ayrı ekipler olurdu.

Yalnız olmak zor. Ve bazen, bilgim ilerlemesine rağmen kendimi soru sorarken soru sorarım. Muhtemelen çalışmalarımda büyük bir gurur duyuyorum. Ancak, komple projeleri yürüten bir şirkette çalışmak zorunda olsaydım, zaman alan projelerin hayalini kurabilirdim, çünkü gururumu tatmin etmek ve işleri "doğru" yaptığımdan emin olmak için gittikçe daha fazla şey öğrenmek zorunda kalırdım.

Yeni yıldan sonra iş bulmayı planlıyorum. İş güvenliğine ihtiyacım var. Bu yüzden bu soruyu soruyorum.

Kişisel gelişim ve kişisel gelişim konusunda ne gibi tavsiyelerde bulunabilirsiniz? Daha az endişelenmeli miyim? Ya da doğrudan SQL sorguları işlemeyecek bir PHP geliştirici olarak bir iş aramak?


54
Eğer sürekli öğrenmek istemiyorsanız yanlış bir

6
@JamesGuvnaJeffery: Eğer bir proje sırasında öğrenmek için (herhangi bir zaman) izin vermezlerse, orada çalışmak istemezdim çünkü bir geliştirici olarak kendimi geliştirmeyi bırakacağım.
Marjan Venema

3
iş öğrenmedir, size çalışmak için bu büyülü zamanı vermezler, aslında yaparlar, buna "kişisel zamanınız" denir. Sebebi "iş başında eğitim" demiyorlar. Dediğim gibi, kendi kendine başlatılan bir öğrenci olmaktan ve her zaman ücretsiz olarak öğrenmekten hoşlanmıyorsanız, muhtemelen yanlış bir alandasınız demektir.

5
Eski kod emmek gerekiyor. Kendinizi bunun üzerinde öldürmeyin; zamanla gelişmeye çalışın. Çalışan bir projeyi yeniden yazmak neredeyse hiç pratik mantıklı değildir. Müşteriler bunun için ekstra ödeme yapmazlar. codinghorror.com/blog/2006/10/…
İş

2
Söylediklerimi alamıyorsunuz, bir şirkette çalışmak, yapmayı sevdiğiniz şeylerin tam OPPOSİTİ. Başkalarının zaman çizelgesi üzerinde çalışıyor, dikte ettikleri şeyi ve onu taviz vermekten başka bir şey olmadan nasıl dikte ettiklerini kullanıyor ve zamanlarında yeni şeyler incelemek için zaman yok ve kişisel zamanınızda öğrendiğiniz yeni heyecan verici şeylere bir şeyler uygulamak için zaman yok. Bu, kurumsal bir yazılım geliştiricisi olmanın gerçekliğidir. Deneysel araştırma ve geliştirme tarzınıza alıştığınız gibi kurumsal bir ortama adanmış olacağınızdan şüpheliyim.

Yanıtlar:


33

Tavsiye: Yeni şeyler öğrenmekten korkmayın - daha iyi yapabileceğinizi kabul ederek iyi bir İlk Adım attınız ve daha iyi nasıl yapabileceğinizi öğrenmek için çaba gösterdiniz . Evet, önden daha fazla zaman alır, ancak getirisi genellikle uzun vadede buna değer. Artık CodeIgniter'ı bildiğinize göre, bunu bir sonraki gelecek projelerde kullanabilirsiniz. Özgeçmişinize koyabilirsiniz. Artık gelişmiş SQL tekniklerini bildiğinize göre, gelecekteki projeleriniz bundan yararlanacaktır. Öğrenmeyi bırakırsanız, durgunlaşırsınız.


21

Yaşadığınız şeyler bana çok normal geliyor. Zanaatımızda bu şekilde çalışıyoruz ve yaptığımız işte daha iyi ve daha iyi oluyoruz.


10

... projeyi CodeIgniter kullanarak yeniden yazmaya karar verdim. Çerçeveyi seviyorum. Ama sonra var ertelediği benim MySQL azaltmak için ben ileri katılır öğrenmek zorunda sorgular nedeniyle.

ve sorun bu. Ne zaman bir iş yapsam, sürekli bir öğrenme tekerleğindeyim. Gelişmiş MySQL birleştirmeleri gibi konuların öğrenilmesi zaman alır ve ardından uygulanması zaman alır ...

Yukarıda iyi verildiği için, önceden planlama, çalışma kuyruğunu oluşturma ve öncelik sırasına koyma, zamanınızı yönetme yeteneğinizi geliştirmeye odaklanmanızın mantıklı olduğunu düşünüyorum.

Gerçekten, bu tutumunda eksik olan tek şey gibi görünüyor. "Sidetracking" olarak adlandırdığınız şey aslında planlanması, önceliklendirilmesi ve kuyruk haline getirilmesi gereken başka bir çalışmadır ("gelişmiş birleştirmeleri öğrenin").


Teşekkürler @gnat. Bu olumlu yanıtları gerçekten takdir ediyorum. Söylediklerine meydan okurcasına katılıyorum.
James Guvna Jeffery

9

Bu alanda profesyonel olmak, kendinizi kendi yetersizliğinize karşı sürekli parçalamaktır. Bunu 8-5 Pazartesi-Cuma yapın, belki daha yakın bir tarih varsa, güzel bir hafta sonu geçirin ve Pazartesi günü daha fazlası için tekrar gelin. Bu iş.

Yazılım yapmak belli bir alçakgönüllülük gerektirir. Eğer haklı olması gereken ve zaten her şeyi bildiğini kanıtlamak zorunda olan biriyseniz, bu sizin için bir alan olmayabilir.

Her gün bir şey öğrenemiyorum. O işi isteyeceğimi sanmıyorum.


Benim deneyimim, mide yetmezliği de yapabildiğiniz sürece, doğru olması gereken biri olmanın iyi olduğudur. Kendimi mükemmel olmayan her şey üzerinde tekmeliyorum. Bu yüzden zaman geçtikçe işleri daha iyi yaparım.
Tom Anderson

Peki, bu paradoks değil mi? Hubris, programcının üç erdeminden biridir. Ama tecrübelerime göre, "öğrenmeden önce zaten her şeyi bildiğimi göstererek zeki olduğumu kanıtlamak için zorunlu olarak yönlendirilmek" çaylak geliştiricilerinin ya bıraktığı ya da bu alanda uzun sürmediği bir eğilim.
Dan Ray

Belki bırakmaktan ziyade geri gitsin? Neyse ki, neyse ki, bilmediğim şeyleri bildiğimi ilan etme alışkanlığından çıktım. Ancak, hala bir şeyleri bilmemeyi kabul etmekten nefret ediyorum; bildiklerim ve bildiklerimi söylemek istediklerim arasındaki boşluğu kapatma ihtiyacı benim için oldukça önemli. Herkes için değil!
Tom Anderson

Bilmiyorum Tom. Bana bir şey bilmediğin utanç anı, onu öğrenmeye harcayabileceğin bir an gibi görünüyor. Bir sonraki adam kadar bilmek isterim, ama "Bilmiyorum" derken hiç sorunum yok.
Dan Ray

6

Yalnız olmak olduğunu zor. Buna karşılık, bir geliştirici ekibiyle çalışırken, herkes birbirinden öğreniyor. Takımın bir parçası olarak, diğer geliştiricilerle çalışarak ve her şeyi kendi başınıza çözmeye çalıştığınızdan çok daha az çaba harcayarak çok fazla bilgi toplayacaksınız.

Bununla birlikte, bir geliştirici olarak, kendinizi sürekli öğrenmeye adamanız gerekir. İster yeni çerçeveler için dokümanları ister geliştirme ile ilgili kitapları okuyun, bilginizi güncel tutmak ve büyümek için sürekli çaba sarf etmeniz gerekir. Bununla birlikte, bir ekibin parçası olmak, herhangi bir zamanda en çok hangi alanı öğrenmeniz gerektiğini netleştirebilir.

Eski kodunuzu tekrar gözden geçirme ve yeniden yazma hakkındaki görüşünüzle ilgili olarak: Kendi kodumun her zaman yazdığım sırada bildiklerimin en iyisini temsil ettiğini gördüm. Çoğu zaman yıllar önce yazdığım bir şeye geri dönüyorum ve şimdi ne bildiğimi göz önünde bulundurarak , ne kadar daha iyi yapabileceğimi gördüğümde alnına tokat atıyorum . Ama bu deneyimin doğası, ihtiyaç duyduktan sonra anlıyorsunuz ...

Son olarak, bir uygulama geliştirirken, daha hızlı bitirmek için köşeleri ne zaman kesmenin en iyi olduğuna ve tasarımı ve kaliteyi artıracak yeni bir şey öğrenmek için daha fazla zaman almanın gerekli olduğuna karar vermek için her zaman iyi bir iş anlayışı kullanmanız gerekir. uygulama. Yazılım dünyasında öğrenilecek bir evren var. Bu tür iyi bir karar vermeden, kendinizi öğrenme, düşünme, yeniden tasarlama, ancak asla hiçbir şey yapmadığınız için tekerleklerinizi döndürürken bulabilirsiniz.


İkinci cümle için +1. Meslektaşlarımdan, bir dizi farklı organizasyonda çalışarak, hiç okumadığımdan (kitaplar veya çevrimiçi) daha fazla şey öğrendim. Sorunuzdan bir süre bir takımda çalışmak size iyi bir dünya yapacak gibi geliyor.
Dawood, Monica'yı

3

Endişelerinizin geçerli olduğunu düşünüyorum, ancak üzerinde herhangi bir uyku kaybetmemelisiniz. Benim inancım, bir teknoloji uzmanı olmanın aşağıdaki bagajlarla gelmesidir:

  • Sürekli yeni şeyler öğrenmelisiniz. Ya bunu sevmeyi öğreniyorsun ya da sevmiyorsun.
  • Ustalaşmak isteyeceğinizden belki de bildiğinizden daha fazla şey var.
  • Proje sırasında olmasını istediğiniz bir proje sırasında becerilerinizi geliştireceksiniz.
  • Sonuç olarak, her zaman geri dönüp o projeyi yeniden yapmak isteyeceksiniz. Daha iyi olabileceğini bildiğiniz bir şeyi yayınlamak çok zor.

Sonunda, öğrenemeyeceğiniz bir şey olan kaliteli yazılım oluşturmayı önemsediğiniz anlaşılıyor . Mükemmel bir şey inşa ederek yüksek kaliteli bir çözüm oluşturmayı farklılaştırmanız gerektiğini bilin. Bana benziyormuş gibi geliyor ve asla mükemmelmiş gibi hissetmeyecek. Kendinizi ve işinizi geliştirme şansınız olduğunu düşünmüyorsanız daha fazla endişe duyarsınız.

Tüm esnafların bir krikosu olmak zordur (hiçbirinin ustası), ama sizin için en ilginç ve yararlı olan şeyleri nasıl tanımlayacağınızı ve onlara odaklanmayı gerçekten anlamanız gerekir. Diğer işleri diğer insanlara veya araçlara nasıl "dış kaynak" kuracağınızı öğrenin .


2

"Düzgün bir şekilde yapılması" konusunda daha az endişe duymanız gerektiğini düşünüyorum. Mükemmellik için gayret edin, ancak ilk seferde daha da mükemmel bir çözüm tasarlamanın gerçekten mümkün olmadığını anlayın. Bu soruyu sormak için doğru bir şekilde yapılma konusunda endişelenmeniz, zaten doğru yolda olduğunuz anlamına gelir.

Yeni şeyler öğrenme konusundaki hayal kırıklığınıza gelince , bir grupta çalışmanın ve sorunu diğer programcılarla sorabilme ve tartışabilmenin, öğrenmem gereken şeyi bulma acısını ortadan kaldırdığını gördüm ve onun yerini yeni bir şey keşfetmek ve nasıl uygulanacağını öğrenmek.

Yazılım yazmayı seviyorum, ancak bazen yeni bir şeyin gerçek öğrenilmesinde değil, ne yapmak istediğinizi elde edebilmeniz için tam olarak ne öğrenmek istediğinizi bulmakta acı vardır.

Anladığım kadarıyla sana benzer bir pozisyonda bulundum. Yalnız bir şeyi kodlamak bazen hem sinir bozucu hem de zor olabilir ve diğer zamanlarda ödüllendirici ve biraz eğlenceli olabilir.

Tam olarak yapmayı planladığınız şeyi yapın, ekibin bir parçası olacağınız bir iş bulun (ve emmeyen bir yere geldiğinizden emin olmak için elinizden geleni yapın). Aynı teknolojileri kullanan ve aynı yazılımı tasarlayan diğer insanlarla çalışmak, bu teknolojileri ve tasarım modellerini anlama ve uygulamanızı neredeyse bir gecede genişletecektir.

Bir şeyi ilk seferde nasıl doğru yapacağınızı bilmek, ilk kez belirli bir şekilde yapmadıysanız daha iyi bir yol olduğunu nasıl bilebilirsiniz? Yazılım tasarımındaki beceriler genellikle büyük ölçüde deneyime bağlıdır. Joel Spolsky bir yazılım dahisidir, ancak makalelerinin çoğunu okursanız, bunların hem deneyim hem de zekanın bir sonucu olduğunu fark edeceksiniz.

SQL bölümüne gelince, bir .NET geliştiricisi olarak henüz özel bir veritabanı geliştiricisi olan herhangi bir yerde çalışmadım, hepimiz kendi SQL'imizi yazıyoruz, ancak genellikle SQL'de size yardımcı olmak isteyen gerçekten iyi olan geliştiriciler var derinlemesine şeyler ile.

Akıllı bir adam gibi konuşuyorsun, kendin için çok zor olman gerektiğini sanmıyorum.


1

Bu tamamen normaldir ve çok fazla endişelenmeniz gereken bir şey değildir. Sürekli yeni beceriler öğrenmeniz gerekir, ancak zamanınızı önceliklendirmeyi ve yönetmeyi de öğrenmeniz gerekir. Ayrıca, gereksiz yeniden geliştirme tuzağından kaçınmanız gerekir.

Deneyimsiz programcı genellikle yeniden geliştirme tuzağına çekilir:

Bu programı mükemmel bir şekilde yazmadım ve şimdi genişletmem veya değiştirmem gerekiyor. Yazma şeklim nedeniyle mevcut kodu değiştirmek çok fazla iş olacak. O zamandan beri çok daha fazla şey öğrendim, eminim en iyi şey tüm programı yeniden yazmak olacaktır. Eminim bu sefer çok daha iyi yazabilirim.

Bu mantıkla ilgili bir takım yanlışlar var.

  • mevcut kodu değiştirmek veya eklemek için çok fazla iş var, ancak her şeyi yeniden yazmak çok daha fazla iş olmayacak mı?
  • her şeyi yeniden yazarsanız, yeni hatalar elde etme şansınız vardır ve düşündüğünüzden daha uzun sürecektir (özellikle deneyimsizseniz). Sistemi yazmakla ilgili her şeyi düşünüyor musunuz? (ilk kez ne kadar sürdüğünü hatırla)
  • programı ilk olarak yazdığınızdan beri çok şey öğrendiniz (böylece onu geliştirebilirsiniz), ancak gelecek ay / yıl daha fazla bilgi edineceksiniz. Gelecekte bir noktada her şeyi tekrar yazmak istemeyeceğinizi düşündüren nedir ?
  • bir programın nihai testi, çalıştığıdır . Yapacak daha iyi bir şeyin yok mu?

Bir yeniden gelişme düşünmek ve planlamak asla acıtmaz. Bu, programınızı nasıl yeniden yazmak istediğinizi düşünün ve vuracağınız sorunları belirlemeye çalışın. Bu durumda, şimdi gereksinim duyduğunuz 'gelişmiş SQL birleşimlerini' belirlediniz ve nasıl çalıştıklarını araştırıp bunlar hakkında bilgi edinebilirsiniz.

Planlama yoluyla (geliştirme başlamadan) gelişmiş birleştirme bilgi boşluğunu tanımlayamayacağınızı düşünüyorsanız, planlama becerilerinizi geliştirmeniz gerekir. Planın hangi bölümünün yeterince ayrıntılı olmadığını düşünmeye çalışın. Tüm sistemin teknik olarak mümkün olduğundan emin oluncaya kadar gerektiği kadar ayrıntıya girmelisiniz.

Bu yaklaşım önceden öğrenmenizi sağlayacaktır .

Son olarak, işte öğrenme, programlamanın normal bir parçasıdır. Ancak bu, bir göreve başladığınız ve ardından temel HTML hakkında bilgi edinmek için bir hafta boyunca durmanız gerektiğini fark ettiğiniz anlamına gelmez. Bir şey hakkında bilgi edinmek için birkaç saat durabilirsiniz, ancak işvereniniz işi bitirmek için size sadece para ödüyor. Verimli öğrenin - giriş ve geçmişi, sadece nasıl çalıştığını ve programınıza nasıl uyacağını okumayın. Programın bir kısmını nasıl tamamlayacağınızı öğrenmek için günlerce çalışmayı bırakmak zorunda kalırsanız, yanlış yapıyorsunuz demektir.


1

Yeni teknolojiler ve problemler öğrenmenin zaman alıcı olduğunu düşünebilirsiniz. Ama panik yapma. Bu normal. Öğrenmek için bir programcı olarak uygulamanızın bir parçasıdır ... yoksa hepimiz COBOL ile sıkışıp kalırdık.

Serbest çalışanlar, komisyonlarını buna göre ayarlarlar ve öğrenme süreleri , zaman tahminlerinizde hesaba katılması gereken bir şeydir. Bir dahaki sefere yeni bir çerçeve getirmeye karar verdiğinizde, onu öğrenmek için yeterli zamanı planladığınızdan emin olun.


0

Ancak, "işi yapmak" ile "işi doğru yapmak" arasında bir fark vardır.

Hayır, yok, ve bence buradaki problemin kökü bu. Bana öyle geliyor ki, işleri 'doğru' yapma konusunda endişeleniyorsunuz çünkü bireysel bir geliştirici olarak başkalarının nasıl çalıştığını görmüyorsunuz. Ama kime göre doğru? Yaptığınız şeyin 'doğru' olduğuna karar veren bu büyülü kişi kim? Dünyanın en iyi programcılarından 100 tanesini alalım ve hiçbirinin her programlama konusunda% 100 katılmayacağını garanti ediyorum.

Sonuçta müşterilerinizin mutlu olması önemli. Oluşturduğunuz programlar olması gereken sorunları çözüyorsa ve bunu düşük maliyetli bir şekilde yapıyorsa, doğru bir şekilde yapıyorsunuz demektir. Örneğin, codeigniter kullanmak kendi çerçevenizi kullanmaktan daha doğal bir şekilde doğru değildir. Bunun sonucu, bir yığın saçmalık ürettiğinizde, takip edilen süreçlerden veya 'en iyi uygulamalardan' bağımsız olarak 'yanlış' yapıyorsunuzdur.

Kodunuzu tekrar gözden geçirip geliştirmenin yollarını görmeniz, geliştirme sürecinin normal bir parçasıdır. İşleri 'doğru' yaptığınızı gösteren bir işaret değildir. Öğrenmeye ve geliştirmeye adanmış olduğunuzu gösteren bir işaret. Gönderinizde gördüğüm her şeyden, probleminiz yok.

Şimdi git biraz * * *


Buna katılmıyorum. Programlamanın diğerlerinden daha kolay ve kolay okunabilir yolları vardır ve programcıyı daha iyi kod yazabilmeleri için geliştirmeye adanmış kitap yığınları vardır.
TehShrike

Teşekkürler @grandmasterB. TehShrike ve bu kitaplara referans?
James Guvna Jeffery

3
" hiçbiri her programlama konusunda% 100 katılmayacaktır " - belki, ama en az% 80'i programlama konularının en az% 80'i üzerinde anlaşacaktır. Profesyonel fikir birliği. Mutlak 'haklar' yoktur, ancak en iyi uygulamalar vardır ve bunlar bilinmeye değerdir.
Kirk Broadhurst

1
İyi ve iyi, ama programınız problemi çözmüyorsa, en iyi uygulamalar ya da değil, yanlış yapılmış. Bir programın doğru bir şekilde yapılıp yapılmadığını söylemenin tek bir amacı vardır - müşteri işiniz karşılığında yeşil kağıt desteleri veya başka bir ödeme yaparsa. Başka herhangi bir önlem basitçe görüştür.
GrandmasterB

2
Müşteriniz bir değişiklik için teklifinizin aşırı olduğunu hissettiğinde ve kötü bir şekilde kodlanmış olduğu için bu duyguları onaylamak için başka bir uzman bulursa, işsizsiniz.
JeffO
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.