Por que utilizar Linux para desenvolvimento?

Olá pessoal,

Inicialmente quero dizer que não é intenção do tópico criar uma flamewar sobre qual o melhor SO.

Já trabalho com desenvolvimento JAVA a 4 anos e tendo passado por várias empresas nunca precisei de um conhecimento mais avançado em Linux visto que os ambientes eram sempre Windows. Ultimamente como venho buscando estudar várias coisas novas comecei a me perguntar se saber linux me seria realmente útil ou se poderia continuar trabalhando no windows sem me preocupar, visto que quase todo desenvolvedor mais sênior que conheço utiliza linux ou macOS.

Então minhas dúvidas são: Qual a real vantagem de desenvolver utilizando um SO como linux? Vocês ganham em produtividade? Ou talvez ferramental? Se positivo, qual o nível de conhecimento que um desenvolvedor deveria ter sobre linux a ponto de não precisar ser um administrador de sistemas? E o macOS também é válido?

Abraços pessoal!!!

Poder falar que não usa software pirata.

Bom, aqui onde trabalho era uma “Windows-shop” mas devido ao fato de termos comprado um sistema gigante que usa Java e Linux, o departamento teve de aprender Linux na marra. (Como estou trabalhando com a parte C++ que não foi migrada para o Linux, infelizmente tenho de lidar com as manias do Windows ainda :frowning: )

De modo geral, é interessante você aprender pelo menos os conceitos básicos do Linux, mesmo que no dia-a-dia você acabe desenvolvendo em Tomcat no Windows você eventualmente terá de efetuar o deploy em WebSphere ou WebLogic no Linux (que é o que ocorre em muitos sites grandes que usam Java - o servidor roda em Linux e raramente em Solaris; nunca vi um servidor rodando Mac OSX Server :frowning: ) e entender as diferenças básicas entre o Windows e o Linux.

Ajuda bastante você instalar o Cygwin na sua máquina :slight_smile: - desenvolvedor que se preze tem de saber usar o grep e o awk :slight_smile:

Eu trabalho no linux (Ubuntu) com desenvolvimento java, na epoca
eu percebi que as ferramentas que eu utilizava eram executadas mais rápido que no windows
no começo foi dificil a mudança de um para outro

Hoje só uso linux nem windows tenho mais na máquina só se for para joga

Pq pra min linux: hoje vc tem acesso a muitos programa open source voltado para linux e claro windows tbm,
linux deixou a muito tempo de ser um sistema dificil para uso inicial…
o terminal do linux é animal eu gosto de fica fazendo algumas coisas por ele.

E outra para usar o linux é bom dar uma estudada em alguns comandos básicos mas nao precisa mais do isso

Se eu estiver errado podem me corrigir!!

Para desenvolvimento vá de Ubuntu essa distribuição tá animal

Linux é ótimo pra desenvolvimento, você tem uma série de ferramentas bacanas pra sua linha de comando e tudo mais.
Só tem um problema na minha opinião. Uma vantagem do Linux na prática pra mim é algo bastante bobo: o fato de possuir um sistema de arquivos que é case sensitive: assim eu consigo evitar uma série de problemas que costumam ocorrer quando, por exemplo, usamos o Windows como máquina de desenvolvimento e o Linux como máquina de produção. Como disse, é um motivo muito bobo.

Se você trabalha com web, não há como negar o fato de que existe uma criatura lá fora chamada Internet Explorer, contra a qual você se verá de tempos em tempos obrigado a enfrentar quando for testar seus sistemas. Sim, é verdade que você pode incluir uma máquina virtual no seu computador e com ela iniciar o IE e tudo mais. Mas ai entra a seguinte pergunta: será que não é trabalho demais pra algo que deveria ser trivial? Eu uso uma máquina Windows para desenvolvimento basicamente por causa disto. Já tentei desenvolver sistemas ignorando o IE arrebitando meu nariz pra ele. Mas sabe o que acontecia? Eu estava prejudicando meus clientes.

Sim, pode até existir aquela falsa impressão de que se você evitar que seu cliente use o IE você o estará beneficiando. Mas sabe qual é a verdade? Quando fazemos isto acabamos por tirar deste o direito da escolha, o que é ruim para os negócios.

Eu usei Linux por uns 8 anos como meu sistema padrão. Agora estou usando Windows devido a umas incompatibilidades com meu novo notebook. :stuck_out_tongue:

Prefiro o Linux por alguns motivos:
O terminal é bem mais avançado, o que dá um ganho muito grande em produtividade.
Eu gosto do estilo dos programas no Linux, normalmente são mais simples e funcionais (nem todos, claro).
O sistema de pacotes, presente na maioria das distribuições, agiliza muito. É muito melhor do que ter que ir procurar programas nos respectivos sites.
Pra programar com Ruby, node.js, python eu acho que é bem melhor. Fico meio perdido no Windows… sem falar que em alguns casos demora muito mais pra chegar as versões pra windows destas linguagens.

A única coisa que me incomoda é trabalhar com Flex. Aí não tem jeito, no Linux fica uma droga. Outro ponto que as vezes me incomoda no Linux é de alguns drivers não funcionarem tão bem.

Eu acredito que seja fundamental para um bom desenvolvedor entender sobre Linux. Primeiro por que vai ver algo diferente de Windows e, neste processo, vai aprender muito. Segundo por que normalmente o que desenvolvemos vai pra produção em servidores Linux. :smiley:

Falou.

Obrigado pelas respostas pessoal, ainda sobre o ganho de produtividade escuto muito falar sobre o ganho de produtividade com o bash. O que exatamente vocês fazem no bash que acaba ganhando na produtividade?
Outra duvida é: ok, comecei a usar linux, o que preciso aprender do SO como desenvolvedor já que trabalho puramente no desenvolvimento e nao como administrador?

Abracos,

Hugo

Uso os 2 para desenvolvimento, tanto no meu desk(phenom X3) quanto no note(i5) sinto muito mais agilidade no linux(Ubuntu 12.04), os programas fluem melhor.
As facilidades da “central de programas” e o APT-GET me agradam muito. Terminal do linux é muito util.
Brinquei um pouco com ruby, nesse o linux ganhou de 10x3 do windows, no WIN fica muito lento pra rodar os caomando do rails e levantar o webserver.
C# uso o windows mesmo ( Ainda não aceitei a ideia do MONO)
No caso do casesensitive é uma grande vantagem usa linux, mas se o dev tomar cuidado não é problema usar windows.
Linux tem de aprender o basico do SO e aprender a fazer as instalações e configurações. Com o tempo vai expandindo o conhecimento sobre o SO.
Na verdade acho melhor vc usar o SO que sente melhor, eu particularmente prefiro linux , gosto de saber o que ta acontecendo no meu SO e gosto de poder atuar nele.

Use os 2 e tire as conclusões!

Abraços

Eu atualmente só utilizo linux, gosto dele pela liberdade propiciada, por exemplo:

Até algum tempo atrás eu desenvolvia somente com J2SE e swing, então possuía uma maquina modesta para tal, até que comecei a trabalhar com android, então precisei ganhar desempenho, para não precisar trocar de maquina, mudei de KDE para XFCE e tive um ganho de desempenho sem muita dor de cabeça…

Além do que ambiente novos do Linux como Gnome3 e Unity, apesar de odiados por muitos por sua quebra de paradigma, após um determinado tempo se mostram ambiente altamente produtivos, devido as suas peculiaridades. A instalação e atualização de softwares também é algo simples, dependendo da distribuição, devido aos gerenciadores de pacotes como apt e pacman.

E normalmente os servidores utilizados são linux, e como bem sabemos existem pequenas divergências entre ele e o sistema da M$, logo, utilizando linux você evita problemas de sincronia entre ambiente de desenvolvimento e produção.

Por fim existem fatores que eu particularmente relevo, e muito, que é o conhecimento adquirido, perder medo de terminal, aprender a configurar certos arquivos, e se acostumar com a liberdade de poder fazer o sistema do forma que você preferir.

[quote=cleciusjm]Eu atualmente só utilizo linux, gosto dele pela liberdade propiciada, por exemplo:

Até algum tempo atrás eu desenvolvia somente com J2SE e swing, então possuía uma maquina modesta para tal, até que comecei a trabalhar com android, então precisei ganhar desempenho, para não precisar trocar de maquina, mudei de KDE para XFCE e tive um ganho de desempenho sem muita dor de cabeça…

Além do que ambiente novos do Linux como Gnome3 e Unity, apesar de odiados por muitos por sua quebra de paradigma, após um determinado tempo se mostram ambiente altamente produtivos, devido as suas peculiaridades. A instalação e atualização de softwares também é algo simples, dependendo da distribuição, devido aos gerenciadores de pacotes como apt e pacman.

E normalmente os servidores utilizados são linux, e como bem sabemos existem pequenas divergências entre ele e o sistema da M$, logo, utilizando linux você evita problemas de sincronia entre ambiente de desenvolvimento e produção.

Por fim existem fatores que eu particularmente relevo, e muito, que é o conhecimento adquirido, perder medo de terminal, aprender a configurar certos arquivos, e se acostumar com a liberdade de poder fazer o sistema do forma que você preferir.[/quote]

Oi cleciusjm, eu tive bastante dificuldade com o Unity. No seu caso, quais foram os ganhos que ele trouxe pra você?

Hugo,

vai de Ubuntu.

Pq eu uso? Estabilidade e performance. Além disso, não posso me dar ao luxo de parar meu trabalho para reinstalar o Ruindows (a cada 6 meses ele vira uma carroça).

[quote=kicolobo][quote=cleciusjm]Eu atualmente só utilizo linux, gosto dele pela liberdade propiciada, por exemplo:

Até algum tempo atrás eu desenvolvia somente com J2SE e swing, então possuía uma maquina modesta para tal, até que comecei a trabalhar com android, então precisei ganhar desempenho, para não precisar trocar de maquina, mudei de KDE para XFCE e tive um ganho de desempenho sem muita dor de cabeça…

Além do que ambiente novos do Linux como Gnome3 e Unity, apesar de odiados por muitos por sua quebra de paradigma, após um determinado tempo se mostram ambiente altamente produtivos, devido as suas peculiaridades. A instalação e atualização de softwares também é algo simples, dependendo da distribuição, devido aos gerenciadores de pacotes como apt e pacman.

E normalmente os servidores utilizados são linux, e como bem sabemos existem pequenas divergências entre ele e o sistema da M$, logo, utilizando linux você evita problemas de sincronia entre ambiente de desenvolvimento e produção.

Por fim existem fatores que eu particularmente relevo, e muito, que é o conhecimento adquirido, perder medo de terminal, aprender a configurar certos arquivos, e se acostumar com a liberdade de poder fazer o sistema do forma que você preferir.[/quote]

Oi cleciusjm, eu tive bastante dificuldade com o Unity. No seu caso, quais foram os ganhos que ele trouxe pra você?[/quote]

Gosto de comparar o Unit e o Gnome 3 ao eclipse, inicialmente’e mais complexo, diferente(pra quem vem do netbeans) porém a medida que você vai se acostumando, nota que ao se trabalhar da forma como o ambiente foi projetado, temos ganhos grandes de produtividade. Eu tenho como ponto positivo do Unit suas teclas de atalho que dão uma agilidade incrível quando você se habitua com elas, visual clean, que te permite se concentrar mais no que está fazendo. Demorei pra me acostumar com ele, atualmente uso ele na empresa e Gnome 3 no laptop. E por fim temos a barra de busca, que é ativada com o toque em uma tecla e permite que com poucas ações se faça tudo o que deseja no SO, e praticamente sem utilizar o mouse.

Vejo o Unit como algo semelhante ao MacOS, bonito e produtivo, porém ainda pouco personalizável.

[quote=cleciusjm][quote=kicolobo][quote=cleciusjm]Eu atualmente só utilizo linux, gosto dele pela liberdade propiciada, por exemplo:

Até algum tempo atrás eu desenvolvia somente com J2SE e swing, então possuía uma maquina modesta para tal, até que comecei a trabalhar com android, então precisei ganhar desempenho, para não precisar trocar de maquina, mudei de KDE para XFCE e tive um ganho de desempenho sem muita dor de cabeça…

Além do que ambiente novos do Linux como Gnome3 e Unity, apesar de odiados por muitos por sua quebra de paradigma, após um determinado tempo se mostram ambiente altamente produtivos, devido as suas peculiaridades. A instalação e atualização de softwares também é algo simples, dependendo da distribuição, devido aos gerenciadores de pacotes como apt e pacman.

E normalmente os servidores utilizados são linux, e como bem sabemos existem pequenas divergências entre ele e o sistema da M$, logo, utilizando linux você evita problemas de sincronia entre ambiente de desenvolvimento e produção.

Por fim existem fatores que eu particularmente relevo, e muito, que é o conhecimento adquirido, perder medo de terminal, aprender a configurar certos arquivos, e se acostumar com a liberdade de poder fazer o sistema do forma que você preferir.[/quote]

Oi cleciusjm, eu tive bastante dificuldade com o Unity. No seu caso, quais foram os ganhos que ele trouxe pra você?[/quote]

Gosto de comparar o Unit e o Gnome 3 ao eclipse, inicialmente’e mais complexo, diferente(pra quem vem do netbeans) porém a medida que você vai se acostumando, nota que ao se trabalhar da forma como o ambiente foi projetado, temos ganhos grandes de produtividade. Eu tenho como ponto positivo do Unit suas teclas de atalho que dão uma agilidade incrível quando você se habitua com elas, visual clean, que te permite se concentrar mais no que está fazendo. Demorei pra me acostumar com ele, atualmente uso ele na empresa e Gnome 3 no laptop. E por fim temos a barra de busca, que é ativada com o toque em uma tecla e permite que com poucas ações se faça tudo o que deseja no SO, e praticamente sem utilizar o mouse.

Vejo o Unit como algo semelhante ao MacOS, bonito e produtivo, porém ainda pouco personalizável.[/quote]

O correto é comparar unity com gnome-shell, pois ambos estão rodando em cima do gnome3. Eu prefiro o gnome-shell porque o desktop se torna muito simplificado. Quanto ao unity, acho ele cheio de “pontos cegos” como é o caso daquela barra do lado esquerdo.

Alguns pontos que eu identifiquei nas vezes que desenvolvi em linux:
Pontos positivos:
1 - o SO é mais enxuto, o gerenciamento de memória, disco e outros recursos é melhor, portanto, mais rápido. Claro que isso é relativo e nem se pode dizer que "usando a mesma máquina… blá blá blá, pois as versões de aplicativos para Windows e Linux é que podem ter sido desenvolvidas com otimização para este ambiente.
2 - Se precisa de algo, um apt-get ou similar resolve o problema. A comunidade é muito ativa e facilmente se encontram respostas para praticamente tudo.
3 - O terminal (konsole) está anos-luz à frente do Windows. Downloads feitos por ele (vide sudo apt-get install), são muito mais rápidos.
4 - Se você cansar do KDE, pode optar pelo Gnome ou vice versa ou por outra interface gráfica (claro, vai precisar adaptar-se e alterar algumas coisas).
5 - Eu posso criar diretórios/pastas com o nome que eu quiser, sem ter problemas com o maldito “com”, por exemplo.

Pontos negativos (ou a melhorar):
1 - Leva um tempo até se acostumar com o uso de sudo su, aptitude e alguns comandinhos mais básicos.
2 - Nem todos os equipamentos possuem drivers e, os compatíveis, podem não permitir o bom uso do que se tem.
3 - Instalar e usar o Wine pode ser algo extremamente desagradável.
4 - Funciona no Chrome, no FF, mas só acessando pelo IE para saber.
5 - OpenJDK é default em algumas distros.
6 - Leva um tempo para acostumar-se com a estrutura de diretórios, permissões e tudo mais que envolve o SO do pinguim.

Enfim, eu uso Windows pois de todas as empresas pelas quais passei, nenhuma usava linux.

[quote=andre_salvati]Hugo,

vai de Ubuntu.

Pq eu uso? Estabilidade e performance. Além disso, não posso me dar ao luxo de parar meu trabalho para reinstalar o Ruindows (a cada 6 meses ele vira uma carroça).[/quote]
Engraçado que eu nunca tive esse problema.
Formato o windows, mas mais por uma questão de costume do que perda de performance.
Lógico, o CCleanner e afins comem solto (smartdefrag), mas é só.
Lógico II, o linux é sim superior em gerenciamento e, quando você desinstala algo, ele realmente desinstala, não como o SO da MS que “faz de conta” que desinstala, mas esquece das entradas do registor, por exemplo.

Se for pra notebook esqueça Linux porque o gerenciamento de energia é uma bosta e a bateria vai embora rapidinho.

[quote=drsmachado][quote=andre_salvati]Hugo,

vai de Ubuntu.

Pq eu uso? Estabilidade e performance. Além disso, não posso me dar ao luxo de parar meu trabalho para reinstalar o Ruindows (a cada 6 meses ele vira uma carroça).[/quote]
Engraçado que eu nunca tive esse problema.
Formato o windows, mas mais por uma questão de costume do que perda de performance.
Lógico, o CCleanner e afins comem solto (smartdefrag), mas é só.
Lógico II, o linux é sim superior em gerenciamento e, quando você desinstala algo, ele realmente desinstala, não como o SO da MS que “faz de conta” que desinstala, mas esquece das entradas do registor, por exemplo.[/quote]

Em termos de “desempenho” de software o windows acaba sendo mais rápido por uma coisa:

  1. o kernel win não gerencia memória tão bem como o kernel linux(Porque o segundo desfragmenta e ordena a posição de memória dos programas). Isso implica em “execução mais rápida” e em maior erro dos programas.
    Lembra quando você precisava do defrag para corrigir o disco? O linux faz isso automaticamente mapeando a memória ram.

Sobre o gerenciamento de memória cheguei a instalar o Ubuntu 12.10 no meu note mas nao notei ganho de desempenho, muito pelo contrário, eu clicava no FF por exemplo e ele demorava alguns segundos pra abrir enquanto que usando o Windows 7 era automático.

Ainda sobre formatar a cada 6 meses, realmente isso ocorria na minha máquina quando usava WinXP mas depois que mudei pro 7 estou com meu note com ele instalado e rodando a 2 anos e só tô pensando em formatar agora pra ver se é o SO ou o hardware que anda capenga.

As grandes dúvidas que eu ainda tenho e que ainda não vi uma resposta convicente foi: qual o real ganho de produtividade com o bash do linux? Existe algum comando especial para automatizar as coisas? Alguma tarefa que vocês automatizam que não é possível/trivial no Windows?

E supondo que o desenvolvedor deva saber linux, o que ele deveria buscar conhecer? Pois existem muitas coisas que só serão realmente úteis caso se trabalha como System Admin, mas como developer o que eu deveria me preocupar em saber do linux? Sistemas de pastas? Permissões?

Valeu aí pessoal, estou achando o tópico bem produtivo.

Abraços!!!

[quote=HugoMarques]Sobre o gerenciamento de memória cheguei a instalar o Ubuntu 12.10 no meu note mas nao notei ganho de desempenho, muito pelo contrário, eu clicava no FF por exemplo e ele demorava alguns segundos pra abrir enquanto que usando o Windows 7 era automático.

Ainda sobre formatar a cada 6 meses, realmente isso ocorria na minha máquina quando usava WinXP mas depois que mudei pro 7 estou com meu note com ele instalado e rodando a 2 anos e só tô pensando em formatar agora pra ver se é o SO ou o hardware que anda capenga.

As grandes dúvidas que eu ainda tenho e que ainda não vi uma resposta convicente foi: qual o real ganho de produtividade com o bash do linux? Existe algum comando especial para automatizar as coisas? Alguma tarefa que vocês automatizam que não é possível/trivial no Windows?

E supondo que o desenvolvedor deva saber linux, o que ele deveria buscar conhecer? Pois existem muitas coisas que só serão realmente úteis caso se trabalha como System Admin, mas como developer o que eu deveria me preocupar em saber do linux? Sistemas de pastas? Permissões?

Valeu aí pessoal, estou achando o tópico bem produtivo.

Abraços!!!

[/quote]
Você vai desenvolver, o que acha que precisa para isto?
Saber instalar aplicativos (vai precisar de IDE, de JDK).
Saber configurar as variáveis de ambiente (se for usar um AS, como JBoss ou o Maven, precisará indicar onde é o JAVA_HOME).
Saber analisar os processos em execução.
E tudo o que você rotineiramente usa no Windows.
Quando a bash, vai de você aprender e otimizar.
Há maneiras de automatizar o build e o deploy, locais e no servidor, por exemplo.

[quote=HugoMarques]qual o real ganho de produtividade com o bash do linux? Existe algum comando especial para automatizar as coisas? Alguma tarefa que vocês automatizam que não é possível/trivial no Windows?
[/quote]
O shell do Linux é uma linguagem de programação completa, e tem utilitários de linha de comando para quase tudo que envolva manipulação de arquivos.

Se um dia aparecer aqueles casos tipo “procurar todos os arquivos que tenham XXX, trocar por YYY e renomear o arquivo para extensão .ZZZ, e gerar uma lista de tudo que foi alterado (no final restartar o serviço)”
Coisa que daria um trabalho manual filho da mãe, depois que vc tiver experiência em Shell faz em poucos minutos.