Meu conselho:
bash
(e seus tipos) não são linguagens de programação de uso geral. Embora seja possível realizar scripts sofisticados bash
, não é a melhor maneira de aprender programação em geral. É a maneira mais natural de realizar tarefas de administração de sistemas que giram principalmente em torno da execução de outros programas, manipulando seus arquivos e diretórios de dados e organizando entradas e saídas de e para eles. Se bash
for um martelo, reserve-o para problemas que realmente parecem unhas. Aprender a fazer qualquer coisa não trivial bash
será consideravelmente mais fácil se você aprender alguns subconjuntos muito pequenos de sed
e awk
(uma vez que a manipulação de strings bash
é amplamente inspirada na sintaxe de operações semelhantes nessas "pequenas" linguagens).
- Para programação de uso geral no Linux, você ouvirá muitos argumentos apaixonados. Os dois melhores candidatos são Perl e Python . Essas são linguagens de script de nível muito alto, de uso geral, que expõem funcionalidade de baixo nível suficiente para realizar quase qualquer operação acessível a qualquer processo de espaço do usuário no sistema, e com enormes coleções de módulos e bibliotecas pré-escritas disponíveis.
Eu recomendo que você leia um texto introdutório em C e gaste algum tempo executando os comandos strace
e ltrace
em alguns comandos simples de utilitários como ls
e mkdir
e /bin/echo
etc. (Na verdade, atualmente, eu sugiro que ltrace -S
substitua, strace
mas invista na saída dos comandos e no a ltrace
saída aumentada pela -S
opção será extremamente educacional).
C é a principal linguagem de programação na qual o kernel do Linux e o GNU libc são gravados. (Peças pequenas estão em montagem). Quase todos os programas em um sistema Linux (ou outro tipo UNIX) estão vinculados às bibliotecas C (libc). Os principais intérpretes Perl e Python (e a maioria das outras linguagens de script) também são escritos em C. Esses programas (o kernel, as bibliotecas comuns do sistema e os vários intérpretes da linguagem de script) são todos escritos pelos programadores C, seu design e os recursos são fortemente influenciados pelas implementações subjacentes. Portanto, um entendimento mais profundo de qualquer um desses itens implica o entendimento C. Você não precisa saber nada sobre C ++ nem Java para entender a programação nesse nível. (Cada um pode ser interessante e necessário por si só, dependendo da sua carreira,
Portanto, se você concorda com minhas premissas até agora, reduzimos para uma escolha entre Perl e Python.
Aqui é onde começam as verdadeiras guerras de chamas.
Meu conselho é focar primeiro no Python (2.x). Python tem uma sintaxe relativamente simples e consistente. Você pode aprender o básico da sintaxe Python em algumas horas e essa é a grande maioria da sintaxe que você encontrará. Existem apenas alguns recursos (compreensões de lista, expressões geradoras, decoradores) que são rugas da sintaxe básica. Portanto, a maior parte de seu esforço em aprender Python será dedicada a aprender as extensas bibliotecas padrão e a tentar encontrar a "melhor" maneira de usá-las (e descobrir quais são os conjuntos específicos de exceções que valem a pena manipular para tornar seus programas robustos) e, mais importante, na aprendizagem dos conceitos subjacentes.
Eu acho que as extensas bibliotecas do Python e a sintaxe relativamente simples têm duas desvantagens distintas.
Primeiro, à medida que você aprende como agir em um nível muito alto no Python, você pode achar entediante o pensamento de ter que trabalhar em um nível mais baixo. Onde trabalho Perl é o padrão. Protótipo do meu trabalho em Python, onde sei que posso fazê-lo funcionar com muito mais rapidez e confiabilidade do que em Perl; então eu temo ter que passar e portar para Perl para meus colegas. (Eu era razoavelmente bom em Perl anos antes de usar o Python - por isso não é uma questão de simples familiaridade).
A outra desvantagem é que às vezes é difícil encontrar a maneira de nível mais alto para realizar uma determinada tarefa no Python. Por exemplo, para buscar uma página da web, você pode inicialmente tentar fazê-lo com soquetes de baixo nível ... o que funcionará. No entanto, você duplicaria bastante código que já pode ser encontrado, incluindo nos módulos urllib
e / ou urllib2
. O próprio fato de que as bibliotecas padrão, a partir da versão 2.7.1, inclui ambas, faz meu argumento. Sempre que possível, os mantenedores do Python estenderam os módulos e APIs mais antigos de forma transparente; no entanto, existem dezenas de casos em que o Python retém dois ou três módulos em que a extensão transparente não foi possível por algum motivo. (Para outro exemplo, você poderia olhar para as opções para analisar opções de linha de comando: argparse
, optparse
egetopt
. Há pouco dano em escrever seus programas usando getopt
(o mais antigo deles). Para utilitários muito simples, com poucas opções e uma convenção rígida de chamadas (usada apenas por um pequeno grupo de pessoas, por exemplo), então não há nada inerentemente errado em passar por cima de sys.argv
si mesmo. No entanto, geralmente vale a pena ler os documentos com atenção e seguir os links na parte inferior dos módulos de nível mais antigo ou mais baixo que descrevem os recursos de nível mais novo ou mais alto disponíveis.
Meu conselho é baseado na minha opinião de que você deseja se concentrar em conceitos mais profundos e não precisa gastar muito do seu tempo e esforço em questões sintáticas e específicas da linguagem. A compreensão de quando usar um subprocesso, versus um encadeamento ou os recursos de multiprocessamento incluídos no Python tem relativamente pouco a ver com a linguagem e tudo a ver com a proficiência em programação, independentemente da linguagem. (No momento em que você pode entender os argumentos sobre o modelo orientado a eventos do Twisted em comparação com o encadeamento e o multiprocessamento, provavelmente você já dominou o Python e estará pronto para programar em qualquer idioma).
O contra-argumento, para Perl, é simples e prático. Existem muitos outros empregos por aí que exigirão, especificamente, habilidades com Perl. O Perl é uma linguagem poderosa e possui bibliotecas extremamente extensas. (O núcleo do Perl distribuído com a maioria dos sistemas Linux abrange uma gama menor de funcionalidades do que as bibliotecas Python padrão; presume-se que você instalará um número significativo de pacotes adicionais da sua distribuição ou através do CPAN - o Comprehensive Perl Archive Rede). (Por outro lado, há menos módulos e pacotes Python que preciso buscar separadamente ... eles estão disponíveis no PyPI - o Índice do Pacote Python).
Portanto, se você aprender Perl, terá uma vantagem para encontrar empregos, principalmente empregos de administrador de sistemas, a curto prazo. No entanto, a sintaxe de Perl é ... bem ... nas palavras de alguns de seus próprios entusiastas ... "patologicamente eclética!" O Perl pode ser extremamente conciso e seu código é preenchido com um pouco de pontuação. Aqueles que o amam argumentam incessantemente que é "fácil" e faz todo sentido - e terão inúmeras oportunidades para fazê-lo em fóruns cheios de confusão sobre exatamente como um determinado trecho de código foi interpretado. A sintaxe e o idioma usados na documentação e por quem os apóia em fóruns públicos são diferenciados ao ponto em que você pode gastar um esforço considerável para aprendê-los.
Agora, por favor, entenda que este comentário anterior é subjetivo e tendencioso. É possível que você tente o Perl e descubra que a sintaxe é intuitiva e agradável. Se assim for, mais poder para você. No entanto, pessoalmente acho que minha compreensão das idiossincrasias de Perl decai muito rapidamente. Mantenho os fundamentos, mas acho que é uma luta sempre que preciso voltar a ela por mais do que algumas linhas de código.
Existem muitas outras linguagens que você estudaria, Java, Lisp e Scheme, TCL, Scala e assim por diante. No entanto, sugiro começar com um que ofereça o melhor equilíbrio entre utilidade e simplicidade.