Patronumu yeni projemiz için ANSI C'nin yetersiz olduğuna nasıl ikna edebilirim? [kapalı]


64

Birkaç ay önce, şirket içi geliştirilen test ekipmanlarını kontrol etmek ve bir dizi ölçüm kaydetmek için bir uygulama geliştirmeye başladık. Basit bir UI'ye sahip olmalı ve muhtemelen olması gereken sürekli kayıt nedeniyle konu gerektirecektir. Bu başvuru birkaç yıl boyunca kullanılacak ve bu süre zarfında birkaç bilgisayar bilimi öğrencisi tarafından sağlanacaktır.

Patronumuz 30 yıl önce mezun oldu (bir suç olarak kabul edilmemeli; o zamanın yarısından fazlası sırtımda kaldı) ve bu uygulamayı ANSI C'de geliştirmemizi zorunlu kıldı. Bütün zaman boyunca olacak ve bu yüzden ne yaptığımızı anlayabilmelidir. Ayrıca soyut veri tipleri kullanmamamız gerektiğine hükmetti; kullanmamızı istediği küresel değişkenlerin (iç çekiş) adını gösteren bir liste bile verdi.

Aslında bu yaklaşımı bir süre denedim, ancak tüm işaretçi işlemlerinin güvenli olduğundan ve tüm dizelerin doğru boyutta olduğundan emin olmak beni yavaşlatıyordu. Ek olarak, eldeki sorunla gerçekten ilişkili olan kod satırı sayısı, kod tabanımızın yalnızca küçük bir kısmıydı. Birkaç gün sonra, her şeyi hurdaya attım ve C # kullanarak yeniden başladım. Patronumuz programın çalıştığını zaten gördü ve çalışma şeklini seviyor, ancak başka bir dilde yazıldığını bilmiyor.

Gelecek hafta ikimiz kaynak kodunu gözden geçirmek için buluşacağız, böylece “nasıl koruyacağını bilecek”. Biraz korkuyorum ve sizden kararımı desteklemek için hangi argümanları kullanabileceğimi duymak istiyorum.

Korkak senin


220
"Ah hayır, bu son sürüm değil, sadece birkaç gün içinde prototip ve test için hızlıca yazdığımız bir C # sürümü. Gereksinimleri anladığımızdan emin olmak ve Kullanıcı Arayüzünü ince ayar yapmak. ANSI C’de uygulamak Başka bir X hafta, çünkü, biliyorsunuz, tüm bu süslü veri yapılarına sahip olmamaya çalışmak zorundayız ... ... Evet, şimdi bahsettiğinize göre, C # sürümü son programın yapması gereken her şeyi yapıyor , ama siz söylediniz. ANSI C’de ihtiyacın var ... Tamam, ısrar edersen, bu versiyonda
kalalım

8
@Heinzi: Aynı deneyime sahip oldum: 2 gün içinde bir kütüphanenin C # prototipini yazmak ve birkaç haftalarını C'ye yeniden yazmakla harcadım. Neyse ki, bu projeden sonra başka bir ekibe daha fazla ekibe geçme şansı verildi. mantıklı dil seçimi.
dan04

49
Global değişkenler ve konular? Kullandığın programlama diline bakılmaksızın arkadaşımın başı belada.
Nemanja Trifunovic

16
Gerçekten ihtiyacınız olan argüman işinizi neden sürdürmeniz gerektiğidir.
epo

11
Varsayımınız yanlış - ANSI C neredeyse tüm projeler için yeterli . Bu yüzden bunca yıldan sonra hala popüler. En uygun olup olmadığı farklı bir sorudur.
Mark Ransom

Yanıtlar:


108

"O kadar eminim böyle yapmak Lütfen dikkat edin ben onu koruyabilirsiniz" aslında çok iyi bir gerekliliktir - En programlar çok daha uzun harcamak yazılı ve bilinen bir teknoloji bir çözüm tutmak genellikle iyi bir fikirdir olmaktan daha muhafaza edilir.

Sadece yeni bir bilgisayar çocuğunun bir C # uygulaması yazmanız istendiğinde Haskell'de iki gün içinde yazdığını ve “Hey, işe yarıyor, ben de güle güle” diyerek bakımını bırakıp bırakmadığını hayal edin.

Yeni bir bilgisayar çocuğunun 15 yıl önce bir ANSI C uygulaması yazması istendiğinde iki gün içinde Visual Basic 6'da yazıp bırakıp bırakmadığını hayal edin. Şimdi onu korumalısınız ve Windows 7, yükleme medyası yerleştirildiğinde şikayet etmeye başladı bile .

Bu, Heinzi'nin yorumlarına işaret ettiği gibi, "Bu, C # ile yazılmış çok hızlı bir prototiptir - C'ye çok benziyor - üretime hazır mı yoksa sizin gibi ANSI C'ye yeniden yerleştirelim mi?" diye sordum "ve ardından şimdi tartışmaya katılın. Görmek için gerçek bir kaynağa sahip olmak, "Hey, Haskell'deki bir sonraki başvurumuzu daha hızlı yapmamamız gerekmiyor mu" dan daha iyidir.

Başka bir deyişle - artık yeni bir platformun düşünülebileceğini gösterme fırsatınız var. Kod incelemesinden önce bir prototip yazdığınızdan emin olun - bu, radarın altında C # gizlice girmeye çalıştığınız izlenimini kaldırmanıza yardımcı olacaktır. ANSI C'de yazılmış tüm mevcut kodların C # içinden kullanılabileceğini göstermenizi öneririm. Şahsen, hedefin tek bir platformda kalmak için ANSI C olarak kaldığını söyleyeceğinize inanıyorum.


26
+1: "böyle yap, bu yüzden devam edebileceğime eminim" gerekliliğini belirtmek için. C # (genel olarak) geliştirmek için C'den çok daha kolay / daha hızlıdır, fakat C son 30 yılda C #, son 15 yılda değişenden daha az değişmiştir. Bu yüzden uzun yıllar boyunca korunması gereken bir ürün için C daha uygun olabilir. Tüm gereksinimler arasında bir uzlaşmaya varmanız gerekiyor: projenin karmaşıklığı (C # muhtemelen daha iyi bir seçimdir), uzun süreli bakım (C daha kararlı görünüyor), bakım yapacak kim, vb.
Giorgio

4
@Ramhound VB6 desteği hakkında değil, Visual Basic 6 geliştirme ortamını desteklemekten bahsediyorum . Windows 7 kopyasım, yükleme medyasını yerleştirirken bana bunun iyi bir fikir olmadığını açıkça söyledi.

12
İyi noktalar, fakat patron COBOL'da yazılmasını isterse? Veya 6502 montajı? Patronuna hangi noktada size diyebilirim anda, "Bu dil, bu amaç için kullanılmıyor ve bir kez sen gittikten olacak kimse sol bu şeyleri anlar"?
Karınca

6
@Alex: Tutarlılık güzel, gerçek. Bölümünüz tarafından yazılmış diğer tüm (web dışı) yazılımlar C de yazılmışsa, C'ye yeni bir web sistemi yazar mısınız? Bence yazdığınız sistem için takımın mevcut becerilerine karşı uygun teknolojileri seçmek arasında bir denge olduğunu düşünüyorum. Tartışmasız bir dil seçmek, çünkü her zaman kullandığınız şey zararlı olabilir.
Karınca

8
@ant, gruba ödeme yapan, müziği seçiyor. (ve biz bir COBOL dükkanıyız - bunu desteklemekte sorun yok)

35

Patronunuz bu durumda sizin müşteriniz gibi gözüküyor ve asıl gereksinimi, ilerlediğinizde uygulamayı devam ettirebilmesi. Bu oldukça makul görünüyor.

Bu yüzden seçim, istediğini yapmak veya gelişimini tamamlayabileceğinizi göstermek ve ona zaman kısıtlamaları dahilinde ve daha düşük bir maliyetle bir C # uygulamasını nasıl sürdüreceğini öğretmektir. Bunu yapamazsanız, projenin gereksinimlerini karşılamıyorsunuzdur.


21
OP, bildirim veya tartışma olmadan gereksinimleri açıkça görmezden geldi. Patronun ticari bir müşterisi olması durumunda ödemeyi reddedebilir ve muhtemelen boşa zaman harcadığı maliyetler için dava açabilirdi. Rolleri tersine çevirin; örneğin, ısmarlama bir elbise sipariş etseniz ve terzinin, istediği renkte sessizce yerine koyduğu kumaşla çalışmaktan hoşlanmadığını gördüyseniz? OP'nin şu anki sorunu, yakın gözetimsiz projelerle güvenilememesi, bariz bir şekilde insanların becerilerinden yoksun olması ve yönetime saygı duymamasıdır.
epo

1
@epo Bana sorulan şeyi yapmadıkları için patronun OP'ye güvenemeyeceği iddiasını anladığımı düşünüyorum. Ancak, eğer makul bir menajer ise, bu olmamalıydı. Dev yöneticiye ilk başta düşünülenden daha iyi bir çözümle yaklaştıysa, yöneticinin kendisine açık olacağını umardım. Örneğinizi biraz değiştirebilirsem, alıcı bir tür için sorulmasına rağmen istenenden daha yeni, daha dayanıklı, daha iyi bir his ve daha ucuz bir kumaş türü ile istenen renk / desende bir takım elbise dikmek gibidir. Aşina oldukları kumaştan.
Taylor Fiyatı

Söyleniyor, ayrıca, bu durumda, bakımın önemli bir gereklilik olduğuna katılıyorum. OP şimdi yöneticiye, yöneticinin gereksinimlerini diğer yöneticilerin hızlı ve etkin bir şekilde bakım yapmayı öğrenebilecekleri bir şekilde çözdüklerini ispatladıklarını kanıtlamaktadır.
Taylor Fiyatı

26

Çok fazla bilgi vermediniz, ancak bence kesinlikle C kesinlikle doğru seçim - Endüstriyel bir tesiste Mühendis olarak çalışıyorum ve kodumuzun çoğu (tümü değilse) C de yazıyor. bir cihaz (burada bir debimetre veya termokupl veya benzeri olduğunu varsayarım) ve bunu gerçek zamanlı C'ye yakın olarak göstermek mükemmel bir seçimdir.

Hızlı, taşınabilir (C # ile hiç yazmamıştım, ancak yüklü çerçevenin belirli bir sürümü olmadan çalıştığını sanmıyorum ve genellikle sadece Windows tabanlı).

Elbette, GUI'yi yapmak için başka bir dil kullanabilirsiniz. Ancak, çabalarınızı koruyabilir ve önceden var olan bir trend paketini kullanabilirsiniz (mevcut olan bazı açık kaynak kodlu paketler vardır).

Özetlemek gerekirse, donanımsal C ile altta yatan arayüzey için iyi bir seçim olduğunu söyleyebilirim.


7
C # kodunu Windows'tan Linux'a (Mono kullanarak) C ++ koduyla sahip olduğumdan daha fazla başardım.
dan04

8
@ dan04: C ++ ile hangi problemlerin vardı? C ++ 'ın oldukça taşınabilir olacağını düşündüm. Ayrıca, C ++ C değildir. GNU C kütüphanesi ile her zaman C'yi oldukça taşınabilir buldum, örneğin GNU Linux ve cygwin arasında.
Giorgio

4
@ dan04 C! = C ++.

2
@ Giorgio: Sinir bozucu derecede büyük bir kısmı teldi. Windows'a özgü tüm TCHARsaçmalıkları (sürekli olarak kullanmadığımız) ortadan kaldırmak zorunda kaldık ve UTF-8'i Linux geçişi ile aynı zamanda kullanan bir ekip standardını kabul ettik . Ne yazık ki, bu boost::nowide, o zamanlar bulunmayan Windows'taki standart kütüphanenin büyük bir kısmını tekrar uygulamak zorundaydı .
dan04

3
@ dan04: Söylediğim gibi, C kesinlikle C # (veya bu konuda C ++) kadar etkileyici değil, ancak 1997'den beri GNU C kütüphanesini ( gnu.org/software/libc ) kullanıyorum ve bu gerçekten kararlı ve taşınabilir. C ++ için Qt'a bakabilirim (veya destek ve standart kütüphanelere) çünkü bunlar oldukça taşınabilir. Mümkünse Windows'a özgü özelliklerden kaçınırdım: AFAIK, müşteri kilitlenmesi pazarlama stratejilerinin bir parçası olduğu için hiçbir zaman Microsoft'un taşınabilir yazılım üretme hedefi olmamıştı.
Giorgio

24

Ah hayatım. Bu gerçek zamanlı bir uygulamadır? Ekipmanı gerçek zamanlı olarak kontrol etmek mi? Gerçek zamanlı veri toplama? Bir çöp toplayıcı ile bir dil mi kullanıyorsunuz? Ah hayatım.

Uygulamayı daha az zamanda daha modern bir dilde yapabileceğinize katılıyorum, ancak bu muhtemelen en büyük kriter değil. PROGRAMINIZIN KOLAY OLMASI MESLEĞİ, patronunuzun belirttiği gibi diğer KRİTERLERİNDEN ÖNEMLİ, VEYA tepki süresi ve deterministik davranış gibi.

Sadece ana işlevselliği ve kullanıcı arayüzünü test etmek için C # veya Python'da bir prototip yapmanızı öneririm. Daha sonra, sürekli çalışmanın birçok günü boyunca uygulama çok fazla veriye çarptığında gerçek gecikmeleri ve yanıt sürelerini ölçerek haltını test edin. Muhtemelen, VM veya çöp toplayıcı devreye girdiğinde, uygulama çok yavaş olabilir veya rasgele zamanlarda geride kalabilir.

PROTOTİP olarak yaptıklarınızı sunmanızı öneriyorum.

C de kodlama o kadar zor değil. Eğer buna bağlı değilsen, söyle. Mücadeleye yetecek kadar insan var. (Şimdi, onlarca yıldır gerçek zamanlı C kodlaması yapıyorum).


3
İlk biti farklı ifade edelim. Ah hayatım. Bu gerçek zamanlı bir uygulamadır? Ekipmanı gerçek zamanlı olarak kontrol etmek mi? Gerçek zamanlı veri toplama? GERÇEK ZAMANLI BİR ÇEVRE YOK ÇALIŞMA? Ah hayatım. Cihaz sınırlarını geçtiğinizde daima örnekleme yapmak zorunda kalacaksınız. 'Gerçek zamanlı' samanlıklı bir argüman ve kötü tanımlanmış bir gerekliliktir. C # iyi.
Gusdor

Belli ki Joe Duffy'nin çalışmalarını duymamışsın . En az 2013'ten beri C # 'da Sistem programlama üzerinde çalışıyor . Roslyn derleyicisi, yerel kodda derlenebilir (UWP böyle çalışır) ve yaptığınız şeye dikkat ederseniz çöp toplama işlemi bir sorun değildir.
RubberDuck

14

Yapmanız gereken ilk şey patronunuza gidip savaşmak. Açıkça isteğini göz ardı ettiniz ve daha da kötüsü aylardır böyle yapıyorsunuz. Buna ne kadar vaktiniz kaldığını bilmiyorum, ancak projenin tamamlanması için ayrılan zamanın çoğunun, yeni bir iş aramaya başlayabileceğiniz gerçeğiyle yüzleşmek zorunda olduğunu varsayarak.

Bununla ne kadar çabuk ilgilenirsen o kadar iyi.

İkincisi, onu ANSI C'nin yetersiz olduğu konusunda ikna edebileceğinizi sanmıyorum, yapmanız gereken şey onu c # 'nın yeterli olduğu konusunda başka şeylere ikna etmek olduğu, (2) c #' yı (3) kolayca korumayı öğrenebileceği. ) o sen hala bu proje ile oynamak için bir iş ve parmağın var olduğunu varsayarsak C. bu konudan inadquate vardı, ben c ve c # arasındaki benzerlikleri vurgulayarak, 2 konsantre olur.

Yorumlara yanıt olarak alıntılar ...

Birkaç ay önce bir uygulama geliştirmeye başladık [...] Birkaç gün sonra her şeyi hurdaya çıkardım ve C # kullanarak yeniden başladım


Hiçbir yerde aylardır C # versiyonunu ürettiğinden bahsetmedi mi?
Anonim

1
@ Anonim - Yöneticilerinin talimatlarını takip edemediği hala günler veya aylar olduğu önemli değil. Yazar açıkça ANSI C'deki uygulamayı geliştirmek için gerekli becerilere sahip değildi.
Ramhound

1
@Ramhound - Yöneticisinin talimatlarını yerine getirmediği konusunda tartışmıyorum, sadece jmoerno'nun aylarca telaşa kapılmış gibi geçirdiğini söylüyor. Ayrıca, projeyi birkaç gün içinde bir araya getirmesi halinde, belirtilen daha istikrarlı C versiyonunun dayanabileceği bir çalışma prototipi görevi görmesi halinde mükemmel bir anlam ifade ediyor. Planlama aşamasının bir parçası.
Anonim

@jmoreno - Özür dilerim, soruyu yanlış anlamış olmalıyım.
Anonim

2
@jmoreno - Elbette. Son yorumumu, eklediğin teklifi gördükten sonra gönderdim. Bir kez daha özür dilerim.
Anonim

12

Bu uygulamayı ANSI C'de geliştirmemizi zorunlu kıldık. Bunun mantığı, zaman içinde olacak tek kişi olması ve bu yüzden ne yaptığımızı anlayabilmesi gerektiği.

Bu oldukça makul bir gerekliliktir.

Ayrıca soyut veri tipleri kullanmamamız gerektiğine hükmetti;

Bu mantıklı değil. Şimdi biraz şüpheli kokmaya başlıyor, çünkü bu bir program gereksinimi ve bir dil gereksinimi değil. Eğer kodun bakımı kolay, ADT uygulamak veya iyi test edilmiş kullanmak gerekiyorsa, önceden var olanları öncelikli yapmak gerekir.

kullanmamızı istediği küresel değişkenlerin (iç çekiş) adını gösteren bir liste bile verdi.

Tamam, şimdi kokuyor. Artık patronunuzun yalnızca çeşitli programlama dillerinden değil, genel olarak programlamadan da sınırlı bir deneyime sahip olduğunu söyleyebiliriz. Nitelikli bir deneyimli programcı, dil tercihi ne olursa olsun, asla böyle bir açıklama yapmaz. (Düşünebildiğim tek istisna, kodun çoğunun oldukça küçük bir gömülü sistemde çalıştırılması isteniyorsa ve bu nedenle de kod için gerekli tüm çalışma belleğinin önceden tahsis edilmesi bekleniyordu. bir ekran seviyesine sahip olması beklenmektedir. Ancak durumun böyle olmamasına karşı çıkmaktadır.

Patronunuzun büyük ölçekli, görev kritik yazılım projelerinde yer almadığını, ancak çeşitli düşük kaliteli projelerde yer aldığını tahmin ediyorum.

Yani bunun C programlama dili ile hiçbir ilgisi yoktur. C # dilinde de eşit derecede buzlu programları kolayca yazabilirsiniz. İyi program tasarımının dile bağlı olduğuna inanmak çok yaygın bir hatadır. Bu sadece doğru değil!

C # kesinlikle C'den daha güzel, daha temiz ve daha az belirsiz sözdizimine sahiptir. C'den çok daha fazla OO ile ilgili anahtar kelimeler içerdiğinden, pek çok program tasarım desteğine sahiptir, ancak bunun dışında programlarınızı nasıl yazacağınızı söylemez . C'de yazılmış her şeyin varsayılan olarak berbat olduğunu ve C # ile yazılmış her şeyin varsayılan olarak cennet olduğunu düşünüyorsanız, şu anda farkında olmadan C # programlarını yazdığınızı iddia ediyorum.

Önereceğim şey, her şeyden önce soyut, dilden bağımsız, ancak ayrıntılı bir program tasarımı yapmanızdır. Normal, nesne yönelimli yaklaşımı kullanın. Orada hangi nesneler var ve birbirleri arasında nasıl iletişim kuruyorlar, ihtiyaç duyulan bağımlılıklar vb. Nelerdir? Uygulamayı seçtiğiniz dil.


1
+1 "Kolayca eşit şekilde C # 'de programlarınızı yazabilirsiniz."
Javier

11

Ele almanız gereken ilk konu duygusal, irrasyonel bir konudur. BT endüstrisi sürekli değişim içindedir ve her şeyin yeri olmasına rağmen, değişimi iyileştirmeyi veya benimsemeyi reddetmek bir sorundur.

Patronun neden ANSI C'ye yapışıyor? Bildiği tek dil buysa, belki de değişim zamanı gelmiştir ancak rasyonel bir tartışma yetersiz olabilir. Bilmediğiniz bir dilde çalışmaya zorlanırsa patronunuz kendini değer kaybetmiş veya muhtemelen kovulacak mı? Sahip olduğu deneyimi ve getirdiği diğer yararları vurgulayın.

Bu sorunu çözmezseniz getirebileceğiniz tüm rasyonel argümanlar boşa harcanacaktır. Bir ast olarak, onunla bu tartışmayı yapabilen kişi olmayabilir. Belki de bu konuyu, varsa, diğer yöneticilerden birine vermek.

Ayrıca kendi bakış açınıza göre düşünün. Neden C # kullanmak istiyorsun? Bunun ne kadarı yeni ve havalı bir şey kullanma arzusudur? Kendine karşı dürüst ol. Bunu fark ederseniz, daha etkili bir şekilde tartışmanıza yardımcı olacaktır.

İkinci konu, risk ve maliyetlerden biri. Yazılım yazmak pahalıdır ve dil seçimi bunda önemli bir faktördür. Düşünmek:

  1. C # C'ye karşı C # yazması ne kadar sürer? Daha kolay nesne yönelimi ve daha iyi çöp toplama özelliği ile C # daha kolay olabilir. Ancak, uygulama çok sayıda yönetilmeyen API çağrısı kullanıyorsa, C daha kolay olabilir.
  2. C # kullanıyorsanız, ek araçlar satın almanız mı gerekiyor? Zaten Visual Studio kullanıyormuşsunuz gibi geliyor ancak yerelleştirme, kod inceleme ve analiz, hata ayıklama vb. İçin ek araçlara mı ihtiyacınız var?
  3. Bakımı ne kadar kolaydır? Bir hata bulursanız, ne kadar çabuk giderilebilir. C # bu nesne yönünü azaltabilir. Otomatik çöp toplama işlemi ayrıca bellek sızıntısı ve işaretçi sorunlarının çoğunu da önler.
  4. Desteklemesi ne kadar kolaydır? Destek personeliniz varsa, bir çarpma çöplüğünün nasıl okunacağını biliyor olabilirler ancak SOS ile windbg'nin nasıl kullanılacağını biliyorlar mı? Hedef makinelerin hali hazırda kurulu olan .NET Framework'ün uygun bir sürümü var mı?
  5. Personel almayı düşünün. Kaç kişi C'yi C # ile tanıyor? Eğer ikinizden biri veya her ikisi de organizasyondan ayrılsaydı, sizi değiştirmek ne kadar kolay olurdu? C geliştiricileri, C # geliştiricilerinden daha mı ucuz veya daha mı pahalı?

Devam edebilirdim, ama mesele, sadece dillerin teknik özelliklerine değinmekten vazgeçmektir. Teknik değerler sadece sizin ve patronunuzun anladığı şeyler. Ticari etkiden bahsetmeye başlarsanız, çok daha geniş bir insan grubunu çeker ve çok daha ikna edici bir tartışma yaparsınız.

Belki C daha iyi bir seçimdir. C #, tüm durumlar için otomatik olarak daha iyi değildir. Belki bu projeyi C kullanarak yaparsınız, fakat bir sonraki proje için C # konsept kanıtı yaparsınız. Unutma ki savaşı kaybedebilirsin ama yine de savaşı kazan.


5
C # 'nın varsayılan olarak ANSI C' den daha iyi bir seçim olduğu fikrine katılmıyorum. Örneğin, platformdan bağımsız kalmak istiyorsanız, C # büyük olasılıkla kötü bir seçimdir.

@ ThorbjørnRavnAndersen Katılıyorum. Lütfen son paragrafa bakınız. Ayrıca yönetilmeyen kodu çağırmak gibi durumlardan da söz ediyorum. Platformdaki bağımsızlığın OP'deki C #'yı hariç tutacağını farz ediyorum. Belki de bu yanlış bir varsayımdır.
akton

1
Platform bağımsızlığı sadece bir olası nedendi. "ANSI C'ye sarılmak" gibi ifadeler, bence bir önyargıya işaret ediyor.

@akton - Ne zamandan beri yönetilmeyen kodu C # dan arayamazsınız. Tabii ki bir sarıcı gerektirir ve buna ilave bir destek problemi getirir, ancak mümkündür. Ayrıca isterseniz çoklu platformlarda C # destekleyebilirsiniz. Mono, her büyük masaüstü platformunda destek (OS X, Windows ve Linux). Microsoft Windows tabanlı. Tabi ki bu durumda yapılması pek mümkün değildir.
Ramhound

@Ramhound Yönetilmeyen kodları C # 'dan çağıramazsınız demedim, sadece bu kadarı acı olabilir. Benzer şekilde, C # 'da platformlar arası geliştirme yapabilirsiniz, ancak Thorbjorn'un dediği gibi C neredeyse evrenseldir.
akton

7

Belki başka bir argüman: Muhtemelen, hata yapmadan C kodu yazmak için yeterli deneyime sahip bilgisayar bilimi öğrencileri bulmak çok zordur. ANSI C, insanların bugün öğrendiği ilk şey değil.

Şimdi tüm bilgisayar bilimi öğrencileri beni öldürecek.


ANSI C aslında üniversitede öğrendiğim ilk şeylerden biriydi. 2004 yılında başladım. Bu yüzden son 10 yıl içinde hala öğretiliyordu. Geç saatlerde SSH ile Unix ortamına bağlanarak kodumu derlemeye çalıştım.
Ramhound

1
Komik, üniversitedeki son yıla kadar ANSI C öğrenmedim. İlk öğretilen dil Pascal'dı, bu yüzden ben korunuyorum ...
tehnyit

Burada yeni mezun; Hem C hem de C ++ 'a maruz kaldık, ancak C gömülü bir bağlamdaydı ve minimaldi. Her ikisi de son yılımdaydı - bundan önce tamamen C # ve Java.
Ross,

2
C sadece doğru programlamanın zor olması muhtemelen C kullanımına karşı en iyi noktadır
Paul Nathan

7

Bizi ANSI C'nin yetersiz olduğuna ikna edemedin. C, tarif ettiğiniz görevlere uyarlanmış mükemmel bir dildir. Görevin kısa açıklamasıyla (dil gereksinimi hariç), C (veya belki de gitmeyi) de tavsiye ederim.

Sanırım sorun şu ki, C # ile düşündüğünüzde C ile programlama yapıyorsunuz. Perl'den C'ye veya java'ya geçtiğimde de benzer bir problemim var. Dile adapte olmayı öğrenmelisiniz ve düşünme tarzınızdan günün diline çevirmeyi öğrenmemelisiniz.

Sorun patronunuz ya da C dili değil, sorun zihninizi farklı düşünme yollarına açmak. Programlama dilini değiştirmek size fayda sağlayacak bir şeydir.


4
Stack Exchange Programcılar hakkındaki ilk sorunuza cevap verdiğiniz için teşekkür ederiz. Ancak, “tamamen başarısız oldunuz”, “sorun fikrinizi açmak” gibi ifadeleri kullanmayarak gelecek cevaplarınızı biraz daha az kişiselleştirmek isteyebilirsiniz. Lütfen SSS programmers.stackexchange.com/faq#etiquette adresini inceleyin . Tarafsız bir dille amacınızı iyi tanımlayabileceğinizi düşünüyorum.
GeliştiriciDon

2

Öncelikle, patronuna şimdi farklı bir dilde olduğunu söylemelisin. İhtiyaç duymadan, amaçlara karşı bilerek herhangi bir şeyi geri getirmezseniz, sinirlenir (anlaşılır şekilde).

Şimdi, bunları patronlara / yöneticilere anlatmanın en iyi yolu zaman ve para olarak ifade etmektir. Böyle bir projenin ANSI C'de ne kadar zaman alacağını tahmin edin ve sonra C # gibi daha yüksek bir seviyede ne kadar zaman alacağını tahmin edin. Not Modern değil, daha yüksek seviye dedim. Bu, işleri düzeltmeye de yardımcı olabilir. Demek istediğim, bir odayı sadece küçük bir boya fırçasıyla boyamak istemezsiniz, her bir darbeyi (kod satırı) projenin daha fazla alanını kaplayan rulolar ve başka şeyler kullanırsınız. Ayrıca, siz veya ekip üyelerinizden biri C'yi tanımıyorsanız veya C'de büyük bir proje yapmakta rahatsanız, bu zaman konusuna daha fazla yer, çünkü daha da hızlanmak zorunda kalacaklar.

Aynı zamanda patronun mikro yönetmeye çalışıyor gibi görünüyor. Eminim diğer cevaplardan biri patronunun bunu daha az yapmasını nasıl sağladığını açıklamaya çalışacaktır.


Satın alınabilirlik olası bir argüman gibi görünüyor. (@ MatthewFlynn önerisi başına bir müşteri gibi) patron o programı göze alamaz savunuyor ederken değil C ile yazılmış olan, OP patron da programın varlık ile ilişkili uygulama ve bakım maliyetlerini göze mümkün olmayacağını iddia edebilir C ile yazılmıştır. Her iki durumda da, olayların gerçekleşmesi için uzlaşmalara ihtiyaç vardır.
rwong

1

Denetçinin ADT'lere karşı isteksizliği, devin GC maliyetlerinin farkında olmadığının görülmesi gibi başka bir yerde ele alındı, bu yüzden "konulara" odaklanacağım.

Belki de .NET (veya JVM, bu şekilde belirtilmişse) iş parçacığı açısından düşünmek yerine, istediğiniz şey, aralarında iletişim kurmak için bazı süreçler arası iletişim (IPC) mekanizmasını kullanarak çoklu işlemlerdir. Eg - windows mesajları, paylaşılan hafıza, hafıza eşlenmiş dosya tamponu, boru adı verilen herhangi bir şekilde. Küçük işlemleri, bir cihazla veya cihazın bir yönü ile etkileşime girmeye ve güncellemeleri iletmek ve istekleri kabul etmek için IPC'yi kontrol etmeye ve GUI'yi korumak ve seçtiğiniz IPC'yi kullanarak ekipmanı "monitörler" ile iletişim kurmak için biraz daha büyük bir sürece sahip olun.

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.