Skrivet av heretic16:
Jag föredrar den övre koden, för de innehåller ett "main". Då vet man vart man ska börja. Hade jag fått bestämma så hade C# skrivits så här.
Vad tycker du om Java ME då? Dött?
Aldrig använt Java ME, så ingen aning.
Lite google ger: verkar som Nokia sitter vid rodret för Java ME, senaste uppdatering av standard 2009? Så totalt stendött?
Närmaste jag kommit Java ME är att jobbat med att få in någon embedded variant av Java i VxWorks. I efterhand visade det sig nog vara ett typexempel på XY-problemet. Vissa kunder noterade att det finns långt fler utvecklare som kan Java än som kan C eller C++, samtidigt "visste" de att man kan vara mer produkt i Java jämfört med framförallt C men även "gamla" C++.
Problemet är att om man vill ha något som faktiskt påminner om Java och på något sätt använda "vanlig" Java-kod måste man minst behålla GC. Med GC är det totalkört att erbjuda hård realtid. Om man inte behöver hård realtid, varför ska man då köra med ett RTOS?
Finns absolut saker man kan göra på ett RTOS där det finns bättre alternativ än C, C++ (och nu för tiden Rust). Ett uppenbart sådant är Python, VxWorks stödjer just av den anledningen Python3 "out-of-the-box". Rätt svar för de som hoppades på Java är naturligtvis "modern C++" och/eller Rust, båda dessa stöds och Java-stödet levde bara några år.
Men som sagt: har ingen aning om status hos Java ME.
Skrivet av snajk:
Nja, samtidigt blir ju vad man än väljer en kompromiss någonstans liksom. Vill man alltid ha den bästa tekniken riskerar man att hamna i andra problem istället. Jag lever varje dag med konsekvenserna av arkitekter som tycker det är viktigare att använda nya coola/smarta lösningar än att faktiskt bli färdig eller bygga saker bra från början exempelvis. Börjar man ställa frågor, eller kanske snarare kräva svar på ens frågor, om arkitekturen eller strukturen eller varför vi ska använda en specifik teknik (när det går emot arbetsmetodiken att styra i sådan detalj) så får man höra att det inte är så viktigt för det kommer ändå att bytas ut snart i alla fall.
Visst kan en bra utvecklare byta språk eller ramverk utan större problem, men frågan är hur effektivt det är liksom. Ständiga diskussioner om vad som är bästa lösningen eller tekniken för ett specifikt problem tar inte bara tid utan också energi från utvecklarteamen exempelvis. Och man får ju se till vilken kompetens som finns tillgänglig, både inom företaget men också som går att rekrytera och så.
Mitt team var exempelvis tänkt att bygga en mjukvara som ersatte delar av en tredjepartsmjukvara som alla tycker är kass och föråldrad och som håller tillbaka oss på en massa områden. Alltså har teamet haft bland annat en utvecklare som doktorerat inom just denna typ av algoritmer, en grym integrationsutvecklare för att få sakerna att fungera ihop, en testkonsult med expertis inom just automatisering av den typen av tester som vi behöver och så vidare. Alltså ett väldigt bra team för den specifika uppgift vi hade. Sen byttes chefer ut och vi anställde en före detta chef från företaget som byggde denna tredjepartsmjukvara, oklart vad hans roll var tänkt att vara, som agerar som ifall han fortfarande fick betalt av dem och av någon anledning så lyssnar cheferna på denna person, så de la ned vårt projekt innan vi hade fått en riktig chans att visa hur mycket bättre än det befintliga det var. Alltså sitter jag med ett team som är experter på ett område som inte är relevant längre (eller satt med i alla fall, de bästa har förstås sagt upp sig nu). Många turer senare så jobbar vi nu med att bygga simpla gränssnitt i Angular och hyfsat triviala micro services. Jag säger inte att det inte går, vi kan hantera sakerna vi har att göra, men det känns som slöseri med kompetens och väldigt ineffektivt. Som att anställa ett gäng grymma kockar till sin lyxrestaurang och sen byta inriktning till ett simpelt gatukök men behålla kockarna. "Ni är ju grymma kockar! Ni kan säkert hantera att vända burgare...".
Jo men ska kod leva länge så måste den bli klar. Man kan inte byta tekniken varje månad för att det kommer något nytt som, i teorin i alla fall, passar bättre för att lösa problemet. Nu är språk inte så flyktiga för det mesta, men det finns ju många mindre komponenter eller bibliotek som man lägger tid på att implementera och så där det alltid finns något bättre runt hörnet liksom.
Nej så är det absolut. Men även när man faktiskt börjar på "helt ny kula" så är det ju samma organisation liksom, och då är det lätt att man faller tillbaka i samma mönster som ställde till det tidigare. Vi bytte ut en hemsk monolit som krävde anpassningar i kod för i princip varje kund till något som enligt visionen skulle vara standardiserat och konfigurerbart. Men en del av de utvecklare som jobbat i tre-fem år med monoliten och lärt sig hur den fungerar drar hela tiden den nya kodbasen mot samma skitlösningar som den förra bestod av.
Jo. Någonstans är ju inte prestandakraven lika höga idag på många områden, i relation till tillgänglig prestanda alltså, samtidigt lyckas man ju för det mesta äta upp alla prestandaförbättringar genom nya "smarta" lösningar. Microservices är jättetrevligt exempelvis och de skalar ju bra över flera maskiner och så, men när det gäller hur mycket prestanda som krävs för att göra några enkla uppgifter så är det ju någonstans mellan en katastrof och "inte jättedåligt" beroende på hur bra man har lyckats med implementationen.
Fast gav du inte just flera lysande exempel på varför det är en anti-pattern att inte välja det man identifierat som bästa teknik?
Bästa teknik är väldigt sällan "det senaste coola ramverk som ingen kommer minnas tre år från nu". Men självklart kan det vara lockade för vissa att hoppa på sådant, gör man det som arkitekt kanske man inte är någon vidare arkitekt?
Du ger exempel där du hade ett team med domänexperter. Det är ju ett skolboksfall där man definitivt inte ska hålla fast vid ett specifik språk eller ramverk "för vi använder ju alltid det", domänexpertisen är exempel på saker som utan problem flyttas mellan programspråk/ramverk.
På förra jobbet fick jag kämpa rätt länge för att vi skulle välja "modern C++" ihop med Google Test (och jag valde Google Test specifikt då det hade "proven track record", finns "sexigare" projekt...) som ramverk att skriva unit-tester. Mothuggen var: men våra utvecklare är ju primärt C-programmerare. Problemet är att det inte finns några vettiga unit-test ramverk skrivna i C och en fördel med C++ är att det är trivialt att anropa C-kod därifrån.
Med "modern C++" blev det också enkelt att göra mock-ing, det gick att göra ett klisterlager som gjorde det otroligt intuitivt att sätta upp förväntat beteende hos koden med Google Test ramverket. Det så faktiskt rätt "C-aktigt" ut, även om det under huven fanns en hel del "C++ magi" för att få till den känslan.
De som enbart använde ramverket behövde förstå väldigt lite C++. De som klarade av det hela sämst var, föga oväntat, de som hade utdaterad kunskap om C++. De som aldrig sett C++ lärde sig snabbt den lilla delmängd av C++14 som behövdes.
Sökte också lite på AUTOSAR ihop med Rust. AUTOSAR innehåller en stor mängd regler kring hur man bör skriva C++ för att det ska fungera i säkerhetkritiska miljöer. Finns företag som lever på att bygga verktyg som m.h.a. statisk analys verifierar en stor andel att dessa regler följs i praktiken.
Det som vissa noterat är att en rätt stor andel av dessa regler skulle överhuvudtaget inte behövas om man går till Rust, därför att det man försöker skydda sig emot är just sådana saker som Rust specifikt designats för att hantera. D.v.s. kod som bryter mot flertalet av AUTOSAR reglerna skulle inte kompilera i Rust, m.a.o. automatiskt verifikation enbart genom "rätt" val av teknik.