pasando de Windows a Linux [cerrado]

57

Necesito reconciliar estos 2 hechos:

  1. No me siento cómodo trabajando con Linux;
  2. Necesito desarrollar software para Linux.

Algunos antecedentes: Tengo más de 10 años de experiencia en programación en Windows (casi exclusivamente en C / C ++, pero también en .NET), fui usuario de FreeBSD en casa durante aproximadamente 3 años aproximadamente (luego tuve que volver a Windows), y nunca he tenido mucha suerte con Linux. Y ahora tengo que desarrollar software para Linux. Necesito un plan.

En Windows, puede simplemente saber un lenguaje de programación, una API con la que está codificando, su IDE (VisualStudio) y algunas herramientas muy básicas para solucionar problemas (Depends, ProcessExplorer, DebugView, WinDbg). Todo lo demás viene naturalmente.

En Linux, es una historia muy diferente. ¿Cómo diablos sabría qué DLL (lo siento, Objeto compartido) se cargaría si me vinculara desde el complemento de Firefox? ¿Cuál es el equivalente de Linux de insertar __asm int 3 / DebugBreak () en la fuente y ejecutar el programa, y luego dejar que el sistema operativo llame a un depurador? ¿Por qué las construcciones de lanzamiento del infierno usan algo, llamado appLoader, mientras que las construcciones de depuración funcionan de alguna manera diferente? Lo peor de todo: ¿cómo aprovisionar el entorno de desarrollo de Linux?

Entonces, teniendo en cuenta que el odio generalmente se asocia con no saber lo suficiente, ¿qué recomendaría? Estoy bien con Emacs y GCC. Necesito educarme como administrador / usuario de Linux, y debo aprender las herramientas adecuadas para la resolución de problemas (strace is cool, por cierto), equivalentes a los que mencioné anteriormente.

¿Necesito hacer Linux desde cero? ¿O solo necesito leer algunos libros (leí "Entorno de programación UNIX" de Kernighan y "Programación avanzada ..." de Stevens, pero necesito aprender algo más práctico)? ¿O necesito tener una distribución de Linux en la computadora de mi casa?

    
pregunta rincewind 19.07.2012 - 11:10

16 respuestas

61

Puede encontrar el artículo Enlace dinámico en Linux y Windows interesante que explica cómo cada sistema operativo hace la vinculación dinámica. El artículo Rutas de búsqueda de bibliotecas compartidas explica cómo se encuentran las bibliotecas. También Bibliotecas de Linux estáticas, compartidas, dinámicas y cargables es muy bueno. Lo bueno de las bibliotecas de Linux es que tienen un mejor soporte para la creación de versiones y para tener varias versiones de una biblioteca que Windows (AFAIK, no Windows). Consulte Versiones de Interfaz de biblioteca en Solaris y Linux para más información. Estos artículos realmente deberían cubrirlo con las bibliotecas.

El GDB es muy poderoso, una buena introducción es probablemente Tutorial gdb de RMS . Es posible que desee leer sobre puntos de interrupción condicionales. Para equivalentes a __asm(int 3) vea la pregunta Establezca puntos de interrupción en código C o C ++ mediante programación para gdb en Linux .

El libro Programación avanzada de Unix de Marc Rochkind es una lectura obligada, IMHO. Tiene muchos ejemplos y cubre todos los temas de POSIX / SUS de una manera muy bien explicada. Es el mejor libro sobre este tema que he leído hasta ahora.

Pero para hacer tu vida más fácil, realmente recomiendo usar una API de alto nivel que resuma cosas para ti, como Qt. También hace que la escritura multiplataforma sea mucho más fácil.

Doing Linux From Scratch lo ayuda a comprender mejor cómo se compone un sistema Linux, pero creo que no mejora mucho su conocimiento al respecto desde el punto de vista de los desarrolladores. Sin embargo, te hace sentir más cómodo con Linux, ya que aprendes qué partes hay en un entorno Linux (y en parte también por qué ). Un Linux no será una gran caja negra para usted después de trabajar a través de Linux From Scratch.

    
respondido por el DarkDust 23.05.2017 - 14:40
16

Si te gusta strace , no olvides ltrace : el equivalente para las llamadas a la biblioteca.
También, sí, recomiendo Linux From Scratch . Es un buen ejercicio para desarrollar los elementos centrales del sistema operativo y cómo encajan.
Para un tratamiento de referencia de programación de sistema moderno y completo, recomiendo seleccionar La Interfaz de programación de Linux .

    
respondido por el entropo 07.04.2011 - 11:02
11

El Mac OS X es como un Mercedes; Es la más bonita y limpia, pero cuesta mucho. Windows es como un Toyota; te llevará allí y de vuelta.

Linux es como un hot rod; Es para que las personas se adentren, se desarmen y se vuelvan a armar. Linux no es para alguien que solo quiere usar la computadora; Es para las personas que aman las computadoras. Las personas que no aman las computadoras deben mantenerse alejadas de ellas.

Las cosas que aprendiste en Windows no se traducirán muy bien, no. Pero puedes ver las partes internas y ver cómo funciona el motor.

Intenta tomar Linux como un juguete nuevo, con el que puedes jugar, arrastrarte y ver qué está pasando. Las cosas que son fáciles en Windows son más difíciles en Linux; las cosas que son imposibles en Windows son posibles en Linux.

Si amas las computadoras puedes amar a Linux; Si no te gustan las computadoras, ¿por qué estás programando?

    
respondido por el Andy Canfield 07.04.2011 - 09:44
9

¿Qué tal si desarrolla en Mono con Monodevelop? Esto le permitirá comenzar fácilmente al reutilizar su experiencia en .NET.

    
respondido por el Johann Blais 07.04.2011 - 08:23
8

Es desalentador cuando lo miras desde el principio (como si fueras un desarrollador de Linux con la tarea de hacer algún desarrollo de Windows). Me gustaría abordar este problema a la vez.

  • Primero obtenga la configuración de su entorno (compilador, IDE; sí, Netbeans / Eclipse, etc.)
  • A continuación, instale las apis de nivel superior (boost / Qt, etc.)
  • Comience lentamente, si hay un problema inmediato que resolver, compile el código (o comience a escribir desde cero, etc.) Como si abordara cualquier proyecto de desarrollo, primero haga funcionar lo que sabe (por ejemplo, cosas que no funcionan) necesita una interacción específica del sistema operativo), y luego, cuando se encuentra con un problema, busque, estoy seguro de que alguien se ha encontrado con el mismo problema antes y lo ha resuelto ...

Lo más importante, deja todas tus opiniones subjetivas en la puerta. Y no, no necesitas ser un gurú para desarrollar en Linux, sé lo suficiente para moverme y no todo, pero me siento cómodo con eso ...

    
respondido por el Nim 07.04.2011 - 12:02
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.

¿Cuánto tiempo le llevó a convertirse en un experto en trabajar en un entorno de Windows? Se podría decir que fue fácil que acabas de empezar. Pero tenías algunos años de trabajar con ventanas antes de eso. ¿Cuánto tiempo llevabas usando Windows antes de escribir tu primer programa? Fueron 8 años para mí, aunque ahora uso Linux casi exclusivamente desde hace 5 años. Ahora soy más competente en Linux que en Windows. Debes darte al menos ese tiempo para familiarizarte con un nuevo sistema.

Comience con la lista de aplicaciones con las que no puede vivir en Windows y busque alternativas en el mundo * nix. enlace y las secciones de lecturas adicionales de Wikipedia pueden ser útiles aquí.

Aquí hay una lista de software alternativo que podría resultar muy útil. Aquí hay algunas alternativas a las cosas que mencionaste.

Otros recursos útiles para pasar de un sistema a otro

Para convertirse en un mejor usuario avanzado o administrador, eche un vistazo a estos recursos

También parece que ha pasado un tiempo desde que miraste el mundo * nix. Recomendaría algunos de los nuevos lanzamientos de distros de fedora , suse , debian , o mi estación de trabajo preferida Ubuntu .

Probablemente ahora pueda salirse con la suya sin saber los aspectos internos del sistema y solo lo básico como en Windows. No solo trataría de salirme con lo mínimo. Si ve a Linux como una herramienta que realmente lo ayuda en su desarrollo y no solamente un sistema operativo en el que lo desarrolle, sería útil.

Linux From Scratch será mucho más importante si su desarrollo específico para Linux es un sentido muy específico y técnico. ES DECIR. desea desarrollar para el kernel, o puerto que programa en una super computadora que ejecuta Linux. Sería muy útil nunca menos. Creo que probablemente podrías dejar eso por unos meses mientras intentas ponerte en marcha en Ubuntu. Ubuntu será lo más cercano al mundo simplemente funciona de mac y windows.

    
respondido por el nelaaro 13.04.2017 - 14:22
6

Creo que respondiste tu pregunta en la pregunta:

"En Windows, puede salirse con la suya con solo conocer un lenguaje de programación, una API con la que está codificando, su IDE (VisualStudio) y algunas herramientas muy básicas para la solución de problemas (Depends, ProcessExplorer, DebugView, WinDbg). Todo lo demás viene naturalmente ".

Adivina qué, en Linux puede salirse con la suya con solo conocer un lenguaje de programación, una API (o un par), su IDE (Eclipse o NetBeans, incluso Geany, Emacs o vim, si lo desea) y algunas herramientas básicas para la resolución de problemas (gdb, herramientas de rastreo, pelusa, htop, ps).

Tienes mucho conocimiento invertido en el ecosistema de programación de Windows. Gran parte de eso es (con suerte) conocimiento abstracto (¿qué es un compilador, un depurador, una biblioteca compartida, un proceso, un hilo? ¿Qué es lo que hacen?) Que se traducirán fácilmente, una vez que esté al día con las diferentes herramientas. Algunos son específicos del dominio (¿Qué DLL está vinculada cuando agrego X a un proyecto?), Pero incluso pasar de una clase de lenguaje a otro dentro de Windows requeriría un nuevo aprendizaje.

Instale Ubuntu o Fedora en una máquina virtual, lea algunos tutoriales de C ++ Hello World en Eclipse o NetBeans, y algo de depuración en los tutoriales de Eclipse / NetBeans, y deje que la capacidad natural de adaptación de su cerebro se haga cargo. Si te relajas y te pones a trabajar, las ideas se traducirán para ti.

    
respondido por el Justin 07.07.2012 - 23:59
3

Aprendí Unix en general leyendo las páginas del manual. Deberías al menos echarles un vistazo. Sí, me refiero a todos ellos. El método lo uso para ingresar en los directorios de la página de manual y atacarlos sección por sección.

Yo uso esto:

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

... reemplaza .1 con el número de la sección que estás leyendo, .2, .3, etc. Presiona ctrl-Z ctrl-C para salir del bucle. Su millaje puede variar si su distribución de Linux almacena las cosas de manera diferente, es decir, no como cmdname.1.gz.

Simplemente repase las descripciones y más si es algo interesante. Las secciones 1, 2 y 3 son las más importantes para un programador. 1 cubre los comandos generales del usuario, que incluyen sus herramientas de compilación y varias utilidades forenses. 2 son llamadas al sistema y 3 son llamadas a la biblioteca.

    
respondido por el Hack Saw 07.04.2011 - 09:52
3

No te obligues a hacer algo que no te gusta. Use Windows como su entorno de desarrollo, escriba un código portátil, compílelo de forma cruzada para Linux y pruébelo solo ocasionalmente en una máquina virtual.

    
respondido por el SK-logic 07.04.2011 - 11:42
2

No estoy seguro de que funcione para plataformas, pero para lenguajes de programación, me ha resultado útil pensar en cómo me he familiarizado y me he sentido cómodo con los en los que soy bueno y tratar de reproducir esas experiencias y actividades para el lo que estoy tratando de aprender

¿Quizás algo en esas líneas?

Sin embargo, en términos generales, mi interés y confianza con GNU / Linux se debe a que es mucho más fácil de manipular (y requiere de retoques en los primeros días) que Windows. Necesitaba meterme con muchas cosas para que las cosas funcionaran y eso me ayudó a aprender muchas cosas. Las cosas están mucho mejor ahora, pero todas esas horas ayudaron.

    
respondido por el Noufal Ibrahim 07.04.2011 - 13:07
2

Fui uno de los dos encargados de algo similar, pero diferente. Trabajo en un distrito escolar K-12, y el sistema empresarial (recursos humanos, finanzas, etc.) está migrando de una base de datos HP3000 / TurboImage a una plataforma Linux / MS SQL. Estoy cómodo con el lado de MS SQL. Pero no el lado de Linux. Los dos estamos en el lado del administrador, no en el lado de la programación. La programación se realiza en el exterior: aplicación empresarial de terceros para organizaciones K-12.

Tomé una clase de Intro a Linux (Redhat) de 5 fines de semana los fines de semana (se realizó principalmente en el modo de línea de comandos) y valió la pena para mí como un salto rápido a la forma Linux de hacer las cosas. Obviamente YMMV dependiendo de la clase / profesor.

Usted mencionó 'Lo peor de todo: ¿cómo aprovisionar un entorno de desarrollo Linux?'? Como ya está muy familiarizado con Windows, le sugiero encarecidamente que obtenga una copia de vmWare Workstation. Con eso, puede mantener Windows como su estación de trabajo e instalar Linux como sistemas invitados: elimine, enjuague y repita según sea necesario. Cuando se obtiene una buena configuración, creo que se puede tomar una instantánea, pero no puedo decir con seguridad qué versiones son capaces de tener el aspecto de la instantánea. Y si entra en la ruta de la estación de trabajo vmWare para habilitar múltiples configuraciones de desarrollo, aumente la memoria, definitivamente.

Tampoco me importa recomendar el uso de CentOS como sistema operativo Linux para los invitados. Por lo que entiendo, es como RedHat sin la marca y / o el argumento de venta y / o los costos de soporte. No estoy familiarizado con los otros sabores de Linux, por lo que no puedo dar su opinión sobre ellos.

Greg

    
respondido por el Gregory Thomson 20.07.2011 - 11:27
1

Me gustan ambas plataformas y, a pesar de todas las diferencias en la interfaz de usuario y el ecosistema dev, las encuentro más similares que las diferentes bajo cubierta. De hecho, para la mayoría de los conceptos de Windows, puede encontrar un equivalente de Linux con solo buscar en Internet.

Habiendo dicho eso, sugiero encarecidamente aprender a hacer las cosas de la "manera Unix". Use la línea de comando en lugar de los frontales de la GUI con errores (estoy hablando principalmente de gdb aquí); no busque un IDE y aprenda a usar un conjunto de herramientas especializadas. Elija un buen editor (señalando vim) y apréndalo bien. Lea cómo funciona make incluso si no planea convertirse en un experto. Tal vez incluso te guste Linux. Es amigable para los geeks y es divertido jugar con él.

    
respondido por el Nemanja Trifunovic 07.04.2011 - 15:13
1

Considera esto: una vez no sabías nada de Windows, pero lo aprendiste y con el tiempo te sentiste cómodo con él.

Luego MS cambió cualquier sistema de programación con el que te sintieras cómodo .NET y ya no sabías nada sobre DLLS, COM y lo que fuera, tenías que aprender cosas como ensamblajes, GAC, dominios de aplicaciones. Aprendiste eso ok.

Entonces, ¿por qué te preocupa hacer lo mismo con Linux?

Hay un montón de tutoriales de 'comience' en la web para todo tipo de entornos de programación. Ahora dice GCC, así que voy a asumir el desarrollo de C ++. Consiga Eclipse, instale CDT (c dev tools) en la parte superior de su plataforma Eclipse (Eclipse es un IDE de usos múltiples, puede usarlo para C ++, PHP, Java, lo que sea, pero necesita instalar las herramientas para su idioma ya que realmente no lo quiere todo preinstalado como VS y demora 3 días en instalarlo :))

Hay tutoriales fáciles de usar en toda la web. IBM tiene uno aquí que es bastante completo.

Herramientas de depuración ... eclipse lo tiene integrado ( tutorial ), pero puedes encontrar muchas herramientas como las que mencionaste, solo busca en la web y encontrarás muchas opciones. Le llevará un poco de tiempo averiguar cómo leer un volcado de datos central (en lugar de un archivo de usuario de Windows, por ejemplo), pero llegará allí.

También puede valer la pena comenzar un blog con sus experiencias, no solo le permitirá recordar lo que ha hecho (p. ej., configurar eclipse como le gusta, olvidará cuándo debe hacerlo) de nuevo en un año) pero ayudará a otros en su situación.

    
respondido por el gbjbaanb 08.07.2012 - 18:12
0

No creo que necesites hacer Linux desde cero. Si yo fuera tú iría por Ubuntu. Es más cómodo, y al estar basado en Debian, hay un montón de material técnico disponible.

Si desea más de una inmersión de cabeza en Linux, Gentoo es una buena opción. Requiere que leas bastante sobre configuración y kernels, pero también te da un sistema bastante funcional para trabajar en af

    
respondido por el anders.norgaard 07.07.2012 - 22:43
0

Google "El arte de la programación de Unix" y léelo. En mi opinión, su principal dificultad es la filosofía diferente, y ese libro es una excelente lectura para esto.

También le presenta algunas diferencias no obvias pero técnicamente muy importantes entre * n * x y los sistemas Windows: estas son claves para entender por qué hacer las cosas de otra manera tiene sentido en Linux.

    
respondido por el user59625 19.07.2012 - 06:05
0

La primera pregunta que me gustaría hacer es ¿qué es lo que quieres desarrollar? Si es una aplicación basada en gui, entonces eso puede ser diferente de tener que escribir algo como una extensión del kernel.

En el caso de una aplicación gui, el método más sencillo es usar Qt, que tiene su propio entorno de desarrollo (Qt-Creator) y, al ser multiplataforma, le permite aprender solo una API que se puede usar para Windows / Linux / OSX e incluso desarrollo móvil. Al igual que Visual Studio en Windows o XCode en OSX, puede crear y diseñar ventanas y elementos desde un editor gráfico y la API es muy fácil de recopilar con un montón de aplicaciones de muestra.

Si necesita obtener un nivel más bajo, una vez que conozca Linux en la línea de comandos, sepa cómo recorrer directorios, manipular archivos, comprender permisos, etc., entonces empiece a leer cómo compilar un programa simple. con gcc, cómo vincular archivos y ejecutar el ejecutable y luego cómo depurar con gdb.

Alternativamente, si eso te parece un poco desalentador, puedes descargar Eclipse u otro IDE, pero probablemente te sientas mucho más cómodo con Linux a largo plazo, si pones el tiempo y el esfuerzo en la línea de comandos primero.

    
respondido por el TheDarkKnight 26.04.2013 - 12:35

Lea otras preguntas en las etiquetas