Kod yazabilmekten iyi bir geliştirici olmaya nasıl geçebilirim?


10

Komut dosyası yazabilmek (bash, awk) ve basit uygulamalar (c, php, python) yazmaktan daha büyük, daha karmaşık yazılımlar tasarlamaya ve geliştirmeye nasıl gidileceğine dair somut açıklamaların olmaması beni hayal kırıklığına uğrattı. Öyle görünüyor ki bir tarafta programlama dil kitapları var, diğer tarafta programcı ekipleri için tasarlanmış yazılım mühendisliği / proje yönetimi kitapları var.

Her ikisini de bolca okudum. XP / Agile klasiklerini okudum ve yazılım geliştirme sürecini iyi bir teorik anlayışa sahibim . Diğer insanların kodlarını okumayı seviyorum ve oldukça iyi takip edebiliyorum. Ama bir proje için bir fikrim olduğunda veya "işte sorun / ihtiyaç" dan "işte çözüm" e gitmek istediğimde, zihnim bir boşluk çiziyor ve nereden başlayacağımı bilmiyorum.

Ben sadece kesmek mi? Ekipler halinde çalışmayan bireysel geliştiriciler veya büyük bir yazılım evi için yapılandırılmış iş akışları var mı? Gerçekten bir PMP almak ya da bir yazılım şirketinde çalışmak istemiyorum. Sadece etkili, verimli, pratik bir iş akışı arıyorum.


2
Deneyim iyi bir öğretmendir.
Bernard

Daha büyük ve daha karmaşık yazılımlar sadece daha basit ve daha basit bir yazılım koleksiyonu değil mi?
Rig

5
"Çünkü sanatla ilgili en önemli şey çalışmaktır. Her gün oturmak ve denemek dışında hiçbir şey önemli değil." - Steven Pressfield
Ryan Kinal

Aynı şekilde Carnegie Hall'a da ...
Michael Brown

1
Carnegie Hall - Practice ile aynı şekilde!
Martin Beckett

Yanıtlar:


11

Bence, deneyime sahip olarak ve bir şeyler yapmak için birden fazla yolla çalışarak iyi bir geliştirici olursunuz . "İşte benim fikrim" den "İşte benim çözümüm" e bir sorun olduğunu belirttiniz. Bu, deneyimli bir geliştirici olmanın yanı sıra yazılım geliştirme yöntemlerine daha fazla bir şeydir.

Bir yazılım geliştirme metodolojisi kullanmak "sadece kodu kesmek" ten daha fazlasıdır ve bu metodolojiler yapılandırılmış iş akışları sağlar. Agile ailesi, "fikir" aşamasından "bitmiş ürün" aşamasına geçmenize yardımcı olmak için izleyebileceğiniz daha küçük geliştirme ekipleri (veya bireyler) için iyi bir yapı sağlar.

Yıllar boyunca başkalarından öğrendiğim ve aşağıdakiler gibi çeşitli projeler üzerinde çalıştığım birkaç şey var:

  • Her şeyi test edilebilir yapın, bu hayatınızı çok daha kolay hale getirecektir;
  • Mükemmel bir tasarıma sahip olmayı ve kurumsal uygulamalar / bir sonraki en büyük oyun unvanını tasarlamayı / bunu deneyimlemeden buraya daha fazla eklemeyi bekleyemezsiniz;
  • Deneyiminiz yoksa ve başkalarından öğrendiyseniz iyi bir yazılım tasarlamak zordur;
  • Deneyimli bir geliştirici olarak bile ilk kez asla mükemmel bir tasarıma sahip olmayacaksınız - işler değişir ve bu nedenle; tasarımınız da olabilir;
  • Bir şeyler yazın: Yazma / çizim / beyaz tahta / boyama / rahat hissettiğiniz her ne ise, bir şeyler yazdıysanız hayatı kolaylaştırır. GUI tasarımları, sınıf diyagramları, vb.
  • Tekerleği yeniden icat etme, gerek yok. Kendi HashMap'inizi uygulamaya çalışıyorsanız, muhtemelen yanlış bir şey yapıyorsunuzdur. Bir şeyler araştırın ve kod yazmadan önce düşünün.

Umarım bazıları yardımcı olur.


Belki de bir kalem ve kağıt olmadan almaya çalıştığım dijital çağın bir belirtisidir. Zihin haritaları ve benzerlerini yaptığımı hatırlıyorum. İyi tavsiye.

Bir şeyler yazmayı kabul ediyorum. Çok küçük ve büyük ekiplerde adil bir deneyime sahibim ve yapacağım ilk şey yazılım / modülün temel gereksinimlerini listelemek. Bu ne işe yarıyor? Yazılım tasarım ilkelerini öğrenin, temelde peşinde olduğunuz şey budur - başlangıçta yüksek düzeyde yapılandırılması gerekmez, sadece dil veya teknolojilere başvurmadan yönünüzü odaklamanıza yardımcı olacak bazı düzenleme notları. Net bir yönünüz olduğunda, bunu nasıl uygulayacağınızı öğrenin.

Kalem ve kağıt ya da beyaz tahta gibi bir tür çizik pedi olmadan gerçekten bir şey tasarlayabileceğinizi sanmıyorum. Ayrıca proje tasarımının tüm tekrarlarını saklıyorum, çünkü hurdaya çıkarmak zorunda olduğunuz bu harika fikrin aniden ne zaman mümkün olacağını asla bilemezsiniz.
TMN

Ben çok görsel bir insanım, bu yüzden resimler her zaman anlamama ve işleri çözmeme yardımcı olur :-)
Deco

5

Bana göre, herhangi bir meslekte olduğu gibi, iyi bir profesyonel olmak için - teorik oluşumun yanı sıra - gereken her şey deneyimdir .

Bir doktor sadece tıp fakültesinde alınan sınıflar ile iyi olamayabilir ya da bir avukat, sadece derecesine sahip bir avukat olmanın tüm politik yönünü bilemez, iyi bir geliştiricinin deneyim ve zamana ihtiyacı vardır.

Deneyim üçüncü taraf kodunu okuyarak gelmez. Tıp öğrencisi olursanız, çok fazla prosedür, hastalık, ilaç vb. İşaret edebilir, ancak bunların gerçek uygulaması (ne zaman bir prosedür uygulandığında, teşhis için hangi rahatsızlığı vb.) Gelir denetim ve deneyim ile.

Büyük bir şirkette (veya bu konuda herhangi bir şirkette) çalışmak istemediğiniz için, her seferinde bir adım olmak üzere küçük uygulamalar geliştirerek başlamanızı öneririm. Yazılımı kendiniz geliştirmek çok zaman alır, inan bana.

İyi bir yazılım geliştiricisi / mühendisi olmanızı önerdiğim bir diğer şey de açık kaynaklı yazılıma katkıda bulunmaktır. Birçok erkek, açık kaynaklı yazılım geliştirmeye ve daha sonra danışmalara yardımcı olarak iyi bir miktar para (ve deneyim, btw) kazanmıştır. Açık kaynaklara yaptıkları katkılarla kendilerine bir isim verdiler.

Her neyse, bence deneyim kazanmanın bir kısayolu yok ve disiplin ve sabırla takip edilmesi gerekiyor .


İyi bir benzetme. Diğer insanların kodlarını okumak benim tarzıma yardımcı oldu , ama haklısın, bana gerçek bir deneyim vermiyor. Birisi OSS rotasına gitmeyi önerdi. Sanırım buna bakacağım.

4

Başkalarının kodunu geliştirerek başlayabilirsiniz. Sahip olduğunuz bazı projeleri alın ve bir özellik ekleyin. Özelliğin ne yapacağına ve nasıl yapılması gerektiğine karar vermelisiniz. Mevcut kod çerçevesinde çalışarak çözümünüzü tasarlayın.

Ve bir şeyleri kesmek için korkma. Çabuk ve kirli prototiplerin rafine edilmesi (veya tercihen yeniden yazılması) ile birçok yeni geliştirme yapılmaktadır. Devam edin ve kitaptaki en kötü uygulamaları ve antipatternleri kullanın, sadece istediğiniz şeyi yapan bir şeyi kranklayın. Ardından geri dönün ve düzgün bir şekilde tasarlayın. Genellikle, 800 satırlık üç prosedürlü canavarlık içinde bazı yapılandırma parametrelerini zor kodlarken, kendimi "Bilirsiniz, bunu yapmanın daha iyi bir yolu ..." diye düşünürken buluyorum.

Şu anda moda olduğunu biliyorum, ancak yapılandırılmış analiz teknikleri gerçekten yazılım tasarımı üzerinde çalışmamı sağladı. Sorunları çözmek ve sistemin farklı parçalarını birlikte çalışmak üzere tasarlamak için birkaç kabarcık grafik ve DFD oluşturarak oynayın.


2

Diğerlerinin söylediği gibi, deneyim kod yazmaktan gelir. Ancak mümkünse kodunuzu başka birisine de incelemeniz gerekir. Daha deneyimli bir programcı kodunuzdaki sorunları gösterebilir ve size bir şeyler yapmanın daha iyi yollarını gösterebilir. Açık kaynaklı bir projeye katkıda bulunmak, her ikisini de yapma şansı verecektir.


1

Benim için, daha büyük bir yazılımı daha küçük parçalara ayırmaya yardımcı olur. Ve sonra bu parçaları daha küçük parçalara ayırın vb. Her yazılım programı küçük mantık parçalarından oluşur.

Örneğin bir blog düşünün. Başkalarının okuyabileceği yayınlar oluşturabilir ve düzenleyebilirsiniz. Hemen projeyi yönetici ve genel bölümlere ayırabilirsiniz. Yönetici en azından yönetici kullanıcıları, bir giriş sayfası ve blogu yönetmek için bir bölüm gerektirir. Blogu yönetme bölümü bir CRUD (Oluşturma, Okuma, Güncelleme, Silme) arayüzüne ayrılabilir. Yeni bir blog yazısı oluşturmak için yönetici kullanıcının doğru ayrıcalıklara, bir forma, form doğrulamasına ve veritabanına kaydetme yeteneğine sahip olduğundan emin olmak için bir kontrol gerekir. Ve bunun gibi.

Bir sorunu veya özelliği ne kadar çok bozursanız, yönetilebilir hale gelir. Böl ve fethet. Yazılımınızı bu şekilde eşleştirdikten sonra, farklı parçalarının birbirleriyle nasıl etkileşime girdiğine bir göz atabilirsiniz. Kodu nerede tekrarlayabilirsiniz? Ne çıkarılabilir? Bu hem planlarken hem de kodun kendisini yazarken yinelemeli bir süreç olmalıdır.

Minimum özellik kümenizin ne ile başlayacağını bulmanızı ve başka parçalar eklemeden önce bunu uygulamanızı öneririm. Gelecekteki değişikliklerin çok zor olmaması için defansif olarak kodlamak isteyeceksiniz, ancak aynı zamanda asla tamamlanamayan yarı özellikleri uygulamak istemezsiniz. Esnek kalmak ve sevgililerinizi acımasızca öldürmek, edebi bir referans almak için istekli olmak arasında yürümek zor. Bu dengeleme hareketinde başarılı olmak sadece deneyimden gelir.

Ve diğer cevapların da belirttiği gibi, işte böyle geliyor: deneyim. Bunu almanın tek yolu sadece başlamaktır. Başından itibaren mükemmel hale getirme konusunda çok endişelenmeyin. Önce kodun çalışmasını sağlayın, sonra güzelleştirin, sonra hızlı yapın.

Ayrıca, bu paragrafın aksine, sonunda güvenlik olarak düşünmeyin. Yazılımınızın güvenliğinin ihlal edilebileceği hakkında bir fikriniz olmalı, ancak başlangıç ​​olarak hiçbir kullanıcı girdisine güvenmeyin.


0

Bir yazılım şirketinde çalışmak istemediğinizi söylediğinizi biliyorum, ama burası diğer cevapların çoğunun bahsettiği deneyimi elde etmek için iyi bir yer. Ve büyük projelerde çalışmak isteyip istemediğiniz, diğer insanların çalışma ve çalışma stillerine maruz kalmak iyi şeylerdir.

Örneğin, Eşli Programlamayı kendiniz deneyemezsiniz. Ve sizden daha akıllı biriyle eşleştirilirseniz, bu metodolojide deneyim kazanırken onlardan daha iyi uygulamalar kazanmanın ek faydasını elde edersiniz.

BTW, deneyim, beceri ve benzerlerinde ortalamanın altında olduğumu düşündüğüm gruplarla çalışmayı denedim. Oyunumu müthiş yükseltiyor. Bunu tek başına ya da "deneyimli" bir adam olduğunuzda yapmak çok daha zor.


0

Aradığın şey problem çözme becerileridir . Geliştiricinin bunu aptalca yapabileceğini varsaydım. Neyse ki, problem çözme matematik, araştırma, günlük yaşam ve benzeri alanlarda kullanılan genel bir beceridir.

Öncelikle, bazı fırfırlar ile bilimsel yöntemi takip etmelisiniz.

  1. Bir sorununuz var (bunu tanımlamaya yardımcı olacak araçları ve teknikleri kullanın)
  2. Bir çözümü varsayıyorsunuz (kalıplar ve deneyim yardımı)
  3. Test hipotezi (burada kodunuz olmayabilir)
  4. Hipotez tutulana kadar 2. ve 3. adımları tekrarlayın. Artık bir teoriniz var (problemi çözmek için çalışma programı)
  5. Stres teorisine delikler arayan bir deney geliştirin (test senaryoları!)
  6. Test senaryoları geçerliyse bir çözümünüz var! Aksi takdirde durulayın ve tekrarlayın

Bunun oldukça yüksek olduğuna dikkat edin. Her adım tipik olarak sorunun gerçekte ne olduğunu belirlemek gibi birkaç alt adım içerir. Örnek olarak, matematikteki kelime problemlerini çözmeye bakın. Gerçekleri toplarsınız (bir araç) ve gerçekte ne istediğini siz belirlersiniz. Ardından, gerçeklerinizi inceleyerek çözümle eşleştirmeye çalışıyorsunuz.

Bu, birincil sorunun alt problemleri haline gelir. Bu yüzden, adımları tekrar izleyin. Nihai sonucu almak için bir ara öğeye ihtiyacımız var, bu yüzden yeni sorunumuz haline geliyor. Bu ayrışır küçük, kolay anlaşılır, bölümlere sorun aşağı. Her parça çözüldükçe, çözelti birbirine bağlanır.

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.