Nasıl programlanacağını ve nasıl programlanacağını öğreniyorum, ancak sistemleri nasıl düzgün bir şekilde yapılacağını nasıl / nerede öğreniyorsunuz? [kapalı]


11

Bir sistem oluştururken göz önünde bulundurulması gereken birçok şey var, örneğin kullanıcıların oturum açıp birbirleriyle etkileşime girdiği, içerik oluşturduğu ve düzenlediği web tabanlı bir sistemi ele alalım. Şimdi güvenlik, doğrulama (bunun ne gerektirdiğinden% 100 emin olduğumu bile düşünmüyorum), "kullanıcıların birbirlerinin ayaklarına basmadığından emin olmak" (bunun için terim?) durumlarda, veritabanı verilerinin beklenmedik durumlarla sorunlu olmadığından emin olmak mı? Tüm bunları nasıl ve nerede öğreneceğimi bilmiyorum, bu tür şeylerle ilgili bir kitap var mı? Dediğim gibi, kod yazma ile aslında doğru kodu yazma arasında büyük bir fark var gibi, ne demek istediğimi biliyor musun? Şu anki programlama çalışmamın tarif ettiğim şeylerin çoğundan yoksun olduğunu hissediyorum ve daha sonra neden olduğu sorunları görebiliyorum, ve sonra problemleri çözmek çok daha zordur çünkü veriler mevcuttur ve insanlar bunu kullanır. Öyleyse kimse beni bu tür öğrenme için kitaplara veya kaynaklara veya programlamanın uygun alt kümesine (?) İşaret edebilir mi?

Not: Etiketlerimi düzeltmekten çekinmeyin, neden bahsettiğimi bilmiyorum.

Düzenleme: Yazdığım örneklerin bazılarının diğer sistem türleri için de geçerli olduğunu varsayıyorum, çoğunlukla web çalışmalarına katıldığım için başka iyi örnekler bilmiyorum.

Yanıtlar:


10

Anlayabildiğim kadarıyla, profesyonel programcılar bunları üç ana yolla öğreniyor:

  1. Kötü bir deneyimden öğrenmek - Yanlış bir şeyle karşılaşıyorsunuz. Siz düzeltin. "Hey, bunu bir daha yapmamalıyım. Bir dahaki sefere X yapacağım" diyorsunuz. Siz açıkça bunun kalınlığındasınız.
  2. Kötü bir deneyimden önce öğrenmek - Sonunda, belli tür problemlerin geleceğini görmeyi öğrenirsiniz. Bunu yaptığınızda, bundan kaçınmaya çalışacaksınız. Belki bir kitap okursunuz, belki web'de arama yaparsınız, belki bazı deneyler denersiniz.
  3. Deneyimli meslektaşlardan öğrenme - Bu hala kolay olmasa da, en kolayı. İşin püf noktası, iş arkadaşınızın hala alakalı kötü bir deneyime yanıt verip vermediğini bulmaktır. Sonuçta teknoloji ilerliyor.

Üçünüz için de ateş etmenizi öneririm. Sorularınıza cevap verecek akıllı, deneyimli meslektaşlarınızla bir yer bulun. Çok şey deneyebilmeniz için buranın erken ve sık gönderilmesini sağlayan bir yer olduğundan emin olun. Ve araştırma ve düşünme için zaman ayırın.


# 1'e gelince), öğrendiğiniz kötü deneyimlerin ve hataların mutlaka kendinizin olması gerekmediğini unutmayın. Web'de zaman geçirin, programcıların yaptıkları yerlerde takılın, yaptıkları veya karşılaştıkları çılgın hataların korku hikayelerini öğrenin, programlarken onları kafanızın arkasında tutun.
Mart'ta Shadur

1
Katılıyorum, Shadur, ama bence bazı kötü deneyimlerin kendinizin olması gerekiyor. Bazı insanlar kenarda oturmaya çalışırlar, mükemmel olanı yapana kadar beklerler. Ama gerçekten oraya girmeleri ve becerilerini geliştirmek istiyorlarsa yapmaya başlamaları gerekiyor.
William Pietri

4

Web uygulamaları söz konusu olduğunda , bu cevapta derlediğim diğer tüm yerlerden daha iyi bilgi toplanmaktadır .

Ama gerçek şu ki, tam bir sistemi iyi bir araya getirmek için bilinecek çok şey var . Bir ustalık seviyesine ulaşmak için gerekli uygulama miktarı olarak 10.000 saati destekleyen çalışmalar vardır ve bilgi sistemleri geliştirmek bunun bir istisnası değildir.


Yani sanırım farklı şeyler için farklı, ha?
MetaGuru

Birçok sorun, örneğin, web uygulamalarına özgü olacak ve birçoğu daha genel olacak. Ne istediğini tamamen anladığımdan emin değilim.
quentin-starin

3

William Pietri'nin cevabını çok beğendim (+1), ancak buna eklenmesi gerektiğine inanıyorum. Sistemler ile kastettiğinizin yalnızca yazılımdan oluştuğunu varsayarsak.

Ama etine girmeden önce yardım edecek bir kitap bilmiyorum. Bundan sonra, deneyimlerden öğrendim (William'ın yaptığı üç nokta).

Bahsettiğiniz şey en az dört geniş rolde uzanıyor. Bazen küçük veya orta ölçekli projeler için bir kişi tüm bu rolleri doldurabilir, ancak büyük projelere başladığınızda bu rolleri en azından bir şekilde ayırmanız gerekir. Herhangi birinin anlamlı bir şekilde uzman olması herkes için zordur.

  1. İş analisti

    Müşteriyle konuşan ve gereksinimlerini bir mimarın anlayabileceği bir şeye çeviren kişi budur. Temel olarak uygun şekilde formüle edilmiş gereksinimlerin bir listesi. Bu bariz fonksiyonel gereksinimleri (bu sistem ne sunmalıdır?), Fakat aynı zamanda işlevsel olmayan gereksinimleri de (sistemin yerine getirmesi gereken genel özellikler nelerdir? Bu güvenlik, güvenilirlik, kullanılabilirlik, esneklik, kapasite, performans, sağlamlık ve kullanıcı açısından bu gibi diğer gereksinimler).

    Sistemin yapması gereken ilk geçiş budur, ciddi düşünmenin başlangıcıdır.

  2. Sistem mimarı

    Bu kişi, içinde çalışabileceği üst düzey teknik çerçeve üretir. Anahat maç planı verir. Genel araçlar, teknikler, yapılar. Tüm sistemi daha küçük parçalara ayırırlar, birbirleriyle nasıl uyum sağlarlar, dış dünyayla nasıl uyum sağlarlar ...

    Bu, düşünülmesi gereken şeyleri pek çok açıdan iyileştirmeye yardımcı olur. Bu aşamada, iş analisti tarafından yazılan gereksinimlerle ilgili sorunlar sıklıkla bulunacaktır. Ne istediklerine dair anlayışlarını ve ifadelerini geliştirmek için bazı iterasyonlar için onlara geri dönün.

  3. Sistem tasarımcısı

    Bu rol, hepsini nasıl çalıştıracağınızla ilgilidir. Bu tek kişilik bir gösteriden daha fazla takım çalışması olabilir. Ancak, tüm sistem tasarımını denetlemek için muhtemelen bir lider tasarımcı var. Bu kişi detayı araştırmalı ve mimarın görüşünün gerçekten inşa edilebilen bir şey olduğundan emin olmalıdır.

    Sistem mimarisinin ve dolayısıyla potansiyel olarak iş analizinin daha da rafine edilmesini bekleyin.

  4. Test yöneticisi

    Bu rol sıklıkla unutulur. Ama günün sonunda test edemezseniz, onu inşa edebileceğinizi nasıl kanıtlayabilirsiniz? Tüm aşamaların sonuçlarının gözden geçirilmesi gerekir: herhangi bir kod yazılmadan önce, eksiklikleri vurgulayabilecek ve bu nedenle erken düzeltmeleri mümkün kılacak testlerde yetkin bir kişi tarafından iş analizi, mimari ve tasarım.

Bu kısa bir özet.

Bu adamlar / kızlar, zincirdeki değirmen insanlarının ne hakkında düşünülmesi gerektiğini düşünmek için sadece genel koşuştur.

Büyük bankacılık veya uzay uygulamaları gibi karmaşık projeler için sadece iki örnek almak (yüzlerce ila binlerce işgünü düşünün), her aşamada projeleri gözden geçirme ve destekleme olarak adlandırdığımız birçok konu uzmanı var. Bu roller güvenlik analizi, sistem boyutlandırma, kapasite, performans, veritabanları, kümeleme ve hassas iş alanları da dahil olmak üzere bu gibi dar uzmanlık alanlarını içerir. Rollerin çeşitliliği, sistemlerin büyüklüğüne ve karmaşıklığına bağlıdır.

Bütün bunları söylemek denemek ve bilmemelisiniz, olmaz. Bununla birlikte, genel resmi kavrayabilir ve küçük projelerde, büyük projelere göre çok daha fazlasını inceleyebilirsiniz, çünkü karmaşıklık düzeyi daha yuvarlak olmanıza izin verir.

Sistemleri nasıl tasarlayacağınızı bilmek istiyorsanız, kutunun dışında düşünerek soru sormaya başlamanız gerekir. Kendinizi müşterinin yerine koyun ve neyin yanlış gidebileceğini, neyin test edilmesi gerektiğini düşünmeye çalışın. Ardından gerçek bir müşteriyle bir araya gelin ve ihtiyaç duydukları sistemin kapsamlarını ve sınırlarını açıklamaya itin. Ayrıca 'müşteri' dediğimde bunun çok farklı insanları kapsadığını anlamalısınız. Sistemin her gün yaptığı gibi yapmak için kullanan kişi var. Operatör, teknik destek, rapora veya başka bir şeye ihtiyacı olan yönetici, denetçi, altyapı ekibi, bunun için ödeme yapan paydaş, ihtiyaç duyulan kalite yöneticisi sisteminizi test etmek anlamına geliyor ... Hepsine sorun (ve onlar bir kişidir, tüm bu şapkaları birer birer takmalarını isteyin), bu yüzden onlara neye ihtiyaç duyduklarını sorun ve sistem gereksinimlerinizin ne olduğunu bilmeye başlayabilirsiniz. Oradan mimariyi ve oradan tasarımı türetebilirsiniz.

Karmaşık sistemler için (ister yazılım ister donanımla en genel anlamda bütünleşmek olsun), yukarıda listelediğim dört rolün her biri için sadece bir kişi yeterli değildir, aynı zamanda sistemin ne tanımlaması gerektiğini bile tanımlamanız gerekir. diğer evreleri bir kenara bırakın.

HPH, asm.


2

öğrenmek için burada, bu tür şeyler hakkında bir kitap var mı?

"Bir kitap" değil. Bir sürü kitap.

Kraliyet yolu yok

Dediğim gibi, kod yazma ve aslında doğru kodu yazma arasında büyük bir fark var gibi görünüyor

Sağ.

"Mimari" den bahsediyorsunuz, genel olarak programlama.

Adım 1. Bir çok kodu okuyun. Gerçek bir lot. Yapmak istediğiniz şeyleri düşünün. İlgili açık kaynaklı projeleri bulun. Kodu okuyun. Hepsini.

Adım 2. Daha fazla kod okuyun. Çok daha fazla.

Adım 3. Mimarlık üzerine kitaplar okuyun.


2
Oku oku oku. Ancak, gerçek sistemleri uygularken öğrendiklerinizle aynı olmadığını öne sürmek zorundayım.
quentin-starin

@qes: Soru "sistemleri düzgün bir şekilde nasıl oluşturacağınızı nereden öğreniyorsunuz?" Gerçek sistemleri kötü inşa ederek bunu öğrenemezsiniz. Gerçekten de, gerçek sistemleri kötü bir şekilde uygulamak öğrenmenin tam tersidir.
S.Lott

3
Code Complete'ten en çok sevdiğim şeylerden biri: "Yazılım mühendisliği alanı, geçmiş başarıların ve başarısızlıkların örneklerini olağanüstü sınırlı bir şekilde kullanıyor. Eğer mimarlıkla ilgileniyorsanız [ünlü mimarların] çizimlerini incelersiniz ... bazı binaları ziyaret edin ... ".
Jacob

@ S.Lott: Kötü bir şey yapmakla ilgili kim söyledi?
quentin-starin

@ qes: önceki sanatı okumadan, büyük ölçekli bir programı iyi yapma olasılığı nedir? Sizin gibi bir dahi için, her zaman ve tüm ölçeklerde iyi programlar yazmanız mümkündür. Ancak büyük ölçekli programlamaya bakmayan herkes için, büyük bir sistemi hiçbir şey okumadan uygulamaya çalışarak başlamak, işe yaramayacak çok fazla hata içeren bir şey yazma yoludur. Deneyiminiz farklı olabilir, ama önce okumadan çalışacak kadar zeki olmadığımı biliyorum.
S.Lott

1

Bir sürü kitap okumak için ....

Artık bir sorununuz olduğunu biliyorsunuz, bu kitapları okumanızı söylemenin bir anlamı var. (Gerçek bir iş yapmadan önce, bu kitapları tartışmanın pek bir anlamı yok)

Program Tasarımında Tasarım Desenleri 1.2, 3 ve 4.

Ama her pıtırtı kullanılabileceğini gördüğünüz her yere uygulamaya çalışmayın

bu da kötü bir şey.

Bu yardımcı olur umarım.


1

Bir şeyi nasıl yapacağınızı öğrenmenin en iyi yolu bunu yapmaktır. Fransızca konuşmayı öğrenmek istiyorsanız, Fransızca konuşmalı, Fransızca okumalı ve Fransızca yazmalı, Fransızca okumalı ve Fransa'ya gitmeli ve Fransızca Fransızca insanlarla konuşmalısınız. Eğer piyano çalmayı bilmek istiyorsanız, aslında piyano çalmanız gerekir. Basit şarkılar çalmalı ve piyanonun yapısını ve müziğin yapısını öğrenmelisiniz. Müzik okumayı ve parmaklarınızı kullanarak bir piyano ile müziği nasıl ifade edeceğinizi öğrenmelisiniz. Bir müziğin nasıl bir ses çıkardığını ve bir piyanonun gitar veya flüt ya da saksafonun yapabileceği seslere karşı ne tür sesler çıkarabileceğini öğrenmelisiniz.

Programlama tamamen aynıdır. Bir veritabanını nasıl tasarlayacağınızı biliyorsanız, veritabanları tasarlamanız gerekir. Şifrelemeyi anlamak istiyorsanız, şifreleme algoritmalarını ve şifreleme protokollerini uygulayın. Aynı anda birden fazla kullanıcıya hizmet verebilecek bir yazılım yazmak istiyorsanız, disk GÇ, ağ GÇ ve iş parçacıklarının nasıl çalıştığını anlamanız gerekir. Bunun nasıl çalıştığını anlamak için, dosyaları okuyan ve bunlardan yazan, bir ağ üzerinden veri ileten ve kaynaklara erişimi senkronize eden yazma kodunuz vardır. Bütün bunlar pratik gerektirir.

Bir "sistem", genellikle, sadece bir şeyler topluluğudur. Bir bütün oluşturmak için koordine edilen parçalar. Büyük bir şey inşa etmek için bir sürü küçük parça inşa etmelisin. Yani, sistemlerin nasıl kurulacağını öğrenmek istiyorsanız, sistem oluşturmaya başlayın. Bir sorun alın, parçalara ayırın ve her parçayı tek tek uygulayın. Sonunda entegre bir "sisteminiz" olacak. Muhtemelen yol boyunca birkaç kez başarısız olacaksınız, ama sorun değil. Başarısız olmuyorsanız, genellikle yeterince denemediğiniz anlamına gelir.

Ayrıca, Bilgisayar Bilimi okumak için okula gitmenizi tavsiye ederim. Bu "pratik" kısmında çok fazla yardımcı olmaz. Bunu kendi başınıza yapmanız gerekecek, ancak pozlama kısmına yardımcı olacaktır. Bilgisayarların ve bilgisayar sistemlerinin nasıl çalıştığıyla ilgili hemen hemen her şey hakkında çok şey öğreneceksiniz, bu da kendi başınıza öğrenmek zor.


1
+1, ancak sadece yapmanın yeterli olmadığını öneririm. Bir süre geçtikten sonra aynı kodu tekrar ziyaret edene kadar iyi ya da kötü yapıp yapmadığınızı bilemezsiniz. Ve o zaman bile, bir şeyin yanlış olduğunu biliyor olabilirsiniz, ancak nasıl geliştirilebileceğini değil. Tüm bunları kısaltmanın bir yolu, öğrenmeye çalıştığınız şey konusunda daha deneyimli insanlardan çok sayıda geri bildirim sağlamaktır. Yani evet, "do" çok önemlidir, ancak öğrenme sürecini hızlandırmak için muhtemelen daha fazla yaptığınız şeylerle ilgili geri bildirim.
Marjan Venema
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.