Foto: Liam Briese no Unsplash Existem
cada vez mais linguagens de programação. Agora, existem cerca de 700 deles. No entanto, a maioria dos desenvolvedores usa 20 deles. Aqui, como em muitas outras áreas, há avaliações, tendências e até moda.
Vamos citar apenas alguns idiomas populares. Para desenvolvimento empresarial, Java é usado ativamente (em breve Kotlin também será corrigido lá), C #, para desenvolvimento Web - JavaScript, Go, Python e PHP, para desenvolvimento móvel - Swift, Java / Kotlin, bem, atrevo-me a chamar JavaScript (porque talvez, porque React Native). Os desenvolvedores de jogos costumam usar C # e C ++. Todos eles são procurados por vários motivos:
- sintaxe simplificada (na maior parte) e semântica clara - no contexto da linguagem C;
- conjunto completo de APIs padrão;
- apoio comunitário ativo;
- um ecossistema crescente de estruturas e bibliotecas.
A linguagem C é usada no desenvolvimento de soluções de software e hardware. Em C, você também pode implementar parcialmente a funcionalidade de produtos de software que exigem desempenho. Embora nem todo programador queira e possa trabalhar em tais projetos. Mas voltando ao estágio de aprendizagem.
Normalmente, os futuros desenvolvedores começam a programar na escola, na universidade ou em cursos de mudança de carreira. A última opção, aliás, agora está ganhando popularidade.
Mais cedo ou mais tarde, eles se perguntam: qual linguagem de programação é melhor aprender primeiro? Na escola e na universidade, esta pergunta pode ser respondida para você: na maioria das vezes, o aprendizado lá começa com a linguagem C / C ++ (assim, por meio de "/"). Mas em locais de treinamento alternativos, é improvável que alguém também sugira que você apenas estude C para expandir seus horizontes ou bombear seus cérebros. Todo mundo quer entrar rapidamente, como dizem, na TI. Então, como você pode ver, aqui e ali você terá que mostrar vontade e independência se decidir começar a aprender a partir da linguagem C.
Neste artigo, falaremos sobre o estágio de formação e formação de um futuro especialista. Portanto, deixe-me expor meus argumentos, e então você poderá expor os seus.
C força você a ir fundo na solução do problema
Linguagens mais modernas oferecem várias abstrações embutidas (ou abstrações de bibliotecas padrão) ao mesmo tempo para todas as ocasiões comuns. Isso se aplica principalmente a problemas algorítmicos padrão. Por exemplo, se você precisar copiar elementos específicos da primeira matriz para a segunda, poderá usar o método filter () embutido em JavaScript. Se você estiver escrevendo em Java, terá o método filter () do pacote java.util.stream à sua disposição.
JavaScript: Array.filter ()
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
// 6,
const result = words.filter(word => word.length > 6);
console.log(result);
// : Array ["exuberant", "destruction", "present"]
Java: stream (). Filter ()
List<String> lines = Arrays.asList("spray", "limit", "elite");
// List Stream
List<String> result = lines.stream()
// elite
.filter(line -> !"elite".equals(line))
// List
.collect(Collectors.toList());
// : spray, limit
result.forEach(System.out::println);
Na linguagem C, especialmente para fins educacionais, você pode oferecer a seguinte implementação (para não complicar o exemplo, mudei as strings para números e mudei a condição de "filtragem"):
#include <stdio.h>
#define SIZE 5
void copy_aka_filter_arr(double trg[], double src[], int n);
int main(void){
int i;
double source[SIZE] = {1.1, 2.2, 3.3, 4.4, 5.5};
double target[SIZE];
printf("Source: ");
for (i = 0; i < SIZE; i++){
printf("%5.1f ", source[i]);
}
putchar('\n');
copy_arr(target, source, SIZE);
return 0;
}
void copy_aka_filter_arr(double trg[], double src[], int n){
// i- , 3.3.
// i- 0.0
int i;
for (i = 0; i < n; i++){
if (trg[i]) > 3.3){
trg[i] = src[i];
}
else{
trg[i] = 0.0;
}
}
printf("Target: ");
for (i = 0; i < SIZE; i++){
printf("%5.1f ", trg[i]);
}
putchar('\n');
}
Ao tentar implementar essas funções manualmente, você encontrará princípios e nuances fundamentais que precisarão ser profundamente compreendidos. Em particular, a implementação independente de algoritmos para processamento de estruturas de dados na linguagem C é uma ótima maneira de aprender a resolver problemas, e não procurar soluções prontas.
Não importa a linguagem legal e avançada em que você escreva, de vez em quando aparecem problemas complexos que não podem ser resolvidos usando bibliotecas padrão e abstrações integradas. Nesses casos, essa habilidade é simplesmente necessária.
A propósito, os desenvolvedores que participam de hackathons competitivos costumam treinar essa habilidade, resolvendo problemas fora do padrão apenas em C.
C permite que você toque na programação de "baixo nível"
É conveniente escrever em linguagens modernas de alto nível (Python, C #, Java ou o que você quiser). No entanto, essas linguagens são muito limitadas em sua interação com o hardware. Em outras palavras, você não terá a experiência completa de hardware até que comece a programar em C. As linguagens de programação modernas ocultam detalhes de implementação dependentes de hardware e, em vez disso, emulam algum tipo de abstração. Na maioria dos casos, ele é criado usando uma máquina virtual.
Infelizmente, os iniciantes não têm absolutamente nenhuma ideia sobre gerenciamento de memória, manipulação de arquivos e otimização de código, porque nunca viram exemplos de programação de "baixo nível" em C. Deste ponto de vista, as linguagens de programação modernas automatizam e ocultam muito . A linguagem C força você a fazer muitas coisas com as mãos e a escrever códigos altamente otimizados.
Quanto a mim, esta é uma prova obrigatória para todo desenvolvedor profissional. Bem, pelo menos um backender.
C ensina liberdade e responsabilidade
Quando uma linguagem de programação oferece um conjunto de abstrações amigáveis ao ser humano, ela se torna menos flexível. Cada método integrado ou de biblioteca atua como uma caixa preta embutida em código. Em outras palavras, as linguagens de programação modernas ocultam detalhes de implementação e dizem ao desenvolvedor para simplesmente referir-se a um conjunto de interfaces. O controle manual da alocação de memória dinâmica em linguagens de programação modernas é impossível na maioria dos casos. Enquanto isso, C oferece liberdade real, permitindo que você escolha como implementá-lo em um nível inferior.
Os compiladores C, quando corretamente otimizados, produzem um código assembly incrivelmente rápido. É verdade que, além de definir os sinalizadores de otimização necessários para compilação, você também precisa escrever o código-fonte de alto desempenho. Em C, devemos declarar variáveis cuidadosamente, alocar e limpar memória a tempo, acessar recursos e lembrar de liberá-los. Se C foi sua primeira linguagem, você se acostumará a usar memória e recursos de forma racional e se acostumará a escolher as estruturas de dados ideais. Esse hábito continuará à medida que você começar a escrever em outros idiomas.
C motiva você a escrever um código limpo
Ao contrário das linguagens de programação modernas, você terá que escrever muito mais código para implementar as mesmas tarefas em C. Isso se deve ao fato de que em C muito deve ser implementado em um nível inferior, em vez de usar wrappers e abstrações embutidos de bibliotecas padrão que ocultam detalhes de implementação. Conforme o número de linhas no código aumenta, a complexidade do código também aumenta. Para compensar esse efeito e manter a ordem no projeto, você precisa tentar escrever um código limpo e compreensível.
Escrever código limpo é uma habilidade especialmente solicitada ao trabalhar em grandes projetos comerciais. Se você puder aprender a escrever código C limpo, será mais fácil fazê-lo em outra linguagem mais simples.
Ainda não está convencido?
Com o desenvolvimento ativo do C ++, a linguagem C deixou de ser percebida por muitos como uma linguagem independente. Parece ter se tornado um subconjunto da linguagem C ++. É claro que de fato não é esse o caso. C ++ é uma linguagem de programação verdadeiramente moderna com um conjunto completo de bibliotecas padrão. Na minha opinião, C ++ não deve ser a primeira linguagem a ser aprendida. É verdade que há uma ressalva: se você quiser se especializar nisso no futuro, vá em frente. Nesse caso, essas duas linguagens podem ser ensinadas em paralelo, mas em algum ponto elas se "interceptarão" - e a transição de C para C ++ será orgânica e quase instantânea.
Quase todas as linguagens de programação modernas competem entre si, introduzindo uma nova sintaxe, semântica e estendendo bibliotecas e estruturas padrão. Como se costuma dizer, tudo é para pessoas. Isso é cativante. Mas se futuros desenvolvedores começarem a aprender essas linguagens do zero, eles perderão as oportunidades valiosas fornecidas por C. Em algum ponto, eles simplesmente não podem dar um novo passo em seu desenvolvimento, sem saber como o código funciona em um nível inferior , nem mesmo sabendo como seus frameworks e bibliotecas favoritas são implementados internamente.
Portanto, escolha C como sua primeira linguagem de programação. Levará mais tempo para aprender, mas ajudará você a se tornar um especialista em idiomas mais modernos muito rapidamente no futuro.
Os servidores em nuvem da Macleod são ótimos para desenvolver em C e outras linguagens de programação.
Cadastre-se pelo link acima ou clicando no banner e ganhe 10% de desconto no primeiro mês de aluguel de um servidor de qualquer configuração!