it-swarm.asia

OO-programlama, işe alma şirketleri yerleştirdiği kadar önemli midir?

Sadece yüksek lisans derecemi bitirdim (bilgi işlemde) ve iş başvurusu yapıyorum. Birçok şirketin özellikle nesne yönelimi anlayışını istediğini fark ettim. Popüler röportaj soruları kalıtım, polimorfizm, erişimciler vb.

OO gerçekten çok önemli mi? C'de bir programlama işi için röportaj yaptım ve röportajın yarısı OO idi.

Gerçek dünyada, gerçek uygulamalar geliştirmek, nesne yönelimi neredeyse her zaman kullanılıyor mu? Çok biçimlilik gibi temel özellikler çok mu kullanılıyor?

Sanırım sorum zayıf yönlerimden birinden geliyor. OO hakkında bilgi sahibi olmama rağmen, programlarıma çok fazla dahil edemiyorum.

55
ale

OOP, programınızın sürdürülmesi/anlaşılması imkansız hale gelmeden büyümesini sağlayan bir paradigmadır. Bu, öğrencilerin neredeyse hiç almadığı bir nokta çünkü en fazla iki haftadan iki aya kadar süren küçük projeler yapıyorlar.

Bu kısa süre, OOP, özellikle projedeki insanlar yeni başlayanlarsa) amacını açıklığa kavuşturmak için yeterli değildir, ancak büyük projeler için bazı modifikasyonlara bağlı kalmak çok önemlidir, diyebilirim ki> 50.000 satır kod . OOP bunun tek çözümü değildir, ancak bu sektörde en yaygın olarak kullanılanıdır.

Bu yüzden insanlar OOP'yi bilmenizi istiyor.

Deneyime göre, neredeyse tüm genç programcıların modelleme ve OOP konusunda ciddi kusurları olduğunu ekleyeceğim. Birçoğu sınıf yazmayı, onlardan miras almayı ve bunun gibi temel şeyleri biliyor, ama "OOP" da düşünmüyor ve sonunda kötüye kullanıyorlar. Bu nedenle, ciddi bir işe alım yapan kişi her zaman OOP alan adındaki yetkinliklerinizin ne olduğuna bakacaktır).

Bunlar okulda öğrenilmediğinden, farklı adaylar arasında çok büyük bir bilgi varyasyonu vardır. Ve dürüst olalım: OOP) konusunda yetersiz bilgiye sahip birinin herhangi bir büyük proje üzerinde çalışabileceğini düşünmüyorum, çünkü olası geliştiricilerin bu insanları yönetmesi yalnızca kendileri kodlayın.

Henüz "OOP" düşünmüyorsanız, onunla ilgili bazı kitapları okumanızı ve gerçekten büyük projeleri olmayan şirketlere başvurmanızı öneririm; OOP işvereniniz için yararlı işler yapmaya devam etmek (ve size maaşınızı verdiği sürece, bu sizin için de yararlı olacaktır).

DÜZENLEME: ha, ve ben zaten OOP kodu C yazdı, ben en yaygın C kullanımı olmasa bile, bu güçlü bilgi ile mümkündür. manuel.

Ve OOP tekniğinin arkasında, bir şey gizlidir: yazılım tasarımı. Yazılım tasarımı, diğer dillerde olduğu gibi C de gerçekten yararlıdır. Birçok işe alım uzmanı yazılım tasarım yeterliliklerinizi test edecek ve OOP soru bunun için iyidir, ancak OOP burada test edilen ana şey değildir. Bu yüzden bir C işi için bile bu sorularınız var.

84
deadalnix

Bilgisayar programlama ile ilgili büyük sorun karmaşıklığı ele almaktır ve modern programlar gerçekten çok karmaşık olabilir ve bu sadece artmaktadır.

Önemsiz bilgisayar programlarının yazılım mühendisliğinde yapılan çalışmaların çoğu, karmaşıklığı evcilleştirmeye odaklanır ve ilk önce bir ömür boyu öğrenmeye gerek kalmadan mümkün olduğunca çok kişi için erişilebilir hale getirir.

Örnekler:

  • Modülerleştirme: Her modülün diğer modüller hakkında biraz bilgi sahibi olduğu (örneğin, ağ kartı arabelleklerini doğrudan değiştirmesine izin verilen bir fare simgesi çizim yönlendirmesi yerine) kod modüllerine sahip olarak programları kavramsal olarak daha basit hale getirirsiniz.
  • API'lar: API'lerin arkasındaki karmaşık programlara basit bir kullanım yolu sağlarlar. Bir dosyayı açtığınızda, ağ paylaşımlarının bir USB diskten farklı bir şekilde ele alınmasını umursamazsınız. API aynıdır.
  • Nesne yönelimi. Bu, mevcut kodu yeniden kullanmanıza ve eklediğiniz yeni kodla şeffaf bir şekilde çalışmanıza olanak tanırken, aynı zamanda tüm temel karmaşıklığı da gizlemenize olanak tanır.

Başka bir deyişle, tek başına veya büyük olasılıkla başkalarıyla önemsiz olmayan yazılım parçaları üzerinde çalışmak istiyorsanız çok fazla hile bilmek gerekir.

38
user1249

Evet, öncelikle ticari geliştirmede (Java ve .NET) kullanılan en popüler iki geliştirme platformu nesne yönelimli olduğu ve evet anlamına geldiği için, OO çok kullanılır (polimorfizm, kalıtım ve her şey dahil) Başka).

Şirketler özellikle bir teknoloji olarak nesne yönelimini önemsemiyorlar - bu bir ideoloji meselesi değil, sorunlarına BT stratejileriyle uyumlu şekilde çözümler geliştirebilen insanları önemsiyorlar.

Ama bunun bir zayıflık olduğunu hissetmekten endişe etmem. Eğitim dünyasına saygısızlık etmeden, ticari dünyadaki çoğu insan bitmiş makale olarak üniversiteden ayrılan programcıları (herhangi bir düzeyde) görmez. Hala öğrenecek çok şeyiniz var ve bu anlaşılıyor (muhtemelen şirketler tarafından öğrencilerden daha iyi).

14
Jon Hopkins

Gerçek hayatta olduğu gibi, gerçek hayattaki programlama teoridekinden farklıdır.

Evet, OO paradigma cilalanmış ve her zaman aklınızın arkasındaysa, yönetilebilir, anlaşılabilir ve kolayca genişletilebilir kod yazma konusunda daha iyisini yapabilirsiniz.

Ne yazık ki, gerçek dünyada şu var:

  • proje zaman baskıları
  • usule yönelik ekip üyeleri
  • çapraz yerleştirilmiş ekipler, birden fazla tedarikçi
  • eski kod herhangi bir yöne sahip değil
  • çalıştığı sürece, kodun nasıl yazıldığına dair birkaç özen
  • kod çalışmıyor olsa bile, motivasyon "OO" değil, düzeltmek için
  • iyi OO yapmanıza izin vermeyen modüller, platform sınırlamaları, çerçeveler

Gerçek bir işte, yukarıdaki sorunlarla çalışmak zorundasınız. Bu moral bozucu geliyor. Ancak, bunu bir kafa gibi davranın. İşe alım şirketleri OO) çok fazla önem vermektedir. Nedenini görmek kolaydır. Adayı test etmenin tek yolu OO'nun anlaşılmasını sormaktır. röportaj için gelmeden önce bu sorular üzerine.

Gerçek hayat OO yavaş gelir. Zaman içinde okumaya ve geliştirmeye devam etmenize yardımcı olur.

7
Amol

Lisans Derecemi bitirdikten sonra aynı duyguyu yaşadım ve bana neden ve nasıl olduğunu gösteren harika bir kitap OOP gerçek dünya uygulamaları için alakalı Head Birincisi: Tasarım Desenleri İçtenlikle bir göz atmanızı öneririm, gerçekten eğlenceli bir şekilde yazılmıştır ve daha büyük ölçekte çalışırken OOP yaklaşımının neden arzu edildiğine dair birçok geçerli noktaya sahiptir, sürekli değişen sistemler.

6
David Haas

C'deki bazı işler için bile, Linux çekirdeğindeki nesneye yönelik tasarım hakkındaki yeni bir dizi makalede kanıtlandığı gibi, nesne yönelimli tasarımı bilmeniz (ve muhtemelen derleyicinizin sizin için yaptığıdan daha iyi olması) gerekebilir. ( Bölüm 1 , Bölüm 2 )

GTK + ayrıca çok sayıda nesne yönelimli tasarım deseni kullanır.

6
Ken Bloom

OO her şey - bu bir OO şehirler inşa etmenizi sağlar, ancak prosedür programları tuğla olduğunu söyleyebilirim) bu görüş ile bazı anlaşmazlık ifade etmek zorundayım.

Cevabımı bir benzetme, genel bir nesneye ihtiyaç duymak için, askerin usule ihtiyacı var. Bir kez OO) prosedürleri bulursanız ve bu sizin uzmanlığınızsa ve yeterince iyiyseniz, OO için endişelenmeyin, çünkü birisinin bunu yazması yeterince kolaydır = OO satranç oyunu kodu:

-findBestMove
-makeBestMove
-waitForPlayerInput

ama sonra -findBestMove arkasındaki kodu yazmak zorunda ve sadece bu olmadığından emin olabilirsiniz:

foreach $move (@moves){
    $bestMove = ($move > $bestMove ? $move : $bestMove)
}
return $bestMove

Öte yandan, OO kodunu nasıl okuyacağınızı bilmiyorsanız, endişelenin. Çünkü (neredeyse) kodunuzun bir tür nesnelerle karışacağından emin olabilirsiniz. şu anda sürdürdüğüm 12000 global varyansı ve 1200 line "modülleri" nin eski mirasının üzerinde çalışıyorsunuz.

4
Alex

Jon Hopkins şunu yazdı:

Evet, öncelikle ticari geliştirmede (Java ve .NET) kullanılan en popüler iki geliştirme platformu nesne yönelimli olduğu ve bunun anlamı evet olduğu için, OO çok kullanılır (polimorfizm, kalıtım ve diğer her şey dahil).

Bu neredeyse söyleyeceğim şeydi, ama sadece Java ve .Net değil, C++ her yerde, Objective-C OSX'in her yerinde, tüm havalı çocuklar Ruby veya Python ve bunların hepsi ve daha birçoğu nesne yönelimi üzerinde odaklanır. Birçok yeni dil çoklu aradımdır, bu nedenle F # gibi bir şey öncelikle işlevsel bir dildir, ancak nesne yönelimini de destekler. Her yerde ve en azından biraz anlayışa sahip olmak çok faydalı. Bununla ilgili çok fazla endişelenmeyin, üniversite derslerini yeni bitirmiş olmanız, gerçek dünyada kod geliştirmeyi öğrenmeye hazır olduğunuz anlamına gelir :)

4
eviltobz

Programlamayı uzun zamandır yaptım ve OO kavramlarını C'de programlama yaparken bile yararlı buluyorum - test edilmiş olsa bile muhtemelen bu kavramları her minikte tanımlayamayacağım Bir noktada, kavramları araştırmak ve OO 'dan keyif almak için temel bir dil olsa da OO dil) oluşturdum. yeni bir açı.

BTW, C++ büyük ve çirkin bir OO karışıklığı yarattı, oysa Objective C bunu doğru yapıyor.

Röportajlar hakkında, masanın her iki tarafından da bir korku gösterisi haline geldiler. Görüşülen kişilerin çoğu onlar tarafından çok korkutulur. İşe alım yöneticilerinin çoğu, çok temel programlama testlerinde bile kaç kişinin başarısız olduğu ile şaşırır.

Bununla birlikte, şu anda yazılım endüstrisinde çalışan ve HİÇBİR ŞEY bilen ve dünyayı potansiyel çalışanlardan bekleyen bazı muazzam duş çantaları var.

3
Ponk

Öğrenme OOP yazılım geliştirme öğrenmek kadar kullanışlı değildir. Git Kod Tamamlandı 2 .

Tabii ki bu yararlı bir araç ama OOP kendisi gerçekten küçük.Genel olarak şirketler ve işe alımçılar "OOP" dediğinde "Yazılım geliştirme" demek Genel bir terim olarak kullanılıyor.

Gerçek işe alım uzmanları, yazılım geliştirmeyi bilmek ve "OOP 'da 3 yıl geçirdi" onay kutusunu eşleştirmek arasındaki farkı anlatacaklardır.

3
Raynos

OOP, kendisi nedeniyle değil, onunla ne aldığı için önemli. Soyutlama ve tecrit etme yeteneğiyle ilgilenen bir şey, grup şeylerini birlikte bitirmek sadece birlikte etkileşim için gerekli olan parçaları ortaya çıkarır.

Bu, "modülerleştirme" adı verilen ve yüksek seviyedeki her bir ayrıntıya dikkat etmeden daha basit olanların bir araya getirilmesi gibi karmaşık sistemler oluşturmaya izin veren ve bileşenlerin, tam olarak aynı.

Bu "mühendislik kavramları", yazılım ürününün kendilerinin "tek geliştirici özelliğinden" daha büyük hale geldiği andan itibaren yazılım geliştirilmesinde tutulmaya çalışılmış, böylece geliştiricilerin bağımsız parçalar üzerinde çalışmasına ve bu parçaların birlikte etkileşim.

Bununla birlikte, bu ilkeler sadece OOP'de bulunmaz (hesaplama teorisi geçerlidir, bu sonuçlara ulaşmak için sonsuz olası yöntemler vardır).

OOP basitçe bu şeyleri bir araya getirmek için başarılı bir girişimdir, bu genel terimlere (modüller, kapsülleme, ikame gibi) daha kesin tanımlar verir ve bu tanımlara (kalıplara) programlama dillerine uyar.

OOP ilk önce bir " dil özelliği " değil, " ortak Sözlük "yazılım mühendislerinin yazılım tasarımına yaklaşmasını sağlar.

Belirli bir dilin, Lexicon'un, örneğin bir kapsülün istemeden yapması gerekmeden yanlışlıkla açılmamasını sağlayan ilkelleri olması veya olmaması, OOP tasarımının ikincil bir yönüdür. . Bu nedenle, dilin kendisi buna doğrudan destek sunmasa bile, büyük C projesi bile OOP tarafından "yönetilmektedir".

Bir proje büyüklüğü, yaptığı her şeyi anlama ve takip etme konusunda tek bir geliştirici yeteneğine (aslında, bu durumda "havai" olarak bile görülebilir) kadar ya da bir şey geliştiren küçük bir gruba kadar tanınamayan her şeyin avantajı kısa bir süre. Ve bir "dil özelliği" açısından OOP üzerinde çalışmış olan gençlerin genellikle kötü tasarlanmış kod üreterek yanlış yorumladıklarının ana nedeni budur.

OOP'nin dillere nasıl uyduğu, dil tasarımcılarının OOP ilkesini kendi yapılarında nasıl yorumladığına bağlıdır.

Dolayısıyla, C++ 'da "kapsülleme" "özel üyeler" (ve "kapsül" sınıf haline gelir), "ikame" sanal işlevler geçersiz kılmaya veya şablon parametrelendirme/uzmanlaşma vb. Olurken, D'de bir kapsül "modül" olur (ve ikame gider sınıflar vb. aracılığıyla), böylece belirli paradigmayı veya kalıbı belirli bir dilde ve başka bir dilde değil, doğrudan kullanılabilir hale getirmek.

İşverenlerin OOP sorusu sormak istedikleri şey, gelecekteki büyük projeler ve geliştirmeler için yazılım tasarımını soyutlama ve elde etme yeteneğinizi kontrol etmektir. OOP, onlar için sadece daha genel şeyler hakkında konuşabilmeniz veya belirli bir uygulamaya somutlaşabilmeniz için hem sizin hem de bilmedikleri varsayımları olan bir "sözlük" dür.

1

Diğerlerinin de belirttiği gibi cevap evet.

AMA, eğer OO olmayan prosedürel spagetti kodu yığınları üzerinde çalışmak istiyorsanız, bunu orada da bulabilirsiniz. Bence OO iş tercih edersiniz.

EDIT: Silahşörlerin sinizmi ve espri anlayışımı affedin. Raynos'un dediği gibi, sadece bir şey OO iyi olduğu anlamına gelmez. OO doğru bir şekilde çalışmak gerçek işi ve düşünceyi alır; otomatik olarak bir uygulama iyi yapılmış anlamına gelmez Ve tersine, orada iyi yazılmış prosedürel kod var eminim. 90 ve 2000'lerde kurumsal BT dükkanlarında benim deneyim çok kötü kod yazılmış ve muhtemelen hala var olmuştur. Ancak OP'nin sorusuna daha yakın olarak, daha akıllı geliştiricilerin şans verildiğinde daha fazla OO sistemlerine geçtiklerini) fark ettim.

1
Bernard Dy

OO, diğer tekniklerin üzerine inşa edildiği temel bir temeldir. Kilit nokta, önce bir tür (sınıf) ve o türün bir örneği arasındaki farkı tam olarak anlamaktır. Bunu tam olarak anlamadan okumaya çalışmayın (daha sonra netleşeceğini düşünerek), çünkü vizyonu yakaladıktan sonra gerisini tekrar okumalısınız.

Bir kez asıldıktan sonra, onsuz yapmak istemezsiniz. Kapsülleme, desenler, çerçeveler ya da her neyse, saflık yapmıyorum. İşte, çeşitli görüşlere ve kavramlara uyum sağlamanız gerekecek. Kendi iş tecrübelerimi listeleyeceğim:

Bir şirkette, akranlarım mümkün olduğunca tembel yükleme yapmak istiyordu (boş yapımcılar, her yerde boş değerleri kontrol etmek zorunda olan hantal özellikler). Kısa ömürlü web tabanlı sunucu tarafı nesneler inşa ediyorlardı.

Bir sonraki iş tamamen zıttı. Masaüstü (Excel tabanlı) bir uygulamanın içinde yaşayan nesneler. Mümkün olduğunca çok başlatma yapıcıda (veya birçok kurucu aşırı yükünden birinde) olmalıdır. Boş nesnelerin varlık hakkı olmadığı için boş kuruculara izin verilmiyordu (bu da kalıcılığı oldukça zorlaştırıyordu). Buna ek olarak kendi kodlama tarzı standartlarına (parantez nerede açılacağı, yorumlar sonra boşluk eklemek vb ...) adapte vardı, çünkü benim tarzı-polis yoluyla alamadım benim kod kontrol edilemedi.

Şu anda hiçbir geliştiricinin OO'yu anlamaya çalışmadığı bir şirkette çalışıyorum. Bunun ne kadar sinir bozucu olduğunu ifade etmek zor. Grep becerilerimi geliştirmek zorunda kaldım, aslında seçilen metinde bir grep yapmak için F12 anahtarıma atanmış bir HotScripts makrosu var. Diğer hayal kırıklıklarını bertaraf edeceğim ...

OO becerileri kazandıktan sonra neredeyse spagetti alerjiniz olacak! Ne zaman dışarı atmak söz konusu olduğunda patronunuz sizi tercih edecektir Ne yazık ki "para kazanmak" zarif koddan daha önemlidir.

Uzun cevap için özür dilerim ama sorunuzun kapsamının çoğunu ele almaya çalıştım :-)

1
Louis Somers

Kısa cevap Evet

Neden önemli olduğunu ya da bir ikilem içinde hissettiğiniz uzun versiyonu, sadece bir amaca hizmet eden herhangi bir proje veya uygulama üzerinde çalışmamış olmanızdan kaynaklanmaktadır. Daha sonra Otomobil, Kamyonlar için genişletilmiş Otomobil örnekleri için mükemmel geçerli ... ama yazılım geliştirme içine atladığınızda, bazı görevleri kolaylaştırmak için hedeflenen bir çözüm. Şimdi OO olmasaydı, kod tabanında benzer kodlar yazan herkes veya her gün yeniden icat tekerlekler. Birisi bir şeyi düzeltmek için böyle bir kod tabanına dalmak olsaydı ne karışıklık olacağını hayal edin. Sınıf örnekleri, nasıl/neden yapıldığının belirsiz bir tanımı veya temsili içindir. Gerçek test, uygulamanızı oluşturmaya başladığınızda, hiç şüphesiz korkunç bir şekilde kullanılabileceğinden, ancak açık ve özlü kullanımı nedeniyle akıl sağlığını tartıyor. Bu zayıf alanda çalışmaya daha iyi başlamak en azından kabus kodlarını ortadan kaldırırsınız.

0
V4Vendetta

Değişir. Bilmeniz gereken bir neden OO çünkü programlama dünyasının lingua franca'sı. Başka bir yanıtın işaret ettiği gibi, neredeyse her ana dil OO'dir, bu da temel olarak sizi işe alabilecek herhangi bir şirketin OO dili kullanması anlamına gelir. Hiç OCaml programcılarını işe almayı denediniz mi? Bu imkansız; yetenek havuzu çok küçük. Şirketinizi OCaml kullanarak başlattıysanız ve şirketiniz başarılı olursa, programcıları yeterince hızlı kiralayamazsınız ve iş dışına çıkarsınız. Bu nedenle, 3'ten fazla programcıya sahip hemen hemen her şirket OO dili kullanır ve iş arkadaşlarınızla iletişim kurmak ve platformunuzun kitaplıklarını kullanmak için OO hakkında bilgi sahibi olmanız gerekir.

Şirketin kullandığı dile bağlı olarak, kalıtım ve polimorfizm ya son derece önemlidir ya da sadece orta derecede önemlidir. 10 GoF tasarım deseni ve bir bağımlılık enjeksiyon çerçevesi oluşturmadan Java içinde hiçbir şey yapamazsınız. Java, en çok kullanılan dillerden biridir, bu nedenle OO ilkeleri, Java kullanan birçok şirket için gerçekten önemlidir.

Şirket, Scala veya C # gibi lambdas ve işlev işaretçileri olan modern bir hibrit OO/fonksiyonel dil kullanıyorsa, gerçekten basit şeylerin çoğunu işlemek için daha yüksek dereceli işlevlere sahip olduğunuz için miras aniden daha az önem kazanır. aksi takdirde çok fazla tören gerektirirdi. Ancak, kullandığınız kitaplıkların çoğu OO şeklinde yazılacağı için OO öğesiyle çalışabilmeniz gerekir.

Kalıtım ve polimorfizm değil şirket için önemliyse, yine de OO soru alacaksınız çünkü:

  • Programlama hakkında hiçbir şey bilmeyen ve bir kontrol listesinden sorular soran bir İK personeli tarafından röportaj yapılır. 3 yıllık X süreniz var mı, çoklu görev yapıyor musunuz, vb.
  • Bir kayanın altında yaşamadığınızdan emin olmak isteyen bir mühendisle röportaj yapıyorsunuz. OO lingua franca, bu yüzden size bazı nazik sorular sorulur.
  • Mülakat konusunda çok becerikli olmayan bir mühendis tarafından mülakat yapılır. Genel olarak, mühendisler trivia ve karmaşıklığı sever, bu nedenle polimorfizm, kalıtım ve GoF tasarım desenleri hakkında birçok soru alırsınız, çünkü bunlar sadece sizinle röportaj yapan kişi için ilginçtir.
0
dan

Nesne yönelimli bir dil, kodunuzda nesne yönelimli bir tasarım tutmanıza yardımcı olur, bu da iyidir. Ancak böyle bir tasarımın başka herhangi bir paradigma dili ile elde edilebileceği de doğrudur: OO dillerinin popülaritesinin nedeni (özellikle şirketler arasında) muhtemelen Java ve c # .

Bay Gates şirketini doğru şekilde başlatmış olsaydı, muhtemelen bir işe başvurmadan önce SCHEME'yi inceliyorduk.

0
Lorenzo Stella