Antes de ser um texto apaixonado de um fanboy qualquer de uma tecnologia qualquer, isso é um texto explicativo do básico do básico sobre
linguagens de programação e compiladores.
Muitas pessoas confundem erroneamente uma linguagem de programação com o seu compilador e com a IDE em que se programa, caso houver uma. Muitas pessoas também confundem
o fato de uma linguagem ser "compilada" ou "interpretada" por um outro sistema como uma limitação da linguagem em si.
O que deve ficar claro para qualquer programador, iniciante ou experiente, é que a linguagem é a parte mais abstrata e flexível do ato de programar em si.
Uma linguagem de programação, assim como a linguagem natural nativa de um povo ou civilização qualquer, não passa de um conjunto de simbolos, grupos de simbolos, palavras
e regras gramaticais para interligação e relacionamento entre esses simbolos.
Mais do que isso, uma linguagem, seja nas artes, nas exatas ou em qualquer campo do conhecimento, é uma maneira de expressar idéias, conceitos, padrões e transmitir informações.
Portanto, uma linguagem de programação é uma maneira de um programador, seja ele humano ou não, transmitir informações e/ou dados a um outro programador, humano ou não, ou a um computador.
Quando eu digo "programador, humano ou não" me refiro ao fato de que o programador pode ser também um sistema ou programa de computador, que simplesmente
traduzem um texto ou programa num nível mais alto e menos específico para um nível mais baixo e mais específico de linguagem.
Sim, programas podem gerar programas, que por sua vez podem gerar programas, e assim por diante. Por exemplo você pode usar um compilador de C para compilar o código fonte do interpretador de PHP ou Python, e depois criar um programa em PHP ou Python para que ele possa ser "rodado".
Isto posto, qualquer pessoa ou empresa pode criar qualquer tipo de linguagem de programação. Ela terá utilidade somente abstrata (ou didática) a menos que uma pessoa ou empresa crie um compilador ou interpretador para essa linguagem.
As possibilidades de uma linguagem podem ser nulas ou infinitas, tudo depende do compilador. Qualquer linguagem pode ser usada para criar sistemas operacionais, rotinas de boot, páginas web, drivers de dispositivo e sistemas comerciais, industriais ou games, bastando que exista um compilador para isso.
Por exemplo a linguagem Pascal. Ela já passou por diversas evoluções e modificações, existem diversos "filhos" dela, como Oxygene, object pascal etc..., mas em essência ela continua a mesma.
Existem vários compiladores de pascal, desde o Turbo Pascal Compiler, passando pelo compilador do Delphi, o Free Pascal Compiler e outros, para outros sistemas operacionais e fins.
A linguagem C também possui o GCC open-source, o compilador C da microsoft, o compilador C da Borland/Embarcadero e assim por diante.
Programadores inexperientes têm a tendência de culpar uma linguagem pelo que se pode ou não produzir com ela. Por exemplo, dizem que com C você pode criar programas em baixo nível, como Sistemas Operacionais e Drivers de Dispositivo, enquanto que em Pascal você não pode fazer isso.
Eu costumo dizer que simplesmente EU, pessoalmente, AINDA não consegui encontrar um compilador de pascal ou qualquer uma de suas derivadas que me permita compilar um driver de dispositivo.
Repare que a culpa não é da linguagem e sim do compilador. Poderia ser o contrário. Se existisse um compilador capaz de compilar drivers de dispositivo em Pascal mas não em C, as pessoas iriam usar Pascal para criar driver de dispositivo e afirmar exatamente o crontrário: que "não dá" para escrever drivers de dispositivo em C.
Com tantas linguagens e tecnologias, amplas ou específicas, conhecidas ou não, que pipocam todo dia, é até um pecado culpar a linguagem pelo que ela pode ou não produzir.
Por exemplo, suponhamos que não existisse nenhum poeta na frança, seria correto dizer que é impossível fazer poesia em Francês? Ou se não existisse nenhum músico na Itália, seria correto dizer que não se pode fazer música em Italiano?
A verdade é que, da mesma forma que existem compiladores com certas capacidades para uma linguagem, poderiam existir compiladores com essa mesma capacidade para qualquer outra.
Eu digo compiladores porque para uma linguagem gerar um executável nativo de um sistema, arquitetura ou processador, ou seja, para gerar um arquivo binário do seu estado mais puro, que nada mais é do que um conjunto de instruções para um determinado processador, uma linguagem precisa de um compilador.
No caso dos interpretadores, eles nada mais são do que programas que leem trechos ou linhas de código, as interpretam e executam, ou as compilam para um formato binário em memória, sob demanda, em tempo de execução e fazem o que tem que fazer.
Os iniciantes insistem em dizer, por exemplo, que C, C++ e Pascal são compilados enquanto que Java, Python, PHP e C# são interpretados.
Eu insisto em dizer que uma linguagem pode ser compilada ou interpretada a medida que exista um compilador ou interpretador para ela. Como programador eu sei que nada impede ninguém de criar um
interpretador para C++, ou uma máquina virtual para Pascal.
Da mesma forma, uma empresa qualquer poderia criar um compilador de Java, que transformasse um codigo fonte Java em um binário puro e nativo de uma determinada arquitetura. Da mesma forma poderiam ser criados compiladores de Python ou PHP, que fizesse, inclusive, drivers de dispositivo em PHP.
Eu já vi, por exemplo, Basic rodar compilado e interpretado. COBOL compilado e interpretado, e assim por diante.
As possibilidades sempre foram infinitas, é só usar a imaginação.
A única coisa que me impede de criar agora um compilador ou interpretador de Portugol agora é o tempo e a dificuldade envolvida.
Muitas pessoas ainda dizem que a melhor linguagem de todas é o Assembly, porque todos os compiladores um dia foram escritos em Assembly, portanto Assembly é a mãe de todos os compiladores e de todas as linguagens.
Vão engano.
Pense no seguinte: Ao criar o primeiro martelo da humanidade, alguém usou uma pedra para fixar o cabo de madeira no martelo propriamente dito, certo?
E ao criar o segundo martelo? Será que não foi mais fácil e inteligente usar o primeiro martelo para montar o segundo?
Assim também é com as linguagens de programação. Da mesma forma como no passado foi usado Assembly para criar o primeiro compilador de C, hoje usa-se muito o C para se criar Assemblers, das mais diversas plataformas.
Se você duvida, faça uma rápida busca no Google e confira o Nasm, um assembler GNU, open-source muito usado e difundido no universo GNU. Baixe os fontes dele, ele é totalmente escrito em C.
Ele poderia ser escrito em pascal, por exemplo. E a única coisa que impediu que ele fosse escrito em assembly foi a praticidade.
Mais uma vez eu repito: qualquer linguagem pode escrever absolutamente qualquer programa, e qualquer programa pode ser escrito em qualquer linguagem. Tudo depende, em primeira instância, do conhecimento e criatividade do programador, e em segunda instância do compilador.
Compiladores e Assemblers também são programas, onde existe uma entrada (um arquivo de código fonte), existe um processamento, e existe uma saída (um arquivo binário, executável, um programa ou parte dele, uma dll etc). Por isso compiladores e assemblers podem ser escritos também em qualquer linguagem.
As pessoas também confundem a linguagem com a IDE. Por exemplo muitos dizem: "eu gosto mais de delphi, porque é fortemente tipado" se referindo à linguagem, quando deveriam dizer "eu gosto mais de object pascal".
Ou dizem : "eu gosto mais de C#, porque nele você cria web sites muito intuitivamente" referindo - se a IDE visual studio, quando na verdade deveriam dizer que gostam de Visual Studio.
Uma IDE, ou Integrated Development Environment (ambiente de desenvolvimento integrado) nada mais é do que um conjunto de softwares que atuam como uma grande caixa de
ferramentas para programadores. Uma IDE contém um editor de código fonte, geralmente com iluminação e destaque de sintaxe, pré validação de sintaxe, recursos para auto-completar código etc...
Uma IDE é uma ferramenta que ajuda e torna mais prático a criação ou formulação de um arquivo de código fonte, bem como o agrupamento de vários desses arquivos em um projeto.
A IDE pode conter geradores de codigos, wizzards, templates, integração com bancos de dados ou leitores / visualizadores / editores de bancos de dados, ou UML. Integração com sistemas de versionamento de código, componentes, snippets, ferramentas de desenho de páginas e formulários e, o mais importante:
Toda a IDE possui uma integração com um compilador. A IDE é uma espécie de "Word" para código fonte. Mas depois do código fonte salvo, a IDE "chama" ou executa um compilador,
que pode ou não vir junto com ela, mandando que o compilador compile o arquivo de código salvo por ela, gerando assim um programa executável.
Muitas IDE's também acompanham um vasto conjunto de bibliotecas de funções e classes, bem como exemplos e snippets, para facilitar o processo de codificação.
Além disso uma função interessante das IDE's é o help, sensível a contexto, tanto da própria IDE e suas ferramentas, como da linguagem para a qual ela foi desenvolvida.
Uma ide não precisa ser específica para apenas uma linguagem, muito menos para um único compilador. Um exemplo disso é o próprio visual studio, que serve para se
escrever código em C#, C++ ou VB, e também possui integração com compiladores dessas três linguagens. Você pode instalar para o Visual Studio, na forma de plugin, uma nova linguagem
e um novo compilador, como no caso da linguagem Oxygene, evolução do object pascal, e o Delphi Prism.
Outras IDE's assim são o Eclipse e o NetBeans, onde você pode instalar novas linguagens e configurar um ou mais compiladores para cada linguagem. Por exemplo eu configurei meu NetBeans para usar tanto o GCC como o Borland C++ para compilar a linguagem C. Eu posso escolher qual usar.
As vezes, aliás, quase sempre, uma empresa adiciona um novo comando ou sintaxe a uma linguagem, criando assim uma nova vertente ou dialeto dela, para criar um recurso especial ou atender uma necessidade específica num novo compilador que está criando.
Isso é muito normal e não é um problema, visto que grande parte da linguagem continua a mesma. Além disso existem padrões, e se você nivelar por baixo verá que
se um código fonte em uma determinada linguagem for escrito visando a intersecção ou o mínimo dos recursos de todos os seus compiladores então você garante
a portabilidade desse código entre os seus vários compiladores, sistemas, plataformas etc.
Isso eleva exponencialmente o número de plataformas, sistemas, bibliotecas e suas combinações nas quais podemos trabalhar.
Linguagens de programação podem ser um assunto tão infinito quanto literatura, poesia ou matemática, por isso eu escolhi algumas dentre as quais gostaria de trabalhar.
Como linguagem eu escolhi o Pascal e Object Pascal devido não somente à facilidade de aprendizado, mas à facilidade de ensino. É uma linguagem robusta, flexível,
fortemente tipada e nem por isso limitada, muito similar ao Portugol, elegante, onde eu posso fazer minha programação tanto sob o paradigma estruturado como sob o
paradigma orientado a objetos. Muitos professores de universidades consideram, ou pelo menos deveriam considerar, pascal como uma boa opção de linguagem ao se ensinar programação.
Eu não teria a prepotência ou a arrogância de discordar de Niklaus Wirth.
Como IDE para trabalhar com Object Pascal eu escolhi o Delphi e sua contraparte Open-Source Lazarus, pela facilidade de se criar formularios e Interfaces com o usuário ricas,
repletas de controles, eventos e interatividade com os usuários, além da facilidade de acesso a diversos bancos de dados, facilidade de deploy, uma certa medida de portabilidade entre outras questões.
Todo compilador e/ou IDE vem junto com uma biblioteca ou conjunto de bibliotecas de classes e funções, com fontes ou simplesmente pré-compiladas, em uma ou mais linguagens.
Essas bibliotecas, as vezes publicas e com contribuições da comunidade, as vezes privadas, contam com um alto gral de robustez, devido ao amplo número de contribuições e correções a que se submeteram, número de usuários e tempo de uso.
No caso do Delphi não podia ser diferente, com as bibliotecas RTL, VCL (de componentes visuais) e a JCL e JVCL do projeto JEDI, fornecem um leque gigante de ferramentas para desenvolvimento, deploy, design etc...
E o lazarus, com sua LCL não fica devendo em nada nesse quesito.
O Delphi pode não ser mais barato que os concorrentes proprietários similares, mas existem versões gratuitas do Delphi, por exemplo o Turbo Explorer Delphi 2006, que como unica limitação impede que você instale pacotes e componentes de terceiros,
limitação esta que pode ser facilmente contornada instanciando - se os componentes em runtime. Versões mais antigas do Delphi, como o 3 e o 4 també já foram distribuídas gratuitamente, e não deixam a desejar se o assunto for ensino e aprendizado de programação.
Como alternativa ao desenvolvimento profissional, com baixo custo, temos o Lazarus, que é o "Delphi" do Free Pascal, livre de todas as formas como um software arte deve ser.
Outra característica marcante do Delphi é o desenvolvimento multi camadas usando sockets, COM e COM+, DataSnap entre outras tecnologias, e a rapidez em desenvolver um sistema nesses moldes.
Os programadores inexperientes tem a mania de "Malhar" ou "Humilhar" uma determinada linguagem e enaltecer outras, ou idolatrar uma linguagem em detrimento de outras, mas o bom programador, o experiente,
procura pelo menos conhecer o básico e os objetivos ou vantagens de todas elas.
Como eu disse todas as linguagens podem servir para todas as coisas e atender a todas as necessidades dependendo do conhecimento, experiência e criatividade do programador.
Existem por aí muitas dicas de como se tornar um bom programador. Eu dou a minha dica aqui, sobre como se tornar um bom programador:
Conhecimento de inglês, desejável inglês fluente
Conhecimento de matemática, pelo menos para não passar vergonha
Apreço pela leitura, vontade de ler, gosto por ler, desejável leitura dinâmica
Deve aprender a PROGRAMAR, e não aprender uma linguagem de programação.
Inglês é óbvio o porquê de aprender e eu não vou entrar no assunto. Leitura dinâmica deveria ser ensinada na escola, na primeira ou segunda série, logo depois de se ensinar o indivíduo a ler. No máximo deveria ser matéria do ensino médio.
Porquê? Simples, por causa da velocidade e sazonalidade com que livros de tecnologia, principalmente programação, são escritos. São escritos em um ano e tornam-se obsoletos no ano seguinte.
A leitura simplesmente intelectualiza o indivíduo, não importa qual é a área.
Acho que todo programador deveria saber muito sobre a linguagem que mais GOSTA, o suficiente sobre uma linguagem interpretada qualquer: (Java, Perl, Python, PHP, Ruby...), o suficiente sobre a linguagem que mais TRABALHA, e o básico de C.
C é uma grande linguagem. É a única linguagem que todos respeitam, ninguem xinga, ninguém malha e ela é respeitada por todos, até pelos que não a utilizam no seu dia a dia ou simplesmente não a conhecem a fundo.
Qualquer programador tem que saber C, não simplesmente porque ela é uma grande linguagem, mas porque foram escritos grandes compiladores para ela.
Batendo novamente na tecla de linguagens compiladas (quando existe um compilador para elas) e linguagens interpretadas (quando existe apenas um interpretador para elas), todos nós sabemos a diferença entre as duas:
As linguagens compiladas geram um programa mais rápido (o compilador gera), enquanto a maioria das linguagens interpretadas geram programas fáceis de se fazer ou dar manutenção, com recursos de reflexão e metaprogramação.
Linguagens compiladas geram executaveis nativos, menores, mais rápidos, embora sejam mais complicadas. Linguagens interpretadas são mais fáceis e flexíveis, tornando-as mais produtivas, embora sejam mais lentas e pesadas.
Linguagens compiladas precisam ser recompiladas em outros sistemas operacionais, se for possível, enquanto que linguagens interpretadas são portáveis direto para outros sistemas operacionais contanto que tenham o runtime, máquina virtual, interpretador ou conjunto
de frameworks correto e adequado ao programa, e VOCÊ tenha paciência de levar tudo isso pra cá e pra lá.
Todas as linguagens servem para fazer programas, porém,
linguagens compiladas fazem drivers de dispositivos e programas em modo kernel enquanto linguagens interpretadas tem uma certa facilidade para se fazer scripts e páginas da web.
O Delphi é compilado, ou melhor, uma ferramenta para se compilar object pascal, embora o compilador não tenha todos os recursos de um compilador C. Eu nunca vi um programa em modo kernel feito em Delphi... EU nunca vi, você pode ter visto.
Mesmo assim o Delphi possui todas as facilidades e flexibilidades de uma linguagem Interpretada, OO, dinâmica como Java ou Ruby. Além de ser produtiva e gerar executáveis rápidos.
Não, tudo isso acima é besteira e ao mesmo tempo não é, COMO EU JÁ DISSE: Não adianta bater na tecla de linguagens interpretadas Vs. Linguagens compiladas porque, como eu já disse novamente, todos já sabemos a diferença.
Java? Eu curto, acho legal, respeito os fanáticos (sim linguagem de programação, para alguns, é como religião, existem fanáticos), mas eu não curto a JVM em si. Não acho legal ser obrigado a ter 1GB de ram pra rodar um hello world com
todos os recursos da JVM que eu não vou usar. Não acho legal precisar de uma supermáquina pra rodar o TD-REDF, validador e transmissor de nota fiscal paulista do governo, que é capaz de transformar em uma carroça o mesmo computador que roda O SEU SISTEMA COM RAPIDEZ E LEVEZA.
A medida que eu for precisando de Java no meu trabalho eu vou usando, porque não, afinal ele está no topo da literatura, no apogeu do uso, no ápice das contribuições da comunidade, literalmente bombando.
Daqui pra frente o que vier pode ser decadência....
Existem, claro, outras implementações da JVM, para outras plataformas, assim como existem para .Net etc... Acredito ainda que parte do peso e performance de aplicativos feitos em Java se devam a problemas de design e projeto por parte de seus idealizadores, e não culpa da JVM em si.
Nem sempre, ou quase nunca, o problema é da linguagem, compilador, interpretador, vm, computador....
Tem programador que faz caca em Delphi e culpa o Delphi, faz caca em Java e culpa o Java, faz caca em Assembly e culpa o Assembly, simplesmente faz caca e não assume.
Assim como um BOM PROGRAMADOR programa bem em qualquer linguagem, um PROGRAMADOR MEDÍOCRE FAZ MEDIOCRIDADE EM QUALQUER LINGUAGEM.
Programadores medíocres são aqueles que sabem uma linguagem apenas, mas não sabem programar de verdade.
Eles vivem se perguntando: "o que será do futuro?", "O que será do mercado?" , "A linguagem x está falindo?" , "Compensa aprender y?", "o que vai ser do meu emprego/carreira se a linguagem z morrer?", "A empresa a comprou a b, que vai ser de mim?", "a linguagem K está morrendo, morrerei junto?" ....
Eu digo aqui, com todas as letras, o que será do futuro e do mercado:
DANE-SE O FUTURO E O MERCADO!
Eu faço meu próprio futuro, eu faço meu próprio mercado.
Eu gosto de Delphi, gosto de C#, C e outras linguagens. Vou continuar a usar todas as que eu gostar, tanto pessoalmente como profissionalmente de acordo com minhas necessidades ou vontades.
Nenhuma linguagem desaparece, elas evoluem como a ortografia do nosso bom e velho português.
Sim, fábricas de compiladores podem, um dia, desaparecer, assim como poetas e romancistas morrem, mas não levam a linguagem junto para o túmulo.
E os bons de verdade, meu amigo, são e serão sempre IMORTAIS...
Arimateia JR 11 de junho de 2010 22:21
Olá, sou programador tbm e fiquei maravilhado com esse seu post. Muito bom. Parabéns.
Vitor Rubio 14 de junho de 2010 13:34
Obrigado Arimateia.
Eu simplesmente gosto de Delphi.
Se você quer criar aplicações compiladas, rápidas, Win32 ou Win64 nativas, em um EXE standalone, sem ter que instalar frameworks e VM's, as únicas opções são os respeitadíssimos C e C++ e os derivados de Pascal, Delphi e Lazarus. Eu não conheço nenhum outro.
Anônimo 7 de agosto de 2010 02:48
Uma Breve lição para Programadores!
Vitor Rubio 7 de agosto de 2010 17:53
Valew Marlon :)
Wellington B. Souza 5 de setembro de 2010 08:42
Olá Vitor, primeiramente parabéns pelo seu post. Muito instrutivo.
Sou programador há pelo menos 15 anos. Comecei com Cobol, passei pelo Clipper e VB até conhecer o Pascal (Turbo Pascal 8 e depois o Delphi 1). Utilizei o Delphi profissionalmente até a versão 7, mas a indústria foi abandonando o Pascal a favor de outras, principalmente Java e C#, o que me obrigou a mudar um pouco a abordagem. Depois de uma longa temporada com Delphi, tive que aprender outra linguagem: Java.
Estou com a linguagem Java há 6 anos e graças a sua similaridade com C/C++ eu também aprendi as duas :)
Concordo em grande parte com tudo que vc disse, embora eu não seja tão preciosista em separar o que é linguagem, IDE e ambiente de runtime. Apesar de eu saber que são coisas diferentes, por questão de simplicidade costumo falar sobre a "linguagem" de forma mais ampla, levando em conta todos os artefatos (linguagem, compilador, IDE, runtime, etc).
Acredito que cada linguagem tem seus pontos fortes. Por exemplo, eu acho que Delphi, C/C++ sejam linguagens adequadas para escrita de software que precisem de uma inicialização rápida e para interfaces gráficas (aplicações desktop).
Com a popularização da internet, existem cada vez mais aplicações sendo escritas para executar no browser. Há quem diga que a temporada das aplicações Desktop já passou e que daqui pra frente tudo será na web, sendo as aplicações acessadas de diversos tipos de dispositivos, desde celulares, Tvs, e por fim os computadores. Se esta tendência for verdadeira, no futuro teremos apenas aplicações server-side (aplicações web e sistemas de middleware) .
Aplicações server-side podem possuir milhares de usuários conectados e precisam de uma segurança que não encontramos nativamente em Delphi, C/C++: Garbage Collector e Inexistência de ponteiros. Aplicações server-side nunca (ou quase nunca) devem parar. Eu considero Java mais adequada para este tipo de aplicação por que a torna mais imune a erros de programação que possam tornar o sistema indisponível (vazamento de memória, access violation, etc).
Outro ponto a favor de usar Java para server-side é que este tipo de aplicação não requer inicialização rápida e não possuem interface gráfica (contrário de aplicações desktop). A JVM pode demorar inicializar, mas depois da inicialização, graças às otimizações que sofreu com o tempo, em alguns casos pode ser mais performática que linguagens nativas como Delphi, C/C++; pois existem otimizações que a compilação estática não consegue fazer e que a compilação dinâmica consegue fazer.
Há algum tempo atrás ouvi uma analogia que gostei e vou adaptar para este caso: A JVM é como um navio cargueiro, depois que adquire velocidade em alto mar não pára facilmente (adequada para server-side), enquanto aplicações nativas são como um jet sky, são muito rápidas mas podem ser paradas facilmente pelo usuário ou por erros de programação (adequadas para desktop, pois se pararem basta abrir a aplicação novamente).
Hoje grande parte do sucesso do Java vem da JVM, pois ela sofreu diversas otimizações desde que foi criada para tornar as aplicações que executam sob ela mais performáticas. Não considero que Java seja a linguagem mais adequada para a criação de aplicações Desktop, mas com as super-máquinas que temos hoje a velocidade de inicialização e a responsividade das interfaces gráficas de uma aplicação escrita em Java não são assim tão perceptíveis pelo usuário, por esse motivo tem muita gente usando Java para tudo. De brinde as aplicações já nascem multiplataforma (sem recompilação).
Wellington B. Souza 5 de setembro de 2010 08:43
Com a melhoria de desempenho dos processadores que aconteceu recentemente (múltiplos cores) e barateamento da memória, os ambientes de execução mais pesados passam a ser alternativas viáveis, tornando o uso de linguagens de script (linguagens interpretadas) mais comuns do que eram no passado. Além disso foram criados compiladores para algumas linguagens de script para gerar bytecode para execução sob a JVM para tirar proveito de uma das melhores máquinas virtuais já escritas (jruby, jpython) e outras novas linguagens como Scala e Clojure (linguagens funcionais).
Acredito que a longo prazo o Java vai ceder espaço para estas novas linguagens mas a execução será sob a JVM por razões de portabilidade, segurança e desempenho.
Adoro da linguagem Pascal, mas infelizmente a indústria não a usa com tanta intensidade que usou no passado, basta olhar para o Delphi, o que foi feito de importante depois do Delphi 7 pela Borland? Além disso, as universidades seguiu a indústria e praticamente não ensinam mais Pascal aos estudantes. Normalmente o curso normal é pseudo-código (portugol e afins) => C => C++/Java
Vitor Rubio 5 de setembro de 2010 16:14
Então Wellington, como eu disse, cada linguagem tem suas vantagens e desvantagens. E essas vantagens e desvantagens pouca relação tem com a linguagem ou o compilador em si, mas com a facilidade ou rapidez com que você faz algumas coisas.
Separar os componentes linguagem, compilador, runtime e IDE não é preciosismo. Muito pelo contrário: é abrir a mente para fugir de preciosismos. Explicando porque penso assim: você pode ter inúmeros compiladores diferentes para uma mesma linguagem, assim como inúmeras bibliotecas ou IDES para um mesmo compilador. Tudo isso pode estar em ambientes diferentes.
Você pode ser uma pessoa que desenvolve sistemas comerciais ou industriais, então para você o que importa é o produto final, o conjunto. Mas tenho certeza que para quem desenvolve bibliotecas ou IDE's a linguagem e o compilador fazem bastante diferença. São coisas totalmente diferentes do ponto de vista deles.
Para quem precisa desenvolver aplicações comerciais ou industriais rapidamente o conjunto ou produto completo é muito importante, mas para quem desenvolve software do zerco, como runtimes e IDE's o mais importante é o compilador.
Vou citar dois exemplos: as linguagens D e GO são duas linguagens moderníssimas, com seus respectivos compiladores muito bons, mas que ainda não se popularizaram entre desenvolvedores "finais" porque ainda não tem uma biblioteca, uma IDE e uma comunidade bem consolidada.
Acontece diferente com o Ruby e o Python, que apesar de serem muito modernos, são mais velhos que o GO e o D.
Citei o GO e o D porque são compiladores. Os mais modernos compiladores, pois as outras linguagens modernas são interpretadas, pseudo-compiladas ou compiladas em runtime, como no caso do ambiente .net.
Tenho certeza que o Java é uma das melhores linguagens para aplicações web, que rodam no servidor. Mas se apegar muito ao Java pode ser um erro. Depois da ascenção de toda linguagem vem sua queda. E depois de ser adquirida pela oracle e alguns escandalos de briga por patentes envolvendo o android pode começar o declínio do Java. Te aconselho a abrir sua mente para o Python e o Ruby.
Gosto do Pascal pelo apelo didático idealizado por Niklaus Wirth, mas Pascal não é minha única linguagem.
Até mesmo o java roda em cima de várias camadas de software (runtimes, JVM, SO) que não são feitos em Java. Não importa o quanto o Java seja bom, mas toda essa parafernalha abaixo dele tem que ser boa também. De que adiantaria o Java ter um excelente garbage collector e a JVM ter um memory leak. No fundo no fundo a unica linguagem que importa é a de máquina.
Aconselho você a ler essa entrevista com Brian Kernighan, que foi o co-autor do primeiro livro sobre linguagem C juntamente com Dennis Ritchie, o criador da linguagem C. http://www.simple-talk.com/opinion/geek-of-the-week/brian-kernighan-geek-of-the-week/
Ele simplesmente diz que se estivesse preso em uma ilha deserta a unica coisa que ele precisaria era de um compilador de C e mais nada. Também diz, e eu concordo, que os programadores de hoje não programam, apenas juntam componentes pré prontos e regra de negócios. E é verdade. O quanto sabemos realmente sobre algoritmos?
Outra reportagem legal é essa http://www.simple-talk.com/opinion/geek-of-the-week/bjarne-stroustrup-geek-of-the-week/ com o criador de C++, Bjarne Stroustrup.