Bagaimana saya bisa meyakinkan bos saya bahwa ANSI C tidak memadai untuk proyek baru kami? [Tutup]

64

Beberapa bulan yang lalu, kami mulai mengembangkan aplikasi untuk mengontrol peralatan uji yang dikembangkan sendiri dan merekam serangkaian pengukuran. Seharusnya memiliki UI sederhana, dan kemungkinan akan memerlukan utas karena perekaman berkelanjutan yang harus dilakukan. Aplikasi ini akan digunakan selama beberapa tahun, dan akan dikelola oleh sejumlah mahasiswa ilmu komputer selama periode ini.

Bos kami lulus sekitar 30 tahun yang lalu (tidak dianggap sebagai pelanggaran; saya memiliki lebih dari setengah waktu di punggung saya juga) dan telah mengamanatkan bahwa kami mengembangkan aplikasi ini dalam ANSI C. Alasannya adalah bahwa ia adalah satu-satunya yang akan ada di sekitar sepanjang waktu, dan karena itu dia harus dapat memahami apa yang kita lakukan. Dia juga memutuskan bahwa kita tidak boleh menggunakan tipe data abstrak; dia bahkan memberi kami daftar dengan nama variabel global (desahan) yang dia ingin kita gunakan.

Saya benar-benar mencoba pendekatan itu untuk sementara waktu, tetapi itu benar-benar memperlambat saya untuk memastikan bahwa semua operasi pointer aman dan semua string memiliki ukuran yang benar. Selain itu, jumlah baris kode yang benar-benar terkait dengan masalah yang ada hanya sebagian kecil dari basis kode kami. Setelah beberapa hari, saya membatalkan semuanya dan mulai menggunakan C #. Bos kami sudah melihat program berjalan dan dia suka cara kerjanya, tetapi dia tidak tahu bahwa itu ditulis dalam bahasa lain.

Minggu depan kita berdua akan bertemu untuk membahas kode sumber, sehingga dia "akan tahu bagaimana mempertahankannya". Saya agak takut, dan saya ingin mendengar dari kalian argumen apa yang bisa saya gunakan untuk mendukung keputusan saya.

Milikmu pengecut,

Rick
sumber
220
"Oh, tidak, ini bukan versi final, ini hanya versi C # yang kami cepat tulis dalam beberapa hari untuk pembuatan prototipe dan pengujian, untuk memastikan kami memahami persyaratan dan menyempurnakan UI. Menerapkan ini dalam ANSI C akan mengambil minggu X lain, karena, kau tahu, kita harus bekerja di sekitar tidak memiliki semua struktur data mewah. ... Well, ya, sekarang yang Anda sebutkan itu, versi C # tidak sudah melakukan segala program akhir harus, tapi Anda mengatakan Anda membutuhkannya di ANSI C. ... OK, jika Anda bersikeras, mari kita tetap dengan versi ini ... "
Heinzi
8
@Heinzi: Saya memiliki pengalaman yang sama: Menulis prototipe C # perpustakaan dalam 2 hari, dan menghabiskan beberapa minggu menulisnya dalam C. Untungnya, setelah proyek itu, saya ditawari kesempatan untuk mentransfer ke tim lain dengan yang lebih pilihan bahasa yang masuk akal.
dan04
49
Variabel dan utas global? Anda dalam masalah, teman saya, terlepas dari bahasa pemrograman yang Anda gunakan.
Nemanja Trifunovic
16
Argumen yang benar-benar Anda butuhkan adalah mengapa Anda harus mempertahankan pekerjaan Anda.
epo
11
Asumsi Anda salah - ANSI C memadai untuk hampir semua proyek. Itu sebabnya masih populer setelah bertahun-tahun. Apakah itu optimal atau tidak, adalah pertanyaan yang berbeda.
Mark Ransom

Jawaban:

108

Perhatikan bahwa "Tolong lakukan seperti ini jadi saya yakin saya bisa memeliharanya" sebenarnya merupakan persyaratan yang sangat baik - sebagian besar program menghabiskan lebih lama dipertahankan daripada ditulis dan menjaga solusi dalam teknologi yang dikenal biasanya merupakan ide yang baik.

Bayangkan saja jika beberapa anak komputer baru ketika diminta untuk menulis aplikasi C # menulisnya di Haskell dalam dua hari dan berkata, "Hei, itu bekerja dan saya pergi, sampai jumpa" meninggalkan pemeliharaan pada Anda.

Bayangkan saja jika beberapa anak komputer baru ketika diminta untuk menulis aplikasi ANSI C 15 tahun yang lalu telah menulisnya dalam Visual Basic 6 dalam dua hari dan meninggalkannya. Sekarang Anda harus memeliharanya dan Windows 7 mulai mengeluh ketika media instalasi dimasukkan .

Ini mungkin kesempatan yang baik untuk mengatakan - seperti Heinzi mengisyaratkan dalam komentar - bahwa "ini adalah prototipe cepat yang ditulis dalam C # yang kebetulan terlihat sangat mirip dengan C - akankah kita membuatnya produksi siap, atau menerapkannya kembali dalam ANSI C seperti Anda bertanya ", dan kemudian berdiskusi sekarang. Memiliki sumber aktual untuk dilihat, jauh lebih baik daripada "Hei, seharusnya kita tidak menulis aplikasi kita berikutnya di Haskell karena lebih cepat".

Dengan kata lain - Anda sekarang memiliki kesempatan untuk menunjukkan bahwa platform baru dapat dipertimbangkan. Tampilkan bahwa Anda menulis prototipe sebelum ulasan kode - ini akan membantu menghilangkan kesan bahwa Anda mencoba menyelinap C # di bawah radar. Saya menyarankan Anda juga menunjukkan bahwa semua kode yang ada yang ditulis dalam ANSI C dapat digunakan dari dalam C #. Secara pribadi saya percaya Anda akan diberitahu bahwa target tetap ANSI C untuk tetap dalam satu platform.


sumber
26
+1: untuk menunjukkan persyaratan "lakukan seperti ini jadi saya yakin saya bisa memeliharanya". C # jelas jauh lebih mudah / lebih cepat daripada C untuk berkembang (secara umum), tetapi C telah berubah dalam 30 tahun terakhir kurang dari C # telah berubah dalam 15 tahun terakhir. Jadi untuk produk yang harus dipertahankan selama bertahun-tahun C bisa lebih cocok. Anda harus berkompromi antara semua persyaratan: kompleksitas proyek (C # mungkin merupakan pilihan yang lebih baik), pemeliharaan jangka panjang (C tampaknya lebih stabil), siapa yang akan melakukan pemeliharaan, dll.
Giorgio
4
@Ramhound Saya tidak berbicara tentang dukungan VB6, tetapi tentang mendukung lingkungan pengembangan Visual Basic 6 . Salinan Windows 7 saya secara eksplisit memberi tahu saya ketika memasukkan media instalasi bahwa ini bukan ide yang baik.
12
Poin bagus, tapi bagaimana jika bos memintanya ditulis dalam COBOL? Atau 6502 perakitan? Pada titik mana Anda dapat mengatakan kepada bos Anda, "Bahasa itu usang untuk tujuan ini, dan begitu Anda pergi, tidak akan ada lagi yang mengerti hal ini"?
Semut
6
@ Alex: Konsistensi bagus, benar. Tetapi apakah Anda akan menulis sistem web baru dalam C jika semua perangkat lunak (non-web) lainnya yang ditulis oleh departemen Anda ditulis dalam C? Saya pikir itu menjadi keseimbangan antara memilih teknologi yang tepat untuk sistem yang Anda tulis versus keterampilan tim yang ada. Memilih bahasa tanpa pertimbangan karena itulah yang selalu Anda gunakan bisa merugikan.
Semut
8
@ant, orang yang membayar band bisa memilih musik. (dan kami adalah toko COBOL - tidak ada masalah yang mendukung itu)
35

Bos Anda tampaknya menjadi pelanggan Anda dalam hal ini, dan persyaratan utamanya adalah bahwa ia dapat mempertahankan aplikasi saat Anda pindah. Ini sepertinya masuk akal.

Jadi, pilihannya adalah melakukan apa yang dia minta, atau menunjukkan bahwa Anda dapat menyelesaikan pengembangan DAN mengajarinya cara memelihara aplikasi C # dalam batasan waktu dan biaya yang lebih rendah. Jika Anda tidak dapat melakukan itu, Anda tidak memenuhi persyaratan proyek.

Matthew Flynn
sumber
21
OP secara eksplisit mengabaikan persyaratan tanpa pemberitahuan atau diskusi. Seandainya bos itu pelanggan komersial, ia bisa menolak pembayaran dan mungkin menuntut biaya yang timbul karena waktu yang terbuang. Membalikkan peran, bagaimana jika Anda misalnya memesan setelan dipesan lebih dahulu dan menemukan penjahit tidak suka bekerja dengan kain yang Anda tentukan secara diam-diam menggantikan yang ia sukai, dalam pilihan warna? Masalah OP sekarang adalah bahwa ia tidak dapat dipercaya dengan proyek tanpa pengawasan ketat, terbukti tidak memiliki keterampilan orang dan tidak menghormati manajemen.
epo
1
@epo Saya yakin saya mengerti pernyataan Anda bahwa bos tidak bisa mempercayai OP karena mereka tidak melakukan apa yang diminta. Namun, jika dia manajer yang masuk akal, itu seharusnya tidak terjadi. Jika dev mendekati manajer dengan solusi yang lebih baik dari yang diperkirakan, saya berharap manajer akan terbuka untuknya. Jika saya dapat sedikit memodifikasi contoh Anda, itu seperti penjahit yang membuat setelan dalam warna / pola yang diinginkan dengan jenis kain yang lebih baru, lebih tahan lama, lebih baik, dan lebih murah daripada yang diminta meskipun pembeli meminta jenis. kain yang mereka kenal.
Taylor Price
Karena itu, saya juga setuju bahwa, dalam hal ini, pemeliharaan adalah persyaratan penting. OP sekarang terikat untuk membuktikan kepada manajer bahwa mereka menyelesaikan sisa persyaratan dengan cara yang dapat dengan cepat dan efektif dipelajari oleh manajer untuk dipelihara.
Taylor Price
26

Anda belum memberikan banyak info tetapi saya pikir C benar-benar pilihan yang tepat - saya bekerja sebagai Insinyur di pabrik industri dan sebagian besar (jika tidak semua) kode kami ditulis dalam C. Jika Anda perlu mendapatkan pengukuran dari perangkat (Saya mengasumsikan flow meter atau termokopel atau serupa di sini) dan menampilkannya di dekat ke realtime C adalah pilihan yang sangat baik.

Ini cepat, portabel (saya tidak pernah menulis dalam C # tapi saya tidak berpikir itu berfungsi tanpa versi tertentu dari kerangka kerja yang diinstal dan biasanya hanya berbasis windows).

Dengan segala cara Anda bisa menggunakan bahasa lain untuk melakukan GUI. Tetapi Anda bisa menghemat usaha dan hanya menggunakan paket trending yang sudah ada sebelumnya (ada beberapa yang tersedia opensource yang baik).

Untuk meringkas saya akan mengatakan untuk antarmuka yang mendasari dengan bagian perangkat keras C adalah pilihan yang baik.

Mat
sumber
7
Saya sudah lebih sukses porting kode C # dari Windows ke Linux (menggunakan Mono) daripada yang saya miliki dengan kode C ++.
dan04
8
@ dan04: Masalah apa yang Anda miliki dengan C ++? Saya pikir C ++ akan sangat portabel. Juga, C ++ bukan C. Saya selalu menemukan menggunakan C dengan GNU C library yang cukup portabel, misalnya antara GNU Linux dan cygwin.
Giorgio
4
@ dan04 C! = C ++.
2
@Iorgio: Bagian yang sangat mengganggu adalah string. Kami harus mengeluarkan semua TCHARomong kosong khusus Windows (yang tidak kami gunakan secara konsisten pula) dan mengadopsi standar tim menggunakan UTF-8 pada saat yang sama dengan transisi Linux. Sayangnya, ini membutuhkan penerapan kembali sebagian besar pustaka standar pada Windows, yang boost::nowidebelum ada pada saat itu.
dan04
3
@ dan04: Seperti yang dikatakan, C tentu tidak se ekspresif C # (atau C ++ dalam hal ini), tapi saya telah menggunakan perpustakaan GNU C ( gnu.org/software/libc ) sejak 1997 dan itu benar-benar stabil dan portabel. Untuk C ++ saya akan melihat Qt (atau dorongan dan pustaka standar) karena mereka cukup portabel. Saya akan menghindari hal-hal khusus Windows jika mungkin: AFAIK tidak pernah menjadi tujuan Microsoft untuk menghasilkan perangkat lunak portabel karena penguncian pelanggan adalah bagian dari strategi pemasaran mereka.
Giorgio
24

Oh sayang. Ini adalah aplikasi real-time? Mengontrol peralatan secara langsung? Mengumpulkan data secara real-time? Menggunakan bahasa dengan pemulung? Oh sayang.

Meskipun saya setuju bahwa Anda mungkin dapat melakukan aplikasi dalam bahasa yang lebih modern dalam waktu yang lebih singkat, itu mungkin bukan kriteria utama. MUDAH PEMROGRAMAN ANDA MUNGKIN BANYAK KURANG PENTING DARI KRITERIA LAINNYA, seperti yang ditetapkan atasan Anda, DAN waktu respons, dan perilaku deterministik.

Saya akan menyarankan Anda melakukan prototipe dalam C # atau Python, hanya untuk menguji fungsi utama dan UI. LALU menguji hal itu, mengukur latensi aktual dan waktu respons, ketika aplikasi mendapatkan banyak data, selama beberapa hari berjalan terus menerus. Kemungkinannya, aplikasi tersebut bisa menjadi terlalu lambat atau tertinggal secara acak, ketika VM atau pengumpul sampah masuk.

Saya sarankan Anda menyajikan apa yang telah Anda lakukan sebagai PROTOTIPE.

Pengodean dalam C tidak terlalu sulit. Jika Anda tidak sanggup melakukannya, katakan demikian. Ada banyak dari kita yang siap menghadapi tantangan. (Saya telah melakukan coding C real-time untuk, argh, dekade sekarang).

Gumpy Gus
sumber
3
Memungkinkan frasa pertama sedikit berbeda. Oh sayang. Ini adalah aplikasi real-time? Mengontrol peralatan secara langsung? Mengumpulkan data secara real-time? MENJALANKAN LINGKUNGAN YANG TIDAK REALTIMAL? Oh sayang. Anda akan selalu harus mengambil sampel saat melewati batas perangkat. 'Waktu nyata' adalah argumen orang bodoh dan persyaratan yang tidak jelas. C # baik-baik saja.
Gusdor
Anda jelas tidak pernah mendengar karya Joe Duffy . Dia telah bekerja pada pemrograman Sistem di C # sejak setidaknya 2013 . Kompiler Roslyn dapat dikompilasi menjadi kode asli (itulah cara kerja UWP) dan pengumpulan sampah tidak menjadi masalah jika Anda memperhatikan apa yang Anda lakukan.
RubberDuck
14

Nah, hal pertama yang harus dilakukan adalah pergi ke bos Anda dan mengaku. Anda telah mengabaikan permintaannya yang jelas, dan lebih buruk telah melakukannya selama berbulan-bulan. Saya tidak tahu berapa banyak waktu yang Anda miliki dalam hal ini, tetapi dengan asumsi bahwa sebagian besar waktu yang dialokasikan untuk menyelesaikan proyek, Anda harus berhadapan dengan kenyataan bahwa Anda mungkin akan segera mencari pekerjaan baru.

Semakin cepat Anda berurusan dengan ini, semakin baik.

Kedua, saya tidak berpikir Anda dapat meyakinkannya bahwa ANSI C tidak memadai, yang perlu Anda lakukan adalah meyakinkannya tentang beberapa hal lain (1) bahwa c # memadai, (2) ia dapat dengan mudah belajar mempertahankan c #, (3) ) bahwa Anda tidak cukup untuk menulisnya dalam C. Dengan asumsi bahwa Anda masih memiliki pekerjaan dan bagian untuk bermain dengan proyek ini, saya akan berkonsentrasi pada 2, menekankan kesamaan antara c dan c #.

Kutipan dalam menanggapi komentar ...

Beberapa bulan yang lalu, kami mulai mengembangkan aplikasi [...] Setelah beberapa hari, saya membatalkan semuanya dan mulai menggunakan C #

jmoreno
sumber
Di mana pun dia tidak menyebutkan bahwa dia telah membangun versi C # selama berbulan-bulan?
Anonim
1
@ Anonim - Tidak masalah apakah masih berhari-hari atau berbulan-bulan ia masih TIDAK mengikuti instruksi manajernya. Penulis jelas tidak memiliki keterampilan yang diperlukan untuk mengembangkan aplikasi dalam ANSI C.
Ramhound
1
@Ramhound - Saya tidak membantah bahwa dia tidak mengikuti instruksi manajernya, saya hanya mengatakan bahwa jmoerno bermesraan seolah-olah dia menghabiskan waktu berbulan-bulan untuk bersinggungan. Selain itu, jika ia menyatukan proyek bersama dalam beberapa hari untuk berfungsi sebagai prototipe yang berfungsi di mana versi C yang lebih stabil ditentukan dapat didasarkan pada maka itu masuk akal. Itu bagian dari tahap perencanaan.
Anonim
@ jmoreno - Maaf, saya pasti salah membaca pertanyaan.
Anonim
2
@jmoreno - Tentu saja. Saya memposting komentar terakhir saya setelah melihat kutipan yang Anda tambahkan. Sekali lagi permintaan maaf.
Anonim
12

telah mengamanatkan bahwa kami mengembangkan aplikasi ini dalam ANSI C. Alasannya adalah ia satu-satunya yang akan ada sepanjang waktu, dan oleh karena itu ia harus dapat memahami apa yang kami lakukan.

Ini adalah persyaratan yang cukup masuk akal.

Dia juga memutuskan bahwa kita tidak boleh menggunakan tipe data abstrak;

Ini tidak masuk akal. Sekarang mulai berbau agak mencurigakan, karena ini adalah persyaratan desain program dan bukan persyaratan bahasa. Jika kode harus mudah dipelihara, menerapkan ADT atau menggunakan yang sudah teruji, yang sudah ada harus menjadi prioritas.

dia bahkan memberi kami daftar dengan nama variabel global (desahan) yang dia ingin kita gunakan.

Ok, jadi sekarang bau. Sekarang kami dapat mengatakan bahwa atasan Anda memiliki pengalaman yang terbatas tidak hanya dari berbagai bahasa pemrograman, tetapi dari pemrograman secara umum. Seorang programmer veteran yang terampil, tidak peduli preferensi bahasa, tidak akan pernah membuat pernyataan seperti itu. (Satu-satunya pengecualian yang dapat saya pikirkan adalah jika sebagian besar kode dimaksudkan untuk berjalan pada sistem tertanam yang cukup kecil, dan oleh karena itu semua memori kerja yang diperlukan untuk kode diharapkan akan dialokasikan sebelumnya. Gagasan bahwa kode yang sama diharapkan memiliki UI tingkat layar yang sangat menentang hal ini terjadi).

Saya menduga bos Anda tidak pernah terlibat dalam proyek perangkat lunak mission mission skala besar, tetapi ia lebih cenderung bekerja dalam berbagai proyek berkualitas rendah.

Jadi ini tidak ada hubungannya dengan bahasa pemrograman C. Anda dapat dengan mudah menulis program yang sama menjijikkan di C # juga. Adalah kesalahan yang sangat umum untuk percaya bahwa desain program yang baik tergantung pada bahasanya. Itu tidak benar!

C # tentu saja memiliki sintaksis yang lebih cantik, lebih bersih, dan kurang jelas daripada C. C # memiliki banyak dukungan desain program, karena memiliki jauh lebih banyak kata kunci yang berhubungan dengan OO daripada C. Tetapi selain itu, C # tidak memberi tahu Anda cara menulis program. Jika Anda percaya bahwa semua yang ditulis dalam C adalah buruk secara default dan semua yang ditulis dalam C # adalah surga secara default, saya yakin Anda saat ini menulis program C # yang agak mengerikan tanpa menyadarinya.

Apa yang saya sarankan adalah Anda membuat desain program yang abstrak, tidak tergantung bahasa, tetapi terperinci sebelum hal lainnya. Gunakan pendekatan normal, berorientasi objek. Objek apa yang ada di sana dan bagaimana mereka berkomunikasi antara satu sama lain, apa saja dependensi yang dibutuhkan dll. Ketika Anda telah memberikan pemikiran desain program yang cukup dan menuliskannya di atas kertas, itu tidak akan menjadi masalah bagi Anda atau bos Anda yang bahasa yang Anda pilih untuk mengimplementasikannya.

Komunitas
sumber
1
+1 untuk "Anda dapat dengan mudah menulis program yang sama menjijikkan di C # juga."
Javier
11

Masalah pertama yang harus Anda tangani adalah masalah emosional dan irasional. Industri TI adalah satu dalam perubahan konstan dan, meskipun ada tempat untuk semuanya, menolak untuk meningkatkan atau merangkul perubahan adalah masalah.

Mengapa bos Anda berpegang teguh pada ANSI C? Jika itu adalah satu-satunya bahasa yang diketahuinya, mungkin sekarang saatnya untuk perubahan tetapi argumen rasional mungkin tidak cukup. Apakah atasan Anda merasa diremehkan atau mungkin dipecat jika dipaksa bekerja dalam bahasa yang tidak dikenal? Tekankan pengalaman yang dia miliki dan manfaat lain yang dia bawa.

Jika Anda tidak menyelesaikan masalah ini, semua argumen rasional yang dapat Anda bawa akan sia-sia. Sebagai bawahan, Anda mungkin bukan orang yang bisa berdiskusi dengannya. Mungkin membicarakan hal ini dengan salah satu manajer lain, jika ada.

Pertimbangkan juga dari sudut pandang Anda. Mengapa Anda ingin menggunakan C #? Berapa banyak dari ini keinginan untuk menggunakan sesuatu yang baru dan keren? Jujurlah pada dirimu sendiri. Jika Anda mengenali ini, itu akan membantu Anda berdebat dengan lebih efektif.

Masalah kedua adalah risiko dan biaya. Menulis perangkat lunak itu mahal dan pilihan bahasa adalah faktor utama dalam hal itu. Mempertimbangkan:

  1. Berapa lama untuk menulis dalam C # versus C? Dengan orientasi objek yang lebih mudah dan pengumpulan sampah yang lebih baik, C # mungkin lebih mudah. Namun, jika aplikasi menggunakan banyak panggilan API yang tidak dikelola, C mungkin lebih mudah.
  2. Jika Anda menggunakan C #, apakah Anda perlu membeli alat tambahan? Kedengarannya seperti Anda sudah menggunakan Visual Studio tetapi apakah Anda memerlukan alat tambahan untuk pelokalan, tinjauan dan analisis kode, debugging dan sebagainya?
  3. Seberapa mudah perawatannya? Jika Anda menemukan bug, seberapa cepat ia dapat diperbaiki. C # dapat mengurangi orientasi objek ini. Pengumpulan sampah otomatis juga menghindari sebagian besar masalah kebocoran memori dan penunjuk.
  4. Seberapa mudah untuk mendukung? Jika Anda memiliki staf pendukung, mereka mungkin tahu cara membaca crash dump tetapi apakah mereka tahu cara menggunakan windbg dengan SOS? Apakah mesin target sudah memiliki versi kerangka kerja .Net yang diinstal?
  5. Pertimbangkan staf. Berapa banyak orang yang tahu C versus C #? Jika salah satu atau Anda berdua meninggalkan organisasi, betapa mudahnya untuk menggantikan Anda? Apakah pengembang C lebih murah atau lebih mahal daripada pengembang C #?

Saya bisa terus tetapi intinya adalah berhenti berdebat tentang manfaat teknis dari bahasa saja. Manfaat teknis adalah hal-hal yang hanya Anda dan atasan Anda mengerti. Jika Anda mulai membicarakan dampak bisnis, Anda menarik sekelompok orang yang jauh lebih luas dan membuat argumen yang jauh lebih meyakinkan.

Mungkin C adalah pilihan yang lebih baik. C # tidak secara otomatis lebih baik untuk semua situasi. Mungkin Anda melakukan proyek ini menggunakan C tetapi melakukan bukti konsep C # untuk yang berikutnya. Ingat Anda bisa kalah dalam pertempuran tetapi tetap memenangkan perang juga.

akton
sumber
5
Saya tidak setuju dengan asumsi implisit bahwa C # secara default adalah pilihan yang lebih baik daripada ANSI C. Sebagai contoh jika Anda ingin tetap independen platform C # kemungkinan besar merupakan pilihan yang buruk.
@ ThorbjørnRavnAndersen Saya setuju. Silakan lihat paragraf terakhir. Saya juga menyebutkan kasus-kasus seperti memanggil kode yang tidak dikelola. Saya berasumsi bahwa independensi platform akan mengecualikan C # di OP. Mungkin ini anggapan yang salah.
akton
1
Kemandirian platform hanyalah salah satu alasan yang mungkin. Tulisan seperti "melekat pada ANSI C" memang - menurut saya - menunjukkan bias.
@akton - Sejak kapan Anda tidak dapat memanggil kode yang tidak dikelola dari C #. Tentu saja itu membutuhkan pembungkus dan yang memperkenalkan masalah dukungan tambahan tetapi itu mungkin. Selanjutnya Anda dapat mendukung C # pada multi-platform jika Anda mau. Mono mendukung semua platform desktop utama (OS X, Windows, dan Linux). Diberikan sebagai .NET Framework berbasis Microsoft Windows memajukan basis fitur Mono tidak akan cocok persis (yang sudah terjadi dengan WPF) dan tentu saja Anda tidak akan dapat mengembangkan aplikasi Metro yang berjalan di Linux. Tentu saja hal itu tidak mungkin dilakukan dalam kasus ini.
Ramhound
@Ramhound Saya tidak mengatakan Anda tidak dapat memanggil kode yang tidak dikelola dari C #, hanya saja banyak yang bisa menyebalkan. Demikian pula, Anda dapat melakukan pengembangan lintas platform dalam C # tetapi C hampir universal, seperti kata Thorbjorn.
akton
7

Mungkin argumen lain: Mungkin sangat sulit untuk menemukan siswa ilmu komputer yang memiliki cukup pengalaman untuk menulis kode C tanpa membuat kesalahan. ANSI C bukanlah hal pertama yang dipelajari orang hari ini.

Sekarang semua siswa ilmu komputer akan membunuhku.

JohnB
sumber
ANSI C sebenarnya adalah salah satu hal pertama yang saya pelajari di perguruan tinggi. Saya mulai pada tahun 2004. Jadi dalam 10 tahun terakhir ini masih diajarkan. Saya menghabiskan banyak malam terhubung melalui SSH ke lingkungan Unix mencoba mengkompilasi kode saya.
Ramhound
1
Lucu, saya tidak belajar ANSI C sampai tahun terakhir saya di Universitas. Bahasa pertama yang diajarkan adalah Pascal, sehingga saya terlindungi ...
tehnyit
Lulusan baru-baru ini di sini; kami memiliki paparan C dan C ++, namun C berada dalam konteks tertanam dan minimal. Keduanya di tahun terakhir saya - murni C # dan Jawa sebelum itu.
Ross
2
C karena sulit diprogram dengan benar mungkin adalah poin terbaik untuk tidak menggunakan C.
Paul Nathan
7

Anda sepenuhnya gagal meyakinkan kami bahwa ANSI C tidak memadai. C adalah bahasa yang sangat baik yang tampaknya disesuaikan untuk jenis tugas yang telah Anda jelaskan. Dengan deskripsi singkat tentang tugas (kecuali persyaratan bahasa), saya juga akan merekomendasikan C (atau mungkin pergi).

Saya pikir masalahnya adalah Anda memprogram dalam C dengan pikiran Anda berpikir dalam C #. Saya memiliki masalah yang sama ketika saya beralih dari Perl ke C atau java. Anda harus belajar beradaptasi dengan bahasa tersebut, dan tidak belajar menerjemahkan dari cara berpikir Anda ke bahasa saat itu.

Masalahnya bukan bos Anda atau bahasa C, masalahnya adalah untuk membuka pikiran Anda terhadap berbagai cara berpikir. Mengubah bahasa pemrograman adalah sesuatu yang akan menguntungkan Anda.

Dewan Komisaris
sumber
4
Terima kasih telah menjawab pertanyaan pertama Anda tentang Pemrogram Stack Exchange. Namun, Anda mungkin ingin membuat jawaban masa depan Anda sedikit kurang pribadi dengan tidak menggunakan frasa seperti "Anda benar-benar gagal", "masalahnya adalah membuka pikiran Anda". Harap tinjau FAQ programmers.stackexchange.com/faq#etiquette . Saya pikir Anda bisa membuat deskripsi yang baik tentang poin Anda dengan bahasa netral.
PengembangDon
2

Pertama, Anda harus memberi tahu atasan Anda bahwa itu dalam bahasa yang berbeda, sekarang. Dia akan (dimengerti) marah jika Anda membawa kembali sesuatu dengan sengaja terhadap persyaratan tanpa pemberitahuan.

Sekarang, cara terbaik untuk menjelaskan hal-hal ini kepada bos / manajer adalah dengan memasukkannya dalam hal waktu dan uang. Perkirakan berapa banyak waktu yang dibutuhkan proyek semacam itu dalam ANSI C, dan kemudian perkirakan berapa banyak waktu yang dibutuhkan untuk sesuatu yang lebih tinggi seperti C #. Catatan saya katakan level lebih tinggi, bukan modern. Ini dapat membantu merapikan semuanya juga. Maksud saya, Anda tidak akan menangani melukis kamar hanya dengan kuas cat kecil, Anda akan menggunakan rol dan hal-hal lain yang membuat setiap langkah (garis kode) mencakup lebih banyak area proyek. Juga, jika Anda atau salah satu anggota tim Anda tidak tahu C, atau nyaman membuat proyek besar di C, ini memakan masalah waktu bahkan lebih karena mereka harus bangun dengan kecepatan.

Sepertinya bos Anda sedang mencoba mengelola mikro. Saya yakin salah satu jawaban lain akan mencoba menjelaskan bagaimana membuat atasan Anda melakukan itu lebih sedikit

Earlz
sumber
Keterjangkauan tampaknya merupakan argumen yang mungkin. Sementara bos (sebagai pelanggan, sesuai saran MatthewFlynn) berpendapat bahwa ia tidak mampu membayar program yang tidak ditulis dalam C, OP dapat berpendapat bahwa bos juga tidak akan mampu membayar biaya implementasi dan pemeliharaan yang terkait dengan program yang sedang ditulis dalam C. Bagaimanapun, kompromi diperlukan untuk membuat sesuatu terjadi.
rwong
1

Keengganan atasan untuk ADT ditujukan di tempat lain, seperti dev yang tampaknya tidak mengetahui biaya GC, jadi saya akan fokus pada "utas".

Mungkin alih-alih berpikir dalam kaitannya dengan threading .NET (atau JVM, jika diindoktrinasi), yang mungkin Anda inginkan adalah beberapa proses, menggunakan beberapa mekanisme komunikasi antar proses (IPC) untuk berkomunikasi di antara mereka. Misalnya - pesan windows, memori bersama, buffer file yang dipetakan memori, bernama pipe, apa pun. Dedikasikan proses kecil untuk berinteraksi dengan perangkat atau aspek perangkat dan memeriksa IPC untuk mengomunikasikan pembaruan dan mengakui permintaan, dan memiliki proses yang agak lebih besar untuk mempertahankan GUI dan berkomunikasi dengan "monitor" peralatan menggunakan IPC apa pun yang Anda pilih.

Roboprog
sumber