<commit_before># Few Simple Principles

**[<= Back](../02-planing-and-time-management/planing-and-time-management.md)**		*	*	*	**[Next =>](../04-tools-for-development/tools-for-development.md)**

## Table of Contents

### Theory

#### Casual Programming

[Casual Programming is the future](http://casualprogramer.blogspot.com/2012/02/casual-programming-is-future.html)

##### Entry Barriers to Development

Another important dimension along which operating systems differ is the height of the barrier that separates mere users from becoming developers. There are two important cost drivers here. One is the monetary cost of development tools, the other is the time cost of gaining proficiency as a developer. Some development cultures evolve social barriers to entry, but these are usually an effect of the underlying technology costs, not a primary cause.

Expensive development tools and complex, opaque APIs produce small and elitist programming cultures. In those cultures, programming projects are large, serious endeavors — they have to be in order to offer a payoff that justifies the cost of both hard and soft (human) capital invested. Large, serious projects tend to produce large, serious programs (and, far too often, large expensive failures).

Inexpensive tools and simple interfaces support casual programming, hobbyist cultures, and exploration. Programming projects can be small (often, formal project structure is plain unnecessary), and failure is not a catastrophe. This changes the style in which people develop code; among other things, they show less tendency to over-commit to failed approaches.

Casual programming tends to produce lots of small programs and a self-reinforcing, expanding community of knowledge. In a world of cheap hardware, the presence or absence of such a community is an increasingly important factor in whether an operating system is long-term viable at all.

from [The Art of Unix Programming](http://www.catb.org/esr/writings/taoup/html/) by <NAME>

#### DRY, KISS and YAGNI

1. [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
    * [Dont Repeat Yourself](http://c2.com/cgi/wiki?DontRepeatYourself)
1. [KISS](https://en.wikipedia.org/wiki/KISS_principle)
    * [Unix: Rule of Simplicity](http://www.catb.org/~esr/writings/taoup/html/ch01s06.html#id2877917)
1. [YAGNI](https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it)
    * [YouArentGonnaNeedIt](http://c2.com/cgi/wiki?YouArentGonnaNeedIt)
    * [Overengineering](https://en.wikipedia.org/wiki/Overengineering)
1. [DRY, KISS, YAGNI (ru)](https://habrahabr.ru/post/144611/)

#### Developer Tools

[Chrome Dev Tools Overview](https://developer.chrome.com/devtools)

### Practice

#### Workshop: JavaScript for Cats

Let's make a bit of casual programming with next cool workshop [JavaScript for Cats](http://jsforcats.com/)
<commit_msg>Feat: Add a picture to the section about DRY, KISS and YAGNI<commit_after># Few Simple Principles

**[<= Back](../02-planing-and-time-management/planing-and-time-management.md)**		*	*	*	**[Next =>](../04-tools-for-development/tools-for-development.md)**

## Table of Contents

### Theory

#### Casual Programming

[Casual Programming is the future](http://casualprogramer.blogspot.com/2012/02/casual-programming-is-future.html)

##### Entry Barriers to Development

Another important dimension along which operating systems differ is the height of the barrier that separates mere users from becoming developers. There are two important cost drivers here. One is the monetary cost of development tools, the other is the time cost of gaining proficiency as a developer. Some development cultures evolve social barriers to entry, but these are usually an effect of the underlying technology costs, not a primary cause.

Expensive development tools and complex, opaque APIs produce small and elitist programming cultures. In those cultures, programming projects are large, serious endeavors — they have to be in order to offer a payoff that justifies the cost of both hard and soft (human) capital invested. Large, serious projects tend to produce large, serious programs (and, far too often, large expensive failures).

Inexpensive tools and simple interfaces support casual programming, hobbyist cultures, and exploration. Programming projects can be small (often, formal project structure is plain unnecessary), and failure is not a catastrophe. This changes the style in which people develop code; among other things, they show less tendency to over-commit to failed approaches.

Casual programming tends to produce lots of small programs and a self-reinforcing, expanding community of knowledge. In a world of cheap hardware, the presence or absence of such a community is an increasingly important factor in whether an operating system is long-term viable at all.

from [The Art of Unix Programming](http://www.catb.org/esr/writings/taoup/html/) by <NAME>

#### DRY, KISS and YAGNI

1. [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
    * [Dont Repeat Yourself](http://c2.com/cgi/wiki?DontRepeatYourself)
1. [KISS](https://en.wikipedia.org/wiki/KISS_principle)
    * [Unix: Rule of Simplicity](http://www.catb.org/~esr/writings/taoup/html/ch01s06.html#id2877917)
1. [YAGNI](https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it)
    * [YouArentGonnaNeedIt](http://c2.com/cgi/wiki?YouArentGonnaNeedIt)
    * [Overengineering](https://en.wikipedia.org/wiki/Overengineering)
1. [DRY, KISS, YAGNI (ru)](https://habrahabr.ru/post/144611/)

Make your code easier, and all will be well or else... FLOP!

![alt text](https://camo.githubusercontent.com/743fc5d7209aa5e1fe8c089f174b400bbf49156d/687474703a2f2f61726179652e6e65742f46696c65732f506f7374496d616765732f3374643779302e6a7067 "Flap!")

#### Developer Tools

[Chrome Dev Tools Overview](https://developer.chrome.com/devtools)

### Practice

#### Workshop: JavaScript for Cats

Let's make a bit of casual programming with next cool workshop [JavaScript for Cats](http://jsforcats.com/)

{'fraction_non_alphanumeric': 0.09723609723609723, 'fraction_numerical': 0.028971028971028972, 'mean_word_length': 5.043259557344064, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 13, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6438378', 'n_tokens_mistral': 1860, 'n_tokens_neox': 1681, 'n_words': 640}