Jak przekonać mojego szefa, że ​​ANSI C jest nieodpowiedni do naszego nowego projektu? [Zamknięte]

64

Kilka miesięcy temu zaczęliśmy opracowywać aplikację do kontroli opracowanego przez nas sprzętu testowego i rejestrować zestaw pomiarów. Powinien mieć prosty interfejs użytkownika i prawdopodobnie wymagałby wątków ze względu na ciągłe nagrywanie, które musi mieć miejsce. Ta aplikacja będzie używana przez kilka lat i będzie utrzymywana przez wielu studentów informatyki w tym okresie.

Nasz szef ukończył szkołę jakieś 30 lat temu (nie należy tego traktować jako przestępstwo; mam też ponad połowę tego czasu na plecach) i nakazał nam opracowanie tej aplikacji w ANSI C. Uzasadnieniem jest to, że on jest jedynym, który będzie przez cały czas i dlatego musi być w stanie zrozumieć, co robimy. Orzekł również, że nie powinniśmy używać abstrakcyjnych typów danych; podał nam nawet listę zmiennych globalnych (westchnienie), których chce, abyśmy użyli.

Próbowałem tego podejścia przez jakiś czas, ale tak naprawdę spowalniało mnie to, aby upewnić się, że wszystkie operacje wskaźnika są bezpieczne i że wszystkie łańcuchy mają odpowiedni rozmiar. Ponadto liczba wierszy kodu, które faktycznie dotyczyły danego problemu, stanowiła tylko niewielką część naszej bazy kodu. Po kilku dniach wyrzuciłem całość i zacząłem od nowa, używając C #. Nasz szef widział już działający program i podoba mu się sposób jego działania, ale nie wie, że napisano go w innym języku.

W przyszłym tygodniu spotkamy się, aby omówić kod źródłowy, aby „wiedział, jak go zachować”. Jestem trochę przestraszony i chciałbym usłyszeć od was, jakich argumentów mógłbym użyć na poparcie mojej decyzji.

Twój tchórzliwy,

stóg
źródło
220
„Och nie, to nie jest ostateczna wersja, to tylko wersja C #, którą szybko napisaliśmy w ciągu kilku dni do prototypowania i testowania, aby upewnić się, że zrozumieliśmy wymagania i dopracować interfejs użytkownika. Wdrożenie tego w ANSI C zajmie kolejne X tygodni, ponieważ, wiesz, musimy obejść się bez posiadania tych wszystkich wymyślnych struktur danych ... Cóż, tak, teraz, kiedy o tym wspominasz, wersja C # robi już wszystko, co powinien końcowy program, ale powiedziałeś potrzebujesz go w ANSI C. ... OK, jeśli nalegasz, pozostańmy z tą wersją ... "
Heinzi
8
@Heinzi: Mam takie samo doświadczenie: pisanie prototypu biblioteki C # w ciągu 2 dni i pisanie kilku tygodni w C. Na szczęście po tym projekcie zaoferowano mi możliwość przeniesienia się do innego zespołu z większą liczbą rozsądny wybór języka.
dan04
49
Zmienne globalne i wątki? Masz kłopoty, przyjacielu, niezależnie od używanego języka programowania.
Nemanja Trifunovic
16
Argument, którego naprawdę potrzebujesz, to powód, dla którego powinieneś zachować pracę.
epo
11
Twoje założenie jest błędne - ANSI C jest odpowiedni dla prawie wszystkich projektów. Dlatego wciąż jest popularny po tylu latach. To, czy jest optymalne, czy nie, to inne pytanie.
Mark Ransom,

Odpowiedzi:

108

Zauważ, że „Zrób to w ten sposób, więc jestem pewien, że mogę to utrzymać” jest w rzeczywistości bardzo dobrym wymogiem - większość programów spędza dużo więcej czasu na utrzymywaniu niż na pisaniu, a utrzymanie rozwiązania w znanej technologii jest zwykle dobrym pomysłem.

Wyobraź sobie, że jakiś nowy komputerowiec, gdy zostanie poproszony o napisanie aplikacji C #, napisał ją w Haskell w ciągu dwóch dni i powiedział: „Hej, to działa, a mnie nie ma, pa”, pozostawiając na tobie utrzymanie.

Wyobraź sobie, że jakiś nowy komputerowiec zapytany o napisanie aplikacji ANSI C 15 lat temu napisał ją w Visual Basic 6 w ciągu dwóch dni i zostawił. Teraz musisz go utrzymać, a system Windows 7 zaczyna narzekać już po włożeniu nośnika instalacyjnego .

To może być dobra okazja, aby powiedzieć - jak zasugerował Heinzi w komentarzach - że „jest to szybki prototyp napisany w języku C #, który wygląda bardzo podobnie do C - czy powinniśmy przygotować go do produkcji lub zaimplementować w ANSI C, tak jak ty zapytał ”, a następnie weź teraz dyskusję. Posiadanie faktycznego źródła do zobaczenia jest znacznie lepsze niż „Hej, nie powinniśmy pisać naszej następnej aplikacji w Haskell, ponieważ jest szybsza”.

Innymi słowy - masz teraz możliwość wykazania, że ​​można rozważyć nową platformę. Przywołaj, że napisałeś prototyp przed przeglądem kodu - pomoże to usunąć wrażenie, że próbujesz zakraść C # pod radarem. Sugerowałbym również wykazanie, że cały istniejący kod napisany w ANSI C może być używany z poziomu C #. Osobiście uważam, że dowiesz się, że celem pozostaje ANSI C, aby pozostać na jednej platformie.


źródło
26
+1: za wskazanie wymogu „zrób to w ten sposób, jestem pewien, że mogę go utrzymać”. C # jest na pewno znacznie łatwiejszy / szybszy niż C do opracowania (ogólnie), ale C zmienił się w ciągu ostatnich 30 lat mniej niż C # zmienił się w ciągu ostatnich 15 lat. Tak więc w przypadku produktu, który musi być utrzymywany przez wiele lat, C może być bardziej odpowiedni. Musisz iść na kompromis między wszystkimi wymaganiami: złożonością projektu (C # jest prawdopodobnie lepszym wyborem), długoterminową konserwacją (C wydaje się być bardziej stabilny), kto będzie przeprowadzał konserwację itp.
Giorgio
4
@Ramhound Nie mówię o wsparcie VB6, ale o wsparcie programu Visual Basic 6 środowisko programistyczne . Moja kopia systemu Windows 7 wyraźnie powiadomiła mnie podczas wkładania nośnika instalacyjnego, że nie był to dobry pomysł.
12
Dobre punkty, ale co jeśli szef poprosiłby o napisanie go w języku COBOL? Czy montaż 6502? W którym momencie można powiedzieć do swojego szefa „że język jest przestarzały do tego celu, a gdy jesteś odszedł nie będzie nikt z lewej , który rozumie te rzeczy”?
Ant
6
@Alex: Spójność jest dobra, prawda. Ale czy napisałbyś nowy system internetowy w C, gdyby całe inne oprogramowanie (inne niż internetowe) napisane przez twój dział zostało napisane w C? Myślę, że sprowadza się to do równowagi między wyborem odpowiednich technologii dla pisanego systemu a istniejącymi umiejętnościami zespołu. Wybór języka bez namysłu, ponieważ zawsze tego używasz, może być szkodliwy.
Mrówka
8
@ant, ten, kto płaci zespołowi, może wybrać muzykę. (i jesteśmy sklepem COBOL - nie ma problemu z obsługą tego)
35

W tym przypadku wydaje się, że twój szef jest twoim klientem, a jego podstawowym wymogiem jest, aby był w stanie utrzymać aplikację, gdy będziesz się poruszać. To wydaje się całkiem rozsądne.

Zatem wybór polega na zrobieniu tego, o co prosi, lub zademonstrowaniu, że można ukończyć programowanie ORAZ nauczyć go, jak utrzymywać aplikację C # w ograniczonym czasie i przy niższych kosztach. Jeśli nie możesz tego zrobić, nie spełniasz wymagań projektu.

Matthew Flynn
źródło
21
PO wyraźnie zignorował wymagania bez powiadomienia lub dyskusji. Gdyby szef był klientem komercyjnym, mógłby odmówić zapłaty i ewentualnie pozwać o koszty poniesione z powodu zmarnowanego czasu. Odwróć role, co jeśli na przykład zamówisz garnitur na zamówienie i stwierdzisz, że krawiec nie lubi pracować z materiałem, który określiłeś tak cicho, że podoba mu się jego wybór koloru? Problem PO polega teraz na tym, że nie można mu ufać projektom bez ścisłego nadzoru, wyraźnie brakuje umiejętności ludzi i nie ma szacunku dla zarządzania.
epo
1
@epo Wierzę, że rozumiem twoje twierdzenie, że szef nie może ufać OP, ponieważ nie zrobili tego, o co prosili. Jednak jeśli jest rozsądnym menedżerem, nie powinno się to zdarzyć. Gdyby deweloper zwrócił się do menedżera z lepszym rozwiązaniem niż pierwotnie rozważano, mam nadzieję, że menedżer będzie na to otwarty. Jeśli mogę nieco zmodyfikować twój przykład, to tak, jakby krawiec robił garnitur w pożądanym kolorze / wzorze z nowszym, trwalszym, lepszym w dotyku i tańszym rodzajem materiału niż to, o co prosił, mimo że kupujący poprosił o typ znanego im materiału.
Taylor Price
Biorąc to pod uwagę, zgadzam się również, że w tym przypadku utrzymanie jest ważnym wymogiem. OP ma teraz udowodnić kierownikowi, że rozwiązał resztę wymagań w taki sposób, że menedżer może szybko i skutecznie nauczyć się obsługiwać.
Taylor Price
26

Nie podałeś wielu informacji, ale myślę, że C jest absolutnie właściwym wyborem - pracuję jako inżynier w zakładzie przemysłowym i większość (jeśli nie całość) naszego kodu jest napisana w C. Jeśli potrzebujesz uzyskać pomiary z urządzenie (zakładam, że przepływomierz, termopara lub podobne tutaj) i wyświetlanie go w czasie zbliżonym do czasu rzeczywistego C jest doskonałym wyborem.

Jest szybki, przenośny (nigdy nie pisałem w C #, ale nie sądzę, że działa bez konkretnej wersji frameworka i zwykle jest oparty tylko na systemie Windows).

Oczywiście można użyć innego języka, aby wykonać GUI. Ale możesz zaoszczędzić sobie wysiłku i po prostu użyć wcześniej istniejącego pakietu trendów (dostępnych jest kilka dobrych programów typu open source).

Podsumowując, powiedziałbym, że bazowe połączenie z częścią sprzętową C jest dobrym wyborem.

Matt
źródło
7
Odniosłem większy sukces w przenoszeniu kodu C # z systemu Windows na Linux (używając Mono) niż z kodem C ++.
dan04,
8
@ dan04: Jakie problemy miałeś z C ++? Myślałem, że C ++ będzie całkiem przenośny. Ponadto C ++ nie jest C. Zawsze korzystałem z C z biblioteką GNU C dość przenośną, np. Między GNU Linux a cygwin.
Giorgio
4
@ dan04 C! = C ++.
2
@Giorgio: Irytująco dużą jego część stanowiły sznurki. Musieliśmy usunąć wszystkie TCHARbzdury specyficzne dla systemu Windows (których i tak nie używaliśmy konsekwentnie) i przyjęliśmy standard zespołowy używania UTF-8 w tym samym czasie, co przejście na Linuksa. Niestety wymagało to ponownego wdrożenia dużej części standardowej biblioteki w systemie Windows, boost::nowidektóra w tamtym czasie nie istniała.
dan04
3
@ dan04: Jak już powiedziano, C z pewnością nie jest tak wyraziste jak C # (lub C ++ w tym przypadku), ale używam biblioteki GNU C ( gnu.org/software/libc ) od 1997 roku i jest to naprawdę stabilne i przenośne. W przypadku C ++ chciałbym spojrzeć na Qt (lub na boost i standardowe biblioteki), ponieważ są one dość przenośne. Jeśli to możliwe, unikałbym rzeczy specyficznych dla systemu Windows: AFAIK nigdy nie było celem Microsoftu tworzenie przenośnego oprogramowania, ponieważ blokowanie klientów jest częścią ich strategii marketingowej.
Giorgio
24

O jej. To jest aplikacja w czasie rzeczywistym? Kontrolujesz sprzęt w czasie rzeczywistym? Gromadzisz dane w czasie rzeczywistym? Używasz języka ze śmietnikiem? O jej.

Chociaż zgadzam się, że prawdopodobnie możesz zrobić aplikację w bardziej nowoczesnym języku w krótszym czasie, prawdopodobnie nie jest to główne kryterium. ŁATWOŚĆ PROGRAMOWANIA JEST PRAWDOPODOBNIE MNIEJSZA WAŻNA NIŻ INNE KRYTERIA, takie jak te ustalone przez szefa, ORAZ czas reakcji i deterministyczne zachowanie.

Sugerowałbym wykonanie prototypu w języku C # lub Python, aby przetestować główną funkcjonalność i interfejs użytkownika. NASTĘPNIE przetestuj to, mierząc rzeczywiste opóźnienia i czasy reakcji, gdy aplikacja trafi dużą ilością danych, przez wiele dni ciągłego działania. Istnieje prawdopodobieństwo, że aplikacja może być zbyt wolna lub pozostawać w tyle w przypadkowych momentach, gdy uruchomi się VM lub moduł wyrzucania śmieci.

Proponuję przedstawić to, co zrobiłeś jako PROTOTYPE.

Kodowanie w C nie jest takie trudne. Jeśli nie masz ochoty, powiedz tak. Jest nas wielu gotowych na wyzwanie. (Zajmuję się kodowaniem C w czasie rzeczywistym, od dziesięcioleci).

Gumpy Gus
źródło
3
Pozwala wyrazić pierwszy bit inaczej. O jej. To jest aplikacja w czasie rzeczywistym? Kontrolujesz sprzęt w czasie rzeczywistym? Gromadzisz dane w czasie rzeczywistym? URUCHAMIAJĄC SIĘ ŚRODOWISKO NIETALICZNE? O jej. Zawsze będziesz musiał próbować, gdy przekroczysz granice urządzenia. „Czas rzeczywisty” to argument słaby i źle zdefiniowany wymóg. C # jest w porządku.
Gusdor
Najwyraźniej nie słyszałeś o twórczości Joe Duffy'ego . Pracuje nad programowaniem systemów w języku C # od co najmniej 2013 roku . Kompilator Roslyn może się kompilować do natywnego kodu (tak działa UWP), a odśmiecanie nie jest problemem, jeśli zwracasz uwagę na to, co robisz.
RubberDuck
14

Cóż, pierwszą rzeczą do zrobienia jest pójście do szefa i przyznać się. Zignorowałeś jego wyraźną prośbę, a co gorsza robiłeś to od miesięcy. Nie wiem, ile czasu masz na to, ale zakładając, że jest to większość czasu przeznaczonego na realizację projektu, musisz zmierzyć się z faktem, że wkrótce możesz szukać nowej pracy.

Im szybciej sobie z tym poradzisz, tym lepiej.

Po drugie, nie sądzę, abyś mógł go przekonać, że ANSI C jest nieodpowiedni, co musisz zrobić, to przekonać go o kilku innych rzeczach (1), że c # jest wystarczający, (2) może łatwo nauczyć się utrzymywać c #, (3 ), że nie potrafiłeś napisać go w C. Zakładając, że nadal masz pracę i rolę do odegrania w tym projekcie, skoncentrowałbym się na 2, podkreślając podobieństwa między c i c #.

Cytaty w odpowiedzi na komentarze ...

Kilka miesięcy temu zaczęliśmy tworzyć aplikację [...] Po kilku dniach zeskrobałem całość i zacząłem od nowa za pomocą C #

jmoreno
źródło
Nigdzie nie wspominał, że budował wersję C # od miesięcy?
Anonimowy
1
@Anonimowy - nie ma znaczenia, czy minęły dni, czy miesiące, NIE W dalszym ciągu NIE postępował zgodnie z instrukcjami menedżera. Autor najwyraźniej nie posiadał umiejętności wymaganych do opracowania aplikacji w ANSI C.
Ramhound
1
@Ramhound - nie zaprzeczam, że nie postępował zgodnie ze wskazówkami swojego menedżera, po prostu mówię, że jmoerno wyśmiewał się, jakby spędził miesiące na stycznych. Poza tym, jeśli poskładał projekt w ciągu kilku dni, aby służyć jako działający prototyp, na którym może opierać się określona bardziej stabilna wersja C, to ma to sens. To część etapu planowania.
Anonimowy,
@jmoreno - Przepraszam, musiałem źle odczytać pytanie.
Anonimowy,
2
@jmoreno - Oczywiście. Mój ostatni komentarz zamieściłem po zobaczeniu dodanego cytatu. Jeszcze raz przepraszam.
Anonimowy
12

upoważnił nas do opracowania tej aplikacji w ANSI C. Uzasadnieniem jest to, że jest on jedynym, który będzie dostępny przez cały czas, i dlatego musi być w stanie zrozumieć, co robimy.

Jest to dość rozsądny wymóg.

Orzekł również, że nie powinniśmy używać abstrakcyjnych typów danych;

To nie ma sensu. Teraz zaczyna pachnieć nieco podejrzanie, ponieważ jest to wymóg projektowania programu, a nie wymóg językowy. Jeśli kod powinien być łatwy w utrzymaniu, priorytetem powinno być wdrożenie narzędzi ADT lub użycie dobrze przetestowanych, wcześniej istniejących.

podał nam nawet listę zmiennych globalnych (westchnienie), których chce, abyśmy użyli.

Ok, więc teraz śmierdzi. Teraz możemy stwierdzić, że twój szef ma ograniczone doświadczenie nie tylko z różnych języków programowania, ale ogólnie z programowania. Doświadczony programista-weteran, bez względu na preferencje językowe, nigdy by tego nie powiedział. (Jedyny wyjątek, jaki mogę wymyślić, to to, że większość kodu ma działać w dość małym systemie osadzonym, a zatem oczekiwano, że cała niezbędna pamięć robocza dla kodu zostanie wstępnie przydzielona. Pomysł, że ten sam kod jest taki sam oczekuje się jednak, że interfejs użytkownika na poziomie ekranu zdecydowanie temu przeciwdziała).

Zgaduję, że twój szef nigdy nie brał udziału w dużych projektach oprogramowania o kluczowym znaczeniu, ale najprawdopodobniej latał w różnych projektach niskiej jakości.

Nie ma to więc nic wspólnego z językiem programowania C. Możesz łatwo pisać równie złośliwe programy w języku C #. Bardzo częstym błędem jest przekonanie, że dobry projekt programu zależy od języka. To po prostu nieprawda!

C # z pewnością ma ładniejszą, czystszą i mniej niejasną składnię niż C. Ma wiele możliwości projektowania programów, ponieważ ma o wiele więcej słów kluczowych związanych z OO niż C. Ale poza tym nie mówi ci, jak pisać programy. Jeśli uważasz, że wszystko napisane w C jest domyślnie okropne, a wszystko napisane w C # jest domyślnie niebem, założę się, że obecnie piszesz raczej okropne programy w C #, nie zdając sobie z tego sprawy.

Sugeruję, abyś stworzył abstrakcyjny, niezależny od języka, ale szczegółowy projekt programu, zanim cokolwiek innego. Użyj normalnego, obiektowego podejścia. Jakie są tam obiekty i jak się między sobą komunikują, jakie są potrzebne zależności itp. Itp. Kiedy dobrze przemyślisz projekt programu i zapisałeś go na papierze, nie powinno to mieć większego znaczenia dla ciebie ani dla twojego szefa, który język, w którym zdecydowałeś się go wdrożyć.

Społeczność
źródło
1
+1 za „Możesz łatwo pisać równie złośliwe programy w języku C #”.
Javier
11

Pierwszą kwestią, którą musisz rozwiązać, jest emocjonalna, irracjonalna. Branża IT nieustannie się zmienia i chociaż na wszystko jest miejsce, problem stanowi odmowa poprawy lub przyjęcia zmian.

Dlaczego twój szef trzyma się ANSI C? Jeśli jest to jedyny język, który zna, być może nadszedł czas na zmianę, ale racjonalny argument może być niewystarczający. Czy twój szef poczuje się niedoceniany lub być może zwolniony, jeśli zostanie zmuszony do pracy w obcym języku? Podkreśl, jakie ma doświadczenie i jakie inne korzyści przynosi.

Jeśli nie rozwiążesz tego problemu, wszystkie racjonalne argumenty, które możesz przedstawić, zostaną zmarnowane. Jako podwładny możesz nie być tym, który może prowadzić z nim tę dyskusję. Być może porozmawiam o tym z jednym z innych menedżerów, jeśli istnieją.

Zastanów się również nad tym z własnej perspektywy. Dlaczego chcesz używać C #? Ile z tego jest chęć użycia czegoś nowego i fajnego? Bądź ze sobą szczery. Jeśli to rozpoznasz, pomoże ci to w skuteczniejszej sprzeczce.

Druga kwestia dotyczy ryzyka i kosztów. Pisanie oprogramowania jest drogie, a wybór języka jest głównym czynnikiem. Rozważać:

  1. Jak długo potrwa pisanie w C # w porównaniu do C? Dzięki łatwiejszej orientacji obiektu i lepszemu usuwaniu śmieci C # może być łatwiejszy. Jeśli jednak aplikacja korzysta z wielu niezarządzanych wywołań interfejsu API, C może być łatwiejsze.
  2. Jeśli używasz C #, czy musisz kupić dodatkowe narzędzia? Wygląda na to, że korzystasz już z Visual Studio, ale czy potrzebujesz dodatkowych narzędzi do lokalizacji, przeglądania i analizy kodu, debugowania itd.?
  3. Jak łatwo jest utrzymać? Jeśli znajdziesz błąd, jak szybko można go naprawić. C # może zmniejszyć orientację obiektu. Automatyczne zbieranie śmieci pozwala także uniknąć większości problemów z wyciekiem pamięci i wskaźnikiem.
  4. Jak łatwo jest wspierać? Jeśli masz personel pomocniczy, mogą wiedzieć, jak odczytać zrzut awaryjny, ale czy wiedzą, jak używać windbg z SOS? Czy na komputerach docelowych jest już zainstalowana odpowiednia wersja środowiska .Net?
  5. Zastanów się nad personelem. Ile osób zna C w porównaniu do C #? Jeśli jedno z was lub oboje opuścicie organizację, jak łatwo byłoby was zastąpić? Czy programiści C są tańsi lub drożsi niż programiści C #?

Mógłbym kontynuować, ale chodzi o to, aby przestać spierać się o techniczne zalety samych języków. Zalety techniczne to rzeczy, które rozumiesz tylko Ty i Twój szef. Jeśli zaczniesz mówić o wpływie na biznes, przyciągniesz znacznie szerszą grupę ludzi i przedstawisz o wiele bardziej przekonujący argument.

Może C jest lepszym wyborem. C # nie jest automatycznie lepszy dla wszystkich sytuacji. Być może robisz ten projekt przy użyciu C, ale robisz dowód koncepcji C # dla następnego. Pamiętaj, że możesz przegrać bitwę, ale nadal wygrać wojnę.

akton
źródło
5
Nie zgadzam się z domyślnym założeniem, że C # jest domyślnie lepszym wyborem niż ANSI C. Na przykład, jeśli chcesz pozostać niezależnym od platformy, C # jest najprawdopodobniej złym wyborem.
@ ThorbjørnRavnAndersen Zgadzam się. Zobacz ostatni akapit. Wspominam także o przypadkach wywoływania niezarządzanego kodu. Zakładam, że niezależność platformy wyłączyłaby C # w PO. Być może jest to błędne założenie.
akton
1
Niezależność od platformy była tylko jednym z możliwych powodów. Sformułowanie „przywiązanie do ANSI C” - moim zdaniem - wskazuje na stronniczość.
@akton - Od kiedy nie można wywoływać niezarządzanego kodu z C #. Oczywiście wymaga otoki i wprowadza dodatkowe problemy związane z obsługą, ale jest to możliwe. Ponadto możesz obsługiwać C # na wielu platformach, jeśli chcesz. Mono jest obsługiwane na wszystkich głównych platformach komputerowych (OS X, Windows i Linux). Przyznane w miarę rozwoju platformy .NET Framework opartej na systemie Microsoft Windows podstawa funkcji Mono nie będzie dokładnie do niej pasować (tak jest już w przypadku WPF) i oczywiście nie będzie można tworzyć aplikacji Metro działających w systemie Linux. Oczywiście jest mało prawdopodobne, aby tak było w tym przypadku.
Ramhound,
@Ramhound Nie powiedziałem, że nie można wywoływać niezarządzanego kodu z C #, tylko że wiele z nich może być uciążliwe. Podobnie, możesz robić programowanie między platformami w C #, ale C jest prawie uniwersalny, jak powiedział Thorbjorn.
akton
7

Może inny argument: prawdopodobnie bardzo trudno jest znaleźć studentów informatyki, którzy mają wystarczające doświadczenie, aby pisać kod C bez popełniania błędów. ANSI C nie jest pierwszą rzeczą, której ludzie się dzisiaj uczą.

Teraz wszyscy studenci informatyki mnie zabiją.

JohnB
źródło
ANSI C była właściwie jedną z pierwszych rzeczy, których nauczyłem się na studiach. Zacząłem w 2004 roku. W ciągu ostatnich 10 lat wciąż się uczyłem. Spędziłem wiele późnych nocy połączonych przez SSH ze środowiskiem Unix, próbując skompilować mój kod.
Ramhound,
1
Zabawne, nie uczyłem się ANSI C aż do ostatniego roku na uniwersytecie. Pierwszym nauczanym językiem był Pascal, więc jestem chroniony ...
tehnyit
Niedawny absolwent tutaj; mieliśmy kontakt zarówno z C, jak i C ++, jednak C był osadzony w kontekście i minimalny. Oba były w ostatnim roku - wcześniej C # i Java.
Ross
2
C po prostu trudny do zaprogramowania we właściwy sposób jest prawdopodobnie najlepszym argumentem przeciwko używaniu C.
Paul Nathan
7

Zupełnie nie przekonałeś nas, że ANSI C była nieodpowiednia. C to doskonały język, który wydaje się być dostosowany do opisywanych zadań. Z krótkim opisem zadania (oprócz wymogu językowego) poleciłbym również C (a może idź).

Myślę, że problem polega na tym, że programowałeś w C, a twój umysł myślał w C #. Mam podobny problem, kiedy przełączam się z Perla na C lub Java. Musisz nauczyć się dostosowywać do języka, a nie nauczyć się tłumaczyć ze swojego sposobu myślenia na język dnia.

Problemem nie jest twój szef ani język C. Problem polega na otwarciu umysłu na różne sposoby myślenia. Zmiana języka programowania jest dla Ciebie korzystna.

BOC
źródło
4
Dziękujemy za odpowiedź na pierwsze pytanie dotyczące programistów Stack Exchange. Możesz jednak uczynić swoje przyszłe odpowiedzi nieco mniej osobistymi, nie używając zwrotów typu „całkowicie zawiodłeś”, „problemem jest otwarcie umysłu”. Przejrzyj często zadawane pytania programmers.stackexchange.com/faq#etiquette . Myślę, że możesz dobrze opisać swój punkt widzenia neutralnym językiem.
DeveloperDon
2

Po pierwsze, musisz teraz powiedzieć swojemu szefowi, że jest w innym języku. Będzie (zrozumiale) zły, jeśli przyniesiesz coś celowo wbrew wymaganiom bez uprzedzenia.

Teraz najlepszym sposobem na wyjaśnienie tych rzeczy szefowi / menedżerom jest przedstawienie ich pod względem czasu i pieniędzy. Oszacuj, ile czasu zajmie taki projekt w ANSI C, a następnie oszacuj, ile czasu zajmie to na wyższym poziomie, takim jak C #. Uwaga: Powiedziałem wyższy poziom, a nie nowoczesny. Może to również pomóc w złagodzeniu sytuacji. Mam na myśli, że nie poradziłbyś sobie z malowaniem pokoju za pomocą małego pędzla, używałbyś wałków i innych rzeczy, które sprawiają, że każde pociągnięcie (linia kodu) obejmuje więcej obszaru projektu. Ponadto, jeśli ty lub jeden z członków waszego zespołu nie znacie C lub nie czujecie się dobrze, robiąc duży projekt w C, to jeszcze bardziej pochłania problem czasowy, ponieważ będą musieli przyspieszyć.

Wygląda również na to, że twój szef próbuje zarządzać. Jestem pewien, że jedna z pozostałych odpowiedzi spróbuje wyjaśnić, w jaki sposób zmusić szefa do zrobienia tego mniej

Earlz
źródło
Niedogodność wydaje się możliwym argumentem. Podczas gdy szef (jako klient, zgodnie z sugestią @ MatthewFlynn) twierdzi, że nie może sobie pozwolić na program, który nie jest napisany w C, OP może argumentować, że szef nie będzie również stać na koszty wdrożenia i utrzymania związane z programem napisane w C. Tak czy inaczej, potrzebne są kompromisy, aby coś się wydarzyło.
rwong
1

Awersja superwizora do ADT została skierowana gdzie indziej, podobnie jak pozorna niewiedza deweloperów o kosztach GC, więc skupię się na „wątkach”.

Być może zamiast myślenia w kategoriach wątków .NET (lub JVM, jeśli jest to tak indoktrynowane), możesz chcieć wielu procesów, używając jakiegoś mechanizmu komunikacji międzyprocesowej (IPC) do komunikacji między nimi. Np. - wiadomości systemu Windows, pamięć współdzielona, ​​bufor plików zmapowanych w pamięci, nazwany potok, cokolwiek. Poświęć małe procesy na interakcję z urządzeniem lub aspektem urządzenia i sprawdzanie IPC w celu komunikowania się z aktualizacjami i potwierdzania żądań, a także mieć nieco większy proces utrzymywania GUI i komunikowania się z urządzeniami „monitorującymi” za pomocą dowolnego wybranego IPC.

Roboprog
źródło