Come posso convincere il mio capo che ANSI C è inadeguato per il nostro nuovo progetto? [chiuso]


64

Alcuni mesi fa, abbiamo iniziato a sviluppare un'app per controllare un'apparecchiatura di prova sviluppata internamente e registrare una serie di misurazioni. Dovrebbe avere un'interfaccia utente semplice e probabilmente richiederebbe discussioni a causa della registrazione continua che deve aver luogo. Questa applicazione verrà utilizzata per alcuni anni e sarà mantenuta da numerosi studenti di informatica durante questo periodo.

Il nostro capo si è laureato circa 30 anni fa (da non considerare come un'offesa; ho anche più della metà del tempo sulla schiena) e ha incaricato di sviluppare questa applicazione in ANSI C. La logica è che è l'unico che sarà in giro tutto il tempo, e quindi deve essere in grado di capire cosa stiamo facendo. Ha anche stabilito che non dovremmo usare tipi di dati astratti; ci ha persino fornito un elenco con il nome delle variabili globali (sospiro) che vuole che usiamo.

In realtà ho provato questo approccio per un po ', ma mi stava davvero rallentando per assicurarmi che tutte le operazioni del puntatore fossero sicure e che tutte le stringhe avessero la dimensione corretta. Inoltre, il numero di righe di codice effettivamente correlate al problema in questione era solo una piccola parte della nostra base di codice. Dopo alcuni giorni, ho demolito tutto e ho ricominciato a usare C #. Il nostro capo ha già visto il programma in esecuzione e gli piace il modo in cui funziona, ma non sa che è scritto in un'altra lingua.

La prossima settimana ci incontreremo per esaminare il codice sorgente, in modo che "sappia come mantenerlo". Ho un po 'paura, e vorrei sentire da voi ragazzi quali argomenti potrei usare per supportare la mia decisione.

Vigliacco tuo,


220
"Oh no, questa non è la versione finale, è solo una versione C # che abbiamo rapidamente scritto in pochi giorni per la prototipazione e il test, per assicurarci di aver compreso i requisiti e per mettere a punto l'interfaccia utente. L'implementazione in ANSI C richiederà altre X settimane, perché, sai, dobbiamo evitare di avere tutte quelle strutture dati fantasiose ... Beh, sì, ora che me lo dici, la versione C # fa già tutto ciò che dovrebbe essere il programma finale, ma hai detto ne hai bisogno in ANSI C. ... OK, se insisti, restiamo con questa versione ... "
Heinzi,

8
@Heinzi: ho avuto la stessa esperienza: scrivere un prototipo C # di una biblioteca in 2 giorni e passare diverse settimane a riscriverlo in C. Fortunatamente, dopo quel progetto, mi è stata offerta la possibilità di trasferirmi a un altro team con un altro scelta della lingua ragionevole.
dan04,

49
Variabili e thread globali? Sei nei guai, amico mio, indipendentemente dal linguaggio di programmazione che usi.
Nemanja Trifunovic,

16
L'argomento di cui hai davvero bisogno è perché dovresti mantenere il tuo lavoro.
epo

11
La tua ipotesi non è corretta - ANSI C è adeguata per quasi tutti i progetti. Ecco perché è ancora popolare dopo tutti questi anni. Che sia ottimale o meno è una domanda diversa.
Mark Ransom,

Risposte:


108

Si noti che il "Si prega di fare in questo modo, quindi sono sicuro che posso mantenerla" è in realtà un ottimo requisito - la maggior parte dei programmi di spendere molto più a lungo mantenute che essere scritto e mantenere una soluzione in una tecnologia nota di solito è una buona idea.

Immagina se un nuovo bambino del computer, quando gli viene chiesto di scrivere un'applicazione C #, lo scrisse in Haskell in due giorni e dicesse "Ehi, funziona e me ne vado, ciao" lasciandoti la manutenzione.

Immagina se qualche nuovo bambino del computer, quando gli è stato chiesto di scrivere un'applicazione ANSI C 15 anni fa, l'abbia scritta in Visual Basic 6 in due giorni e l'abbia lasciata. Ora devi mantenerlo e Windows 7 inizia a lamentarsi già quando viene inserito il supporto di installazione .

Questa potrebbe essere una buona opportunità per dire - come ha accennato Heinzi nei commenti - che "questo è un prototipo rapido scritto in C # che sembra somigliare molto a C - dovremmo renderlo pronto per la produzione o reimplementarlo in ANSI C come te chiesto ", quindi prendi la discussione ora. Avere una fonte reale da vedere, è molto meglio di "Ehi, non dovremmo scrivere la nostra prossima applicazione in Haskell perché è più veloce".

In altre parole: ora hai l'opportunità di dimostrare che una nuova piattaforma potrebbe essere presa in considerazione. Mostra che hai scritto un prototipo prima della revisione del codice: questo ti aiuterà a rimuovere l'impressione che stai cercando di intrufolarti in C # sotto il radar. Suggerirei anche di dimostrare che tutto il codice esistente scritto in ANSI C può essere utilizzato da C #. Personalmente credo che ti verrà detto che l'obiettivo rimane ANSI C per rimanere su un'unica piattaforma.


26
+1: per indicare il requisito "fallo in questo modo, quindi sono sicuro di poterlo mantenere". C # è sicuramente molto più facile / veloce di C (in generale) da sviluppare, ma C è cambiato negli ultimi 30 anni in meno rispetto a C # negli ultimi 15 anni. Quindi per un prodotto che deve essere mantenuto per molti anni il C potrebbe essere più adatto. Devi scendere a compromessi tra tutti i requisiti: complessità del progetto (C # è probabilmente una scelta migliore), manutenzione a lungo termine (C sembra essere più stabile), chi farà la manutenzione, ecc.
Giorgio,

4
@Ramhound Non sto parlando del supporto VB6, ma del supporto dell'ambiente di sviluppo di Visual Basic 6 . La mia copia di Windows 7 mi ha esplicitamente avvisato quando ho inserito il supporto di installazione che questa non era una buona idea.

12
Aspetti positivi, ma se il capo avesse chiesto che fosse scritto in COBOL? O 6502 assembly? A che punto puoi dire al tuo capo, "Quel linguaggio è obsoleto per questo scopo, e una volta che te ne sei andato non rimarrà nessuno che capisca queste cose"?
Formica

6
@Alex: la coerenza è bella, vera. Ma scriveresti un nuovo sistema web in C se tutti gli altri software (non web) scritti dal tuo dipartimento fossero scritti in C? Penso che ciò si traduca in un equilibrio tra la scelta delle tecnologie appropriate per il sistema che stai scrivendo rispetto alle competenze esistenti del team. Scegliere una lingua senza deliberazione perché è quello che usi sempre può essere dannoso.
Formica

8
@ant, chi paga la band arriva a scegliere la musica. (e siamo un negozio COBOL - nessun problema a supporto di ciò)

35

Il tuo capo sembrerebbe essere il tuo cliente in questo caso, e il suo requisito principale è che sia in grado di mantenere l'applicazione quando vai avanti. Questo sembra abbastanza ragionevole.

Quindi, la scelta è fare ciò che chiede, o dimostrare che è possibile completare lo sviluppo E insegnargli come mantenere un'applicazione C # entro i limiti di tempo e ad un costo inferiore. Se non puoi farlo, non stai soddisfacendo i requisiti del progetto.


21
L'OP ha esplicitamente ignorato i requisiti senza notifica o discussione. Se il capo fosse un cliente commerciale, potrebbe rifiutare il pagamento e, eventualmente, fare causa per i costi sostenuti a causa del tempo perso. Invertire i ruoli, cosa succederebbe se, ad esempio, ordinassi un abito su misura e scoprissi che al sarto non piaceva lavorare con la stoffa che hai specificato così silenziosamente sostituita a quella che gli piaceva, nella scelta del colore? Il problema del PO ora è che non gli si può fidare di progetti senza una stretta supervisione, manca in modo dimostrabile le competenze delle persone e non ha rispetto per la gestione.
epo

1
@epo Credo di aver capito la tua affermazione secondo cui il capo non può fidarsi del PO poiché non ha fatto quello che gli è stato chiesto. Tuttavia, se è un manager ragionevole, ciò non dovrebbe accadere. Se lo sviluppatore si avvicina al gestore con una soluzione migliore di quella inizialmente considerata, spero che il gestore sia aperto ad esso. Se posso modificare leggermente il tuo esempio, è come se il sarto realizzasse un abito nel colore / motivo desiderato con un tipo di tessuto più nuovo, più resistente, migliore e più economico di quello che è stato chiesto anche se l'acquirente ha richiesto un tipo di stoffa con cui avevano familiarità.
Taylor Price

Detto questo, concordo anche sul fatto che, in questo caso, la manutenzione è un requisito importante. Il PO è ora visto per dimostrare al gestore di aver risolto il resto dei requisiti in modo che il gestore possa imparare in modo rapido ed efficace a mantenere.
Taylor Price,

26

Non hai fornito molte informazioni ma penso che C sia assolutamente la scelta giusta - lavoro come ingegnere in un impianto industriale e la maggior parte (se non tutto) del nostro codice è scritto in C. Se hai bisogno di ottenere misure da un dispositivo (suppongo che un misuratore di portata o una termocoppia o simile qui) e visualizzarlo in C quasi in tempo reale sia una scelta eccellente.

È veloce, portatile (non ho mai scritto in C # ma non credo che funzioni senza una particolare versione del framework installato e di solito è solo basato su Windows).

Certamente potresti usare un'altra lingua per fare la GUI. Ma potresti risparmiarti lo sforzo e semplicemente usare un pacchetto di tendenza preesistente (ce ne sono alcuni buoni open source disponibili).

Per riassumere direi che l'interfaccia sottostante con l'hardware parte C è una buona scelta.


7
Ho avuto più successo nel portare il codice C # da Windows a Linux (usando Mono) rispetto al codice C ++.
dan04,

8
@ dan04: quali problemi hai avuto con il C ++? Pensavo che il C ++ fosse abbastanza portatile. Inoltre, C ++ non è C. Ho sempre trovato che usare C con la libreria GNU C è piuttosto portatile, ad esempio tra GNU Linux e cygwin.
Giorgio,

4
@ dan04 C! = C ++.

2
@Giorgio: una parte fastidiosamente ampia di stringhe. Abbiamo dovuto eliminare tutte le TCHARstronzate specifiche di Windows (che comunque non usavamo in modo coerente) e abbiamo adottato uno standard di squadra per l'utilizzo di UTF-8 contemporaneamente alla transizione di Linux. Sfortunatamente, ciò ha richiesto la reimplementazione di una grande parte della libreria standard su Windows, boost::nowidenon esistendo al momento.
dan04,

3
@ dan04: Come detto, C non è certo espressivo come C # (o C ++ per quella materia), ma sto usando la libreria GNU C ( gnu.org/software/libc ) dal 1997 ed è davvero stabile e portatile. Per C ++ guarderei Qt (o boost e le librerie standard) perché sono abbastanza portatili. Se possibile, eviterei cose specifiche di Windows: AFAIK non è mai stato l'obiettivo di Microsoft produrre software portatile poiché il blocco dei clienti fa parte della loro strategia di marketing.
Giorgio,

24

Oh caro. Questa è un'applicazione in tempo reale? Controllo delle apparecchiature in tempo reale? Raccolta di dati in tempo reale? Usi una lingua con un garbage collector? Oh caro.

Anche se concordo sul fatto che probabilmente puoi eseguire l'app in un linguaggio più moderno in meno tempo, probabilmente non è questo il criterio principale. LA FACILITÀ DELLA PROGRAMMAZIONE È PROBABILMENTE MOLTO IMPORTANTE DEGLI ALTRI CRITERI, come quelli stabiliti dal proprio capo, E i tempi di risposta e il comportamento deterministico.

Ti avrei suggerito di fare un prototipo in C # o Python, solo per testare la funzionalità principale e l'interfaccia utente. POI testarlo, misurando latenze effettive e tempi di risposta, quando l'app viene colpita con molti dati, per molti giorni di funzionamento continuo. Le probabilità sono che l'app potrebbe finire per essere troppo lenta o rimanere indietro in momenti casuali, quando entra in gioco VM o il Garbage Collector.

Ti suggerisco di presentare ciò che hai fatto come PROTOTIPO.

La codifica in C non è così difficile. Se non sei all'altezza, dillo. Ci sono molti di noi pronti per la sfida. (Ho fatto la codifica C in tempo reale per, argh, decenni ormai).


3
Consente di pronunciare il primo bit in modo diverso. Oh caro. Questa è un'applicazione in tempo reale? Controllo delle apparecchiature in tempo reale? Raccolta di dati in tempo reale? IN CORSO SU UN AMBIENTE FILETTATO NON IN TEMPO REALE? Oh caro. Dovrai sempre campionare quando attraversi i confini del dispositivo. Il "tempo reale" è un argomento da uomo di paglia e un requisito mal definito. C # va bene.
Gusdor,

Ovviamente non hai sentito parlare del lavoro di Joe Duffy . Lavora sulla programmazione dei sistemi in C # almeno dal 2013 . Il compilatore Roslyn può compilare in codice nativo (è così che funziona UWP) e la garbage collection non è un problema se presti attenzione a ciò che stai facendo.
RubberDuck,

14

Bene, la prima cosa da fare è andare dal tuo capo e confessarti. Hai ignorato la sua chiara richiesta e, peggio ancora, lo fai da mesi. Non so quanto tempo hai a disposizione, ma supponendo che sia il più delle volte assegnato per portare a termine il progetto, devi affrontare il fatto che potresti presto cercare un nuovo lavoro.

Prima lo affronti, meglio è.

In secondo luogo, non penso che tu possa convincerlo che ANSI C è inadeguato, quello che devi fare è convincerlo di molte altre cose (1) che c # è adeguato, (2) può facilmente imparare a mantenere c #, (3 ) che non eri disposto a scriverlo in C. Supponendo che tu abbia ancora un lavoro e una parte da svolgere con questo progetto, mi concentrerei su 2, sottolineando le somiglianze tra c e c #.

Citazioni in risposta ai commenti ...

Alcuni mesi fa, abbiamo iniziato a sviluppare un'app [...] Dopo alcuni giorni, ho demolito l'intera cosa e ho ricominciato da capo usando C #


Da nessuna parte ha menzionato che stava costruendo una versione C # da mesi?
Anonimo

1
@Anonimo - Non importa se erano giorni o mesi che NON seguiva ancora le istruzioni dei suoi manager. L'autore chiaramente non aveva le competenze necessarie per sviluppare l'applicazione in ANSI C.
Ramhound

1
@Ramhound - Non sto contestando il fatto che non abbia seguito le istruzioni dei suoi dirigenti, sto solo dicendo che Jmoerno si stava rendendo conto come se avesse trascorso mesi a fare tangenti. Inoltre, se ha messo insieme il progetto in un paio di giorni per fungere da prototipo funzionante su cui si può basare la versione C più stabile specificata, ha perfettamente senso. Fa parte della fase di pianificazione.
Anonimo

@jmoreno - Mi scuso, devo aver letto male la domanda.
Anonimo

2
@jmoreno - Certo. Ho pubblicato il mio ultimo commento dopo aver visto la citazione che hai aggiunto. Ci scusiamo ancora una volta.
Anonimo

12

ha incaricato di sviluppare questa applicazione in ANSI C. La logica è che è l'unico che sarà in giro per tutto il tempo, e quindi deve essere in grado di capire cosa stiamo facendo.

Questo è un requisito abbastanza ragionevole.

Ha anche stabilito che non dovremmo usare tipi di dati astratti;

Questo non ha senso. Ora sta iniziando a sembrare un po 'sospetto, perché questo è un requisito di progettazione del programma e non un requisito linguistico. Se il codice dovrebbe essere facile da mantenere, l'implementazione di ADT o l'uso di quelli ben testati, dovrebbero essere una priorità.

ci ha persino fornito un elenco con il nome delle variabili globali (sospiro) che vuole che usiamo.

Ok, quindi adesso puzza. Ora possiamo dire che il tuo capo ha un'esperienza limitata non solo da vari linguaggi di programmazione, ma dalla programmazione in generale. Un abile programmatore veterano, indipendentemente dalle preferenze linguistiche, non farebbe mai una simile affermazione. (L'unica eccezione che mi viene in mente è se la maggior parte del codice è progettata per essere eseguita su un sistema incorporato abbastanza piccolo, e quindi ci si aspettava che tutta la memoria di lavoro necessaria per il codice fosse pre-allocata. L'idea che lo stesso codice ci si aspetta che l'interfaccia utente a livello di schermo contesti fortemente che ciò avvenga, comunque).

Immagino che il tuo capo non sia mai stato coinvolto in progetti software mission-critical su larga scala, ma molto probabilmente ha fluttuato in vari progetti di bassa qualità.

Quindi questo non ha nulla a che fare con il linguaggio di programmazione C. Puoi anche scrivere facilmente programmi ugualmente difficili in C #. È un errore molto comune credere che una buona progettazione del programma dipenda dalla lingua. Questo semplicemente non è vero!

C # ha certamente una sintassi più bella, più pulita e meno oscura di C. Ha un sacco di supporto per la progettazione di programmi, dal momento che ha molte più parole chiave correlate a OO di C. Ma a parte questo, non ti dice come scrivere i tuoi programmi. Se ritieni che tutto ciò che è scritto in C sia terribile di default e tutto ciò che è scritto in C # sia il paradiso di default, scommetto che stai scrivendo programmi C # piuttosto terribili senza accorgertene.

Quello che vorrei suggerire è che tu prima di ogni altra cosa realizzi un progetto di programma astratto, indipendente dalla lingua, ma dettagliato. Utilizzare il normale approccio orientato agli oggetti. Quali oggetti ci sono e come comunicano tra loro, quali sono le dipendenze necessarie ecc. Ecc. Quando hai pensato abbastanza al progetto del programma e l'hai messo sulla carta, non dovrebbe importare molto a te né al tuo capo che lingua in cui hai scelto di implementarlo.


1
+1 per "Puoi facilmente scrivere programmi ugualmente dannosi anche in C #."
Javier,

11

Il primo problema che devi affrontare è emotivo, irrazionale. Il settore IT è in costante cambiamento e, sebbene ci siano posti per tutto, rifiutare di migliorare o accettare il cambiamento è un problema.

Perché il tuo capo si aggrappa ad ANSI C? Se questa è l'unica lingua che conosce, allora forse è tempo di cambiare, ma un argomento razionale potrebbe essere insufficiente. Il tuo capo si sentirà sottovalutato o probabilmente licenziato se costretto a lavorare in una lingua sconosciuta? Sottolinea l'esperienza che ha e altri benefici che porta.

Se non risolvi questo problema, tutti gli argomenti razionali che puoi portare saranno sprecati. Come subordinato, potresti non essere quello che può avere questa discussione con lui. Forse affronta questo argomento con uno degli altri manager, se ce ne sono.

Consideralo anche dal tuo punto di vista. Perché vuoi usare C #? Quanto di tutto questo è il desiderio di usare qualcosa di nuovo e bello? Sii onesto con te stesso. Se lo riconosci, ti aiuterà a discutere in modo più efficace.

Il secondo problema riguarda i rischi e i costi. Scrivere software è costoso e la scelta della lingua è un fattore importante in questo. Tener conto di:

  1. Quanto tempo ci vorrà per scrivere in C # contro C? Con un orientamento degli oggetti più semplice e una migliore raccolta dei rifiuti, C # potrebbe essere più semplice. Tuttavia, se l'applicazione utilizza molte chiamate API non gestite, C potrebbe essere più semplice.
  2. Se usi C #, devi acquistare strumenti aggiuntivi? Sembra che tu abbia già utilizzato Visual Studio ma hai bisogno di strumenti aggiuntivi per la localizzazione, la revisione e l'analisi del codice, il debug e così via?
  3. Quanto è facile da mantenere? Se trovi un bug, quanto velocemente può essere risolto. C # può ridurre questo orientamento dell'oggetto. La garbage collection automatica evita anche la maggior parte dei problemi di perdita di memoria e di puntatore.
  4. Quanto è facile supportare? Se si dispone di personale di supporto, potrebbero sapere come leggere un dump di arresto anomalo ma sanno come utilizzare windbg con SOS? Le macchine target hanno già installato una versione appropriata del framework .Net?
  5. Valuta il personale. Quante persone conoscono C contro C #? Se uno di voi o entrambi abbiate lasciato l'organizzazione, quanto sarebbe facile sostituirvi? Gli sviluppatori C sono più economici o più costosi degli sviluppatori C #?

Potrei continuare, ma il punto è smettere di discutere solo sui meriti tecnici delle lingue. I meriti tecnici sono cose che solo tu e il tuo capo capite. Se inizi a parlare dell'impatto sul business, attiri un gruppo di persone molto più ampio e fai una discussione molto più convincente.

Forse C è una scelta migliore. C # non è automaticamente migliore per tutte le situazioni. Forse fai questo progetto usando C ma fai una prova del concetto C # per il prossimo. Ricorda che puoi perdere la battaglia ma anche vincere la guerra.


5
Non sono d'accordo con l'ipotesi implicita che C # sia per impostazione predefinita una scelta migliore di ANSI C. Ad esempio, se si desidera rimanere indipendenti dalla piattaforma, C # è molto probabilmente una scelta sbagliata.

@ ThorbjørnRavnAndersen Sono d'accordo. Si prega di consultare l'ultimo paragrafo. Cito anche casi come la chiamata di codice non gestito. Presumo che l'indipendenza della piattaforma avrebbe escluso C # nel PO. Forse questo è un presupposto errato.
Akton,

1
L'indipendenza della piattaforma era solo una delle possibili ragioni. Formulazioni come "aggrapparsi ad ANSI C" indicano - secondo me - un pregiudizio.

@akton - Da quando non puoi chiamare codice non gestito da C #. Ovviamente richiede un wrapper e questo introduce ulteriori problemi di supporto, ma è possibile. Inoltre, puoi supportare C # su più piattaforme, se lo desideri. Mono è il supporto su tutte le principali piattaforme desktop (OS X, Windows e Linux). Concesso come .NET Framework basato su Microsoft Windows avanza la base di funzionalità di Mono non corrisponderà esattamente (come è già il caso con WPF) e ovviamente non sarai in grado di sviluppare applicazioni Metro che girano su Linux. Ovviamente è improbabile che ciò venga fatto in questo caso.
Ramhound,

@Ramhound Non ho detto che non puoi chiamare il codice non gestito da C #, solo che molto può essere un problema. Allo stesso modo, puoi fare lo sviluppo multipiattaforma in C # ma C è quasi universale, come ha detto Thorbjorn.
Akton,

7

Forse un altro argomento: probabilmente è molto difficile trovare studenti di informatica che abbiano abbastanza esperienza per scrivere codice C senza fare errori. ANSI C non è la prima cosa che la gente impara oggi.

Ora tutti gli studenti di informatica mi uccideranno.


ANSI C è stata in realtà una delle prime cose che ho imparato al college. Ho iniziato nel 2004. Quindi negli ultimi 10 anni è stato ancora insegnato. Ho trascorso molte nottate collegate tramite SSH a un ambiente Unix cercando di compilare il mio codice.
Ramhound,

1
Divertente, non ho imparato l'ANSI C fino al mio ultimo anno all'università. La prima lingua insegnata fu Pascal, quindi sono protetto ...
tehnyit,

Neolaureato qui; abbiamo avuto esposizione sia al C che al C ++, tuttavia il C era in un contesto incorporato e minimo. Entrambi erano nel mio ultimo anno - puramente C # e Java prima di quello.
Ross,

2
C semplicemente essere difficili da programmare nel modo giusto è probabilmente il miglior punto contro l'uso di C.
Paul Nathan,

7

Hai completamente fallito nel convincerci che ANSI C era inadeguato. C è un linguaggio eccellente che sembra adattato al tipo di compiti che hai descritto. Con la breve descrizione dell'attività (tranne i requisiti linguistici), consiglierei anche C (o forse andare).

Penso che il problema sia che stavi programmando in C con la tua mente pensando in C #. Ho un problema simile quando passo da Perl a C o Java. Devi imparare ad adattarti alla lingua e non imparare a tradurre dal tuo modo di pensare verso la lingua del giorno.

Il problema non è il tuo capo o il linguaggio C, il problema è aprire la tua mente verso diversi modi di pensare. Cambiare il linguaggio di programmazione è qualcosa che ti gioverà.


4
Grazie per aver risposto alla tua prima domanda su Stack Exchange Programmers. Tuttavia, potresti voler rendere le tue risposte future un po 'meno personali non usando frasi come "hai completamente fallito", "il problema è aprire la mente". Si prega di consultare le FAQ programmers.stackexchange.com/faq#etiquette . Penso che tu possa fare una buona descrizione del tuo punto con un linguaggio neutro.
Sviluppatore:

2

Prima di tutto, devi dire al tuo capo che ora è in una lingua diversa. Sarà (comprensibilmente) arrabbiato se riporti qualcosa di intenzionalmente contro i requisiti senza preavviso.

Ora, il modo migliore per spiegare queste cose al capo / manager è metterlo in termini di tempo e denaro. Stimare quanto tempo impiegherebbe un progetto del genere in ANSI C, quindi stimare quanto tempo occorrerebbe in qualcosa di livello superiore come C #. Nota ho detto di livello superiore, non moderno. Questo può aiutare anche a sistemare le cose. Voglio dire, non affronteresti la verniciatura di una stanza con solo un minuscolo pennello, useresti i rulli e altre cose che fanno sì che ogni tratto (riga di codice) copra più area del progetto. Inoltre, se tu o uno dei membri del tuo team non conoscete C, o vi sentite a vostro agio nella realizzazione di un grande progetto in C, ciò influisce ancor di più sul problema del tempo perché dovranno essere pronti.

Sembra anche che il tuo capo stia cercando di micromanage. Sono sicuro che una delle altre risposte proverà a spiegare come convincere il tuo capo a farlo meno


L'accessibilità economica sembra un possibile argomento. Mentre il capo (come cliente, secondo il suggerimento di @ MatthewFlynn) sostiene che non può permettersi che il programma non sia scritto in C, OP può sostenere che il capo non sarà in grado di sostenere i costi di implementazione e manutenzione associati al programma scritto in C. Ad ogni modo, sono necessari compromessi per far accadere le cose.
rwong

1

L'avversione del supervisore agli ADT è stata affrontata altrove, così come l'apparente inconsapevolezza dei devoti sui costi GC, quindi mi concentrerò sui "thread".

Forse piuttosto che pensare in termini di threading .NET (o JVM, se così indottrinato), ciò che potresti desiderare è più processi, usando un meccanismo di comunicazione tra processi (IPC) per comunicare tra loro. Ad esempio: messaggi di Windows, memoria condivisa, buffer di file mappato in memoria, named pipe, qualunque cosa. Dedica piccoli processi all'interazione con un dispositivo o aspetto del dispositivo e verifica l'IPC per comunicare gli aggiornamenti e riconoscere le richieste, e avere un processo un po 'più ampio per mantenere la GUI e comunicare con i "monitor" dell'apparecchiatura utilizzando qualsiasi IPC selezionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.