Bästa svaret
Intressant fråga. För mig betyder termen ”hantverk” något om hur den faktiska koden skrivs, snarare än om systemnivå på högre nivå. Jag säger att väl utformad kod gör följande:
- Följer externa standarder
- Följer interna standarder
- Använder bra mönster
- Är läsbar
Följer externa standarder. Om din grupp har kodningsstandarder, följ dem. Om du inte ” gillar inte standarderna, följ dem fortfarande.
Följer interna standarder. Detta innebär att koden ska vara internt konsekvent. Metoder som gör liknande saker bör läggas ut på samma sätt. Om en metod följer mönstret:
if (success) {
doSomething();
} else {
handleError();
}
har inte en annan metod som börjar:
if (!success)
{
handleError();
Använder bra mönster. Med detta menar jag kodningsmönster snarare än designmönster. Din kod bör använda idiom som är lämpliga för språket. (Använd till exempel scoped\_ptrs för minneshantering i C ++.) Det bör undvika uppenbara ineffektiviteter, till exempel efterföljande C ++ iteratorer eller objekt som inte används i varje kodsökväg.
Är läsbar. Andra tekniker läser din kod och du kommer att läsa om det på flera år. Koden ska vara så lätt att förstå som möjligt. Alla ovan nämnda artiklar handlar främst om läsbarhet och minimering av oväntade element i koden. Dina läsare bör vara bekymrade över kodens logik, inte för att försöka ta reda på varför en icke-standardkonstruktion har använts. Om det finns en icke-standardkonstruktion, bör dina läsare veta att den finns där av en anledning, inte för att du gjorde ett misstag. (Tänk på din kod som som ett möbel. Ytan ska vara slät, och du bör inte fånga en splinter om du räcker handen över den. Eventuell oegentlighet bör vara där av en anledning.)
Läsbarheten förbättras också med förnuftiga metod- och variabelnamn och med lämpliga kommentarer. Gå inte överbord på att kommentera. Om det är uppenbart, bry dig inte om att förklara det. Men har någon form av översikt så att läsaren känner sammanhanget. (Det kan vara uppenbart att koden omvandlar ingång X till utgång Y, men det hjälper om läsaren har någon aning om varför detta behövs.)
Svar
Chefer är som småbarn. De vill ha det de vill ha och de vill ha det NU ! Men till skillnad från småbarn har chefer halvt ihåg Harvard Business Review artiklar som de citerar (utan att tillhandahålla referenser) för att motivera sina krav. De har lärt sig en uppsättning argument som stumpar vissa utvecklare.
De säger, ”Vi kan inte ha råd att göra det rätt. Vi måste få det på marknaden NU ! ”. Det är inte sant, du vet. Om de rusar sin spaghettikod i produktion får de chansen att pissa av sina lanseringskunder nu, men koden kan inte skala. Det betyder bara att deras företag klättrar med ett tag innan de kollapsar.
De säger: ”Vi släpper en beta till våra lanseringskunder.” Vad de menar är att de vill att du ska släppa perfekt, kundnöjd kod tidigare än du annars skulle göra, bara för att de gick med på att kalla det ett betatestprogram. Det är magiskt tänkande, som att tro på jultomten.
De säger, ”Jag lovar att vi kommer att skriva om koden senare om du släpper din skitiga, halvfärdiga kod NU ! ” Låter inte detta som ”Jag städar mitt rum senare pappa, om jag kan titta på TV och äta söta snacks NU ?” Problemet är att senare aldrig kommer. Varje dag har chefen valet att antingen lägga till nya funktioner eller att städa upp det röriga rummet som är deras kodbas. Gissa vilka de prioriterar. Och gissa vad, rummet blir stökigare och stökigare, så att det tar längre och längre tid att städa upp. Det är svårare att arbeta med (att skapa nya funktioner) på grund av allt röran också.
Så småningom säger de: ”Vi har investerat för mycket i den här kodbasen. Det tar för lång tid att skriva om. Vi behöver funktioner NU ! ” Bara varje funktion tar två eller tre gånger så lång tid att koda, på grund av det röriga rummet som programutvecklare kallar teknisk skuld.
Bra utvecklare, som tålmodiga och kärleksfulla föräldrar, måste stoppa galenskapen. De måste bestämt insistera, ”Ledsen kärlek, men din HBR artikel säger: Intäkterna förr är bättre, allt annat är lika . ”Du måste läsa det mer noggrant.Alla andra saker är inte lika om du staplar upp teknisk skuld. Vad sägs om vi prioriterar funktioner, och kanske kommer det att finnas något för dig att sälja tidigare. ”
Du måste vara vuxen och bryta till dem att det inte finns något som heter jultomten, sådan som perfekt, kundnöjd kod tills alla buggar tas bort och alla funktioner har implementerats.
Du måste säga till dem: ”Vi har inte råd inte för att använda god praxis. Vi lever, eller vi dör, men vi måste göra vissa saker för att leva, som att skriva tester och dokumentation. Det är inte ett alternativ. ”
Du måste le och säga,” Vi kommer aldrig skriva om den här koden. Jag vet att du menar bra, men när det gäller att fixa koden eller lägga till nya funktioner vet jag vad du kommer att säga. Det är vad du alltid säger. ”
Genom att vara en fast förälder hjälper du din chef att växa upp och bli den typ av företagsledare du skulle vilja arbeta för.