Eu também irei contra a corrente aqui e tentarei fazer um argumento estético (um pouco humorístico) para C. Embora algumas pessoas possam chamá-lo de "feio" por diferentes razões, como a falta de construções de nível superior, como classes ou sua dependência de indicadores, acho que não é o meu caso .
TL; DR : Na minha opinião, C é simples, bom C é legível e há uma certa alegria em ser encontrado.
C é simples
O padrão C define apenas alguns tipos e mecanismos básicos para criar funções, ponteiros e matrizes a partir deles. Além disso, há um pequeno número de construções de composição para criar tipos mais complexos das primitivas (como estruturas e uniões). Observe como descrevi a maior parte do idioma em duas frases. Isso significa que você não precisa manter muitas regras e formas sintáticas em sua mente durante a codificação.
Simples é lindo .
C não é misterioso
Ao contrário de muitas linguagens de nível superior, seria difícil encontrar muitos símbolos estranhos e ininteligíveis em C. No mundo C, o principal recurso para abstração e "compressão sintática" é a função - semanticamente, é muito simples e construto auto-explicativo. O bom estilo C incentiva a beleza quase poética e legível. Para ilustrar, vamos tentar ler o seguinte trecho do kernel do Linux. Mesmo sem entender as estruturas de dados subjacentes e os detalhes da implementação, podemos entender muito o seguinte:
bool kthread_freezable_should_stop(bool *was_frozen)
{
bool frozen = false;
might_sleep();
if (unlikely(freezing(current)))
frozen = __refrigerator(true);
if (was_frozen)
*was_frozen = frozen;
return kthread_should_stop();
}
O meio da função diz "no caso improvável de que a corrente esteja congelando, pergunte ao refrigerador se o congelamento realmente aconteceu". Dr. Seuss não poderia ter escrito melhor.
Legível é lindo .
C é transparente
A menos que uma instrução C inclua uma chamada de função, geralmente você pode ter uma idéia muito boa do custo em tempo de execução e dos efeitos colaterais. C dá ao programador controle e, finalmente, confia que ele fará o que é certo. Podemos ter uma ideia do que acontece quando esse trecho (ligeiramente reformatado para o SE) da implementação strlen()
na biblioteca GNU C é executado, porque todo operador possui semântica bem definida. Não há sobrecarga em C.
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
Para fins de "otimização", essa propriedade é ótima. Pode-se argumentar que algumas linguagens de nível superior tornam mais fácil a expressão concisa de algoritmos de nível superior (como C ++ com classes e sobrecarga), mas para os propósitos que o C foi projetado - agindo como um montador portátil - C é o ideal. Às vezes, após a execução bem-sucedida do código de baixo nível, um programador pode se sentir um com a máquina, em certo sentido (ou zero - é um detalhe de implementação). Isso não quer dizer que outros idiomas sejam ruins, não sejam "zen" o suficiente ou algo parecido com isso, apenas que o IMO C pode ser interessante de maneiras que muitos outros idiomas optaram por não ser, por muitos motivos válidos.
Na minha opinião, os três pontos apresentados acima tornam gerenciável a criação de sistemas complexos - mas eficientes -, incorporados em minha mente pelo Linux. Acho que este mundo apela às minhas sensibilidades estéticas e aconselho qualquer pessoa que considere C como seu próximo alvo a considerar esses pontos. Eu sinto que os argumentos sobre sistemas operacionais e outros enfeites são mais bem sustentados, declarando-os explicitamente, porque certamente não é necessário entender os kernels para ser um programador bem-sucedido, mas é possível que esses campos sejam subjetivos.