"Kill Your Darlings" in Computer Science
George Malamidis taught me something about code attachment a few years ago: You always gain by allowing someone to show you an alternative solution. If someone wants to solve a problem in a different way, there are several gains to be had. If their way is inferior, you have an opportunity to mentor a team-mate. If their way is equally elegant, you've gained another solution, or point of view that may be superior in the future. If their way is superior you learn something new and the codebase improves. In exchange for these gains you only need to give up time. Time is valuable, but it's also well spent on improving the ability of a team-mate or your personal ability.
Michael Feathers has also written on this topic, specifically focusing on frameworks. In Stunting a Framework, Michael discusses creating small focused frameworks and then letting them go. I think Michael really nailed it with that entry, it's definitely worth a quick read.
I think killing your darlings extends beyond codebases and frameworks to languages themselves. At SpeakerConf 2009, I floated the idea that we should more actively seek to kill languages. Perhaps, after 3 versions of a language, it's time for that language to be retired. Imagine what we could create if the resources dedicated to Java were instead focused on creating a successor to Java. Think of all the time that would be saved if backwards compatibility became a non-issue.
Notes:
The "Kill Your Darlings" concepts applies not only to writing, but to code, frameworks, and languages as well; although, the concept has more to do with opening up the world to improved versions of these things.
Folksonomies: computer programming computer science
Taxonomies:
/technology and computing/programming languages (0.602779)
/technology and computing/programming languages/java (0.499210)
/technology and computing/consumer electronics/game systems and consoles/playstation (0.373736)
Keywords:
frameworks (0.919542 (negative:-0.468736)), George Malamidis (0.863325 (neutral:0.000000)), way (0.827724 (positive:0.380977)), alternative solution (0.824807 (positive:0.554220)), darlings (0.795340 (negative:-0.398384)), backwards compatibility (0.794076 (negative:-0.257240)), quick read (0.779280 (positive:0.884179)), different way (0.778671 (negative:-0.381095)), personal ability (0.773764 (positive:0.683232)), Michael Feathers (0.757640 (positive:0.246591)), time (0.744004 (positive:0.167607)), languages (0.623646 (negative:-0.161421)), gains (0.594496 (positive:0.284877)), versions (0.525968 (positive:0.530361)), team-mate (0.525170 (positive:0.683232)), Java (0.484271 (neutral:0.000000)), language (0.477741 (neutral:0.000000)), codebase (0.434220 (positive:0.827006)), codebases (0.428554 (negative:-0.468736)), attachment (0.427380 (neutral:0.000000)), Science (0.419347 (negative:-0.322490)), world (0.417886 (positive:0.530361)), things (0.417649 (positive:0.530361)), concept (0.413246 (positive:0.530361)), opportunity (0.411043 (neutral:0.000000)), problem (0.410284 (negative:-0.381095)), successor (0.408770 (neutral:0.000000)), exchange (0.407207 (positive:0.284877)), point (0.406157 (positive:0.450990)), view (0.406084 (positive:0.450990))
Entities:
Michael Feathers:Person (0.970425 (positive:0.480180)), George Malamidis:Person (0.639268 (neutral:0.000000)), Java:Technology (0.615161 (neutral:0.000000)), Computer Science:FieldTerminology (0.607841 (negative:-0.322490))
Concepts:
Programming language (0.927708): dbpedia | freebase
Improve (0.875296): dbpedia
Gain (0.861853): dbpedia | freebase
KILL (0.847647): dbpedia | freebase
Better (0.796096): dbpedia
Idea (0.757547): dbpedia | freebase | opencyc
Concept (0.750565): dbpedia | freebase | opencyc
Language (0.694843): dbpedia | freebase | opencyc
Triples
The "Kill Your Darlings" Principle in Computer Science
ReFactoring: Kill Your Darlings > Similarity > \"Kill Your Darlings\" in Computer ScienceGood programming means killing ideas that are too clever for the sake of being clever, and good computer science means killing code, frameworks, and languages in order to free up space for new ideas and inventions.