# Expertise and Software Development

DevFeed: [Expertise and Software Development](<https://devfeed.tech/articles/expertise-and-software-development-30327.md>)

Original publisher: [Read original article](<https://www.mdubakov.com/posts/expertise-and-software-development>)

Published: 2011-10-02T09:12:28Z

Content type: opinion

Language: en

Sources: [Blog by Michael Dubakov](<https://devfeed.tech/sources/blog-by-michael-dubakov.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [techniques](<https://devfeed.tech/tags/techniques.md>)

## AI overview

The article argues that software developers need fundamental understanding and the ability to explain their technical decisions, rather than relying mainly on lists of technologies or using search engines to solve problems. It connects this view to broader ideas about how expertise should be taught.

## Source excerpt

Students are commonly given an outline of all data that they might collect, organized by "social history," "previous illness," and so on, suggesting that medical diagnosis is a process of collecting data in a fixed order. The results is that students sometimes collect information by rote, without thinking about hypotheses at all! This is the excerpt from the "Nature of Expertise" book I'm reading. This example shows how educational system is broken. The first two things EVERY educational system should do are: teach how to learn the subject. give fundamental understanding of the subject and provide a formalized mechanism how to apply knowledge on practice in the most efficient way. In software development people often learn new technologies like CSS, RoR, Java, etc., without fundamental knowledge of the subject. As a result, they have impressive list of technologies in CV, but fail to write a simple algorithm or explain why this particular solution is best to this particular problem. Average developer can solve problems using google. Good developer knows patterns and some clever techniques. Great developer can explain EVERY decision he makes.