movendo do Windows para o Linux [fechado]

57

Eu preciso conciliar esses dois fatos:

  1. Não me sinto confortável em trabalhar com o Linux;
  2. Eu preciso desenvolver um software para Linux.

Alguns antecedentes: Eu tenho mais de 10 anos de experiência em programação no Windows (quase exclusivamente C / C ++, mas também em algum .NET), eu era usuário do FreeBSD em casa por cerca de 3 anos (então tive que voltar para o Windows), e eu nunca tive muita sorte com o Linux. E agora tenho que desenvolver software para Linux. Eu preciso de um plano.

No Windows, você pode ficar sabendo apenas uma linguagem de programação, uma API com a qual você está codificando, seu IDE (VisualStudio) e algumas ferramentas básicas para solução de problemas (Depends, ProcessExplorer, DebugView, WinDbg). Tudo o mais vem naturalmente.

No Linux, é uma história muito diferente. Como diabos eu saberia o que a DLL (sorry, Shared Object) carregaria se eu fizesse o link com ele do plugin do Firefox? Qual é o equivalente em Linux de inserir __asm int 3 / DebugBreak () na origem e executar o programa, e depois deixar o sistema operacional chamar um depurador? Por que o inferno libera builds usa algo, chamado appLoader, enquanto o debug builds funciona de alguma forma diferente? Pior de tudo: como provisionar o ambiente de desenvolvimento Linux?

Então, levando em conta que o ódio geralmente está associado a não saber o suficiente, o que você recomendaria? Estou bem com o Emacs e o GCC. Eu preciso me educar como um administrador / usuário Linux, e eu preciso aprender ferramentas de resolução de problemas adequadas (strace é legal, btw), equivalentes às que eu mencionei acima.

Preciso fazer o Linux do Scratch? Ou eu preciso apenas ler alguns livros (eu li "UNIX programming environment" de Kernighan e "Advanced Programming ..." de Stevens, mas eu preciso aprender algo mais prático)? Ou eu preciso ter alguma distro Linux no meu computador em casa?

    
por rincewind 19.07.2012 / 11:10
fonte

16 respostas

61

Você pode encontrar o artigo Dynamic Linking no Linux e Windows Caminhos de pesquisa da biblioteca compartilhada explica como as bibliotecas são encontradas. Também Bibliotecas estáticas, compartilhadas dinâmicas e carregáveis do Linux é muito bom. Uma coisa boa sobre as bibliotecas Linux é que elas têm melhor suporte para versionamento e possuem várias versões de uma biblioteca ao redor do que o Windows (AFAIK, eu não faço o Windows). Veja Versionamento de Interface de Biblioteca no Solaris e Linux para isso. Estes artigos devem realmente te cobrir com bibliotecas.

O GDB é muito poderoso, uma boa introdução é provavelmente o Tutorial do gdb do RMS . Você pode querer ler os pontos de interrupção condicionais. Para equivalentes a __asm(int 3) , consulte a pergunta Defina o ponto de interrupção em código C ou C ++ programaticamente para o gdb no Linux .

O livro Advanced Unix Programming de Marc Rochkind é uma leitura obrigatória, IMHO. Tem muitos exemplos e abrange todos os tópicos do POSIX / SUS de uma maneira muito bem explicada. É o melhor livro sobre esse tópico que eu li até agora.

Mas para tornar sua vida mais fácil, eu realmente recomendo usar uma API de alto nível que abstraia as coisas para você, como o Qt. Também torna a escrita multi-plataforma muito mais fácil.

Fazer o Linux From Scratch ajuda você a entender como um sistema Linux é composto, mas acho que não melhora muito seu conhecimento sobre isso do ponto de vista de um desenvolvedor. Isso deixa você mais confortável com o Linux, já que você aprende quais partes existem em um ambiente Linux (e em parte também por que ). Um Linux não será uma grande caixa preta para você depois de trabalhar com o Linux From Scratch.

    
por 23.05.2017 / 14:40
fonte
16

Se você gosta de strace , não se esqueça ltrace : o equivalente para chamadas de biblioteca.
Além disso, sim, eu recomendo Linux From Scratch . É um bom exercício para elaborar os principais elementos do sistema operacional e como eles se encaixam.
Para um tratamento de referência de programação de sistema completo e moderno, recomendo pegar a Interface de programação do Linux .

    
por 07.04.2011 / 11:02
fonte
11

O Mac OS X é como um Mercedes; é o mais bonito e limpo, mas custa muito. O Windows é como um Toyota; você vai chegar lá e voltar.

O Linux é como um hot rod; É para as pessoas cavarem e desmontarem e juntarem novamente. Linux não é para alguém que apenas quer usar o computador; é para pessoas que amam computadores. As pessoas que não amam computadores devem ficar longe disso.

As coisas que você aprendeu no Windows não vão traduzir muito bem, não. Mas você consegue ver os componentes internos e observar o funcionamento do motor.

Tente usar o Linux como um novo brinquedo, com o qual você pode brincar, rastrear e ver o que está acontecendo. Coisas que são fáceis no Windows são mais difíceis no Linux; coisas que são impossíveis no Windows são possíveis no Linux.

Se você gosta de computadores, pode adorar o Linux; se você não ama computadores, por que você está programando?

    
por 07.04.2011 / 09:44
fonte
9

Que tal você desenvolver no Mono com Monodevelop? Isso permitiria que você começasse facilmente, reutilizando sua experiência no .NET.

    
por 07.04.2011 / 08:23
fonte
8

É assustador quando você olha para ele desde o início (como se você fosse um desenvolvedor Linux encarregado de fazer algum desenvolvimento do Windows). Eu resolveria esse problema de cada vez.

  • Primeiro, obtenha sua configuração de ambiente (compilador, IDE - sim, eles existem, NetBeans / Eclipse etc.)
  • Em seguida, obtenha as APIs de nível superior instaladas (boost / Qt, etc.)
  • Comece devagar, se houver um problema imediato a ser resolvido, obtenha a compilação de código (ou comece a escrever do zero, etc.). Como você faria em qualquer projeto de desenvolvimento, faça as coisas que você sabe trabalhar primeiro precisa de interação específica com o sistema operacional), e quando você acerta um snag-search, tenho certeza de que alguém já se deparou com o mesmo problema antes e o resolveu.

Mais importante, deixe todas as suas opiniões subjetivas à sua porta. E não, você não precisa ser um guru para desenvolver no Linux, eu sei o suficiente para dar a volta, e nem tudo - mas estou confortável com isso ...

    
por 07.04.2011 / 12:02
fonte
6

The success or failure of many thing in life comes down to our attitude, looking for positives and keeping your mind focused on the positives will do more to adide you as you start down this new interesting adventure.

Quanto tempo você demorou para se tornar proficiente em trabalhar em um ambiente Windows? Você pode dizer que foi fácil começar. Mas você teve alguns anos de trabalho com janelas antes disso. Há quanto tempo você usava janelas antes de escrever seu programa? Foram 8 anos para mim, apesar de eu ter usado o Linux quase exclusivamente por 5 anos. Agora sou mais proficiente no Linux do que no Windows. Você deve se dar ao menos tanto tempo para se familiarizar com um novo sistema.

Comece com a lista de aplicativos que você não pode usar no Windows e procure alternativas no mundo * nix. O link e as seções de leitura adicional da Wikipedia podem ser úteis aqui.

Aqui está uma lista de softwares alternativos que podem ser muito úteis. Aqui estão algumas alternativas para as coisas que você mencionou.

Outros recursos úteis para passar de um sistema para outro

Sobre como se tornar um usuário avançado ou usuário administrador dê uma olhada nesses recursos

Parece também que já passou algum tempo desde que você olhou para o mundo * nix. Eu recomendaria algumas das novas versões de distros do fedora , suse , debian , ou minha estação de trabalho preferida Ubuntu .

Agora você provavelmente pode se safar sem conhecer os componentes internos do sistema e apenas o básico, como no Windows. Eu não tentaria apenas fugir com o mínimo. Se você vê o Linux como uma ferramenta que realmente o auxilia no desenvolvimento e não meramente um sistema operacional no qual você o desenvolve, seria útil.

O Linux From Scratch será muito mais importante se você estiver desenvolvendo especificamente para o Linux, é um sentido muito específico e técnico. I.E. você quer desenvolver para o kernel, ou porta que você programa para um supercomputador rodando Linux. Seria muito útil nunca menos. Eu acho que você provavelmente poderia deixar isso por alguns meses enquanto você tenta entrar no Ubuntu. O Ubuntu será o mais próximo do mundo do coisas que funcionam apenas do mac e do windows.

    
por 13.04.2017 / 14:22
fonte
6

Acho que você respondeu à sua pergunta na pergunta:

"No Windows, você pode ficar sabendo apenas uma linguagem de programação, uma API com a qual você está codificando, seu IDE (VisualStudio) e algumas ferramentas básicas para solução de problemas (Depends, ProcessExplorer, DebugView, WinDbg). vem naturalmente. "

O que você pode fazer em Linux é apenas conhecer uma linguagem de programação, uma API (ou um par), seu IDE (Eclipse ou NetBeans, até Geany, Emacs ou vim, se quiser) e algumas ferramentas básicas. para solução de problemas (gdb, ferramentas de rastreamento, lint, htop, ps).

Você tem muito conhecimento investido no ecossistema de programação do Windows. Grande parte disso é (espero) conhecimento abstrato (o que é um compilador, um depurador, uma biblioteca compartilhada, um processo, um thread? O que eles fazem?) Que será facilmente traduzido, uma vez que você se familiarize com as diferentes ferramentas. Alguns são específicos de domínio (que DLL está vinculada quando eu adiciono X a um projeto?), Mas até mesmo passar de uma classe de linguagem para outra dentro do Windows exigiria um novo aprendizado.

Instale o Ubuntu ou o Fedora em uma VM, leia alguns tutoriais do C ++ Hello World no Eclipse ou do NetBeans, e alguns depuradores em tutoriais do Eclipse / NetBeans, e deixe a capacidade natural do seu cérebro de se adaptar assumir. Ele irá traduzir ideias para você se você relaxar e simplesmente colocá-lo para funcionar.

    
por 07.07.2012 / 23:59
fonte
3

Eu aprendi Unix em geral lendo as man pages. Você deveria pelo menos roçá-los. Sim, quero dizer todos eles. O método que eu uso para cd nos diretórios de páginas man, e atacá-los uma seção de cada vez.

Eu uso isso:

for i in *; do f='basename $i .gz'; man 'basename $f .1' ; done

... substituindo o .1 pelo número da seção que você está lendo, .2, .3, etc. Pressione ctrl-Z ctrl-C para sair do loop. Sua milhagem pode variar se a sua distribuição Linux armazenar as coisas de maneira diferente, ou seja, não como cmdname.1.gz.

Basta passar pelas descrições e mais se for algo interessante. As seções 1, 2 e 3 são as mais importantes para um programador. 1 abrange comandos gerais do usuário, que incluem suas ferramentas de compilação e vários utilitários forenses. 2 são chamadas do sistema e 3 são chamadas da biblioteca.

    
por 07.04.2011 / 09:52
fonte
3

Não se force a fazer algo de que não gosta. Use o Windows como seu ambiente de desenvolvimento, escreva um código portátil, compile-o para Linux e teste-o apenas ocasionalmente em uma VM.

    
por 07.04.2011 / 11:42
fonte
2

Não sei se funciona para plataformas, mas para linguagens de programação, achei útil pensar em como me familiarizei e me familiarizei com as que sou boa e tente reproduzir essas experiências e atividades para o o que estou tentando aprender.

Talvez algo nessas linhas?

De modo geral, porém, meu interesse e confiança com o GNU / Linux tem sido muito mais fácil de mexer (e exigir mexer nos primeiros dias) do que o Windows. Eu precisava mexer com um monte de coisas para fazer as coisas funcionarem e isso me ajudou a aprender muitas coisas. As coisas estão muito melhores agora, mas todas aquelas horas ajudaram.

    
por 07.04.2011 / 13:07
fonte
2

Eu era um dos dois encarregados de algo semelhante, mas diferente. Eu trabalho em um distrito escolar K-12, e o sistema de negócios (RH, finanças, etc ...) está migrando de um banco de dados HP3000 / TurboImage para uma plataforma Linux / MS SQL. Estou confortável com o lado do MS SQL. Mas não o lado do Linux. Nós dois estamos do lado do administrador, não do lado da programação. A programação é feita externamente - aplicativo de negócios de terceiros para organizações do ensino fundamental e médio.

Eu fiz um final de semana de 5 Introdução ao Linux (Redhat) nos fins de semana - foi feito principalmente no modo de linha de comando - e valeu a pena para mim como um rápido avanço na maneira de fazer as coisas no Linux. Obviamente, YMMV dependendo da classe / professor.

Você mencionou "O pior de tudo: como provisionar o ambiente de desenvolvimento do Linux?" Como você já está familiarizado com o Windows, sugiro que você obtenha uma cópia do vmWare Workstation. Com isso, você pode manter o Windows como sua estação de trabalho e instalar o Linux como sistemas convidados - excluir, enxaguar e repetir conforme necessário. Quando você obtém uma boa configuração, eu acredito que você pode tirar uma foto instantânea, mas eu não posso dizer com certeza quais versões são capazes do aspecto do snapshot. E se você for na rota do vmWare Workstation para habilitar várias configurações de desenvolvimento - aumente a memória definitivamente.

Eu também não me importo de recomendar o uso do CentOS como sistema operacional Linux para os convidados. Pelo que entendi, é como a RedHat sem os custos de branding e / ou vendas e / ou suporte. Eu não estou familiarizado com os outros sabores do Linux, então não posso dar entrada neles.

Greg

    
por 20.07.2011 / 11:27
fonte
1

Eu gosto de ambas as plataformas e de todas as diferenças na interface do usuário e no dev eco-system, eu as acho mais semelhantes do que diferentes sob o disfarce. De fato, para a maioria dos conceitos do Windows, você pode encontrar um Linux equivalente apenas pesquisando na Internet.

Dito isto, sugiro strongmente aprender como fazer as coisas da maneira "Unix". Use linha de comando em vez de interfaces gráficas com bugs (estou falando principalmente sobre o gdb aqui); não procure por um IDE e aprenda como usar um conjunto de ferramentas especializadas. Escolha um bom editor (apontando para o vim) e aprenda bem. Leia como make funciona mesmo se você não pretende se tornar um especialista. Talvez você até goste do Linux. É nerd e divertido de jogar.

    
por 07.04.2011 / 15:13
fonte
1

Considere o seguinte: você não sabia nada sobre o Windows, mas aprendeu e com o tempo ficou confortável com ele.

Então o MS mudou o sistema de programação com o qual você se sentia confortável com o .NET e não sabia mais nada sobre DLLS, COM e o que quer que fosse, você tinha que aprender coisas como assemblies, GAC, domínios de aplicativos. Você aprendeu tudo bem.

Então, por que você está preocupado em fazer o mesmo com o Linux?

Existem muitos tutoriais de 'introdução' na Web para todos os tipos de ambientes de programação. Agora você diz GCC, então vou assumir o desenvolvimento de C ++. Obtenha a si mesmo o Eclipse, instale o CDT (ferramentas c dev) no topo da sua plataforma Eclipse (Eclipse é um IDE multiuso, você pode usá-lo para C ++, PHP, Java, o que for - mas você precisa instalar o conjunto de ferramentas para o seu idioma, você não quer tudo pré-instalado como o VS e leva 3 dias para instalar :))

Existem tutoriais fáceis de usar em toda a web. A IBM tem um aqui que é bastante abrangente.

Ferramentas de depuração ... o eclipse o incorporou ( tutorial ), mas você pode encontrar muitas ferramentas como as que você mencionou, basta pesquisar na web e encontrará muitas opções. Demorará um pouco para descobrir como ler um dump principal (em oposição a um userdump do windows, por exemplo), mas você chegará lá.

Também pode valer a pena começar um blog com suas experiências, além de permitir que você se lembre do que você fez (por exemplo, configurar o eclipse como você gosta, esquecer quando precisar fazer isso novamente daqui a um ano), mas ajudará os outros na sua situação.

    
por 08.07.2012 / 18:12
fonte
0

Eu não acho que você precise fazer o Linux a partir do Scratch. Se eu fosse você, eu iria para o Ubuntu. É mais confortável, e sendo baseado no debian, há muito material técnico disponível.

Se você quer mais um mergulho de cabeça no Linux, o Gentoo é uma boa opção. Ele requer que você leia bastante sobre configuração e kernels, mas também oferece um sistema bastante funcional para trabalhar em af

    
por 07.07.2012 / 22:43
fonte
0

Google "A arte da programação Unix" e leia-o. IMO, sua principal dificuldade é a filosofia diferente, e esse livro é uma excelente leitura para isso.

Ele também apresenta algumas diferenças não óbvias, mas tecnicamente muito importantes, entre sistemas * n * x e Windows - sendo estas a chave para entender por que fazer as coisas de outra maneira faz sentido no Linux.

    
por 19.07.2012 / 06:05
fonte
0

A primeira pergunta que eu faço é o que você quer desenvolver? Se for um aplicativo baseado em gui, isso pode ser diferente de ter que escrever algo como uma extensão do kernel.

No caso de um aplicativo gui, acho que o método mais fácil é usar o Qt, que tem seu próprio ambiente de desenvolvimento (Qt-Creator) e ser multiplataforma, permite que você aprenda apenas uma API que pode ser usada para Windows / Linux / OSX e até mesmo desenvolvimento móvel. Como o visual studio no Windows, ou o XCode no OSX, você pode criar e organizar janelas e itens a partir de um editor gráfico, e a API é muito fácil de usar com um grande número de aplicativos de amostra.

Se você precisa obter mais baixo nível, então, uma vez que você conheça o linux na linha de comando, saiba como atravessar diretórios, manipular arquivos, entender permissões etc., então comece a ler como compilar um programa simples. com o gcc, como vincular arquivos e executar o executável e, em seguida, como depurar com o gdb.

Alternativamente, se isso parecer um pouco assustador, você pode baixar o Eclipse ou outro IDE, mas você provavelmente se sentirá muito mais confortável com o Linux a longo prazo, se você colocar o tempo e o esforço na linha de comando primeiro. / p>     

por 26.04.2013 / 12:35
fonte